/* * This file is part of smolbote. It's copyrighted by the contributors recorded * in the version control history of the file, available from its original * location: git://neueland.iserlohn-fortress.net/smolbote.git * * SPDX-License-Identifier: GPL-3.0 */ #ifndef ADBLOCKRULE_H #define ADBLOCKRULE_H #include #include #include "regexp.h" #include class BlockerRule : public QObject { Q_OBJECT public: // https://adblockplus.org/en/filters#options 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 filter() const; signals: public slots: private: void parseOption(const QString &opt); bool matchOptions(const QWebEngineUrlRequestInfo &info, const RuleOptions &options); QString m_filter; bool m_valid; bool m_exception = false; bool m_elementRule; QStringList hostsBlacklist; QStringList hostsWhitelist; RegExp domainExpression; RegExp ruleExpression; RuleOptions m_blacklistOptions; RuleOptions m_whitelistOptions; }; #endif // ADBLOCKRULE_H