]> gitweb.stoutner.com Git - PrivacyBrowserPC.git/commitdiff
Ghost DOM storage in Settings and Domain Settings unless both JavaScript and local...
authorSoren Stoutner <soren@stoutner.com>
Fri, 12 Jan 2024 00:23:12 +0000 (17:23 -0700)
committerSoren Stoutner <soren@stoutner.com>
Fri, 12 Jan 2024 00:23:12 +0000 (17:23 -0700)
src/dialogs/DomainSettingsDialog.cpp
src/dialogs/DomainSettingsDialog.h
src/uis/SettingsPrivacy.ui
src/windows/BrowserWindow.cpp

index 59d7bdb073628886be1e964237a208df26f03adc..13791f0be162b28f2517a7d9e16f7aa0667efc91 100644 (file)
@@ -126,9 +126,6 @@ DomainSettingsDialog::DomainSettingsDialog(const int &startType, const QString &
             // Select the first entry in the list view.
             domainsListViewPointer->setCurrentIndex(domainsTableModelPointer->index(0, domainsTableModelPointer->fieldIndex(DomainsDatabase::DOMAIN_NAME)));
 
-            // Populate the domain settings.
-            domainSelected(domainsSelectionModelPointer->currentIndex());
-
             break;
         }
 
@@ -141,13 +138,13 @@ DomainSettingsDialog::DomainSettingsDialog(const int &startType, const QString &
             // Move to the new domain.
             domainsListViewPointer->setCurrentIndex(newDomainIndex[0]);
 
-            // Populate the domain settings.
-            domainSelected(domainsSelectionModelPointer->currentIndex());
-
             break;
         }
     }
 
+    // Populate the domain settings.
+    domainSelected(domainsSelectionModelPointer->currentIndex());
+
     // Handle clicks on the domains.
     connect(domainsListViewPointer, SIGNAL(activated(QModelIndex)), this, SLOT(domainSelected(QModelIndex)));
 
@@ -168,6 +165,9 @@ DomainSettingsDialog::DomainSettingsDialog(const int &startType, const QString &
     connect(applyButtonPointer, SIGNAL(clicked()), this, SLOT(apply()));
     connect(dialogButtonBoxPointer, SIGNAL(rejected()), this, SLOT(cancel()));
 
+    // Update the DOM storage status.
+    updateDomStorageStatus();
+
     // Update the UI.
     updateUi();
 }
@@ -307,6 +307,9 @@ void DomainSettingsDialog::javaScriptChanged(const int &newIndex) const
     // Populate the JavaScript label.
     populateJavaScriptLabel();
 
+    // Update the DOM storage status.
+    updateDomStorageStatus();
+
     // Update the UI.
     updateUi();
 }
@@ -319,6 +322,9 @@ void DomainSettingsDialog::localStorageChanged(const int &newIndex) const
     // Populate the local storage label.
     populateLocalStorageLabel();
 
+    // Update the DOM storage status.
+    updateDomStorageStatus();
+
     // Update the UI.
     updateUi();
 }
@@ -603,6 +609,78 @@ void DomainSettingsDialog::showDeleteMessageBox() const
     }
 }
 
+void DomainSettingsDialog::updateDomStorageStatus() const
+{
+    // Instantiate tracking variables.
+    bool javaScriptEnabled;
+    bool localStorageEnabled;
+
+    // Populate the JavaScript tracker.
+    switch (javaScriptComboBoxPointer->currentIndex())
+    {
+        case (DomainsDatabase::SYSTEM_DEFAULT):
+        {
+            // Update the tracker according to the system default.
+            if (Settings::javaScriptEnabled())
+                javaScriptEnabled = true;
+            else
+                javaScriptEnabled = false;
+
+            break;
+        }
+
+        case (DomainsDatabase::ENABLED):
+        {
+            // Update the tracker.
+            javaScriptEnabled = true;
+
+            break;
+        }
+
+        case (DomainsDatabase::DISABLED):
+        {
+            // Update the tracker.
+            javaScriptEnabled = false;
+
+            break;
+        }
+    }
+
+    // Populate the local storage tracker.
+    switch (localStorageComboBoxPointer->currentIndex())
+    {
+        case (DomainsDatabase::SYSTEM_DEFAULT):
+        {
+            // Update the tracker according to the system default.
+            if (Settings::localStorageEnabled())
+                localStorageEnabled = true;
+            else
+                localStorageEnabled = false;
+
+            break;
+        }
+
+        case (DomainsDatabase::ENABLED):
+        {
+            // Update the tracker.
+            localStorageEnabled = true;
+
+            break;
+        }
+
+        case (DomainsDatabase::DISABLED):
+        {
+            // Update the tracker.
+            localStorageEnabled = false;
+
+            break;
+        }
+    }
+
+    // Only enable DOM storage if both JavaScript and local storage are enabled.
+    domStorageComboBoxPointer->setEnabled(javaScriptEnabled && localStorageEnabled);
+}
+
 void DomainSettingsDialog::updateUi() const
 {
     // Update the delete button status.
index 543c1bbb6f2eab80d93db7a3165f5807cd70cd6a..153701663f4f61f0e4a52fd9fb30d300d620efdd 100644 (file)
@@ -100,6 +100,7 @@ private:
     void populateJavaScriptLabel() const;
     void populateLocalStorageLabel() const;
     void populateUserAgentLabel(const QString &userAgentName) const;
+    void updateDomStorageStatus() const;
     void updateUi() const;
 };
 #endif
index 780a239f4b2539c97b89483085c0c6d49082042b..16c616e26a88200be6809ffd30ce3cacde5add89 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <!--
-  Copyright 2022-2023 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>.
 
                     <property name="toolTip">
                         <string>DOM storage, sometimes called web storage, is like cookies on steroids.  To function, it requires that both JavaScript and local storage be enabled.  It is disabled by default.</string>
                     </property>
+
+                    <!-- Initially disable DOM storage. -->
+                    <property name="enabled">
+                        <bool>false</bool>
+                    </property>
                 </widget>
             </item>
 
index 13e3c51ebbaa93ca054569b257bf7e0bba3deac7..7533432ec50d8a8cabc7268142e63240044f9394 100644 (file)
@@ -1574,6 +1574,9 @@ void BrowserWindow::showSettingsDialog()
     spellCheckSettingsUi.setupUi(spellCheckSettingsWidgetPointer);
 
     // Get handles for the widgets.
+    QCheckBox *javaScriptCheckBoxPointer = privacySettingsUi.kcfg_javaScriptEnabled;
+    QCheckBox *localStorageCheckBoxPointer = privacySettingsUi.kcfg_localStorageEnabled;
+    QCheckBox *domStorageCheckBoxPointer = privacySettingsUi.kcfg_domStorageEnabled;
     QComboBox *userAgentComboBoxPointer = privacySettingsUi.kcfg_userAgent;
     userAgentLabelPointer = privacySettingsUi.userAgentLabel;
     QComboBox *searchEngineComboBoxPointer = generalSettingsUi.kcfg_searchEngine;
@@ -1582,6 +1585,17 @@ void BrowserWindow::showSettingsDialog()
     QPushButton *browseButtonPointer = generalSettingsUi.browseButton;
     QListWidget *spellCheckListWidgetPointer = spellCheckSettingsUi.spellCheckListWidget;
 
+    // Create a save spell check languages lambda.
+    auto updateCheckBoxes = [javaScriptCheckBoxPointer, localStorageCheckBoxPointer, domStorageCheckBoxPointer] ()
+    {
+        // Only enable the DOM storage check box if both JavaScript and local storage are checked.
+        domStorageCheckBoxPointer->setEnabled(javaScriptCheckBoxPointer->isChecked() && localStorageCheckBoxPointer->isChecked());
+    };
+
+    // Update the status of the DOM storage check box when either JavaScript or local storage are changed.
+    connect(javaScriptCheckBoxPointer, &QCheckBox::stateChanged, this, updateCheckBoxes);
+    connect(localStorageCheckBoxPointer, &QCheckBox::stateChanged, this, updateCheckBoxes);
+
     // Populate the combo box labels.
     updateUserAgentLabel(userAgentComboBoxPointer->currentText());
     updateSearchEngineLabel(searchEngineComboBoxPointer->currentText());