/******************************************************************************* ** ** 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 FilterNode { public: enum ResourceType { NoType = 0, MainFrame = 1, SubFrame = 2, Stylesheet = 4, Script = 8, Image = 16, FontResource = 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 FilterNode(const QString &domain, const QString &request, ResourceRules rules, bool shouldBlock, FilterNode *parentItem = 0); ~FilterNode(); void enable(); FilterNode *parentItem(); // children void appendChild(FilterNode *child); FilterNode *child(int row); int childCount() const; // data QString domain() const; QString request() const; bool isBlocking(); int row() const; // filtering bool hasMatch(const QWebEngineUrlRequestInfo &info); bool shouldBlock(const QWebEngineUrlRequestInfo &info); bool isValid(); private: bool testFlag(ResourceType flag); FilterNode *m_parentItem; QList m_children; RegExp m_domainUrl; RegExp m_requestUrl; ResourceRules m_rules; bool m_valid = false; bool m_shouldBlock; }; #endif // FILTERNODE_H