]> gitweb.stoutner.com Git - PrivacyBrowserPC.git/blobdiff - src/interceptors/UrlRequestInterceptor.cpp
Partial filter list implementation.
[PrivacyBrowserPC.git] / src / interceptors / UrlRequestInterceptor.cpp
index 83f104595ac8ab67e904d04b48b769b3c05556f8..3b47e7e052d41066d4d23157982940bb9e89b5d4 100644 (file)
@@ -1,7 +1,7 @@
 /*
- * Copyright © 2022 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2022-2024 Soren Stoutner <soren@stoutner.com>.
  *
- * This file is part of Privacy Browser PC <https://www.stoutner.com/privacy-browser-pc>.
+ * This file is part of Privacy Browser PC <https://www.stoutner.com/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
 
 // Application headers.
 #include "UrlRequestInterceptor.h"
+#include "GlobalVariables.h"
+#include "helpers/FilterListHelper.h"
+#include "structs/RequestStruct.h"
 
 // KDE Framework headers.
 #include <KLocalizedString>
 
-// Qt framework headers.
-#include <QMessageBox>
-
 // Construct the class.
 UrlRequestInterceptor::UrlRequestInterceptor(QObject *parentObjectPointer) : QWebEngineUrlRequestInterceptor(parentObjectPointer) {}
 
 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();
+
+    // 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())
         {
-            // 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"));
-
-            // 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()));
+            // A naughty HTTP ping request.
+            case QWebEngineUrlRequestInfo::ResourceTypePing:
+            {
+                // Block the HTTP ping request.
+                urlRequestInfo.block(true);
 
-            // Set the standard button.
-            httpPingBlockedMessageBox.setStandardButtons(QMessageBox::Ok);
+                // Mark the request struct as blocked.
+                requestStructPointer->dispositionInt = FilterListHelper::BLOCKED;
 
-            // 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;
+            }
         }
-    }
 
-    // Handle the request according to the navigation type.
-    switch (urlRequestInfo.navigationType())
-    {
-        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:
+        // Handle the request according to the navigation type.
+        switch (urlRequestInfo.navigationType())
         {
-            // Only check the hosts if the main URL is changing.
-            if (urlRequestInfo.resourceType() == QWebEngineUrlRequestInfo::ResourceTypeMainFrame)
+            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:
             {
-                // Get the hosts.
-                QString requestingHost = urlRequestInfo.initiator().host();
-                QString requestedHost = urlRequestInfo.requestUrl().host();
-
-                // Reapply the domain settings if the host is changing.
-                if (requestingHost != requestedHost)
-                    emit applyDomainSettings(requestedHost);
+                // 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();
+
+                    // Reapply the domain settings if the host is changing.
+                    if (requestingHost != requestedHost)
+                        emit applyDomainSettings(requestedHost);
+                }
+
+                break;
             }
 
-            break;
+            default:
+                // Do nothing.
+                break;
         }
-
-        default:
-            // Do nothing.
-            break;
     }
+
+    // Send the request struct to the privacy WebEngine view.
+    emit requestProcessed(requestStructPointer);
 }