Rename Local Storage to DOM Storage. https://redmine.stoutner.com/issues/852
[PrivacyBrowserPC.git] / src / views / BrowserView.cpp
index 82e7e3ee0d0614d4e32e78e8984a2d6da3a8f59c..777d12efcda177e1ed877a615cd03938045625f0 100644 (file)
 // Initialize the public static variables.
 QString BrowserView::webEngineDefaultUserAgent = QStringLiteral("");
 
+// Construct the class.
 BrowserView::BrowserView(QWidget *parent) : QWidget(parent)
 {
+    // Initialize the variables.
+    privacyWebEngineListPointer = new QList<PrivacyWebEngine*>;
+
     // Instantiate the browser view UI.
     Ui::BrowserView browserViewUi;
 
@@ -59,6 +63,33 @@ BrowserView::BrowserView(QWidget *parent) : QWidget(parent)
     webEngineSettingsPointer = webEngineViewPointer->settings();
     webEngineCookieStorePointer = webEngineProfilePointer->cookieStore();
 
+    // Initialize the current privacy web engine pointer.
+    currentPrivacyWebEnginePointer = new PrivacyWebEngine(webEngineViewPointer);
+
+    // Populate the privacy web engine list.
+    privacyWebEngineListPointer->append(currentPrivacyWebEnginePointer);
+
+    // Set the cookie filter.
+    webEngineCookieStorePointer->setCookieFilter([this](const QWebEngineCookieStore::FilterRequest &filterRequest)
+    {
+        // qDebug() << "Cookie page URL:  " << filterRequest.firstPartyUrl << ", Cookie URL:  " << filterRequest.origin << ",  Is third-party:  " << filterRequest.thirdParty;
+
+        // Block all third party local storage requests, including the sneaky ones that don't register a first party URL.
+        if (filterRequest.thirdParty || (filterRequest.firstPartyUrl == QStringLiteral("")))
+            return false;
+
+        // Check each tab to see if this local storage request should be allowed.
+        for (PrivacyWebEngine *privacyWebEnginePointer : *privacyWebEngineListPointer)
+        {
+            // Allow this local storage request if it comes from a tab with local storage enabled.
+            if (privacyWebEnginePointer->cookiesEnabled && (webEngineViewPointer->url().host() == filterRequest.firstPartyUrl.host()))
+                return true;
+        }
+
+        // Block any remaining local storage requests.
+        return false;
+    });
+
     // Process cookie changes.
     connect(webEngineCookieStorePointer, SIGNAL(cookieAdded(QNetworkCookie)), this, SLOT(cookieAdded(QNetworkCookie)));
     connect(webEngineCookieStorePointer, SIGNAL(cookieRemoved(QNetworkCookie)), this, SLOT(cookieRemoved(QNetworkCookie)));
@@ -185,7 +216,7 @@ void BrowserView::applyDomainSettings(const QString &hostname, const bool reload
             case (DomainsDatabaseHelper::SYSTEM_DEFAULT):
             {
                 // Set the default JavaScript status.
-                webEngineSettingsPointer->setAttribute(QWebEngineSettings::JavascriptEnabled, Settings::javaScript());
+                webEngineSettingsPointer->setAttribute(QWebEngineSettings::JavascriptEnabled, Settings::javaScriptEnabled());
 
                 break;
             }
@@ -207,20 +238,23 @@ void BrowserView::applyDomainSettings(const QString &hostname, const bool reload
             }
         }
 
-        // Set local storage.
-        switch (domainRecord.field(DomainsDatabaseHelper::LOCAL_STORAGE).value().toInt())
+        // Set the cookie status.  TODO.
+        currentPrivacyWebEnginePointer->cookiesEnabled = Settings::cookiesEnabled();
+
+        // Set DOM storage.
+        switch (domainRecord.field(DomainsDatabaseHelper::DOM_STORAGE).value().toInt())
         {
             case (DomainsDatabaseHelper::SYSTEM_DEFAULT):
             {
-                // Set the default local storage status.
-                webEngineSettingsPointer->setAttribute(QWebEngineSettings::LocalStorageEnabled, Settings::localStorage());
+                // Set the default DOM storage status.
+                webEngineSettingsPointer->setAttribute(QWebEngineSettings::LocalStorageEnabled, Settings::domStorageEnabled());
 
                 break;
             }
 
             case (DomainsDatabaseHelper::DISABLED):
             {
-                // Disable local storage.
+                // Disable DOM storage.
                 webEngineSettingsPointer->setAttribute(QWebEngineSettings::LocalStorageEnabled, false);
 
                 break;
@@ -228,7 +262,7 @@ void BrowserView::applyDomainSettings(const QString &hostname, const bool reload
 
             case (DomainsDatabaseHelper::ENABLED):
             {
-                // Enable local storage.
+                // Enable DOM storage.
                 webEngineSettingsPointer->setAttribute(QWebEngineSettings::LocalStorageEnabled, true);
 
                 break;
@@ -259,10 +293,13 @@ void BrowserView::applyDomainSettings(const QString &hostname, const bool reload
     else  // The hostname does not have domain settings.
     {
         // Set the JavaScript status.
-        webEngineSettingsPointer->setAttribute(QWebEngineSettings::JavascriptEnabled, Settings::javaScript());
+        webEngineSettingsPointer->setAttribute(QWebEngineSettings::JavascriptEnabled, Settings::javaScriptEnabled());
+
+        // Set the cookie status.
+        currentPrivacyWebEnginePointer->cookiesEnabled = Settings::cookiesEnabled();
 
-        // Set local storage.
-        webEngineSettingsPointer->setAttribute(QWebEngineSettings::LocalStorageEnabled, Settings::localStorage());
+        // Set DOM storage.
+        webEngineSettingsPointer->setAttribute(QWebEngineSettings::LocalStorageEnabled, Settings::domStorageEnabled());
 
         // Set the user agent.
         webEngineProfilePointer->setHttpUserAgent(UserAgentHelper::getUserAgentFromDatabaseName(Settings::userAgent()));
@@ -279,7 +316,8 @@ void BrowserView::applyDomainSettings(const QString &hostname, const bool reload
 
     // Emit the update actions signals.
     emit updateJavaScriptAction(webEngineSettingsPointer->testAttribute(QWebEngineSettings::JavascriptEnabled));
-    emit updateLocalStorageAction(webEngineSettingsPointer->testAttribute(QWebEngineSettings::LocalStorageEnabled));
+    emit updateCookiesAction(currentPrivacyWebEnginePointer->cookiesEnabled);
+    emit updateDomStorageAction(webEngineSettingsPointer->testAttribute(QWebEngineSettings::LocalStorageEnabled));
     emit updateUserAgentActions(webEngineProfilePointer->httpUserAgent());
     emit updateZoomFactorAction(webEngineViewPointer->zoomFactor());
 
@@ -473,6 +511,18 @@ void BrowserView::refresh() const
     webEngineViewPointer->reload();
 }
 
+void BrowserView::toggleCookies()
+{
+    // Toggle cookies.
+    currentPrivacyWebEnginePointer->cookiesEnabled = !currentPrivacyWebEnginePointer->cookiesEnabled;
+
+    // Update the cookies icon.
+    emit updateCookiesAction(currentPrivacyWebEnginePointer->cookiesEnabled);
+
+    // Reload the website.
+    webEngineViewPointer->reload();
+}
+
 void BrowserView::toggleJavaScript() const
 {
     // Toggle JavaScript.
@@ -485,13 +535,13 @@ void BrowserView::toggleJavaScript() const
     webEngineViewPointer->reload();
 }
 
-void BrowserView::toggleLocalStorage() const
+void BrowserView::toggleDomStorage() const
 {
-    // Toggle local storage.
+    // Toggle DOM storage.
     webEngineSettingsPointer->setAttribute(QWebEngineSettings::LocalStorageEnabled, !webEngineSettingsPointer->testAttribute(QWebEngineSettings::LocalStorageEnabled));
 
-    // Update the local storage icon.
-    emit updateLocalStorageAction(webEngineSettingsPointer->testAttribute(QWebEngineSettings::LocalStorageEnabled));
+    // Update the DOM storage action icon.
+    emit updateDomStorageAction(webEngineSettingsPointer->testAttribute(QWebEngineSettings::LocalStorageEnabled));
 
     // Reload the website.
     webEngineViewPointer->reload();