From 0772cf8b98387b2b641ae29aeb1b459eef22d794 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Wed, 22 Mar 2017 22:59:07 +0100 Subject: Blocker fixes --- src/blocker/blockerrule.cpp | 93 ++++++++++++++++++++++----------------------- 1 file changed, 46 insertions(+), 47 deletions(-) (limited to 'src/blocker/blockerrule.cpp') 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) -- cgit v1.2.1