/******************************************************************************* ** ** smolbote: yet another qute browser ** Copyright (C) 2017 Xian Nox ** ** This program is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program. If not, see . ** ******************************************************************************/ #include "urlinterceptor.h" #include #include UrlRequestInterceptor::UrlRequestInterceptor(const QString &path, QObject *parent) : QWebEngineUrlRequestInterceptor(parent) { #ifdef QT_DEBUG qDebug("Reading request blocklist: %s", qUtf8Printable(path)); #endif int n_rules = 0; QFile filter(path); if(filter.open(QIODevice::ReadOnly | QIODevice::Text)) { QTextStream out(&filter); while(!out.atEnd()) { const QString &line = out.readLine(); if(!line.startsWith('!')) { FilterRule r(line); // check if valid m_rules.push_back(std::move(r)); ++n_rules; } } filter.close(); } qDebug("Added %i rules", n_rules); } void UrlRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo &info) { for(const FilterRule &test : m_rules) { const QUrl &url = info.requestUrl(); if(test.shouldBlock(url)) { info.block(true); #ifdef QT_DEBUG qDebug("blocked [%s] %s", qUtf8Printable(info.firstPartyUrl().toString()), qUtf8Printable(url.toString())); #endif return; } } } bool shouldBlock(const QUrl &url, const QString &test) { if(url.toString().contains(test)) { return true; } return false; }