aboutsummaryrefslogtreecommitdiff
path: root/src/blocker/filternode.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/blocker/filternode.cpp')
-rw-r--r--src/blocker/filternode.cpp109
1 files changed, 103 insertions, 6 deletions
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<QVariant> 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;
+ }
+}