/******************************************************************************* ** ** 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 FILTERNODE_H #define FILTERNODE_H #include #include #include #include "regexp.h" #include class Filter { public: enum ResourceType { NoType = 0, MainFrame = 1, SubFrame = 2, Stylesheet = 4, Script = 8, Image = 16, Font = 32, SubResource = 64, Object = 128, Media = 256, Worker = 512, SharedWorker = 1024, Prefetch = 2048, Favicon = 4096, Xhr = 8192, Ping = 16384, ServiceWorker = 32768, CspReport = 65536, PluginResource = 131072, Unknown = 262144 }; Q_DECLARE_FLAGS(Resources, ResourceType) struct ResourceRules { Resources allowed; Resources blocked; }; explicit Filter(const QString &domain, const QString &request, ResourceRules rules, bool shouldBlock, Filter *parentItem = 0); ~Filter(); void enable(); Filter *parentItem(); // children void appendChild(Filter *child); Filter *child(int row); int childCount() const; // data QString domain() const; QString request() const; bool isBlocking(); QString allowedTypes() const; QString blockedTypes() const; int row() const; // filtering bool hasDomainMatch(const QString &string); bool hasRuleMatch(const QString &string); bool shouldBlock(const QWebEngineUrlRequestInfo &info); bool isValid(); private: bool testFlag(ResourceType flag); QString flags(Resources f) const; Filter *m_parentItem; QList m_children; RegExp m_domainUrl; RegExp m_requestUrl; ResourceRules m_rules; bool m_valid = false; bool m_shouldBlock; }; #endif // FILTERNODE_H