From b091eab32952450744a21109a924cfdb5c504c82 Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Mon, 22 Oct 2018 20:39:21 +0200 Subject: AdblockRule constructor --- lib/urlfilter/formats/adblockrule.cpp | 38 ++++++++++++++++++++++++++++++++--- lib/urlfilter/formats/adblockrule.h | 7 ++++--- src/webengine/filter.h | 3 ++- src/webengine/urlinterceptor.h | 1 - test/CMakeLists.txt | 3 ++- test/adblock/adblocktest.cpp | 14 +++++-------- test/adblock/adblocktest.h | 4 +++- 7 files changed, 51 insertions(+), 19 deletions(-) diff --git a/lib/urlfilter/formats/adblockrule.cpp b/lib/urlfilter/formats/adblockrule.cpp index 79a6dc8..6b97d5d 100644 --- a/lib/urlfilter/formats/adblockrule.cpp +++ b/lib/urlfilter/formats/adblockrule.cpp @@ -31,9 +31,11 @@ AdBlockRule *loadRule(const QString &filter) } // exception rules - const bool isBlocking = parsedLine.startsWith(QLatin1Literal("@@")); - if(isBlocking) + FilterLeaf::Action action = FilterLeaf::Block; + if(parsedLine.startsWith(QLatin1Literal("@@"))) { + action = FilterLeaf::Allow; parsedLine.remove(0, 2); + } // parse options QStringList enabledOn, disabledOn; @@ -105,7 +107,10 @@ AdBlockRule *loadRule(const QString &filter) pattern = parsedLine; } } - return nullptr; + + auto *rule = new AdBlockRule(matchType, pattern, action); + rule->mergeOptions(optionsHash); + return rule; } std::optional> parseOption(const QString &option) @@ -162,3 +167,30 @@ std::optional> parseOption(c return std::nullopt; } + +AdBlockRule::AdBlockRule(FilterLeaf::UrlMatchType matchType, const QString& filter, FilterLeaf::Action action) +{ + this->matchType = matchType; + this->m_request = filter; + this->m_isBlocking = (action == FilterLeaf::Block) ? true : false; +} + +void AdBlockRule::mergeOptions(const QHash &options) +{ + this->resourceTypeOptions.unite(options); +} + +bool AdBlockRule::match(const QUrl& requestUrl) const +{ + switch(matchType) { + case FilterLeaf::StringContains: + return requestUrl.toString().contains(m_request); + default: + return false; + } +} + +FilterLeaf::Action AdBlockRule::action() const +{ + return m_isBlocking ? FilterLeaf::Block : FilterLeaf::Allow; +} diff --git a/lib/urlfilter/formats/adblockrule.h b/lib/urlfilter/formats/adblockrule.h index 0f0873c..da7e4fc 100644 --- a/lib/urlfilter/formats/adblockrule.h +++ b/lib/urlfilter/formats/adblockrule.h @@ -15,10 +15,11 @@ class AdBlockRule : public FilterLeaf { public: -// explicit AdBlockRule(const QString &filter); + explicit AdBlockRule(FilterLeaf::UrlMatchType matchType, const QString &filter, FilterLeaf::Action action); + void mergeOptions(const QHash &options); -// bool match(const QUrl &requestUrl) const override; -// FilterLeaf::Action action() const override; + bool match(const QUrl &requestUrl) const override; + FilterLeaf::Action action() const override; }; std::optional> parseOption(const QString &option); diff --git a/src/webengine/filter.h b/src/webengine/filter.h index c610b29..20500f6 100644 --- a/src/webengine/filter.h +++ b/src/webengine/filter.h @@ -9,10 +9,11 @@ #ifndef SMOLBOTE_FILTER_H #define SMOLBOTE_FILTER_H -#include "urlfilter/filterrule.h" #include +#include #include #include +#include #include "urlfilter/filtertree.h" class Configuration; diff --git a/src/webengine/urlinterceptor.h b/src/webengine/urlinterceptor.h index 420a161..62fd683 100644 --- a/src/webengine/urlinterceptor.h +++ b/src/webengine/urlinterceptor.h @@ -9,7 +9,6 @@ #ifndef SMOLBOTE_URLREQUESTINTERCEPTOR_H #define SMOLBOTE_URLREQUESTINTERCEPTOR_H -#include "urlfilter/filterrule.h" #include #include #include diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 4a802d1..8799002 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -27,4 +27,5 @@ add_executable(MatcherBenchmark matcherbenchmark/matcherbenchmark.h ) target_link_libraries(MatcherBenchmark Qt5::Test) -add_test(NAME matcher-benchmark COMMAND MatcherBenchmark WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) +# Adding this benchmark to tests is unnecessary as it doesn't test anything. +#add_test(NAME matcher-benchmark COMMAND MatcherBenchmark WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) diff --git a/test/adblock/adblocktest.cpp b/test/adblock/adblocktest.cpp index b31d965..f4d9ce2 100644 --- a/test/adblock/adblocktest.cpp +++ b/test/adblock/adblocktest.cpp @@ -1,18 +1,14 @@ #include "adblocktest.h" #include -#include "filterrule.h" #include "formats/adblockrule.h" -inline bool check(const std::vector rules, const QUrl &url) +void AdBlockTest::parseRule() { - for(const AdBlockRule &rule : rules) { - if(rule.matchesDomain(qHash(url.host())) && rule.matchesUrl(url)) - return true; - } - return false; + FilterLeaf *rule = loadRule("spamdomain"); + QCOMPARE(rule != nullptr, true); } -void AdBlockTest::parseList() +/*void AdBlockTest::parseList() { std::vector rules; @@ -60,6 +56,6 @@ void AdBlockTest::parseList() QCOMPARE(check(rules, QUrl("http://another.com/banner123")), true); QCOMPARE(check(rules, QUrl("http://another.com/banner321")), true); QCOMPARE(check(rules, QUrl("http://another.com/banners")), false); -} +}*/ QTEST_GUILESS_MAIN(AdBlockTest) diff --git a/test/adblock/adblocktest.h b/test/adblock/adblocktest.h index 95cb7e2..7e58197 100644 --- a/test/adblock/adblocktest.h +++ b/test/adblock/adblocktest.h @@ -2,12 +2,14 @@ #define ADBLOCKTEST_H #include + class AdBlockTest : public QObject { Q_OBJECT private slots: - void parseList(); + void parseRule(); + //void parseList(); }; #endif // ADBLOCKTEST_H -- cgit v1.2.1