aboutsummaryrefslogtreecommitdiff
path: root/src/webengine/urlinterceptor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/webengine/urlinterceptor.cpp')
-rw-r--r--src/webengine/urlinterceptor.cpp53
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());
}
}
+