X-Git-Url: https://gitweb.stoutner.com/?a=blobdiff_plain;f=src%2Finterceptors%2FUrlRequestInterceptor.cpp;h=5f9a8cc3a312bbc0759c5d57797edb84984acecb;hb=refs%2Fheads%2Fmaster;hp=d4059285576e1c469ac76178fb50fcb912073e4a;hpb=2facce32fb6d97b52a7dc148044cae4b36a65d4c;p=PrivacyBrowserPC.git diff --git a/src/interceptors/UrlRequestInterceptor.cpp b/src/interceptors/UrlRequestInterceptor.cpp index d405928..3b47e7e 100644 --- a/src/interceptors/UrlRequestInterceptor.cpp +++ b/src/interceptors/UrlRequestInterceptor.cpp @@ -1,7 +1,7 @@ /* - * Copyright © 2022 Soren Stoutner . + * Copyright 2022-2024 Soren Stoutner . * - * This file is part of Privacy Browser PC . + * This file is part of Privacy Browser PC . * * Privacy Browser PC is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -19,58 +19,91 @@ // Application headers. #include "UrlRequestInterceptor.h" +#include "GlobalVariables.h" +#include "helpers/FilterListHelper.h" +#include "structs/RequestStruct.h" + +// KDE Framework headers. +#include // Construct the class. UrlRequestInterceptor::UrlRequestInterceptor(QObject *parentObjectPointer) : QWebEngineUrlRequestInterceptor(parentObjectPointer) {} void UrlRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo &urlRequestInfo) { - // Handle the request according to the navigation type. - switch (urlRequestInfo.navigationType()) - { - case QWebEngineUrlRequestInfo::NavigationTypeLink: - case QWebEngineUrlRequestInfo::NavigationTypeTyped: - case QWebEngineUrlRequestInfo::NavigationTypeBackForward: - case QWebEngineUrlRequestInfo::NavigationTypeRedirect: + // Clear the requests list if a main frame resource is being loaded. + if (urlRequestInfo.resourceType() == QWebEngineUrlRequestInfo::ResourceTypeMainFrame) + emit newMainFrameResource(); + + // Create a requests struct. + RequestStruct *requestStructPointer = new RequestStruct; + + // Store the basic request information. + requestStructPointer->navigationTypeInt = urlRequestInfo.navigationType(); + requestStructPointer->requestMethodString = urlRequestInfo.requestMethod(); + requestStructPointer->resourceTypeInt = urlRequestInfo.resourceType(); + requestStructPointer->urlString = urlRequestInfo.requestUrl().toString(); + + // Check the filter lists. + bool requestNotHandled = globalFilterListHelperPointer->checkFilterLists(urlRequestInfo, requestStructPointer); + + // Further process the request if it hasn't already been handled. + if (requestNotHandled) { + // Handle the request according to the resource type. + switch (urlRequestInfo.resourceType()) { - // Only check the hosts if the main URL is changing. - if (urlRequestInfo.resourceType() == QWebEngineUrlRequestInfo::ResourceTypeMainFrame) + // A naughty HTTP ping request. + case QWebEngineUrlRequestInfo::ResourceTypePing: { - // Get the hosts. - QString requestingHost = urlRequestInfo.initiator().host(); - QString requestedHost = urlRequestInfo.requestUrl().host(); + // Block the HTTP ping request. + urlRequestInfo.block(true); - // Reapply the domain settings if the host is changing. - if (requestingHost != requestedHost) - { - emit applyDomainSettings(requestedHost); - } + // Mark the request struct as blocked. + requestStructPointer->dispositionInt = FilterListHelper::BLOCKED; + + // Display the HTTP Ping blocked dialog. + emit displayHttpPingDialog(urlRequestInfo.requestUrl().toString()); + + break; } - break; + default: + { + // Do nothing. + break; + } } - default: - // Do nothing. - break; - } - - // Handle the request according to the resource type. - switch (urlRequestInfo.resourceType()) - { - // A naughty HTTP ping request. - case QWebEngineUrlRequestInfo::ResourceTypePing: + // Handle the request according to the navigation type. + switch (urlRequestInfo.navigationType()) { - // Block HTTP ping requests. - urlRequestInfo.block(true); + case QWebEngineUrlRequestInfo::NavigationTypeLink: + case QWebEngineUrlRequestInfo::NavigationTypeTyped: + case QWebEngineUrlRequestInfo::NavigationTypeBackForward: + // case QWebEngineUrlRequestInfo::NavigationTypeReload: This can be uncommented once https://redmine.stoutner.com/issues/821 has been fixed. + case QWebEngineUrlRequestInfo::NavigationTypeRedirect: + { + // Only check the hosts if the main URL is changing. + if (urlRequestInfo.resourceType() == QWebEngineUrlRequestInfo::ResourceTypeMainFrame) + { + // Get the hosts. + QString requestingHost = urlRequestInfo.initiator().host(); + QString requestedHost = urlRequestInfo.requestUrl().host(); - break; - } + // Reapply the domain settings if the host is changing. + if (requestingHost != requestedHost) + emit applyDomainSettings(requestedHost); + } - default: - { - // Do nothing. - break; + break; + } + + default: + // Do nothing. + break; } } + + // Send the request struct to the privacy WebEngine view. + emit requestProcessed(requestStructPointer); }