From 7f6c9b22d1016aa0dba709495fabf41397676039 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Tue, 28 Feb 2017 10:18:08 +0100 Subject: Blocker rewrites Some code commenting Moved Blocker files for src/blocker Keyboard shortcut for Blocker dialog --- data/poi.conf | 10 +- smolbote.qbs | 19 +-- src/blocker/blockermanager.cpp | 45 ++++++++ src/blocker/blockermanager.h | 42 +++++++ src/blocker/blockerrule.cpp | 209 +++++++++++++++++++++++++++++++++ src/blocker/blockerrule.h | 79 +++++++++++++ src/blocker/blockersubscription.cpp | 138 ++++++++++++++++++++++ src/blocker/blockersubscription.h | 55 +++++++++ src/blocker/regexp.cpp | 70 ++++++++++++ src/blocker/regexp.h | 38 ++++++ src/blocker/subscriptiondialog.ui | 67 +++++++++++ src/blocker/subscriptionform.ui | 149 ++++++++++++++++++++++++ src/browser.cpp | 7 ++ src/browser.h | 4 + src/forms/blockerdialog.cpp | 64 ----------- src/forms/blockerdialog.h | 45 -------- src/forms/blockerdialog.ui | 192 ------------------------------- src/mainwindow.cpp | 6 +- src/mainwindow.h | 4 +- src/mainwindow.ui | 20 ---- src/webengine/blockerrule.cpp | 210 ---------------------------------- src/webengine/blockerrule.h | 84 -------------- src/webengine/blockersubscription.cpp | 145 ----------------------- src/webengine/blockersubscription.h | 67 ----------- src/webengine/regexp.cpp | 68 ----------- src/webengine/regexp.h | 35 ------ src/webengine/urlinterceptor.cpp | 23 +--- src/webengine/urlinterceptor.h | 6 +- test/blocklist.txt | 9 -- 29 files changed, 931 insertions(+), 979 deletions(-) create mode 100644 src/blocker/blockermanager.cpp create mode 100644 src/blocker/blockermanager.h create mode 100644 src/blocker/blockerrule.cpp create mode 100644 src/blocker/blockerrule.h create mode 100644 src/blocker/blockersubscription.cpp create mode 100644 src/blocker/blockersubscription.h create mode 100644 src/blocker/regexp.cpp create mode 100644 src/blocker/regexp.h create mode 100644 src/blocker/subscriptiondialog.ui create mode 100644 src/blocker/subscriptionform.ui delete mode 100644 src/forms/blockerdialog.cpp delete mode 100644 src/forms/blockerdialog.h delete mode 100644 src/forms/blockerdialog.ui delete mode 100644 src/webengine/blockerrule.cpp delete mode 100644 src/webengine/blockerrule.h delete mode 100644 src/webengine/blockersubscription.cpp delete mode 100644 src/webengine/blockersubscription.h delete mode 100644 src/webengine/regexp.cpp delete mode 100644 src/webengine/regexp.h delete mode 100644 test/blocklist.txt diff --git a/data/poi.conf b/data/poi.conf index aec03e9..b9c1aee 100644 --- a/data/poi.conf +++ b/data/poi.conf @@ -41,9 +41,13 @@ profile="Default" # URL blocker [blocker] -dialogShortcut="Ctrl+Shift+A" -path="blocklist.txt" -#subscriptions=[] +shortcut="Ctrl+Shift+A" +path="~settings/" +subscriptions=[ +# "https://easylist.to/easylist/easylist.txt", + "https://easylist-downloads.adblockplus.org/easylist_noelemhide.txt", + "https://easylist.to/easylist/easyprivacy.txt" +] # Bookmark manager [bookmarks] diff --git a/smolbote.qbs b/smolbote.qbs index 0d3b395..4d538eb 100644 --- a/smolbote.qbs +++ b/smolbote.qbs @@ -54,11 +54,18 @@ Project { files: [ "data/resources.qrc", + "src/blocker/blockermanager.cpp", + "src/blocker/blockermanager.h", + "src/blocker/blockerrule.cpp", + "src/blocker/blockerrule.h", + "src/blocker/blockersubscription.cpp", + "src/blocker/blockersubscription.h", + "src/blocker/regexp.cpp", + "src/blocker/regexp.h", + "src/blocker/subscriptiondialog.ui", + "src/blocker/subscriptionform.ui", "src/browser.cpp", "src/browser.h", - "src/forms/blockerdialog.cpp", - "src/forms/blockerdialog.h", - "src/forms/blockerdialog.ui", "src/forms/bookmarksdialog.cpp", "src/forms/bookmarksdialog.h", "src/forms/bookmarksdialog.ui", @@ -74,15 +81,9 @@ Project { "src/mainwindow.ui", "src/settings.cpp", "src/settings.h", - "src/webengine/blockerrule.cpp", - "src/webengine/blockerrule.h", - "src/webengine/blockersubscription.cpp", - "src/webengine/blockersubscription.h", "src/webengine/downloaditemform.cpp", "src/webengine/downloaditemform.h", "src/webengine/downloaditemform.ui", - "src/webengine/regexp.cpp", - "src/webengine/regexp.h", "src/webengine/urlinterceptor.cpp", "src/webengine/urlinterceptor.h", "src/webengine/webengineprofile.cpp", diff --git a/src/blocker/blockermanager.cpp b/src/blocker/blockermanager.cpp new file mode 100644 index 0000000..3dd516c --- /dev/null +++ b/src/blocker/blockermanager.cpp @@ -0,0 +1,45 @@ +/** LICENSE ******************************************************************** + ** + ** 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 "blockermanager.h" +#include "ui_subscriptiondialog.h" + +#include "browser.h" +#include +#include + +#include "blocker/blockersubscription.h" + +BlockerManager::BlockerManager(QWidget *parent) : + QDialog(parent), + ui(new Ui::UrlInterceptorDialog) +{ + ui->setupUi(this); + + for(QString listUrl : sSettings->value("blocker.subscriptions").toStringList()) { + BlockerSubscription *sub = new BlockerSubscription(listUrl, this); + ui->tabWidget->addTab(sub, sub->name()); + } +} + +BlockerManager::~BlockerManager() +{ + delete ui; +} diff --git a/src/blocker/blockermanager.h b/src/blocker/blockermanager.h new file mode 100644 index 0000000..eb5e04e --- /dev/null +++ b/src/blocker/blockermanager.h @@ -0,0 +1,42 @@ +/** LICENSE ******************************************************************** + ** + ** 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 . + ** + ******************************************************************************/ + +#ifndef URLINTERCEPTORDIALOG_H +#define URLINTERCEPTORDIALOG_H + +#include + +namespace Ui { +class UrlInterceptorDialog; +} + +class BlockerManager : public QDialog +{ + Q_OBJECT + +public: + explicit BlockerManager(QWidget *parent = 0); + ~BlockerManager(); + +private: + Ui::UrlInterceptorDialog *ui; +}; + +#endif // URLINTERCEPTORDIALOG_H diff --git a/src/blocker/blockerrule.cpp b/src/blocker/blockerrule.cpp new file mode 100644 index 0000000..1c118e2 --- /dev/null +++ b/src/blocker/blockerrule.cpp @@ -0,0 +1,209 @@ +/** LICENSE ******************************************************************** + ** + ** 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 "blockerrule.h" + +/* AdBlock filter reference + * https://adblockplus.org/en/filters + * https://adblockplus.org/en/filter-cheatsheet + */ + +BlockerRule::BlockerRule(QString rule, QObject *parent) : + QObject(parent) +{ + QString pattern = rule; + + // Empty rule or comment + if(pattern.trimmed().isEmpty() || pattern.startsWith("!")) { + m_valid = false; + return; + } + + // Ignore element hiding rules for now + if(pattern.contains("##") || pattern.contains("#@#")) { + m_valid = false; + return; + } + + // Exception + if(pattern.startsWith("@@")) { + m_exception = true; + pattern.remove(0, 2); + } + + // Options + if(pattern.contains("$")) { + QString opts = pattern.mid(pattern.indexOf("$")+1); + for(QString opt : opts.split(',')) { + if(opt.endsWith("script")) { + if(opt.startsWith("~")) { + m_whitelistOptions.setFlag(RuleOption::script, true); + } else { + m_blacklistOptions.setFlag(RuleOption::script, true); + } + } else if(opt.endsWith("image")) { + if(opt.startsWith("~")) { + m_whitelistOptions.setFlag(RuleOption::image, true); + } else { + m_blacklistOptions.setFlag(RuleOption::image, true); + } + } else if(opt.endsWith("stylesheet")) { + if(opt.startsWith("~")) { + m_whitelistOptions.setFlag(RuleOption::stylesheet, true); + } else { + m_blacklistOptions.setFlag(RuleOption::stylesheet, true); + } + } else if(opt.endsWith("object")) { + if(opt.startsWith("~")) { + m_whitelistOptions.setFlag(RuleOption::object, true); + } else { + m_blacklistOptions.setFlag(RuleOption::object, true); + } + } else if(opt.endsWith("object-subrequest")) { + if(opt.startsWith("~")) { + m_whitelistOptions.setFlag(RuleOption::objectsubrequest, true); + } else { + m_blacklistOptions.setFlag(RuleOption::objectsubrequest, true); + } + } else if(opt.endsWith("subdocument")) { + if(opt.startsWith("~")) { + m_whitelistOptions.setFlag(RuleOption::subdocument, true); + } else { + m_blacklistOptions.setFlag(RuleOption::subdocument, true); + } + } + } + + pattern.remove(pattern.indexOf("$"), pattern.length()); + } + + // Regular expression + if(rule.startsWith("/") && rule.endsWith("/")) { + m_valid = true; + ruleExpression.setPattern(pattern); + return; + } + + // Domain rules + if(pattern.startsWith("||")) { + pattern.remove(0, 2); + // find the end point for the domain + int end = pattern.indexOf(QRegularExpression("(?:[^\\w\\d\\_\\-\\.\\%]|$)"), 0); + domainExpression.setPattern(pattern.mid(0, end)); + pattern.remove(0, end+1); + } else if(pattern.startsWith("|") && pattern.endsWith("|")) { + pattern.remove(0, 1); + pattern.chop(1); + domainExpression.setPattern(pattern); + } else { + domainExpression.setPattern(".*"); + } + + // Regular rule + ruleExpression.setWildcardPattern(pattern); + m_valid = true; +} + +bool BlockerRule::match(const QWebEngineUrlRequestInfo &info) +{ + if(!m_valid) { + return false; + } + + // if both domain and rule match + if(domainExpression.match(info.requestUrl().host()) && ruleExpression.match(info.requestUrl().toString())) { + + // option explicitly allows + if(matchOptions(info, m_whitelistOptions)) { + return false; + } + + // option explicitly bans + if(matchOptions(info, m_blacklistOptions)) { + return true; + } + + // no options, but both domain and rule match --> rule matches + return true; + } + + // domain and/or rule do not match + return false; +} + +bool BlockerRule::isValid() +{ + return m_valid; +} +bool BlockerRule::isException() +{ + return m_exception; +} + +QString BlockerRule::toString() const +{ + return QString("On [%1]: %2 %3").arg(domainExpression.pattern()).arg(ruleExpression.pattern()).arg(QString::number(m_blacklistOptions, 2)); +} + +bool BlockerRule::matchOptions(const QWebEngineUrlRequestInfo &info, const RuleOptions &options) +{ + // no options are defined + if(options == 0) { + return false; + } + + bool hasOption = false; + switch (info.resourceType()) { + case QWebEngineUrlRequestInfo::ResourceTypeScript: + if(options.testFlag(RuleOption::script)) { + hasOption = true; + } + break; + case QWebEngineUrlRequestInfo::ResourceTypeImage: + if(options.testFlag(RuleOption::image)) { + hasOption = true; + } + break; + case QWebEngineUrlRequestInfo::ResourceTypeStylesheet: + if(options.testFlag(RuleOption::stylesheet)) { + hasOption = true; + } + break; + case QWebEngineUrlRequestInfo::ResourceTypeObject: + if(options.testFlag(RuleOption::object)) { + hasOption = true; + } + break; + case QWebEngineUrlRequestInfo::ResourceTypePluginResource: + if(options.testFlag(RuleOption::objectsubrequest)) { + hasOption = true; + } + break; + case QWebEngineUrlRequestInfo::ResourceTypeSubFrame: + if(options.testFlag(RuleOption::subdocument)) { + hasOption = true; + } + break; + default: + break; + } + + return hasOption; +} diff --git a/src/blocker/blockerrule.h b/src/blocker/blockerrule.h new file mode 100644 index 0000000..0981514 --- /dev/null +++ b/src/blocker/blockerrule.h @@ -0,0 +1,79 @@ +/** LICENSE ******************************************************************** + ** + ** 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 . + ** + ******************************************************************************/ + +#ifndef ADBLOCKRULE_H +#define ADBLOCKRULE_H + +#include +#include +#include "regexp.h" +#include + +class BlockerRule : public QObject +{ + Q_OBJECT +public: + enum RuleOption { + script = 1, + image = 2, + stylesheet = 4, + object = 8, + xmlhttprequest = 16, + objectsubrequest = 32, + subdocument = 64, + ping = 128, + websocket = 256, + document = 512, + + elemhide = 1024, + generichide = 2048, + genericblock = 4096, + + other = 8192 + }; + + Q_DECLARE_FLAGS(RuleOptions, RuleOption) + + explicit BlockerRule(QString rule, QObject *parent = 0); + + bool match(const QWebEngineUrlRequestInfo &info); + bool isValid(); + bool isException(); + QString toString() const; + +signals: + +public slots: + +private: + bool matchOptions(const QWebEngineUrlRequestInfo &info, const RuleOptions &options); + + bool m_valid; + bool m_exception = false; + QStringList hostsBlacklist; + QStringList hostsWhitelist; + RegExp domainExpression; + RegExp ruleExpression; + + RuleOptions m_blacklistOptions; + RuleOptions m_whitelistOptions; +}; + +#endif // ADBLOCKRULE_H diff --git a/src/blocker/blockersubscription.cpp b/src/blocker/blockersubscription.cpp new file mode 100644 index 0000000..02def48 --- /dev/null +++ b/src/blocker/blockersubscription.cpp @@ -0,0 +1,138 @@ +/** LICENSE ******************************************************************** + ** + ** 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 "blockersubscription.h" +#include "ui_subscriptionform.h" + +#include "browser.h" +#include +#include +#include + +BlockerSubscription::BlockerSubscription(const QString url, QWidget *parent) : + QWidget(parent), + ui(new Ui::SubscriptionForm) +{ + ui->setupUi(this); + QUrl _url = QUrl::fromUserInput(url); + m_name = _url.fileName(); + + if(!sSettings->value("blocker.path").toString().isEmpty()) { + QString cacheName = sSettings->value("blocker.path").toString() + m_name; + QFile *cache = new QFile(cacheName); + if(cache->exists()) { + load(cache); + } + + } else { + + // no cache path specified - pull the subscription + QNetworkRequest request; + request.setUrl(QUrl::fromUserInput(url)); + + QNetworkReply *reply = sNetwork->get(request); + connect(reply, &QNetworkReply::finished, [this, reply]() { + this->load(reply); + }); + } +} + +BlockerSubscription::~BlockerSubscription() +{ + delete ui; +} + +QString BlockerSubscription::name() const +{ + return m_name; +} + +void BlockerSubscription::load(QIODevice *dev) +{ + QTextStream subscription(dev); + + QString header = subscription.readLine(); + if(!header.startsWith("[Adblock Plus")) { + qDebug("Invalid format of subscription: %s", qUtf8Printable(m_name)); + return; + } + + // clear all lists + m_urlBlacklist.clear(); + m_urlWhitelist.clear(); + int rules = 0; + + while(!subscription.atEnd()) { + QString line = subscription.readLine(); + if(!line.isEmpty()) { + if(line.startsWith('!')) { + parseComment(line); + } else { + // The line is not a comment + + rules++; + BlockerRule *rule = new BlockerRule(line, this); + + if(rule->isValid()) { + if(rule->isException()) { + m_urlWhitelist.append(rule); + ui->whitelist_listWidget->addItem(rule->toString()); + } else { + ui->blacklist_listWidget->addItem(rule->toString()); + m_urlBlacklist.append(rule); + } + } + + } + } + } + + qDebug("Loaded %i/%i rules from subscription %s", m_urlBlacklist.count() + m_urlWhitelist.count(), rules, qUtf8Printable(m_name)); + dev->deleteLater(); +} + + +void BlockerSubscription::parseComment(const QString &line) +{ + if(line.startsWith("! Title: ")) { + ui->title->setText(line.right(line.length() - 9)); + return; + } + if(line.startsWith("! Homepage: ")) { + ui->homepage->setText(line.right(line.length() - 12)); + return; + } + if(line.startsWith("! Licence: ")) { + ui->license->setText(line.right(line.length() - 11)); + return; + } + if(line.startsWith("! Version: ")) { + ui->version->setText(line.right(line.length() - 11)); + return; + } + if(line.startsWith("! Last modified: ")) { + ui->lastModified->setText(line.right(line.length() - 17)); + return; + } + if(line.startsWith("! Expires: ")) { + ui->expires->setText(line.right(line.length() - 11).left(2)); + return; + } +} diff --git a/src/blocker/blockersubscription.h b/src/blocker/blockersubscription.h new file mode 100644 index 0000000..fddb93d --- /dev/null +++ b/src/blocker/blockersubscription.h @@ -0,0 +1,55 @@ +/** LICENSE ******************************************************************** + ** + ** 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 . + ** + ******************************************************************************/ + +#ifndef SUBSCRIPTIONFORM_H +#define SUBSCRIPTIONFORM_H + +#include +#include "blocker/blockerrule.h" + +namespace Ui { +class SubscriptionForm; +} + +class BlockerSubscription : public QWidget +{ + Q_OBJECT + +public: + explicit BlockerSubscription(const QString url, QWidget *parent = 0); + ~BlockerSubscription(); + + QString name() const; + +private slots: + void load(QIODevice *dev); + +private: + void parseComment(const QString &line); + + Ui::SubscriptionForm *ui; + QString m_name; + + QList m_urlWhitelist; // exception rules + QList m_urlBlacklist; // block rules + +}; + +#endif // SUBSCRIPTIONFORM_H diff --git a/src/blocker/regexp.cpp b/src/blocker/regexp.cpp new file mode 100644 index 0000000..a8dff79 --- /dev/null +++ b/src/blocker/regexp.cpp @@ -0,0 +1,70 @@ +/** LICENSE ******************************************************************** + ** + ** 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 "regexp.h" + +RegExp::RegExp() : + QRegularExpression() +{ +} + +bool RegExp::match(const QString &subject, int offset, MatchType matchType, MatchOptions matchOptions) const +{ + // Empty matches all + if(pattern().isEmpty()) { + return true; + } + + return QRegularExpression::match(subject, offset, matchType, matchOptions).hasMatch(); +} + +void RegExp::setWildcardPattern(const QString &pattern) +{ + QString parsed; + + for(int i=0; i. + ** + ******************************************************************************/ + +#ifndef REGEXP_H +#define REGEXP_H + +#include + +/*! + * Regular Expression class for AdBlockPlus filters + */ +class RegExp : public QRegularExpression +{ +public: + explicit RegExp(); + + bool match(const QString &subject, int offset=0, MatchType matchType=NormalMatch, MatchOptions matchOptions=NoMatchOption) const; + void setWildcardPattern(const QString &pattern); +}; + +#endif // REGEXP_H diff --git a/src/blocker/subscriptiondialog.ui b/src/blocker/subscriptiondialog.ui new file mode 100644 index 0000000..7a63cc9 --- /dev/null +++ b/src/blocker/subscriptiondialog.ui @@ -0,0 +1,67 @@ + + + UrlInterceptorDialog + + + + 0 + 0 + 640 + 480 + + + + Blocker + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Close + + + + + + + + + buttonBox + accepted() + UrlInterceptorDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + UrlInterceptorDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/blocker/subscriptionform.ui b/src/blocker/subscriptionform.ui new file mode 100644 index 0000000..703fb6d --- /dev/null +++ b/src/blocker/subscriptionform.ui @@ -0,0 +1,149 @@ + + + SubscriptionForm + + + + 0 + 0 + 640 + 480 + + + + Form + + + + + + Subscription + + + + + + + + Title + + + + + + + TextLabel + + + + + + + Homepage + + + + + + + TextLabel + + + + + + + License + + + + + + + TextLabel + + + + + + + + + + + Version + + + + + + + TextLabel + + + + + + + Last Modified + + + + + + + TextLabel + + + + + + + Expires + + + + + + + TextLabel + + + + + + + + + + + + 0 + + + + URL Blacklist + + + + + + + + + + URL Whitelist + + + + + + + + + + + + + + diff --git a/src/browser.cpp b/src/browser.cpp index 4b49cbe..4697ac5 100644 --- a/src/browser.cpp +++ b/src/browser.cpp @@ -37,6 +37,7 @@ Browser::~Browser() qDeleteAll(m_windows); m_windows.clear(); + delete m_networkAccessManager; delete m_bookmarksManager; delete m_downloadManager; } @@ -88,6 +89,7 @@ bool Browser::preLaunch(QStringList urls) } } + m_networkAccessManager = new QNetworkAccessManager(); m_bookmarksManager = new BookmarksDialog; m_downloadManager = new DownloadDialog; @@ -106,6 +108,11 @@ Settings *Browser::settings() return m_settings; } +QNetworkAccessManager *Browser::network() +{ + return m_networkAccessManager; +} + BookmarksDialog *Browser::bookmarks() { return m_bookmarksManager; diff --git a/src/browser.h b/src/browser.h index 0a6702f..aa7c605 100644 --- a/src/browser.h +++ b/src/browser.h @@ -27,8 +27,10 @@ #include "forms/downloaddialog.h" #include #include "settings.h" +#include #define sSettings Browser::instance()->settings() +#define sNetwork Browser::instance()->network() class MainWindow; class Browser : public QApplication @@ -45,6 +47,7 @@ public: static Browser *instance(); Settings *settings(); + QNetworkAccessManager *network(); BookmarksDialog *bookmarks(); DownloadDialog *downloads(); @@ -62,6 +65,7 @@ private: Settings *m_settings; QLocalServer *m_localServer; QVector m_windows; + QNetworkAccessManager *m_networkAccessManager; BookmarksDialog *m_bookmarksManager; DownloadDialog *m_downloadManager; diff --git a/src/forms/blockerdialog.cpp b/src/forms/blockerdialog.cpp deleted file mode 100644 index 9c6bd0a..0000000 --- a/src/forms/blockerdialog.cpp +++ /dev/null @@ -1,64 +0,0 @@ -/** LICENSE ******************************************************************** - ** - ** 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 "blockerdialog.h" -#include "ui_blockerdialog.h" - -#include "browser.h" -#include -#include - -BlockerDialog::BlockerDialog(QWidget *parent) : - QDialog(parent), - ui(new Ui::UrlInterceptorDialog) -{ - ui->setupUi(this); - - m_subscription = new BlockerSubscription(this); - QString sublocation = sSettings->value("blocker.path").toString(); - if(!sublocation.isEmpty()) { - m_subscription->loadFromFile(sublocation); - } - - ui->title->setText(m_subscription->title()); - ui->homepage->setText(m_subscription->homepage()); - ui->license->setText(m_subscription->license()); - ui->version->setText(m_subscription->version()); - ui->lastModified->setText(m_subscription->lastModified().toString()); - ui->expires->setText(m_subscription->expires().toString()); - - // show subscription items - for(BlockerRule *rule : m_subscription->urlBlacklist()) { - ui->blacklist_listWidget->addItem(rule->toString()); - } - for(BlockerRule *rule : m_subscription->urlWhitelist()) { - ui->whitelist_listWidget->addItem(rule->toString()); - } -} - -BlockerDialog::~BlockerDialog() -{ - delete ui; -} - -BlockerSubscription* BlockerDialog::subscription() -{ - return m_subscription; -} diff --git a/src/forms/blockerdialog.h b/src/forms/blockerdialog.h deleted file mode 100644 index 6970795..0000000 --- a/src/forms/blockerdialog.h +++ /dev/null @@ -1,45 +0,0 @@ -/** LICENSE ******************************************************************** - ** - ** 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 . - ** - ******************************************************************************/ - -#ifndef URLINTERCEPTORDIALOG_H -#define URLINTERCEPTORDIALOG_H - -#include -#include "webengine/blockersubscription.h" - -namespace Ui { -class UrlInterceptorDialog; -} - -class BlockerDialog : public QDialog -{ - Q_OBJECT - -public: - explicit BlockerDialog(QWidget *parent = 0); - ~BlockerDialog(); - BlockerSubscription *subscription(); - -private: - Ui::UrlInterceptorDialog *ui; - BlockerSubscription *m_subscription; -}; - -#endif // URLINTERCEPTORDIALOG_H diff --git a/src/forms/blockerdialog.ui b/src/forms/blockerdialog.ui deleted file mode 100644 index a84dac8..0000000 --- a/src/forms/blockerdialog.ui +++ /dev/null @@ -1,192 +0,0 @@ - - - UrlInterceptorDialog - - - - 0 - 0 - 640 - 480 - - - - Blocker - - - - - - Subscription - - - - - - - - Title - - - - - - - TextLabel - - - - - - - Homepage - - - - - - - TextLabel - - - - - - - License - - - - - - - TextLabel - - - - - - - - - - - Version - - - - - - - TextLabel - - - - - - - Last Modified - - - - - - - TextLabel - - - - - - - Expires - - - - - - - TextLabel - - - - - - - - - - - - 0 - - - - URL Blacklist - - - - - - - - - - URL Whitelist - - - - - - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Close - - - - - - - - - buttonBox - accepted() - UrlInterceptorDialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - UrlInterceptorDialog - reject() - - - 316 - 260 - - - 286 - 274 - - - - - diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 18c1e14..f455fae 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -30,7 +30,7 @@ MainWindow::MainWindow(QUrl defaultUrl, QWidget *parent) : QMainWindow(parent), - blocklistManager(new BlockerDialog(this)), + blocklistManager(new BlockerManager(this)), ui(new Ui::MainWindow), navigationToolBar(new QToolBar(tr("Navigation"), this)), tabToolBar(new QToolBar(tr("Tab bar"), this)), @@ -62,7 +62,7 @@ MainWindow::MainWindow(QUrl defaultUrl, QWidget *parent) : QAction *bookmarksAction = toolsMenu->addAction(tr("Bookmarks"), Browser::instance()->bookmarks(), SLOT(show())); bookmarksAction->setShortcut(QKeySequence(sSettings->value("bookmarks.dialogShortcut").toString())); toolsMenu->addSeparator(); - toolsMenu->addAction(tr("Blocker"), blocklistManager, SLOT(show())); + toolsMenu->addAction(tr("Blocker"), blocklistManager, SLOT(show()), QKeySequence::fromString(sSettings->value("blocker.shortcut").toString())); // Profile menu QMenu *profileMenu = new QMenu(tr("Profile"), menuBar); @@ -181,7 +181,7 @@ void MainWindow::loadProfile(const QString &name) } UrlRequestInterceptor *interceptor = new UrlRequestInterceptor(this); - interceptor->setSubscription(blocklistManager->subscription()); + interceptor->setSubscription(blocklistManager); m_profile->setRequestInterceptor(interceptor); connect(m_profile, SIGNAL(downloadRequested(QWebEngineDownloadItem*)), Browser::instance()->downloads(), SLOT(addDownload(QWebEngineDownloadItem*))); } diff --git a/src/mainwindow.h b/src/mainwindow.h index afc5537..da2b429 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -30,7 +30,7 @@ #include #include "widgets/webviewtabbar.h" #include "webengine/urlinterceptor.h" -#include "forms/blockerdialog.h" +#include "blocker/blockermanager.h" #include "widgets/loadingbar.h" namespace Ui { @@ -67,7 +67,7 @@ private slots: void handleTitleUpdated(const QString &title); private: - BlockerDialog *blocklistManager; + BlockerManager *blocklistManager; WebEngineProfile *m_profile = nullptr; // ui diff --git a/src/mainwindow.ui b/src/mainwindow.ui index 24266d7..46f241a 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -15,26 +15,6 @@ - - - New Window - - - - - New Tab - - - - - Open - - - - - Quit - - diff --git a/src/webengine/blockerrule.cpp b/src/webengine/blockerrule.cpp deleted file mode 100644 index 79669b9..0000000 --- a/src/webengine/blockerrule.cpp +++ /dev/null @@ -1,210 +0,0 @@ -/** LICENSE ******************************************************************** - ** - ** 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 "blockerrule.h" - -/* AdBlock filter reference - * https://adblockplus.org/en/filters - * https://adblockplus.org/en/filter-cheatsheet - */ - -BlockerRule::BlockerRule(QString rule, QObject *parent) : - QObject(parent) -{ - QString pattern = rule; - - // Empty rule or comment - if(pattern.trimmed().isEmpty() || pattern.startsWith("!")) { - m_type = RuleType::Invalid; - return; - } - - // Ignore element hiding rules for now - if(pattern.contains("##") || pattern.contains("#@#")) { - m_type = RuleType::Invalid; - return; - } - - // Exception - if(pattern.startsWith("@@")) { - m_exception = true; - pattern.remove(0, 2); - } - - // Options - if(pattern.contains("$")) { - QString opts = pattern.mid(pattern.indexOf("$")+1); - for(QString opt : opts.split(',')) { - if(opt.endsWith("script")) { - if(opt.startsWith("~")) { - m_whitelistOptions.setFlag(RuleOption::script, true); - } else { - m_blacklistOptions.setFlag(RuleOption::script, true); - } - } else if(opt.endsWith("image")) { - if(opt.startsWith("~")) { - m_whitelistOptions.setFlag(RuleOption::image, true); - } else { - m_blacklistOptions.setFlag(RuleOption::image, true); - } - } else if(opt.endsWith("stylesheet")) { - if(opt.startsWith("~")) { - m_whitelistOptions.setFlag(RuleOption::stylesheet, true); - } else { - m_blacklistOptions.setFlag(RuleOption::stylesheet, true); - } - } else if(opt.endsWith("object")) { - if(opt.startsWith("~")) { - m_whitelistOptions.setFlag(RuleOption::object, true); - } else { - m_blacklistOptions.setFlag(RuleOption::object, true); - } - } else if(opt.endsWith("object-subrequest")) { - if(opt.startsWith("~")) { - m_whitelistOptions.setFlag(RuleOption::objectsubrequest, true); - } else { - m_blacklistOptions.setFlag(RuleOption::objectsubrequest, true); - } - } else if(opt.endsWith("subdocument")) { - if(opt.startsWith("~")) { - m_whitelistOptions.setFlag(RuleOption::subdocument, true); - } else { - m_blacklistOptions.setFlag(RuleOption::subdocument, true); - } - } - } - - pattern.remove(pattern.indexOf("$"), pattern.length()); - } - - // Regular expression - if(rule.startsWith("/") && rule.endsWith("/")) { - m_type = RuleType::RegularExpressionMatch; - ruleExpression.setPattern(pattern); - return; - } - - // Domain rules - if(pattern.startsWith("||")) { - pattern.remove(0, 2); - // find the end point for the domain - int end = pattern.indexOf(QRegularExpression("(?:[^\\w\\d\\_\\-\\.\\%]|$)"), 0); - domainExpression.setPattern(pattern.mid(0, end)); - pattern.remove(0, end+1); - } else if(pattern.startsWith("|") && pattern.endsWith("|")) { - pattern.remove(0, 1); - pattern.chop(1); - domainExpression.setPattern(pattern); - } else { - domainExpression.setPattern(".*"); - } - - // Regular rule - ruleExpression.setWildcardPattern(pattern); - m_type = RuleType::RegularExpressionMatch; -} - -bool BlockerRule::match(const QWebEngineUrlRequestInfo &info) -{ - switch (m_type) { - case RuleType::Invalid: - break; - - case RuleType::RegularExpressionMatch: - if(domainExpression.match(info.requestUrl().host())) { - if(ruleExpression.match(info.requestUrl().toString())) { - if(matchOptions(info, m_whitelistOptions)) { - return false; - } - if(matchOptions(info, m_blacklistOptions)) { - return true; - } - return true; - } - } - break; - } - - return false; -} - -bool BlockerRule::isValid() -{ - if(m_type == RuleType::Invalid) { - return false; - } else { - return true; - } -} -bool BlockerRule::isException() -{ - return m_exception; -} - -QString BlockerRule::toString() const -{ - return QString("On [%1]: %2 %3").arg(domainExpression.pattern()).arg(ruleExpression.pattern()).arg(QString::number(m_blacklistOptions, 2)); -} - -bool BlockerRule::matchOptions(const QWebEngineUrlRequestInfo &info, const RuleOptions &options) -{ - // no options are defined - if(options == 0) { - return false; - } - - bool ret = false; - switch (info.resourceType()) { - case QWebEngineUrlRequestInfo::ResourceTypeScript: - if(options.testFlag(RuleOption::script)) { - ret = true; - } - break; - case QWebEngineUrlRequestInfo::ResourceTypeImage: - if(options.testFlag(RuleOption::image)) { - ret = true; - } - break; - case QWebEngineUrlRequestInfo::ResourceTypeStylesheet: - if(options.testFlag(RuleOption::stylesheet)) { - ret = true; - } - break; - case QWebEngineUrlRequestInfo::ResourceTypeObject: - if(options.testFlag(RuleOption::object)) { - ret = true; - } - break; - case QWebEngineUrlRequestInfo::ResourceTypePluginResource: - if(options.testFlag(RuleOption::objectsubrequest)) { - ret = true; - } - break; - case QWebEngineUrlRequestInfo::ResourceTypeSubFrame: - if(options.testFlag(RuleOption::subdocument)) { - ret = true; - } - break; - default: - break; - } - - return ret; -} diff --git a/src/webengine/blockerrule.h b/src/webengine/blockerrule.h deleted file mode 100644 index bdb2eb9..0000000 --- a/src/webengine/blockerrule.h +++ /dev/null @@ -1,84 +0,0 @@ -/** LICENSE ******************************************************************** - ** - ** 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 . - ** - ******************************************************************************/ - -#ifndef ADBLOCKRULE_H -#define ADBLOCKRULE_H - -#include -#include -#include "regexp.h" -#include - -class BlockerRule : public QObject -{ - Q_OBJECT -public: - enum RuleType { - Invalid, - RegularExpressionMatch - }; - - enum RuleOption { - script = 1, - image = 2, - stylesheet = 4, - object = 8, - xmlhttprequest = 16, - objectsubrequest = 32, - subdocument = 64, - ping = 128, - websocket = 256, - document = 512, - - elemhide = 1024, - generichide = 2048, - genericblock = 4096, - - other = 8192 - }; - - Q_DECLARE_FLAGS(RuleOptions, RuleOption) - - explicit BlockerRule(QString rule, QObject *parent = 0); - - bool match(const QWebEngineUrlRequestInfo &info); - bool isValid(); - bool isException(); - QString toString() const; - -signals: - -public slots: - -private: - bool matchOptions(const QWebEngineUrlRequestInfo &info, const RuleOptions &options); - - RuleType m_type; - bool m_exception = false; - QStringList hostsBlacklist; - QStringList hostsWhitelist; - RegExp domainExpression; - RegExp ruleExpression; - - RuleOptions m_blacklistOptions; - RuleOptions m_whitelistOptions; -}; - -#endif // ADBLOCKRULE_H diff --git a/src/webengine/blockersubscription.cpp b/src/webengine/blockersubscription.cpp deleted file mode 100644 index 40d3e9f..0000000 --- a/src/webengine/blockersubscription.cpp +++ /dev/null @@ -1,145 +0,0 @@ -/** LICENSE ******************************************************************** - ** - ** 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 "blockersubscription.h" - -#include -#include - -BlockerSubscription::BlockerSubscription(QObject *parent) : - QObject(parent) -{ -} - -int BlockerSubscription::loadFromFile(const QString &file) -{ - QFile subfile(file); - if(!subfile.open(QIODevice::ReadOnly | QIODevice::Text)) { - qDebug("Cannot open subscription: %s", qUtf8Printable(file)); - return -1; - } - - QTextStream subscription(&subfile); - - QString header = subscription.readLine(); - if(header != "[Adblock Plus 2.0]") { - qDebug("Invalid format of subscription: %s", qUtf8Printable(file)); - return -1; - } - - // clear all lists - m_urlBlacklist.clear(); - m_urlWhitelist.clear(); - int rules = 0; - - while(!subscription.atEnd()) { - QString line = subscription.readLine(); - if(!line.isEmpty()) { - if(line.startsWith('!')) { - parseComment(line); - } else { - // The line is not a comment - - rules++; - BlockerRule *rule = new BlockerRule(line, this); - - if(rule->isValid()) { - if(rule->isException()) { - m_urlWhitelist.append(rule); - } else { - m_urlBlacklist.append(rule); - } - } - - } - } - } - - qDebug("Loaded %i/%i rules from subscription %s", m_urlBlacklist.count() + m_urlWhitelist.count(), rules, qUtf8Printable(file)); - return rules; -} - -const QString BlockerSubscription::title() -{ - return m_title; -} - -const QString BlockerSubscription::homepage() -{ - return m_homepage; -} - -const QString BlockerSubscription::license() -{ - return m_license; -} - -const QString BlockerSubscription::version() -{ - return m_version; -} - -const QDateTime BlockerSubscription::lastModified() -{ - return m_lastModified; -} - -const QDateTime BlockerSubscription::expires() -{ - return m_expires; -} - -const QList BlockerSubscription::urlBlacklist() -{ - return m_urlBlacklist; -} - -const QList BlockerSubscription::urlWhitelist() -{ - return m_urlWhitelist; -} - -void BlockerSubscription::parseComment(const QString &line) -{ - if(line.startsWith("! Title: ")) { - m_title = line.right(line.length() - 9); - return; - } - if(line.startsWith("! Homepage: ")) { - m_homepage = line.right(line.length() - 12); - return; - } - if(line.startsWith("! Licence: ")) { - m_license = line.right(line.length() - 11); - return; - } - if(line.startsWith("! Version: ")) { - m_version = line.right(line.length() - 11); - return; - } - if(line.startsWith("! Last modified: ")) { - m_lastModified = QDateTime::fromString(line.right(line.length() - 17), Qt::RFC2822Date); - return; - } - if(line.startsWith("! Expires: ")) { - m_expires = m_lastModified.addDays(line.right(line.length() - 11).left(2).toInt()); - return; - } -} diff --git a/src/webengine/blockersubscription.h b/src/webengine/blockersubscription.h deleted file mode 100644 index b8e3b9a..0000000 --- a/src/webengine/blockersubscription.h +++ /dev/null @@ -1,67 +0,0 @@ -/** LICENSE ******************************************************************** - ** - ** 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 . - ** - ******************************************************************************/ - -#ifndef URLINTERCEPTORSUBSCRIPTION_H -#define URLINTERCEPTORSUBSCRIPTION_H - -#include -#include -#include "blockerrule.h" - -class BlockerSubscription : public QObject -{ - Q_OBJECT -public: - explicit BlockerSubscription(QObject *parent = 0); - - int loadFromFile(const QString &file); - - const QString title(); - const QString homepage(); - const QString license(); - const QString version(); - const QDateTime lastModified(); - const QDateTime expires(); - - const QList urlBlacklist(); - const QList urlWhitelist(); - -signals: - -public slots: - -private: - void parseComment(const QString &line); - - QString m_title; - QString m_homepage; - QString m_license; - - QString m_version; - QDateTime m_lastModified; - QDateTime m_expires; - - QList m_urlWhitelist; // exception rules - QList m_urlBlacklist; // block rules - // element exceptions - // element blocking -}; - -#endif // URLINTERCEPTORSUBSCRIPTION_H diff --git a/src/webengine/regexp.cpp b/src/webengine/regexp.cpp deleted file mode 100644 index 4a5878a..0000000 --- a/src/webengine/regexp.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/** LICENSE ******************************************************************** - ** - ** 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 "regexp.h" - -RegExp::RegExp() : - QRegularExpression() -{ -} - -bool RegExp::match(const QString &subject, int offset, MatchType matchType, MatchOptions matchOptions) const -{ - if(pattern().isEmpty()) { - return true; - } - return QRegularExpression::match(subject, offset, matchType, matchOptions).hasMatch(); -} - -void RegExp::setWildcardPattern(const QString &pattern) -{ - QString parsed; - - for(int i=0; i. - ** - ******************************************************************************/ - -#ifndef REGEXP_H -#define REGEXP_H - -#include - -class RegExp : public QRegularExpression -{ -public: - explicit RegExp(); - - bool match(const QString &subject, int offset=0, MatchType matchType=NormalMatch, MatchOptions matchOptions=NoMatchOption) const; - void setWildcardPattern(const QString &pattern); -}; - -#endif // REGEXP_H diff --git a/src/webengine/urlinterceptor.cpp b/src/webengine/urlinterceptor.cpp index 9352af6..3c6a56e 100644 --- a/src/webengine/urlinterceptor.cpp +++ b/src/webengine/urlinterceptor.cpp @@ -27,27 +27,10 @@ UrlRequestInterceptor::UrlRequestInterceptor(QObject *parent) : void UrlRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo &info) { - for(BlockerRule *rule : m_sub->urlWhitelist()) { - if(rule->match(info)) { - qDebug("OK %i %s", info.resourceType(), qUtf8Printable(info.requestUrl().toString())); - return; - } - } - - for(BlockerRule *rule : m_sub->urlBlacklist()) { - if(rule->match(info)) { - info.block(true); - qDebug(" %i %s", info.resourceType(), qUtf8Printable(info.requestUrl().toString())); - return; - } - } - - // rule is neither in whitelist nor blacklist - qDebug("OK %i %s", info.resourceType(), qUtf8Printable(info.requestUrl().toString())); - + // } -void UrlRequestInterceptor::setSubscription(BlockerSubscription *subscription) +void UrlRequestInterceptor::setSubscription(BlockerManager *subscription) { - m_sub = subscription; + m_blocker = subscription; } diff --git a/src/webengine/urlinterceptor.h b/src/webengine/urlinterceptor.h index 0f9fe65..00fe666 100644 --- a/src/webengine/urlinterceptor.h +++ b/src/webengine/urlinterceptor.h @@ -22,7 +22,7 @@ #define ADBLOCKINTERCEPTOR_H #include -#include "blockersubscription.h" +#include "blocker/blockermanager.h" class UrlRequestInterceptor : public QWebEngineUrlRequestInterceptor { @@ -31,14 +31,14 @@ public: explicit UrlRequestInterceptor(QObject *parent = 0); void interceptRequest(QWebEngineUrlRequestInfo &info); - void setSubscription(BlockerSubscription *subscription); + void setSubscription(BlockerManager *subscription); signals: public slots: private: - BlockerSubscription *m_sub; + BlockerManager *m_blocker; }; #endif // ADBLOCKINTERCEPTOR_H diff --git a/test/blocklist.txt b/test/blocklist.txt deleted file mode 100644 index f67b77c..0000000 --- a/test/blocklist.txt +++ /dev/null @@ -1,9 +0,0 @@ -[Adblock Plus 2.0] -! Version: 0 -! Title: Test blocklist -! Last modified: 5 Feb 2017 00:00 UTC -! Expires: 4 days (update frequency) -! Homepage: https://gitlab.com/xiannox/smolbote -! Licence: n/a - -||duckduckgo.com^t1256.css -- cgit v1.2.1