X-Git-Url: https://gitweb.stoutner.com/?a=blobdiff_plain;f=src%2Finterceptors%2FUrlRequestInterceptor.cpp;h=634889867ad386464e5472b1d01c5ff1ccca6075;hb=HEAD;hp=83f104595ac8ab67e904d04b48b769b3c05556f8;hpb=15219459baed09d03d17a12c72302595c135fd53;p=PrivacyBrowserPC.git diff --git a/src/interceptors/UrlRequestInterceptor.cpp b/src/interceptors/UrlRequestInterceptor.cpp index 83f1045..0a8c04f 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,53 +19,64 @@ // Application headers. #include "UrlRequestInterceptor.h" +#include "GlobalVariables.h" +#include "helpers/FilterListHelper.h" +#include "structs/RequestStruct.h" // KDE Framework headers. #include -// Qt framework headers. -#include - // Construct the class. -UrlRequestInterceptor::UrlRequestInterceptor(QObject *parentObjectPointer) : QWebEngineUrlRequestInterceptor(parentObjectPointer) {} +UrlRequestInterceptor::UrlRequestInterceptor(PrivacyWebEngineView *privacyWebEngineViewPointer) : + QWebEngineUrlRequestInterceptor(privacyWebEngineViewPointer), privacyWebEngineViewPointer(privacyWebEngineViewPointer) {} void UrlRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo &urlRequestInfo) { - // Handle the request according to the resource type. - switch (urlRequestInfo.resourceType()) - { - // A naughty HTTP ping request. - case QWebEngineUrlRequestInfo::ResourceTypePing: + // 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(); + requestStructPointer->webPageUrlString = urlRequestInfo.firstPartyUrl().toString(); + + // Check the filter lists. + bool continueProcessing = globalFilterListHelperPointer->checkFilterLists(privacyWebEngineViewPointer, urlRequestInfo, requestStructPointer); + + // Further process the request if it hasn't already been handled. + if (continueProcessing) { + // Handle the request according to the resource type. + switch (urlRequestInfo.resourceType()) { - // Block HTTP ping requests. - urlRequestInfo.block(true); - - // Instantiate an HTTP ping blocked message box. - QMessageBox httpPingBlockedMessageBox; - - // Set the icon. - httpPingBlockedMessageBox.setIcon(QMessageBox::Information); - - // Set the window title. - httpPingBlockedMessageBox.setWindowTitle(i18nc("HTTP Ping blocked dialog title", "HTTP Ping Blocked")); + // A naughty HTTP ping request. + case QWebEngineUrlRequestInfo::ResourceTypePing: + { + // Block the HTTP ping request. + urlRequestInfo.block(true); - // Set the text. - httpPingBlockedMessageBox.setText(i18nc("HTTP Ping blocked dialog text", "This request has been blocked because it sends a naughty HTTP ping to %1.", - urlRequestInfo.requestUrl().toString())); + // Mark the request struct as blocked. + requestStructPointer->dispositionInt = FilterListHelper::BLOCKED; - // Set the standard button. - httpPingBlockedMessageBox.setStandardButtons(QMessageBox::Ok); + // Mark the ping as blocked by the default behavior. + requestStructPointer->filterListTitle = i18nc("Default HTTP ping blocking", "Default blocking of all HTTP ping requests."); - // Display the message box. - httpPingBlockedMessageBox.exec(); + // Display the HTTP Ping blocked dialog. + emit displayHttpPingDialog(urlRequestInfo.requestUrl().toString()); - break; - } + break; + } - default: - { - // Do nothing. - break; + default: + { + // Do nothing. + break; + } } } @@ -97,4 +108,7 @@ void UrlRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo &urlReques // Do nothing. break; } + + // Send the request struct to the privacy WebEngine view. + emit requestProcessed(requestStructPointer); }