X-Git-Url: https://gitweb.stoutner.com/?a=blobdiff_plain;f=src%2Fwidgets%2FPrivacyWebEngineView.cpp;h=10a3a47fcf3f7124a194ce4c62f31b273c5eeaac;hb=HEAD;hp=42c331fec5340447ed05da6433a6475db30f7de4;hpb=ce90749b5fc2c4a3fcee6daee60c0d6e2aa0e1d6;p=PrivacyBrowserPC.git diff --git a/src/widgets/PrivacyWebEngineView.cpp b/src/widgets/PrivacyWebEngineView.cpp index 42c331f..6314f2b 100644 --- a/src/widgets/PrivacyWebEngineView.cpp +++ b/src/widgets/PrivacyWebEngineView.cpp @@ -1,7 +1,7 @@ /* * 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,11 +19,13 @@ // Application headers. #include "PrivacyWebEngineView.h" +#include "PrivacyWebEnginePage.h" #include "Settings.h" #include "ui_HttpAuthenticationDialog.h" #include "databases/CookiesDatabase.h" #include "databases/DomainsDatabase.h" #include "dialogs/HttpAuthenticationDialog.h" +#include "helpers/FilterListHelper.h" #include "interceptors/UrlRequestInterceptor.h" #include "windows/BrowserWindow.h" @@ -38,13 +40,13 @@ PrivacyWebEngineView::PrivacyWebEngineView(QWidget *parentWidgetPointer) : QWebE webEngineProfilePointer = new QWebEngineProfile(QLatin1String("")); // Create a WebEngine page. - QWebEnginePage *webEnginePagePointer = new QWebEnginePage(webEngineProfilePointer); + PrivacyWebEnginePage *privacyWebEnginePagePointer = new PrivacyWebEnginePage(webEngineProfilePointer); // Set the WebEngine page. - setPage(webEnginePagePointer); + setPage(privacyWebEnginePagePointer); // Get handles for the various aspects of the WebEngine. - webEngineSettingsPointer = webEnginePagePointer->settings(); + webEngineSettingsPointer = privacyWebEnginePagePointer->settings(); // Instantiate the URL request interceptor. UrlRequestInterceptor *urlRequestInterceptorPointer = new UrlRequestInterceptor(this); @@ -52,14 +54,14 @@ PrivacyWebEngineView::PrivacyWebEngineView(QWidget *parentWidgetPointer) : QWebE // Set the URL request interceptor. webEngineProfilePointer->setUrlRequestInterceptor(urlRequestInterceptorPointer); - // Reapply the domain settings when the host changes. + // Connect the URL request interceptor signals. connect(urlRequestInterceptorPointer, SIGNAL(applyDomainSettings(const QString&)), this, SLOT(applyDomainSettingsWithoutReloading(const QString&))); - - // Display HTTP Ping blocked dialogs. + connect(urlRequestInterceptorPointer, SIGNAL(newMainFrameResource()), this, SLOT(clearRequestsList())); connect(urlRequestInterceptorPointer, SIGNAL(displayHttpPingDialog(const QString&)), this, SLOT(displayHttpPingDialog(const QString&))); + connect(urlRequestInterceptorPointer, SIGNAL(requestProcessed(RequestStruct*)), this, SLOT(storeRequest(RequestStruct*))); // Handle HTTP authentication requests. - connect(webEnginePagePointer, SIGNAL(authenticationRequired(const QUrl&, QAuthenticator*)), this, SLOT(handleAuthenticationRequest(const QUrl&, QAuthenticator*))); + connect(privacyWebEnginePagePointer, SIGNAL(authenticationRequired(const QUrl&, QAuthenticator*)), this, SLOT(handleAuthenticationRequest(const QUrl&, QAuthenticator*))); } void PrivacyWebEngineView::addCookieToList(const QNetworkCookie &cookie) const @@ -74,7 +76,7 @@ void PrivacyWebEngineView::addCookieToList(const QNetworkCookie &cookie) const CookiesDatabase::updateCookie(cookie); // Update the cookies action. - emit updateCookiesAction(cookieListPointer->size()); + emit numberOfCookiesChanged(cookieListPointer->size()); } void PrivacyWebEngineView::applyDomainSettingsWithoutReloading(const QString &hostname) @@ -97,89 +99,69 @@ void PrivacyWebEngineView::applyDomainSettings(const QString &hostname, const bo // Set the JavaScript status. switch (domainQuery.value(DomainsDatabase::JAVASCRIPT).toInt()) { - // Set the default JavaScript status. - case (DomainsDatabase::SYSTEM_DEFAULT): - { - webEngineSettingsPointer->setAttribute(QWebEngineSettings::JavascriptEnabled, Settings::javaScriptEnabled()); - - break; - } - - // Enable JavaScript. - case (DomainsDatabase::ENABLED): - { - webEngineSettingsPointer->setAttribute(QWebEngineSettings::JavascriptEnabled, true); - - break; - } - - // Disable JavaScript. - case (DomainsDatabase::DISABLED): - { - webEngineSettingsPointer->setAttribute(QWebEngineSettings::JavascriptEnabled, false); - - break; - } + case (DomainsDatabase::SYSTEM_DEFAULT): webEngineSettingsPointer->setAttribute(QWebEngineSettings::JavascriptEnabled, Settings::javaScriptEnabled()); break; + case (DomainsDatabase::ENABLED): webEngineSettingsPointer->setAttribute(QWebEngineSettings::JavascriptEnabled, true); break; + case (DomainsDatabase::DISABLED): webEngineSettingsPointer->setAttribute(QWebEngineSettings::JavascriptEnabled, false); break; } // Set the local storage status. switch (domainQuery.value(DomainsDatabase::LOCAL_STORAGE).toInt()) { - // Set the default local storage status. - case (DomainsDatabase::SYSTEM_DEFAULT): - { - localStorageEnabled = Settings::localStorageEnabled(); - - break; - } - - // Enable local storage. - case (DomainsDatabase::ENABLED): - { - localStorageEnabled = true; - - break; - } - - // Disable local storage. - case (DomainsDatabase::DISABLED): - { - localStorageEnabled = false; - - break; - } + case (DomainsDatabase::SYSTEM_DEFAULT): localStorageEnabled = Settings::localStorageEnabled(); break; + case (DomainsDatabase::ENABLED): localStorageEnabled = true; break; + case (DomainsDatabase::DISABLED): localStorageEnabled = false; break; } - // Set the DOM storage status. + // Set the DOM storage status. QWebEngineSettings confusingly calls this local storage. switch (domainQuery.value(DomainsDatabase::DOM_STORAGE).toInt()) { - // Set the default DOM storage status. QWebEngineSettings confusingly calls this local storage. - case (DomainsDatabase::SYSTEM_DEFAULT): - { - webEngineSettingsPointer->setAttribute(QWebEngineSettings::LocalStorageEnabled, Settings::domStorageEnabled()); + case (DomainsDatabase::SYSTEM_DEFAULT): webEngineSettingsPointer->setAttribute(QWebEngineSettings::LocalStorageEnabled, Settings::domStorageEnabled()); break; + case (DomainsDatabase::ENABLED): webEngineSettingsPointer->setAttribute(QWebEngineSettings::LocalStorageEnabled, true); break; + case (DomainsDatabase::DISABLED): webEngineSettingsPointer->setAttribute(QWebEngineSettings::LocalStorageEnabled, false); break; + } - break; - } + // Set the user agent. + webEngineProfilePointer->setHttpUserAgent(UserAgentHelper::getResultingDomainSettingsUserAgent(domainQuery.value(DomainsDatabase::USER_AGENT).toString())); - // Enable DOM storage. QWebEngineSettings confusingly calls this local storage. - case (DomainsDatabase::ENABLED): - { - webEngineSettingsPointer->setAttribute(QWebEngineSettings::LocalStorageEnabled, true); + // Set the UltraPrivacy status. + switch (domainQuery.value(DomainsDatabase::ULTRAPRIVACY).toInt()) + { + case (DomainsDatabase::SYSTEM_DEFAULT): ultraPrivacyEnabled = Settings::ultraPrivacyEnabled(); break; + case (DomainsDatabase::ENABLED): ultraPrivacyEnabled = true; break; + case (DomainsDatabase::DISABLED): ultraPrivacyEnabled = false; break; + } - break; - } + // Set the UltraList status. + switch (domainQuery.value(DomainsDatabase::ULTRALIST).toInt()) + { + case (DomainsDatabase::SYSTEM_DEFAULT): ultraListEnabled = Settings::ultraListEnabled(); break; + case (DomainsDatabase::ENABLED): ultraListEnabled = true; break; + case (DomainsDatabase::DISABLED): ultraListEnabled = false; break; + } - // Disable DOM storage. QWebEngineSettings confusingly calls this local storage. - case (DomainsDatabase::DISABLED): - { - webEngineSettingsPointer->setAttribute(QWebEngineSettings::LocalStorageEnabled, false); + // Set the EasyPrivacy status. + switch (domainQuery.value(DomainsDatabase::EASYPRIVACY).toInt()) + { + case (DomainsDatabase::SYSTEM_DEFAULT): easyPrivacyEnabled = Settings::easyPrivacyEnabled(); break; + case (DomainsDatabase::ENABLED): easyPrivacyEnabled = true; break; + case (DomainsDatabase::DISABLED): easyPrivacyEnabled = false; break; + } - break; - } + // Set the EasyList status. + switch (domainQuery.value(DomainsDatabase::EASYLIST).toInt()) + { + case (DomainsDatabase::SYSTEM_DEFAULT): easyListEnabled = Settings::easyListEnabled(); break; + case (DomainsDatabase::ENABLED): easyListEnabled = true; break; + case (DomainsDatabase::DISABLED): easyListEnabled = false; break; } - // Set the user agent. - webEngineProfilePointer->setHttpUserAgent(UserAgentHelper::getResultingDomainSettingsUserAgent(domainQuery.value(DomainsDatabase::USER_AGENT).toString())); + // Set the Fanboy's Annoyance List status. + switch (domainQuery.value(DomainsDatabase::FANBOYS_ANNOYANCE_LIST).toInt()) + { + case (DomainsDatabase::SYSTEM_DEFAULT): fanboysAnnoyanceListEnabled = Settings::fanboysAnnoyanceListEnabled(); break; + case (DomainsDatabase::ENABLED): fanboysAnnoyanceListEnabled = true; break; + case (DomainsDatabase::DISABLED): fanboysAnnoyanceListEnabled = false; break; + } // Check if a custom zoom factor is set. if (domainQuery.value(DomainsDatabase::ZOOM_FACTOR).toInt()) @@ -210,6 +192,13 @@ void PrivacyWebEngineView::applyDomainSettings(const QString &hostname, const bo // Set the user agent. webEngineProfilePointer->setHttpUserAgent(UserAgentHelper::getUserAgentFromDatabaseName(Settings::userAgent())); + // Set the status for each filter list. + ultraPrivacyEnabled = Settings::ultraPrivacyEnabled(); + ultraListEnabled = Settings::ultraListEnabled(); + easyPrivacyEnabled = Settings::easyPrivacyEnabled(); + easyListEnabled = Settings::easyListEnabled(); + fanboysAnnoyanceListEnabled = Settings::fanboysAnnoyanceListEnabled(); + // Store the zoom factor. defaultZoomFactor = Settings::zoomFactor(); } @@ -228,6 +217,23 @@ void PrivacyWebEngineView::applyDomainSettings(const QString &hostname, const bo emit updateUi(this); } +void PrivacyWebEngineView::clearRequestsList() +{ + // Reset the number of blocked requests. + blockedRequestsVector[ULTRAPRIVACY] = 0; + blockedRequestsVector[ULTRALIST] = 0; + blockedRequestsVector[EASYPRIVACY] = 0; + blockedRequestsVector[EASYLIST] = 0; + blockedRequestsVector[FANBOYS_ANNOYANCE_LIST] = 0; + blockedRequestsVector[TOTAL] = 0; + + // Clear the requests list. + requestsListPointer->clear(); + + // Update the blocked requests action. + emit(requestBlocked(blockedRequestsVector)); +} + void PrivacyWebEngineView::contextMenuEvent(QContextMenuEvent *contextMenuEvent) { // Get a handle for the QWebEnginePage *webEnginePagePointer = page(); @@ -329,5 +335,33 @@ void PrivacyWebEngineView::removeCookieFromList(const QNetworkCookie &cookie) co cookieListPointer->remove(cookie); // Update the cookies action. - emit updateCookiesAction(cookieListPointer->size()); + emit numberOfCookiesChanged(cookieListPointer->size()); +} + +void PrivacyWebEngineView::storeRequest(RequestStruct *requestStructPointer) +{ + // Store the request struct in the list. + requestsListPointer->append(requestStructPointer); + + // Track blocked requests. + if (requestStructPointer->dispositionInt == FilterListHelper::BLOCKED) + { + // Update the individual filter list block counters. + if (requestStructPointer->filterListTitle == QLatin1String("UltraPrivacy")) + ++blockedRequestsVector[ULTRAPRIVACY]; + else if (requestStructPointer->filterListTitle == QLatin1String("UltraList")) + ++blockedRequestsVector[ULTRALIST]; + else if (requestStructPointer->filterListTitle == QLatin1String("EasyPrivacy")) + ++blockedRequestsVector[EASYPRIVACY]; + else if (requestStructPointer->filterListTitle == QLatin1String("EasyList")) + ++blockedRequestsVector[EASYLIST]; + else if (requestStructPointer->filterListTitle == QLatin1String("Fanboy's Annoyance List")) + ++blockedRequestsVector[FANBOYS_ANNOYANCE_LIST]; + + // Update the total requests blocked counter. + ++blockedRequestsVector[TOTAL]; + + // Update the blocked requests action. + emit(requestBlocked(blockedRequestsVector)); + } }