use resource types in adblocking too

This commit is contained in:
Martin Rotter 2021-05-11 10:08:56 +02:00
parent d9c8246858
commit e59dc591ef
4 changed files with 52 additions and 24 deletions

View File

@ -47,6 +47,7 @@ BlockingResult AdBlockManager::block(const AdblockRequestInfo& request) {
const QString firstparty_url_string = request.firstPartyUrl().toEncoded().toLower(); const QString firstparty_url_string = request.firstPartyUrl().toEncoded().toLower();
const QString url_scheme = request.requestUrl().scheme().toLower(); const QString url_scheme = request.requestUrl().scheme().toLower();
const QPair<QString, QString> url_pair = { firstparty_url_string, url_string }; const QPair<QString, QString> url_pair = { firstparty_url_string, url_string };
const QString url_type = request.resourceType();
if (!canRunOnScheme(url_scheme)) { if (!canRunOnScheme(url_scheme)) {
return { false }; return { false };
@ -62,7 +63,7 @@ BlockingResult AdBlockManager::block(const AdblockRequestInfo& request) {
} }
try { try {
auto result = askServerIfBlocked(firstparty_url_string, url_string); auto result = askServerIfBlocked(firstparty_url_string, url_string, url_type);
m_cacheBlocks.insert(url_pair, result); m_cacheBlocks.insert(url_pair, result);
@ -193,13 +194,14 @@ void AdBlockManager::showDialog() {
AdBlockDialog(qApp->mainFormWidget()).exec(); AdBlockDialog(qApp->mainFormWidget()).exec();
} }
BlockingResult AdBlockManager::askServerIfBlocked(const QString& fp_url, const QString& url) const { BlockingResult AdBlockManager::askServerIfBlocked(const QString& fp_url, const QString& url, const QString& url_type) const {
QJsonObject req_obj; QJsonObject req_obj;
QByteArray out; QByteArray out;
QElapsedTimer tmr; QElapsedTimer tmr;
req_obj["fp_url"] = fp_url; req_obj["fp_url"] = fp_url;
req_obj["url"] = url; req_obj["url"] = url;
req_obj["url_type"] = url_type,
req_obj["filter"] = true; req_obj["filter"] = true;
tmr.start(); tmr.start();

View File

@ -62,7 +62,7 @@ class AdBlockManager : public QObject {
void enabledChanged(bool enabled); void enabledChanged(bool enabled);
private: private:
BlockingResult askServerIfBlocked(const QString& fp_url, const QString& url) const; BlockingResult askServerIfBlocked(const QString& fp_url, const QString& url, const QString& url_type) const;
QString askServerForCosmeticRules(const QString& url) const; QString askServerForCosmeticRules(const QString& url) const;
QProcess* restartServer(int port); QProcess* restartServer(int port);

View File

@ -12,22 +12,14 @@ AdblockRequestInfo::AdblockRequestInfo(const QUrl& url) {
initialize(url); initialize(url);
} }
QWebEngineUrlRequestInfo::ResourceType AdblockRequestInfo::resourceType() const { QString AdblockRequestInfo::resourceType() const {
return m_resourceType; return m_resourceType;
} }
void AdblockRequestInfo::setResourceType(const QWebEngineUrlRequestInfo::ResourceType& resource_type) { void AdblockRequestInfo::setResourceType(const QString& resource_type) {
m_resourceType = resource_type; m_resourceType = resource_type;
} }
QWebEngineUrlRequestInfo::NavigationType AdblockRequestInfo::navigationType() const {
return m_navigationType;
}
void AdblockRequestInfo::setNavigationType(const QWebEngineUrlRequestInfo::NavigationType& navigation_type) {
m_navigationType = navigation_type;
}
QUrl AdblockRequestInfo::requestUrl() const { QUrl AdblockRequestInfo::requestUrl() const {
return m_requestUrl; return m_requestUrl;
} }
@ -54,16 +46,52 @@ void AdblockRequestInfo::setRequestMethod(const QByteArray& request_method) {
void AdblockRequestInfo::initialize(const QWebEngineUrlRequestInfo& webengine_info) { void AdblockRequestInfo::initialize(const QWebEngineUrlRequestInfo& webengine_info) {
setFirstPartyUrl(webengine_info.firstPartyUrl()); setFirstPartyUrl(webengine_info.firstPartyUrl());
setNavigationType(webengine_info.navigationType());
setRequestMethod(webengine_info.requestMethod()); setRequestMethod(webengine_info.requestMethod());
setRequestUrl(webengine_info.requestUrl()); setRequestUrl(webengine_info.requestUrl());
setResourceType(webengine_info.resourceType()); setResourceType(convertResourceType(webengine_info.resourceType()));
} }
void AdblockRequestInfo::initialize(const QUrl& url) { void AdblockRequestInfo::initialize(const QUrl& url) {
setFirstPartyUrl(url); setFirstPartyUrl(url);
setNavigationType(QWebEngineUrlRequestInfo::NavigationType::NavigationTypeTyped);
setRequestMethod(QSL("GET").toLocal8Bit()); setRequestMethod(QSL("GET").toLocal8Bit());
setRequestUrl(url); setRequestUrl(url);
setResourceType(QWebEngineUrlRequestInfo::ResourceType::ResourceTypeMainFrame); setResourceType(convertResourceType(QWebEngineUrlRequestInfo::ResourceType::ResourceTypeMainFrame));
}
QString AdblockRequestInfo::convertResourceType(QWebEngineUrlRequestInfo::ResourceType rt) const {
switch (rt) {
case QWebEngineUrlRequestInfo::ResourceType::ResourceTypeStylesheet:
return QSL("stylesheet");
case QWebEngineUrlRequestInfo::ResourceType::ResourceTypeScript:
return QSL("script");
case QWebEngineUrlRequestInfo::ResourceType::ResourceTypeImage:
return QSL("image");
case QWebEngineUrlRequestInfo::ResourceType::ResourceTypeFontResource:
return QSL("object");
case QWebEngineUrlRequestInfo::ResourceType::ResourceTypeSubResource:
return QSL("object");
case QWebEngineUrlRequestInfo::ResourceType::ResourceTypeObject:
return QSL("object");
case QWebEngineUrlRequestInfo::ResourceType::ResourceTypeMedia:
return QSL("image");
case QWebEngineUrlRequestInfo::ResourceType::ResourceTypeFavicon:
return QSL("image");
case QWebEngineUrlRequestInfo::ResourceType::ResourceTypeXhr:
return QSL("xmlhttprequest");
case QWebEngineUrlRequestInfo::ResourceType::ResourceTypeSubFrame:
case QWebEngineUrlRequestInfo::ResourceType::ResourceTypeMainFrame:
return QSL("main_frame");
default:
return {};
}
} }

View File

@ -10,11 +10,8 @@ class AdblockRequestInfo {
explicit AdblockRequestInfo(const QWebEngineUrlRequestInfo& webengine_info); explicit AdblockRequestInfo(const QWebEngineUrlRequestInfo& webengine_info);
explicit AdblockRequestInfo(const QUrl& url); explicit AdblockRequestInfo(const QUrl& url);
QWebEngineUrlRequestInfo::ResourceType resourceType() const; QString resourceType() const;
void setResourceType(const QWebEngineUrlRequestInfo::ResourceType& resource_type); void setResourceType(const QString& resource_type);
QWebEngineUrlRequestInfo::NavigationType navigationType() const;
void setNavigationType(const QWebEngineUrlRequestInfo::NavigationType& navigation_type);
QUrl requestUrl() const; QUrl requestUrl() const;
void setRequestUrl(const QUrl& request_url); void setRequestUrl(const QUrl& request_url);
@ -29,9 +26,10 @@ class AdblockRequestInfo {
void initialize(const QWebEngineUrlRequestInfo& webengine_info); void initialize(const QWebEngineUrlRequestInfo& webengine_info);
void initialize(const QUrl& url); void initialize(const QUrl& url);
QString convertResourceType(QWebEngineUrlRequestInfo::ResourceType rt) const;
private: private:
QWebEngineUrlRequestInfo::ResourceType m_resourceType; QString m_resourceType;
QWebEngineUrlRequestInfo::NavigationType m_navigationType;
QUrl m_requestUrl; QUrl m_requestUrl;
QUrl m_firstPartyUrl; QUrl m_firstPartyUrl;
QUrl m_initiator; QUrl m_initiator;