From 49324c8d4acbf36902754a2f1c62fb134df1b19e Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Thu, 25 May 2017 16:12:29 +0200 Subject: Merged FilterRule into FilterNode --- src/blocker/filternode.cpp | 109 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 103 insertions(+), 6 deletions(-) (limited to 'src/blocker/filternode.cpp') diff --git a/src/blocker/filternode.cpp b/src/blocker/filternode.cpp index e0612b5..67614ce 100644 --- a/src/blocker/filternode.cpp +++ b/src/blocker/filternode.cpp @@ -20,10 +20,20 @@ #include "filternode.h" -FilterNode::FilterNode(const QList data, FilterNode *parentItem) +FilterNode::FilterNode(const QString &domain, const QString &request, ResourceRules rules, bool shouldBlock, FilterNode *parentItem) { - m_itemData = data; m_parentItem = parentItem; + + m_domainUrl.setPattern(domain); + m_requestUrl.setPattern(request); + m_rules = rules; + m_shouldBlock = shouldBlock; + + m_valid = false; + +#ifdef DEBUG_VERBOSE + qDebug("Created rule [%s] [%s]", qUtf8Printable(domain), qUtf8Printable(request)); +#endif } FilterNode::~FilterNode() @@ -31,6 +41,11 @@ FilterNode::~FilterNode() qDeleteAll(m_children); } +void FilterNode::enable() +{ + m_valid = true; +} + FilterNode *FilterNode::parentItem() { return m_parentItem; @@ -51,14 +66,19 @@ int FilterNode::childCount() const return m_children.count(); } -int FilterNode::columnCount() const +QString FilterNode::domain() const +{ + return m_domainUrl.pattern(); +} + +QString FilterNode::request() const { - return m_itemData.count(); + return m_requestUrl.pattern(); } -QVariant FilterNode::data(int column) const +bool FilterNode::isBlocking() { - return m_itemData.value(column); + return m_shouldBlock; } int FilterNode::row() const @@ -69,3 +89,80 @@ int FilterNode::row() const return 0; } + +bool FilterNode::hasMatch(const QWebEngineUrlRequestInfo &info) +{ + if(m_domainUrl.hasMatch(info.firstPartyUrl().toString()) && m_requestUrl.hasMatch(info.requestUrl().toString())) { + return true; + } else { + return false; + } +} + +bool FilterNode::shouldBlock(const QWebEngineUrlRequestInfo &info) +{ + if(!m_valid) { + return false; + } + + // Check options + switch (info.resourceType()) { + case QWebEngineUrlRequestInfo::ResourceTypeMainFrame: + return testFlag(MainFrame); + case QWebEngineUrlRequestInfo::ResourceTypeSubFrame: + return testFlag(SubFrame); + case QWebEngineUrlRequestInfo::ResourceTypeStylesheet: + return testFlag(Stylesheet); + case QWebEngineUrlRequestInfo::ResourceTypeScript: + return testFlag(Script); + case QWebEngineUrlRequestInfo::ResourceTypeImage: + return testFlag(Image); + case QWebEngineUrlRequestInfo::ResourceTypeFontResource: + return testFlag(FontResource); + case QWebEngineUrlRequestInfo::ResourceTypeSubResource: + return testFlag(SubResource); + case QWebEngineUrlRequestInfo::ResourceTypeObject: + return testFlag(Object); + case QWebEngineUrlRequestInfo::ResourceTypeMedia: + return testFlag(Media); + case QWebEngineUrlRequestInfo::ResourceTypeWorker: + return testFlag(Worker); + case QWebEngineUrlRequestInfo::ResourceTypeSharedWorker: + return testFlag(SharedWorker); + case QWebEngineUrlRequestInfo::ResourceTypePrefetch: + return testFlag(Prefetch); + case QWebEngineUrlRequestInfo::ResourceTypeFavicon: + return testFlag(Favicon); + case QWebEngineUrlRequestInfo::ResourceTypeXhr: + return testFlag(Xhr); + case QWebEngineUrlRequestInfo::ResourceTypePing: + return testFlag(Ping); + case QWebEngineUrlRequestInfo::ResourceTypeServiceWorker: + return testFlag(ServiceWorker); + case QWebEngineUrlRequestInfo::ResourceTypeCspReport: + return testFlag(CspReport); + case QWebEngineUrlRequestInfo::ResourceTypePluginResource: + return testFlag(PluginResource); + case QWebEngineUrlRequestInfo::ResourceTypeUnknown: + break; + } + + return m_shouldBlock; + +} + +bool FilterNode::isValid() +{ + return m_valid; +} + +bool FilterNode::testFlag(ResourceType flag) +{ + if(m_rules.allowed.testFlag(flag)) { + return false; + } else if(m_rules.blocked.testFlag(flag)) { + return true; + } else { + return m_shouldBlock; + } +} -- cgit v1.2.1