aboutsummaryrefslogtreecommitdiff
path: root/src/blocker/blockerrule.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/blocker/blockerrule.cpp')
-rw-r--r--src/blocker/blockerrule.cpp93
1 files changed, 46 insertions, 47 deletions
diff --git a/src/blocker/blockerrule.cpp b/src/blocker/blockerrule.cpp
index 1c118e2..fb7f2bf 100644
--- a/src/blocker/blockerrule.cpp
+++ b/src/blocker/blockerrule.cpp
@@ -28,6 +28,7 @@
BlockerRule::BlockerRule(QString rule, QObject *parent) :
QObject(parent)
{
+ m_filter = rule;
QString pattern = rule;
// Empty rule or comment
@@ -36,62 +37,26 @@ BlockerRule::BlockerRule(QString rule, QObject *parent) :
return;
}
- // Ignore element hiding rules for now
- if(pattern.contains("##") || pattern.contains("#@#")) {
- m_valid = false;
- return;
- }
-
// Exception
if(pattern.startsWith("@@")) {
m_exception = true;
pattern.remove(0, 2);
}
+ // Ignore element hiding rules for now
+ if(pattern.contains("##") || pattern.contains("#@#")) {
+ m_valid = false;
+ return;
+ }
+
// Options
if(pattern.contains("$")) {
QString opts = pattern.mid(pattern.indexOf("$")+1);
+ pattern.remove(pattern.indexOf("$"), pattern.length());
+
for(QString opt : opts.split(',')) {
- if(opt.endsWith("script")) {
- if(opt.startsWith("~")) {
- m_whitelistOptions.setFlag(RuleOption::script, true);
- } else {
- m_blacklistOptions.setFlag(RuleOption::script, true);
- }
- } else if(opt.endsWith("image")) {
- if(opt.startsWith("~")) {
- m_whitelistOptions.setFlag(RuleOption::image, true);
- } else {
- m_blacklistOptions.setFlag(RuleOption::image, true);
- }
- } else if(opt.endsWith("stylesheet")) {
- if(opt.startsWith("~")) {
- m_whitelistOptions.setFlag(RuleOption::stylesheet, true);
- } else {
- m_blacklistOptions.setFlag(RuleOption::stylesheet, true);
- }
- } else if(opt.endsWith("object")) {
- if(opt.startsWith("~")) {
- m_whitelistOptions.setFlag(RuleOption::object, true);
- } else {
- m_blacklistOptions.setFlag(RuleOption::object, true);
- }
- } else if(opt.endsWith("object-subrequest")) {
- if(opt.startsWith("~")) {
- m_whitelistOptions.setFlag(RuleOption::objectsubrequest, true);
- } else {
- m_blacklistOptions.setFlag(RuleOption::objectsubrequest, true);
- }
- } else if(opt.endsWith("subdocument")) {
- if(opt.startsWith("~")) {
- m_whitelistOptions.setFlag(RuleOption::subdocument, true);
- } else {
- m_blacklistOptions.setFlag(RuleOption::subdocument, true);
- }
- }
+ parseOption(opt);
}
-
- pattern.remove(pattern.indexOf("$"), pattern.length());
}
// Regular expression
@@ -157,9 +122,43 @@ bool BlockerRule::isException()
return m_exception;
}
-QString BlockerRule::toString() const
+QString BlockerRule::filter() const
{
- return QString("On [%1]: %2 %3").arg(domainExpression.pattern()).arg(ruleExpression.pattern()).arg(QString::number(m_blacklistOptions, 2));
+ return m_filter;
+}
+
+void BlockerRule::parseOption(const QString &opt)
+{
+ if(opt.startsWith("script")) {
+ m_blacklistOptions.setFlag(RuleOption::script, true);
+ } else if(opt.startsWith("~script")) {
+ m_whitelistOptions.setFlag(RuleOption::script, true);
+
+ } else if(opt.startsWith("image")) {
+ m_blacklistOptions.setFlag(RuleOption::image, true);
+ } else if(opt.startsWith("~image")) {
+ m_whitelistOptions.setFlag(RuleOption::image, true);
+
+ } else if(opt.startsWith("stylesheet")) {
+ m_blacklistOptions.setFlag(RuleOption::stylesheet, true);
+ } else if(opt.startsWith("~stylesheet")) {
+ m_whitelistOptions.setFlag(RuleOption::stylesheet, true);
+
+ } else if(opt.startsWith("object")) {
+ m_blacklistOptions.setFlag(RuleOption::object, true);
+ } else if(opt.startsWith("~object")) {
+ m_whitelistOptions.setFlag(RuleOption::object, true);
+
+ } else if(opt.startsWith("object-subrequest")) {
+ m_blacklistOptions.setFlag(RuleOption::objectsubrequest, true);
+ } else if(opt.startsWith("~object-subrequest")) {
+ m_whitelistOptions.setFlag(RuleOption::objectsubrequest, true);
+
+ } else if(opt.startsWith("subdocument")) {
+ m_blacklistOptions.setFlag(RuleOption::subdocument, true);
+ } else if(opt.startsWith("~subdocument")) {
+ m_whitelistOptions.setFlag(RuleOption::subdocument, true);
+ }
}
bool BlockerRule::matchOptions(const QWebEngineUrlRequestInfo &info, const RuleOptions &options)