From 2374794c9a71745376c9d2db0ee403e6b0969d39 Mon Sep 17 00:00:00 2001 From: Soren Stoutner Date: Thu, 11 Jan 2024 17:23:12 -0700 Subject: [PATCH] Ghost DOM storage in Settings and Domain Settings unless both JavaScript and local storage are enabled. https://redmine.stoutner.com/issues/1080 --- src/dialogs/DomainSettingsDialog.cpp | 90 ++++++++++++++++++++++++++-- src/dialogs/DomainSettingsDialog.h | 1 + src/uis/SettingsPrivacy.ui | 7 ++- src/windows/BrowserWindow.cpp | 14 +++++ 4 files changed, 105 insertions(+), 7 deletions(-) diff --git a/src/dialogs/DomainSettingsDialog.cpp b/src/dialogs/DomainSettingsDialog.cpp index 59d7bdb..13791f0 100644 --- a/src/dialogs/DomainSettingsDialog.cpp +++ b/src/dialogs/DomainSettingsDialog.cpp @@ -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. diff --git a/src/dialogs/DomainSettingsDialog.h b/src/dialogs/DomainSettingsDialog.h index 543c1bb..1537016 100644 --- a/src/dialogs/DomainSettingsDialog.h +++ b/src/dialogs/DomainSettingsDialog.h @@ -100,6 +100,7 @@ private: void populateJavaScriptLabel() const; void populateLocalStorageLabel() const; void populateUserAgentLabel(const QString &userAgentName) const; + void updateDomStorageStatus() const; void updateUi() const; }; #endif diff --git a/src/uis/SettingsPrivacy.ui b/src/uis/SettingsPrivacy.ui index 780a239..16c616e 100644 --- a/src/uis/SettingsPrivacy.ui +++ b/src/uis/SettingsPrivacy.ui @@ -1,7 +1,7 @@ + + false + diff --git a/src/windows/BrowserWindow.cpp b/src/windows/BrowserWindow.cpp index 13e3c51..7533432 100644 --- a/src/windows/BrowserWindow.cpp +++ b/src/windows/BrowserWindow.cpp @@ -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()); -- 2.43.0