diff options
author | Aqua-sama <aqua@iserlohn-fortress.net> | 2019-01-09 19:38:58 +0100 |
---|---|---|
committer | Aqua-sama <aqua@iserlohn-fortress.net> | 2019-01-09 19:38:58 +0100 |
commit | 3d2ae07c455c0e423c64f19e445518427a5684fa (patch) | |
tree | 58f6b47c3db33658a6f2e605fd021f08d1fa9964 /src/webengine/urlinterceptor.cpp | |
parent | Add assorted unfished doc files to repo (diff) | |
download | smolbote-3d2ae07c455c0e423c64f19e445518427a5684fa.tar.xz |
Rewrite lib/urlfilter
- Make HostList and AdBlockList implementations independent from each
other
- Move urlfilter tests to lib/urlfilter
Diffstat (limited to 'src/webengine/urlinterceptor.cpp')
-rw-r--r-- | src/webengine/urlinterceptor.cpp | 53 |
1 files changed, 39 insertions, 14 deletions
diff --git a/src/webengine/urlinterceptor.cpp b/src/webengine/urlinterceptor.cpp index 7e5630f..490dea6 100644 --- a/src/webengine/urlinterceptor.cpp +++ b/src/webengine/urlinterceptor.cpp @@ -7,36 +7,61 @@ */ #include "urlinterceptor.h" -#include "formats/adblockrule.h" -#include <QDir> -#include <QJsonArray> -#include <QJsonDocument> -#include <QTextStream> -#include <boost/algorithm/string.hpp> -#include "configuration.h" -#include "filter.h" #include "webprofile.h" +#include "urlfilter.h" // test DNT on https://browserleaks.com/donottrack -UrlRequestInterceptor::UrlRequestInterceptor(Filter* filter, WebProfile* profile, QObject* parent) +UrlRequestInterceptor::UrlRequestInterceptor(WebProfile* profile, QObject* parent) : QWebEngineUrlRequestInterceptor(parent) { - Q_CHECK_PTR(filter); - m_filter = filter; Q_CHECK_PTR(profile); m_profile = profile; } +void UrlRequestInterceptor::addHttpHeader(const QByteArray &key, const QByteArray &value) +{ + headers.append(qMakePair(key, value)); +} + +void UrlRequestInterceptor::addFilter(UrlFilter *filter) +{ + if(filter != nullptr) + filters.append(filter); +} +void UrlRequestInterceptor::removeFilter(UrlFilter *filter) +{ + if(filter != nullptr) + filters.removeOne(filter); +} + void UrlRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo &info) { - m_filter->filterRequest(info); + for(const auto *filter : filters) { + const auto match = filter->match(info.firstPartyUrl(), info.requestUrl(), info.resourceType()); + + // skip if no match + if(match.first == UrlFilter::NotMatched) + continue; + + else { + if(match.first == UrlFilter::Allow) + info.block(false); + else if(match.first == UrlFilter::Block) + info.block(true); + else if(match.first == UrlFilter::Redirect) + info.redirect(QUrl::fromUserInput(match.second)); + // we found a match, skip the rest + break; + } + } // set headers - for(auto i = m_filter->headers().constBegin(); i != m_filter->headers().constEnd(); ++i) { - info.setHttpHeader(i.key(), i.value()); + for(const auto &header : headers) { + info.setHttpHeader(header.first, header.second); } for(auto i = m_profile->headers().constBegin(); i != m_profile->headers().constEnd(); ++i) { info.setHttpHeader(i.key(), i.value()); } } + |