From: Soren Stoutner Date: Tue, 17 May 2022 23:10:23 +0000 (-0700) Subject: Rename Local Storage to DOM Storage. https://redmine.stoutner.com/issues/852 X-Git-Tag: v0.1~34 X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyBrowserPC.git;a=commitdiff_plain;h=2facce32fb6d97b52a7dc148044cae4b36a65d4c Rename Local Storage to DOM Storage. https://redmine.stoutner.com/issues/852 --- diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9729c95..fb70231 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -35,12 +35,12 @@ kconfig_add_kcfg_files(privacy-browser settings/Settings.kcfgc) # Use KDE Frameworks to handle internationalization of the following UI files. ki18n_wrap_ui(privacy-browser - ui/AddOrEditCookieDialog.ui - ui/BrowserView.ui - ui/CookiesDialog.ui - ui/DomainSettingsDialog.ui - ui/SettingsGeneral.ui - ui/SettingsPrivacy.ui + uis/AddOrEditCookieDialog.ui + uis/BrowserView.ui + uis/CookiesDialog.ui + uis/DomainSettingsDialog.ui + uis/SettingsGeneral.ui + uis/SettingsPrivacy.ui ) # Link the following libraries. @@ -66,7 +66,8 @@ add_subdirectory(dialogs) add_subdirectory(filters) add_subdirectory(helpers) add_subdirectory(interceptors) -add_subdirectory(ui.rc) +add_subdirectory(structs) +add_subdirectory(ui.rcs) add_subdirectory(views) add_subdirectory(windows) diff --git a/src/dialogs/AddOrEditCookieDialog.cpp b/src/dialogs/AddOrEditCookieDialog.cpp index 1b0a944..78234a6 100644 --- a/src/dialogs/AddOrEditCookieDialog.cpp +++ b/src/dialogs/AddOrEditCookieDialog.cpp @@ -32,6 +32,7 @@ const int AddOrEditCookieDialog::AddCookie = 0; const int AddOrEditCookieDialog::EditCookie = 1; +// Construct the class. AddOrEditCookieDialog::AddOrEditCookieDialog(const int &dialogType, const QNetworkCookie *cookiePointer) : QDialog(nullptr) { // Set the dialog window title according to the dialog type. diff --git a/src/dialogs/CookiesDialog.cpp b/src/dialogs/CookiesDialog.cpp index 5763cb9..b200891 100644 --- a/src/dialogs/CookiesDialog.cpp +++ b/src/dialogs/CookiesDialog.cpp @@ -31,6 +31,7 @@ #include #include +// Construct the class. bool cookieSortPredicate(const QNetworkCookie &leftHandCookie, const QNetworkCookie &rightHandCookie) { // Check to see if the domains are identical. @@ -99,7 +100,7 @@ bool cookieSortPredicate(const QNetworkCookie &leftHandCookie, const QNetworkCoo } } -CookiesDialog::CookiesDialog(std::forward_list *originalCookieListPointer) : QDialog(nullptr), cookieListPointer(originalCookieListPointer) +CookiesDialog::CookiesDialog(std::list *originalCookieListPointer) : QDialog(nullptr), cookieListPointer(originalCookieListPointer) { // Set the dialog window title. setWindowTitle(i18nc("The cookies dialog window title", "Cookies")); diff --git a/src/dialogs/CookiesDialog.h b/src/dialogs/CookiesDialog.h index 770a846..f34beca 100644 --- a/src/dialogs/CookiesDialog.h +++ b/src/dialogs/CookiesDialog.h @@ -28,7 +28,7 @@ #include // C++ headers. -#include +#include class CookiesDialog : public QDialog { @@ -37,7 +37,7 @@ class CookiesDialog : public QDialog public: // The primary constructor. - explicit CookiesDialog(std::forward_list *cookieListPointer); + explicit CookiesDialog(std::list *cookieListPointer); signals: // The signals. @@ -59,7 +59,7 @@ private: // The private variables. QItemSelectionModel *treeViewSelectionModelPointer; QPushButton *addCookieButtonPointer; - std::forward_list *cookieListPointer; + std::list *cookieListPointer; QPushButton *deleteAllButtonPointer; QPushButton *deleteCookieButtonPointer; QPushButton *editCookieButtonPointer; diff --git a/src/dialogs/DomainSettingsDialog.cpp b/src/dialogs/DomainSettingsDialog.cpp index 32d61d0..eb43fb5 100644 --- a/src/dialogs/DomainSettingsDialog.cpp +++ b/src/dialogs/DomainSettingsDialog.cpp @@ -34,6 +34,7 @@ const int DomainSettingsDialog::SHOW_ALL_DOMAINS = 0; const int DomainSettingsDialog::ADD_DOMAIN = 1; const int DomainSettingsDialog::EDIT_DOMAIN = 2; +// Construct the class. DomainSettingsDialog::DomainSettingsDialog(const int &startType, const QString &domainName) : QDialog(nullptr) { // Set the window title. @@ -48,14 +49,14 @@ DomainSettingsDialog::DomainSettingsDialog(const int &startType, const QString & // Setup the UI. domainSettingsDialogUi.setupUi(this); - // Get handles for the views. + // Get handles for the widgets. domainsListViewPointer = domainSettingsDialogUi.domainsListView; domainSettingsWidgetPointer = domainSettingsDialogUi.domainSettingsWidget; domainNameLineEditPointer = domainSettingsDialogUi.domainNameLineEdit; javaScriptComboBoxPointer = domainSettingsDialogUi.javaScriptComboBox; javaScriptLabelPointer = domainSettingsDialogUi.javaScriptLabel; - localStorageComboBoxPointer = domainSettingsDialogUi.localStorageComboBox; - localStorageLabelPointer = domainSettingsDialogUi.localStorageLabel; + domStorageComboBoxPointer = domainSettingsDialogUi.domStorageComboBox; + domStorageLabelPointer = domainSettingsDialogUi.domStorageLabel; userAgentComboBoxPointer = domainSettingsDialogUi.userAgentComboBox; userAgentLabelPointer = domainSettingsDialogUi.userAgentLabel; zoomFactorComboBoxPointer = domainSettingsDialogUi.zoomFactorComboBox; @@ -129,10 +130,10 @@ DomainSettingsDialog::DomainSettingsDialog(const int &startType, const QString & // Handle clicks on the domains. connect(domainsListViewPointer, SIGNAL(activated(QModelIndex)), this, SLOT(domainSelected(QModelIndex))); - // Connect the domain settings. + // Process changes to the domain settings. connect(domainNameLineEditPointer, SIGNAL(textEdited(QString)), this, SLOT(domainNameChanged(QString))); connect(javaScriptComboBoxPointer, SIGNAL(currentIndexChanged(int)), this, SLOT(javaScriptChanged(int))); - connect(localStorageComboBoxPointer, SIGNAL(currentIndexChanged(int)), this, SLOT(localStorageChanged(int))); + connect(domStorageComboBoxPointer, SIGNAL(currentIndexChanged(int)), this, SLOT(domStorageChanged(int))); connect(userAgentComboBoxPointer, SIGNAL(currentTextChanged(QString)), this, SLOT(userAgentChanged(QString))); connect(zoomFactorComboBoxPointer, SIGNAL(currentIndexChanged(int)), this, SLOT(zoomFactorComboBoxChanged(int))); connect(customZoomFactorSpinBoxPointer, SIGNAL(valueChanged(double)), this, SLOT(customZoomFactorChanged(double))); @@ -157,7 +158,7 @@ void DomainSettingsDialog::addDomain(const QString &domainName) const // Set the values for the new domain. newDomainRecord.setValue(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::DOMAIN_NAME), domainName); newDomainRecord.setValue(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::JAVASCRIPT), DomainsDatabaseHelper::SYSTEM_DEFAULT); - newDomainRecord.setValue(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::LOCAL_STORAGE), DomainsDatabaseHelper::SYSTEM_DEFAULT); + newDomainRecord.setValue(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::DOM_STORAGE), DomainsDatabaseHelper::SYSTEM_DEFAULT); newDomainRecord.setValue(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::USER_AGENT), UserAgentHelper::SYSTEM_DEFAULT_DATABASE); newDomainRecord.setValue(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::ZOOM_FACTOR), DomainsDatabaseHelper::SYSTEM_DEFAULT); newDomainRecord.setValue(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::CUSTOM_ZOOM_FACTOR), 1.0); @@ -244,8 +245,8 @@ void DomainSettingsDialog::domainSelected(const QModelIndex &modelIndex) const // Populate the JavaScript combo box. javaScriptComboBoxPointer->setCurrentIndex(modelIndex.siblingAtColumn(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::JAVASCRIPT)).data().toInt()); - // Populate the local storage combo box. - localStorageComboBoxPointer->setCurrentIndex(modelIndex.siblingAtColumn(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::LOCAL_STORAGE)).data().toInt()); + // Populate the DOM storage combo box. + domStorageComboBoxPointer->setCurrentIndex(modelIndex.siblingAtColumn(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::DOM_STORAGE)).data().toInt()); // Get the user agent string. QString userAgent = modelIndex.siblingAtColumn(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::USER_AGENT)).data().toString(); @@ -282,7 +283,7 @@ void DomainSettingsDialog::domainSelected(const QModelIndex &modelIndex) const // Populate the labels. populateJavaScriptLabel(); - populateLocalStorageLabel(); + populateDomStorageLabel(); populateUserAgentLabel(userAgentComboBoxPointer->currentText()); // Update the UI. @@ -302,14 +303,14 @@ void DomainSettingsDialog::javaScriptChanged(const int &newIndex) const updateUi(); } -void DomainSettingsDialog::localStorageChanged(const int &newIndex) const +void DomainSettingsDialog::domStorageChanged(const int &newIndex) const { // Update the domains table model. - domainsTableModelPointer->setData(domainsListViewPointer->selectionModel()->currentIndex().siblingAtColumn(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::LOCAL_STORAGE)), + domainsTableModelPointer->setData(domainsListViewPointer->selectionModel()->currentIndex().siblingAtColumn(domainsTableModelPointer->fieldIndex(DomainsDatabaseHelper::DOM_STORAGE)), newIndex); - // Populate the local storage label. - populateLocalStorageLabel(); + // Populate the DOM storage label. + populateDomStorageLabel(); // Update the UI. updateUi(); @@ -335,8 +336,10 @@ void DomainSettingsDialog::populateJavaScriptLabel() const case (DomainsDatabaseHelper::SYSTEM_DEFAULT): { // Set the text according to the system default. - if (Settings::javaScript()) javaScriptLabelPointer->setText(i18nc("Domains settings label", "JavaScript enabled")); - else javaScriptLabelPointer->setText(i18nc("Domain settings label", "JavaScript disabled")); + if (Settings::javaScriptEnabled()) + javaScriptLabelPointer->setText(i18nc("Domains settings label", "JavaScript enabled")); + else + javaScriptLabelPointer->setText(i18nc("Domain settings label", "JavaScript disabled")); break; } @@ -344,7 +347,7 @@ void DomainSettingsDialog::populateJavaScriptLabel() const case (DomainsDatabaseHelper::DISABLED): { // Set the label text in bold. - javaScriptLabelPointer->setText(i18nc("Domain settings label. The tags should be retained.", "JavaScript disabled")); + javaScriptLabelPointer->setText(i18nc("Domain settings label. The tags should be retained.", "JavaScript disabled")); break; } @@ -352,23 +355,25 @@ void DomainSettingsDialog::populateJavaScriptLabel() const case (DomainsDatabaseHelper::ENABLED): { // Set the label text in bold. - javaScriptLabelPointer->setText(i18nc("Domains settings label. The tags should be retained.", "JavaScript enabled")); + javaScriptLabelPointer->setText(i18nc("Domains settings label. The tags should be retained.", "JavaScript enabled")); break; } } } -void DomainSettingsDialog::populateLocalStorageLabel() const +void DomainSettingsDialog::populateDomStorageLabel() const { // Populate the label according to the currently selected index. - switch (localStorageComboBoxPointer->currentIndex()) + switch (domStorageComboBoxPointer->currentIndex()) { case (DomainsDatabaseHelper::SYSTEM_DEFAULT): { // Set the text according to the system default. - if (Settings::localStorage()) localStorageLabelPointer->setText(i18nc("Local storage label", "Local storage enabled")); - else localStorageLabelPointer->setText(i18nc("Local storage label", "Local storage disabled")); + if (Settings::domStorageEnabled()) + domStorageLabelPointer->setText(i18nc("DOM storage label", "DOM storage enabled")); + else + domStorageLabelPointer->setText(i18nc("DOM storage label", "DOM storage disabled")); break; } @@ -376,7 +381,7 @@ void DomainSettingsDialog::populateLocalStorageLabel() const case (DomainsDatabaseHelper::DISABLED): { // Set the label text in bold. - localStorageLabelPointer->setText(i18nc("Local storage label. The tags should be retained.", "Local storage disabled")); + domStorageLabelPointer->setText(i18nc("DOM storage label. The tags should be retained.", "DOM storage disabled")); break; } @@ -384,7 +389,7 @@ void DomainSettingsDialog::populateLocalStorageLabel() const case (DomainsDatabaseHelper::ENABLED): { // Set the label text in bold. - localStorageLabelPointer->setText(i18nc("Local storage label. The tags should be retained.", "Local storage enabled")); + domStorageLabelPointer->setText(i18nc("DOM storage label. The tags should be retained.", "DOM storage enabled")); break; } diff --git a/src/dialogs/DomainSettingsDialog.h b/src/dialogs/DomainSettingsDialog.h index 5663787..a96c0d0 100644 --- a/src/dialogs/DomainSettingsDialog.h +++ b/src/dialogs/DomainSettingsDialog.h @@ -51,10 +51,10 @@ private Q_SLOTS: void apply() const; void cancel(); void customZoomFactorChanged(const double &newValue) const; + void domStorageChanged(const int &newIndex) const; void domainNameChanged(const QString &updatedDomainName) const; void domainSelected(const QModelIndex &modelIndex) const; void javaScriptChanged(const int &newIndex) const; - void localStorageChanged(const int &newIndex) const; void ok(); void reset() const; void showAddMessageBox(); @@ -67,14 +67,14 @@ private: QPushButton *applyButtonPointer; QDoubleSpinBox *customZoomFactorSpinBoxPointer; QPushButton *deleteDomainButtonPointer; + QComboBox *domStorageComboBoxPointer; + QLabel *domStorageLabelPointer; QListView *domainsListViewPointer; KLineEdit *domainNameLineEditPointer; QWidget *domainSettingsWidgetPointer; QSqlTableModel *domainsTableModelPointer; QComboBox *javaScriptComboBoxPointer; QLabel *javaScriptLabelPointer; - QComboBox *localStorageComboBoxPointer; - QLabel *localStorageLabelPointer; QPushButton *resetButtonPointer; QComboBox *userAgentComboBoxPointer; QLabel *userAgentLabelPointer; @@ -83,7 +83,7 @@ private: // The private functions. void addDomain(const QString &domainName) const; void populateJavaScriptLabel() const; - void populateLocalStorageLabel() const; + void populateDomStorageLabel() const; void populateUserAgentLabel(const QString &userAgentName) const; void updateUi() const; }; diff --git a/src/filters/MouseEventFilter.cpp b/src/filters/MouseEventFilter.cpp index 51bbb09..b6cb81f 100644 --- a/src/filters/MouseEventFilter.cpp +++ b/src/filters/MouseEventFilter.cpp @@ -27,6 +27,7 @@ // The primary constructor. MouseEventFilter::MouseEventFilter() : QObject() {}; +// Construct the class. bool MouseEventFilter::eventFilter(QObject *objectPointer, QEvent *eventPointer) { // Only process mouse button press events. diff --git a/src/helpers/DomainsDatabaseHelper.cpp b/src/helpers/DomainsDatabaseHelper.cpp index 6ed8716..2d63bd9 100644 --- a/src/helpers/DomainsDatabaseHelper.cpp +++ b/src/helpers/DomainsDatabaseHelper.cpp @@ -32,12 +32,12 @@ const int DomainsDatabaseHelper::SCHEMA_VERSION = 4; const QString DomainsDatabaseHelper::_ID = "_id"; const QString DomainsDatabaseHelper::DOMAIN_NAME = "domain_name"; const QString DomainsDatabaseHelper::JAVASCRIPT = "javascript"; -const QString DomainsDatabaseHelper::LOCAL_STORAGE = "local_storage"; +const QString DomainsDatabaseHelper::DOM_STORAGE = "dom_storage"; const QString DomainsDatabaseHelper::USER_AGENT = "user_agent"; const QString DomainsDatabaseHelper::ZOOM_FACTOR = "zoom_factor"; const QString DomainsDatabaseHelper::CUSTOM_ZOOM_FACTOR = "custom_zoom_factor"; -// The default constructor. +// Construct the class. DomainsDatabaseHelper::DomainsDatabaseHelper() {} void DomainsDatabaseHelper::addDatabase() @@ -102,8 +102,8 @@ void DomainsDatabaseHelper::addDatabase() // Upgrade from schema version 3 to schema version 4. case 3: - // Add the Local Storage column. - domainsDatabase.exec("ALTER TABLE " + DOMAINS_TABLE + " ADD COLUMN " + LOCAL_STORAGE + " INTEGER DEFAULT 0"); + // Add the DOM Storage column. + domainsDatabase.exec("ALTER TABLE " + DOMAINS_TABLE + " ADD COLUMN " + DOM_STORAGE + " INTEGER DEFAULT 0"); } // Update the schema version. @@ -120,7 +120,7 @@ void DomainsDatabaseHelper::addDatabase() _ID + " INTEGER PRIMARY KEY, " + DOMAIN_NAME + " TEXT, " + JAVASCRIPT + " INTEGER DEFAULT 0, " + - LOCAL_STORAGE + " INTEGER DEFAULT 0, " + + DOM_STORAGE + " INTEGER DEFAULT 0, " + USER_AGENT + " TEXT DEFAULT '" + UserAgentHelper::SYSTEM_DEFAULT_DATABASE + "', " + ZOOM_FACTOR + " INTEGER DEFAULT 0, " + CUSTOM_ZOOM_FACTOR + " REAL DEFAULT 1.0)" diff --git a/src/helpers/DomainsDatabaseHelper.h b/src/helpers/DomainsDatabaseHelper.h index 2ec812b..9ab0f92 100644 --- a/src/helpers/DomainsDatabaseHelper.h +++ b/src/helpers/DomainsDatabaseHelper.h @@ -43,10 +43,10 @@ public: static const QString _ID; static const QString CONNECTION_NAME; static const QString CUSTOM_ZOOM_FACTOR; + static const QString DOM_STORAGE; static const QString DOMAIN_NAME; static const QString DOMAINS_TABLE; static const QString JAVASCRIPT; - static const QString LOCAL_STORAGE; static const QString USER_AGENT; static const QString ZOOM_FACTOR; diff --git a/src/helpers/SearchEngineHelper.cpp b/src/helpers/SearchEngineHelper.cpp index 8291926..8c0feb4 100644 --- a/src/helpers/SearchEngineHelper.cpp +++ b/src/helpers/SearchEngineHelper.cpp @@ -20,7 +20,7 @@ // Application headers. #include "SearchEngineHelper.h" -// The default constructor. +// Construct the class. SearchEngineHelper::SearchEngineHelper() {}; QString SearchEngineHelper::getSearchUrl(const QString &searchEngineName) diff --git a/src/helpers/UserAgentHelper.cpp b/src/helpers/UserAgentHelper.cpp index 9a51f22..634f16b 100644 --- a/src/helpers/UserAgentHelper.cpp +++ b/src/helpers/UserAgentHelper.cpp @@ -56,7 +56,7 @@ const QString UserAgentHelper::CHROME_WINDOWS_USER_AGENT = QStringLiteral("Mozil const QString UserAgentHelper::EDGE_WINDOWS_USER_AGENT = QStringLiteral("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36 Edg/98.0.1108.56"); const QString UserAgentHelper::SAFARI_MACOS_USER_AGENT = QStringLiteral("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.1 Safari/605.1.15"); -// The default constructor. +// Construct the class. UserAgentHelper::UserAgentHelper() {}; QString UserAgentHelper::getDatabaseUserAgentNameFromTranslatedName(const QString &translatedUserAgentName) diff --git a/src/icons/cookies-off.svg b/src/icons/cookies-off.svg new file mode 100644 index 0000000..7f84085 --- /dev/null +++ b/src/icons/cookies-off.svg @@ -0,0 +1,54 @@ + + + + + + + + diff --git a/src/icons/cookies-on.svg b/src/icons/cookies-on.svg new file mode 100644 index 0000000..191f07a --- /dev/null +++ b/src/icons/cookies-on.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + diff --git a/src/interceptors/UrlRequestInterceptor.cpp b/src/interceptors/UrlRequestInterceptor.cpp index 2b9bd05..d405928 100644 --- a/src/interceptors/UrlRequestInterceptor.cpp +++ b/src/interceptors/UrlRequestInterceptor.cpp @@ -20,7 +20,7 @@ // Application headers. #include "UrlRequestInterceptor.h" -// The default constructor. +// Construct the class. UrlRequestInterceptor::UrlRequestInterceptor(QObject *parentObjectPointer) : QWebEngineUrlRequestInterceptor(parentObjectPointer) {} void UrlRequestInterceptor::interceptRequest(QWebEngineUrlRequestInfo &urlRequestInfo) diff --git a/src/resources.qrc b/src/resources.qrc index cfa6f79..a311b84 100644 --- a/src/resources.qrc +++ b/src/resources.qrc @@ -19,6 +19,8 @@ + icons/cookies-off.svg + icons/cookies-on.svg icons/javascript-warning.svg icons/privacy-mode.svg icons/sc-apps-privacy-browser.svg diff --git a/src/settings/Settings.kcfg b/src/settings/Settings.kcfg index c5435fa..10d08f3 100644 --- a/src/settings/Settings.kcfg +++ b/src/settings/Settings.kcfg @@ -28,11 +28,15 @@ - + false - + + false + + + false diff --git a/src/settings/Settings.kcfgc b/src/settings/Settings.kcfgc index 3129834..42940f7 100644 --- a/src/settings/Settings.kcfgc +++ b/src/settings/Settings.kcfgc @@ -22,5 +22,5 @@ File=Settings.kcfg # Specify the class name, which will be used to autogenerate .cpp and .h files. ClassName=Settings -# Make the generated class a singleton. TODO, the default is false. This may not be needed. +# Make the generated class a singleton. Singleton=true diff --git a/src/structs/CMakeLists.txt b/src/structs/CMakeLists.txt new file mode 100644 index 0000000..9e6e2cb --- /dev/null +++ b/src/structs/CMakeLists.txt @@ -0,0 +1,22 @@ +# Copyright © 2022 Soren Stoutner . +# +# 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 +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Privacy Browser PC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Privacy Browser PC. If not, see . + + +# List the sources to include in the executable. +target_sources(privacy-browser PRIVATE + PrivacyWebEngine.cpp +) diff --git a/src/structs/PrivacyWebEngine.cpp b/src/structs/PrivacyWebEngine.cpp new file mode 100644 index 0000000..14ccad7 --- /dev/null +++ b/src/structs/PrivacyWebEngine.cpp @@ -0,0 +1,28 @@ +/* + * Copyright © 2022 Soren Stoutner . + * + * 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 + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Privacy Browser PC is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Privacy Browser PC. If not, see . + */ + +// Application headers. +#include "PrivacyWebEngine.h" + +// Construct the struct. +PrivacyWebEngine::PrivacyWebEngine(QWebEngineView *inputWebEngineViewPointer) : webEngineViewPointer(inputWebEngineViewPointer) +{ + // Initialize the cookie status. + cookiesEnabled = false; +} diff --git a/src/structs/PrivacyWebEngine.h b/src/structs/PrivacyWebEngine.h new file mode 100644 index 0000000..b536c4f --- /dev/null +++ b/src/structs/PrivacyWebEngine.h @@ -0,0 +1,36 @@ +/* + * Copyright © 2022 Soren Stoutner . + * + * 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 + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Privacy Browser PC is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Privacy Browser PC. If not, see . + */ + +#ifndef PRIVACYWEBENGINE_H +#define PRIVACYWEBENGINE_H + +// Qt toolkit headers. +#include + +struct PrivacyWebEngine +{ +public: + // The primary constructor. + PrivacyWebEngine(QWebEngineView *inputWebEngineViewPointer); + + // The public variables. + bool cookiesEnabled; + QWebEngineView *webEngineViewPointer; +}; +#endif diff --git a/src/ui.rc/CMakeLists.txt b/src/ui.rc/CMakeLists.txt deleted file mode 100644 index 2c8c30e..0000000 --- a/src/ui.rc/CMakeLists.txt +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright © 2022 Soren Stoutner . -# -# 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 -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# Privacy Browser PC is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Privacy Browser PC. If not, see . - - -# Install Privacy Browser's RC (Runtime Configuration) files. -install(FILES - browser_ui.rc - DESTINATION ${KDE_INSTALL_KXMLGUI5DIR}/privacybrowser) diff --git a/src/ui.rc/browser_ui.rc b/src/ui.rc/browser_ui.rc deleted file mode 100644 index e75b573..0000000 --- a/src/ui.rc/browser_ui.rc +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - - - - On-The-Fly Settings - User Agent - - - - - - - - - - - - - - - - Search Engine - - - - - - - - - - - - - - - - - - - - - - Navigation Toolbar - - - - - - - - URL Toolbar - - - - diff --git a/src/ui.rcs/CMakeLists.txt b/src/ui.rcs/CMakeLists.txt new file mode 100644 index 0000000..2c8c30e --- /dev/null +++ b/src/ui.rcs/CMakeLists.txt @@ -0,0 +1,22 @@ +# Copyright © 2022 Soren Stoutner . +# +# 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 +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Privacy Browser PC is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Privacy Browser PC. If not, see . + + +# Install Privacy Browser's RC (Runtime Configuration) files. +install(FILES + browser_ui.rc + DESTINATION ${KDE_INSTALL_KXMLGUI5DIR}/privacybrowser) diff --git a/src/ui.rcs/browser_ui.rc b/src/ui.rcs/browser_ui.rc new file mode 100644 index 0000000..fd80ccb --- /dev/null +++ b/src/ui.rcs/browser_ui.rc @@ -0,0 +1,85 @@ + + + + + + + + + + + + On-The-Fly Settings + User Agent + + + + + + + + + + + + + + + + Search Engine + + + + + + + + + + + + + + + + + + + + + + Navigation Toolbar + + + + + + + + URL Toolbar + + + + + diff --git a/src/ui/AddOrEditCookieDialog.ui b/src/ui/AddOrEditCookieDialog.ui deleted file mode 100644 index adeaa4e..0000000 --- a/src/ui/AddOrEditCookieDialog.ui +++ /dev/null @@ -1,303 +0,0 @@ - - - - - - AddOrEditCookieDialog - - - - - - - - Qt::AlignLeft - - - - - - - Cookies prepended by a period are accessible to all subdomains. - - - - Domain - - - - - - - - - - - - Qt::RichText - - - - - &nbsp;&nbsp;&nbsp; - - - - - - - - - The name identifies the cookie. Each cookie has a unique combination of domain, name, and path. - - - - Name - - - - - - - - - - - - - - - Qt::AlignLeft - - - - - - - Websites can restrict cookie access to subpath of their URL. - - - - Path - - - - - - - - / - - - - - - - - Qt::RichText - - - - - &nbsp;&nbsp;&nbsp; - - - - - - - - - Cookies without an expiration date are known as session cookies and are expected to be deleted every time the browser closes. - - - - - - - - Cookies without an expiration date are known as session cookies and are expected to be deleted every time the browser closes. - - - - Expiration date - - - - - - - - Qt::RichText - - - - - &nbsp; - - - - - - - - - 2030 - 1 - 1 - 0 - 0 - 0 - - - - - true - - - - false - - - - - - - - Qt::RichText - - - - - &nbsp;&nbsp;&nbsp; - - - - - - - - - Restrict cookie access to HTTP (and HTTPS). This prevents JavaScript from accessing the cookie, which hardens it against cross-site scripting attacks. - - - - true - - - - - - - - Restrict cookie access to HTTP (and HTTPS). This prevents JavaScript from accessing the cookie, which hardens it against cross-site scripting attacks. - - - - HTTP only - - - - - - - - Qt::RichText - - - - - &nbsp;&nbsp;&nbsp; - - - - - - - - - Only allow the cookie to be transferred across HTTPS (as opposed to HTTP). - - - - true - - - - - - - - Only allow the cookie to be transferred across HTTPS (as opposed to HTTP). - - - - Secure - - - - - - - - - - - Qt::AlignLeft - - - - - - - The value contains the cookie data. - - - - Value - - - - - - - - - - - - - - - Qt::Vertical - - - - - - - - - QDialogButtonBox::Save | QDialogButtonBox::Cancel - - - - - - diff --git a/src/ui/BrowserView.ui b/src/ui/BrowserView.ui deleted file mode 100644 index 26ba072..0000000 --- a/src/ui/BrowserView.ui +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - BrowserView - - - - - - - 0 - - - - - 0 - - - - 0 - - - - 0 - - - - 0 - - - - - - - - - diff --git a/src/ui/CookiesDialog.ui b/src/ui/CookiesDialog.ui deleted file mode 100644 index 9c3c2dc..0000000 --- a/src/ui/CookiesDialog.ui +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - CookiesDialog - - - - - - 0 - 0 - 1000 - 1500 - - - - - - - - - - - - - - - - &Add cookie - - - - - - - - - - - - - &Edit cookie - - - - - - - - - - - - - De&lete cookie - - - - - - - - - - - - - QDialogButtonBox::Close - - - - - - - - diff --git a/src/ui/DomainSettingsDialog.ui b/src/ui/DomainSettingsDialog.ui deleted file mode 100644 index ae9322d..0000000 --- a/src/ui/DomainSettingsDialog.ui +++ /dev/null @@ -1,349 +0,0 @@ - - - - - - DomainSettingsDialog - - - - - 0 - 0 - 1000 - 1500 - - - - - - - - - - - - - - - - - - - - Add domain - - - - - - - - - - - - - Delete domain - - - - - - - - - - - - - Qt::Horizontal - - - - - - - - - - - - - - - - - - - Domain name - - - - - - - - *. may be prepended to a domain to include all subdomains (eg. *.stoutner.com). - - - - - - - - - JavaScript - - - - - - - - JavaScript allows websites to run programs (scripts) on the device. - - - - - System default - - - - - - JavaScript disabled - - - - - - JavaScript enabled - - - - - - - - - Qt::RichText - - - - - - - - - Local storage - - - - - - - - Local storage, sometimes also called DOM storage, is like cookies on steroids. - - - - - System default - - - - - - Local storage disabled - - - - - - Local storage enabled - - - - - - - - - Qt::RichText - - - - - - - - - User agent - - - - - - - - - 0 - 0 - - - - - true - - - - - System default - - - - - - Privacy Browser - - - - - - WebEngine default - - - - - - Firefox on Linux - - - - - - Chromium on Linux - - - - - - Firefox on Windows - - - - - - Chrome on Windows - - - - - - Edge on Windows - - - - - - Safari on macOS - - - - - - - - - Qt::RichText - - - - - - - - - Zoom factor - - - - - - - - - System default - - - - - - Custom - - - - - - - - - Set the zoom factor between 0.25 and 5.00. The default is 1.00. - - - - 0.250000000000000 - - - - 5.000000000000000 - - - - 0.250000000000000 - - - - - - - - - - - - Qt::Vertical - - - - - - - - - QDialogButtonBox::Reset | QDialogButtonBox::Ok | QDialogButtonBox::Apply | QDialogButtonBox::Cancel - - - - - - - - diff --git a/src/ui/SettingsGeneral.ui b/src/ui/SettingsGeneral.ui deleted file mode 100644 index 65b693e..0000000 --- a/src/ui/SettingsGeneral.ui +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - - GeneralSettings - - - - - - - - Homepage - - - - - - - - The default is https://www.mojeek.com/. - - - - - - - - - Search engine - - - - - - - - - 0 - 0 - - - - - The default is Mojeek. - - - - true - - - - - Mojeek - - - - - - Monocles - - - - - - MetaGer - - - - - - Google - - - - - - Bing - - - - - - Yahoo - - - - - - - - - Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse - - - - - - - - - Zoom factor - - - - - - - - Set the zoom factor between 0.25 and 5.00. The default is 1.00. - - - - 0.250000000000000 - - - - 5.000000000000000 - - - - 0.250000000000000 - - - - - - diff --git a/src/ui/SettingsPrivacy.ui b/src/ui/SettingsPrivacy.ui deleted file mode 100644 index 6fa7c5b..0000000 --- a/src/ui/SettingsPrivacy.ui +++ /dev/null @@ -1,138 +0,0 @@ - - - - - - - PrivacySettings - - - - - - - - JavaScript - - - - JavaScript allows websites to run programs (scripts) on the device. The default is disabled. - - - - - - - - - Local storage - - - - Local storage, sometimes also called DOM storage, is like cookies on steroids. - - - - - - - - - User agent - - - - - - - - - 0 - 0 - - - - - The default is Privacy Browser. - - - - true - - - - - Privacy Browser - - - - - - WebEngine Default - - - - - - Firefox Linux - - - - - - Chromium Linux - - - - - - Firefox Windows - - - - - - Chrome Windows - - - - - - Edge Windows - - - - - - Safari macOS - - - - - - - - - Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse - - - - - - diff --git a/src/uis/AddOrEditCookieDialog.ui b/src/uis/AddOrEditCookieDialog.ui new file mode 100644 index 0000000..adeaa4e --- /dev/null +++ b/src/uis/AddOrEditCookieDialog.ui @@ -0,0 +1,303 @@ + + + + + + AddOrEditCookieDialog + + + + + + + + Qt::AlignLeft + + + + + + + Cookies prepended by a period are accessible to all subdomains. + + + + Domain + + + + + + + + + + + + Qt::RichText + + + + + &nbsp;&nbsp;&nbsp; + + + + + + + + + The name identifies the cookie. Each cookie has a unique combination of domain, name, and path. + + + + Name + + + + + + + + + + + + + + + Qt::AlignLeft + + + + + + + Websites can restrict cookie access to subpath of their URL. + + + + Path + + + + + + + + / + + + + + + + + Qt::RichText + + + + + &nbsp;&nbsp;&nbsp; + + + + + + + + + Cookies without an expiration date are known as session cookies and are expected to be deleted every time the browser closes. + + + + + + + + Cookies without an expiration date are known as session cookies and are expected to be deleted every time the browser closes. + + + + Expiration date + + + + + + + + Qt::RichText + + + + + &nbsp; + + + + + + + + + 2030 + 1 + 1 + 0 + 0 + 0 + + + + + true + + + + false + + + + + + + + Qt::RichText + + + + + &nbsp;&nbsp;&nbsp; + + + + + + + + + Restrict cookie access to HTTP (and HTTPS). This prevents JavaScript from accessing the cookie, which hardens it against cross-site scripting attacks. + + + + true + + + + + + + + Restrict cookie access to HTTP (and HTTPS). This prevents JavaScript from accessing the cookie, which hardens it against cross-site scripting attacks. + + + + HTTP only + + + + + + + + Qt::RichText + + + + + &nbsp;&nbsp;&nbsp; + + + + + + + + + Only allow the cookie to be transferred across HTTPS (as opposed to HTTP). + + + + true + + + + + + + + Only allow the cookie to be transferred across HTTPS (as opposed to HTTP). + + + + Secure + + + + + + + + + + + Qt::AlignLeft + + + + + + + The value contains the cookie data. + + + + Value + + + + + + + + + + + + + + + Qt::Vertical + + + + + + + + + QDialogButtonBox::Save | QDialogButtonBox::Cancel + + + + + + diff --git a/src/uis/BrowserView.ui b/src/uis/BrowserView.ui new file mode 100644 index 0000000..26ba072 --- /dev/null +++ b/src/uis/BrowserView.ui @@ -0,0 +1,55 @@ + + + + + + BrowserView + + + + + + + 0 + + + + + 0 + + + + 0 + + + + 0 + + + + 0 + + + + + + + + + diff --git a/src/uis/CookiesDialog.ui b/src/uis/CookiesDialog.ui new file mode 100644 index 0000000..9c3c2dc --- /dev/null +++ b/src/uis/CookiesDialog.ui @@ -0,0 +1,94 @@ + + + + + + CookiesDialog + + + + + + 0 + 0 + 1000 + 1500 + + + + + + + + + + + + + + + + &Add cookie + + + + + + + + + + + + + &Edit cookie + + + + + + + + + + + + + De&lete cookie + + + + + + + + + + + + + QDialogButtonBox::Close + + + + + + + + diff --git a/src/uis/DomainSettingsDialog.ui b/src/uis/DomainSettingsDialog.ui new file mode 100644 index 0000000..1972848 --- /dev/null +++ b/src/uis/DomainSettingsDialog.ui @@ -0,0 +1,396 @@ + + + + + + DomainSettingsDialog + + + + + 0 + 0 + 1000 + 1500 + + + + + + + + + + + + + + + + + + + + Add domain + + + + + + + + + + + + + Delete domain + + + + + + + + + + + + + Qt::Horizontal + + + + + + + + + + + + + + + + + + + Domain name + + + + *. may be prepended to a domain to include all subdomains (eg. *.stoutner.com). + + + + + + + + + + + + + JavaScript + + + + JavaScript allows websites to run programs (scripts) on the device. + + + + + + + + + System default + + + + + + JavaScript disabled + + + + + + JavaScript enabled + + + + + + + + + Qt::RichText + + + + + + + + + Cookies + + + + Local storage includes cookies, IndexedDB, DOM storage, filesystem API, and service workers. DOM storage also requires a separate control to be enabled. Local storage is disabled by default. + + + + + + + + + System default + + + + + + Cookies enabled + + + + + + Cookies disabled + + + + + + + + + Qt::RichText + + + + + + + + + DOM storage + + + + DOM storage, sometimes called web storage, is like cookies on steroids. To function, it requires that both JavaScript and local storage be enabled. + + + + + + + + + System default + + + + + + DOM storage disabled + + + + + + DOM storage enabled + + + + + + + + + Qt::RichText + + + + + + + + + User agent + + + + The user agent identifies the browser to the web server. It serves no useful purpose, but many web servers refuse to return the web page if they don't see a user agent they like. + + + + + + + + + 0 + 0 + + + + + true + + + + + System default + + + + + + Privacy Browser + + + + + + WebEngine default + + + + + + Firefox on Linux + + + + + + Chromium on Linux + + + + + + Firefox on Windows + + + + + + Chrome on Windows + + + + + + Edge on Windows + + + + + + Safari on macOS + + + + + + + + + Qt::RichText + + + + + + + + + Zoom factor + + + + Set the zoom factor between 0.25 and 5.00. + + + + + + + + + System default + + + + + + Custom + + + + + + + + + 0.250000000000000 + + + + 5.000000000000000 + + + + 0.250000000000000 + + + + + + + + + + + + Qt::Vertical + + + + + + + + + QDialogButtonBox::Reset | QDialogButtonBox::Ok | QDialogButtonBox::Apply | QDialogButtonBox::Cancel + + + + + + + + diff --git a/src/uis/SettingsGeneral.ui b/src/uis/SettingsGeneral.ui new file mode 100644 index 0000000..425ea65 --- /dev/null +++ b/src/uis/SettingsGeneral.ui @@ -0,0 +1,147 @@ + + + + + + + GeneralSettings + + + + + + + + Homepage + + + + The default is https://www.mojeek.com/. + + + + + + + + + + + + + Search engine + + + + The default is Mojeek. + + + + + + + + + 0 + 0 + + + + + true + + + + + Mojeek + + + + + + Monocles + + + + + + MetaGer + + + + + + Google + + + + + + Bing + + + + + + Yahoo + + + + + + + + + Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + + + + Zoom factor + + + + Set the zoom factor between 0.25 and 5.00. The default is 1.00. + + + + + + + + + 0.250000000000000 + + + + 5.000000000000000 + + + + 0.250000000000000 + + + + + + diff --git a/src/uis/SettingsPrivacy.ui b/src/uis/SettingsPrivacy.ui new file mode 100644 index 0000000..6989f2a --- /dev/null +++ b/src/uis/SettingsPrivacy.ui @@ -0,0 +1,151 @@ + + + + + + + PrivacySettings + + + + + + + + JavaScript + + + + JavaScript allows websites to run programs (scripts) on the device. The default is disabled. + + + + + + + + + Cookies + + + + Local storage includes cookies, IndexedDB, DOM storage, filesystem API, and service workers. DOM storage also requires a separate control to be enabled. Local storage is disabled by default. + + + + + + + + + DOM storage + + + + 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. + + + + + + + + + User agent + + + + The user agent identifies the browser to the web server. It serves no useful purpose, but many web servers refuse to return the web page if they don't see a user agent they like. The default is Privacy Browser. + + + + + + + + + 0 + 0 + + + + + true + + + + + Privacy Browser + + + + + + WebEngine Default + + + + + + Firefox Linux + + + + + + Chromium Linux + + + + + + Firefox Windows + + + + + + Chrome Windows + + + + + + Edge Windows + + + + + + Safari macOS + + + + + + + + + Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse + + + + + + diff --git a/src/views/BrowserView.cpp b/src/views/BrowserView.cpp index 82e7e3e..777d12e 100644 --- a/src/views/BrowserView.cpp +++ b/src/views/BrowserView.cpp @@ -34,8 +34,12 @@ // Initialize the public static variables. QString BrowserView::webEngineDefaultUserAgent = QStringLiteral(""); +// Construct the class. BrowserView::BrowserView(QWidget *parent) : QWidget(parent) { + // Initialize the variables. + privacyWebEngineListPointer = new QList; + // 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(); diff --git a/src/views/BrowserView.h b/src/views/BrowserView.h index ae1c06a..0314966 100644 --- a/src/views/BrowserView.h +++ b/src/views/BrowserView.h @@ -20,10 +20,13 @@ #ifndef BROWSERVIEW_H #define BROWSERVIEW_H +// Application headers. +#include "structs/PrivacyWebEngine.h" + // KDE Framework headers. #include -// Qt framework headers. +// Qt toolkit headers. #include #include #include @@ -45,8 +48,9 @@ public: // The public functions. void applyOnTheFlyZoomFactor(const double &zoomFactor); void loadInitialWebsite(); + void toggleCookies(); + void toggleDomStorage() const; void toggleJavaScript() const; - void toggleLocalStorage() const; // The public static variables. static QString webEngineDefaultUserAgent; @@ -60,10 +64,11 @@ signals: void linkHovered(const QString &linkUrl) const; void showProgressBar(const int &progress) const; void updateBackAction(const bool &isEnabled) const; + void updateCookiesAction(const bool &isEnabled) const; + void updateDomStorageAction(const bool &isEnabled) const; void updateDomainSettingsIndicator(const bool &status, const QString &domainSettingsDomain) const; void updateForwardAction(const bool &isEnabled) const; void updateJavaScriptAction(const bool &isEnabled) const; - void updateLocalStorageAction(const bool &isEnabled) const; void updateSearchEngineActions(const QString &searchEngine) const; void updateUrlLineEdit(const QUrl &newUrl) const; void updateUserAgentActions(const QString &userAgent) const; @@ -100,6 +105,8 @@ private Q_SLOTS: private: // The private variables. double currentZoomFactor; // This can be removed once has been resolved. + PrivacyWebEngine *currentPrivacyWebEnginePointer; + QList *privacyWebEngineListPointer; QString searchEngineUrl; QWebEngineCookieStore *webEngineCookieStorePointer; QWebEngineHistory *webEngineHistoryPointer; diff --git a/src/windows/BrowserWindow.cpp b/src/windows/BrowserWindow.cpp index 2cfc251..ef264a5 100644 --- a/src/windows/BrowserWindow.cpp +++ b/src/windows/BrowserWindow.cpp @@ -36,8 +36,14 @@ #include #include +// Construct the class. BrowserWindow::BrowserWindow() : KXmlGuiWindow() { + // Initialize the variables. + cookieListPointer = new std::list; + cookiesEnabled = false; + javaScriptEnabled = false; + // Instantiate the main view pointer. browserViewPointer = new BrowserView(this); @@ -75,9 +81,10 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow() searchEngineYahooActionPointer = actionCollectionPointer->addAction(QStringLiteral("search_engine_yahoo")); searchEngineCustomActionPointer = actionCollectionPointer->addAction(QStringLiteral("search_engine_custom")); QAction *domainSettingsActionPointer = actionCollectionPointer->addAction(QStringLiteral("domain_settings")); - QAction *cookiesActionPointer = actionCollectionPointer->addAction(QStringLiteral("cookies")); + cookiesActionPointer = actionCollectionPointer->addAction(QStringLiteral("cookies")); javaScriptActionPointer = actionCollectionPointer->addAction(QStringLiteral("javascript")); - localStorageActionPointer = actionCollectionPointer->addAction(QStringLiteral("local_storage")); + onTheFlyCookiesActionPointer = actionCollectionPointer->addAction(QStringLiteral("on-the-fly_cookies")); + domStorageActionPointer = actionCollectionPointer->addAction(QStringLiteral("dom_storage")); // Create the action groups QActionGroup *userAgentActionGroupPointer = new QActionGroup(this); @@ -119,7 +126,10 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow() searchEngineYahooActionPointer->setCheckable(true); searchEngineCustomActionPointer->setCheckable(true); - // Set the non-mutable action text. + // Get the number of cookies. + int numberOfCookies = cookieListPointer->size(); + + // Set the action text. userAgentPrivacyBrowserActionPointer->setText(UserAgentHelper::PRIVACY_BROWSER_TRANSLATED); userAgentWebEngineDefaultActionPointer->setText(UserAgentHelper::WEB_ENGINE_DEFAULT_TRANSLATED); userAgentFirefoxLinuxActionPointer->setText(UserAgentHelper::FIREFOX_LINUX_TRANSLATED); @@ -135,9 +145,10 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow() searchEngineBingActionPointer->setText(i18nc("Search engine", "Bing")); searchEngineYahooActionPointer->setText(i18nc("Search engine", "Yahoo")); domainSettingsActionPointer->setText(i18nc("Domain Settings action", "Domain Settings")); - cookiesActionPointer->setText(i18nc("Cookies action", "Cookies")); + cookiesActionPointer->setText(i18nc("The Cookies action, which also displays the number of cookies", "Cookies - %1", numberOfCookies)); javaScriptActionPointer->setText(i18nc("JavaScript action", "JavaScript")); - localStorageActionPointer->setText(i18nc("Local Storage action", "Local Storage")); + onTheFlyCookiesActionPointer->setText(i18nc("The On-The-Fly Cookies action, which also display the number of cookies", "Cookies - %1", numberOfCookies)); + domStorageActionPointer->setText(i18nc("DOM Storage action", "DOM Storage")); // Set the action icons. userAgentPrivacyBrowserActionPointer->setIcon(QIcon(":/icons/privacy-mode")); @@ -159,6 +170,7 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow() zoomFactorActionPointer->setIcon(QIcon::fromTheme(QStringLiteral("zoom"))); domainSettingsActionPointer->setIcon(QIcon::fromTheme(QStringLiteral("settings-configure"))); cookiesActionPointer->setIcon(QIcon::fromTheme(QStringLiteral("preferences-web-browser-cookies"))); + onTheFlyCookiesActionPointer->setIcon(QIcon(":/icons/cookies-off")); // Update the on-the-fly menus. connect(browserViewPointer, SIGNAL(updateUserAgentActions(QString)), this, SLOT(updateUserAgentActions(QString))); @@ -176,13 +188,15 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow() // Connect the URL toolbar actions. connect(javaScriptActionPointer, SIGNAL(triggered()), this, SLOT(toggleJavaScript())); - connect(localStorageActionPointer, SIGNAL(triggered()), this, SLOT(toggleLocalStorage())); + connect(onTheFlyCookiesActionPointer, SIGNAL(triggered()), this, SLOT(toggleCookies())); + connect(domStorageActionPointer, SIGNAL(triggered()), this, SLOT(toggleDomStorage())); // Update the URL toolbar actions. connect(browserViewPointer, SIGNAL(updateBackAction(bool)), backActionPointer, SLOT(setEnabled(bool))); connect(browserViewPointer, SIGNAL(updateForwardAction(bool)), forwardActionPointer, SLOT(setEnabled(bool))); connect(browserViewPointer, SIGNAL(updateJavaScriptAction(bool)), this, SLOT(updateJavaScriptAction(bool))); - connect(browserViewPointer, SIGNAL(updateLocalStorageAction(bool)), this, SLOT(updateLocalStorageAction(bool))); + connect(browserViewPointer, SIGNAL(updateCookiesAction(bool)), this, SLOT(updateCookiesAction(bool))); + connect(browserViewPointer, SIGNAL(updateDomStorageAction(bool)), this, SLOT(updateDomStorageAction(bool))); // Setup the GUI based on the browser_ui.rc file. setupGUI(StandardWindowOption::Default, ("browser_ui.rc")); @@ -237,9 +251,6 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow() // Update the applied palette. connect(browserViewPointer, SIGNAL(updateDomainSettingsIndicator(bool, QString)), this, SLOT(updateDomainSettingsIndicator(bool, QString))); - // Initialize the cookie list. - cookieListPointer = new std::forward_list; - // Process cookie changes. connect(browserViewPointer, SIGNAL(addCookie(QNetworkCookie)), this, SLOT(addCookieToList(QNetworkCookie))); connect(browserViewPointer, SIGNAL(removeCookie(QNetworkCookie)), this, SLOT(removeCookieFromList(QNetworkCookie))); @@ -251,8 +262,16 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow() void BrowserWindow::addCookieToList(const QNetworkCookie &newCookie) const { qDebug() << "Add cookie: " << newCookie.toRawForm(); + // Add the new cookie to the list. cookieListPointer->push_front(newCookie); + + // Get the number of cookies. + int numberOfCookies = cookieListPointer->size(); + + // Update the action text. + cookiesActionPointer->setText(i18nc("The Cookies action, which also displays the number of cookies", "Cookies - %1", numberOfCookies)); + onTheFlyCookiesActionPointer->setText(i18nc("The On-The-Fly Cookies action, which also display the number of cookies", "Cookies - %1", numberOfCookies)); } void BrowserWindow::addOrEditDomainSettings() const @@ -407,6 +426,13 @@ void BrowserWindow::removeCookieFromList(const QNetworkCookie &cookie) const // Remove the cookie from the list. cookieListPointer->remove(cookie); + + // Get the number of cookies. + int numberOfCookies = cookieListPointer->size(); + + // Update the action text. + cookiesActionPointer->setText(i18nc("The Cookies action, which also displays the number of cookies", "Cookies - %1", numberOfCookies)); + onTheFlyCookiesActionPointer->setText(i18nc("The On-The-Fly Cookies action, which also display the number of cookies", "Cookies - %1", numberOfCookies)); } void BrowserWindow::showProgressBar(const int &progress) const @@ -499,6 +525,15 @@ void BrowserWindow::settingsConfigure() } } +void BrowserWindow::toggleCookies() const +{ + // Remove the focus from teh URL line edit. + urlLineEditPointer->clearFocus(); + + // Toggle cookies. + browserViewPointer->toggleCookies(); +} + void BrowserWindow::toggleJavaScript() const { // Remove the focus from the URL line edit. @@ -508,37 +543,64 @@ void BrowserWindow::toggleJavaScript() const browserViewPointer->toggleJavaScript(); } -void BrowserWindow::toggleLocalStorage() const +void BrowserWindow::toggleDomStorage() const { // Remove the focus from the URL line edit. urlLineEditPointer->clearFocus(); - // Toggle JavaScript. - browserViewPointer->toggleLocalStorage(); + // Toggle DOM storage. + browserViewPointer->toggleDomStorage(); +} + +void BrowserWindow::updateCookiesAction(const bool &isEnabled) +{ + // Update the cookies status. + cookiesEnabled = isEnabled; + + // Update the icon. + if (cookiesEnabled) + onTheFlyCookiesActionPointer->setIcon(QIcon(":/icons/cookies-on")); + else + onTheFlyCookiesActionPointer->setIcon(QIcon(":/icons/cookies-off")); + + // Update the status of the DOM storage action. + domStorageActionPointer->setEnabled(cookiesEnabled & javaScriptEnabled); } void BrowserWindow::updateDomainSettingsIndicator(const bool &status, const QString &domainSettingsDomain) { // Set the domain palette according to the status. - if (status) urlLineEditPointer->setPalette(domainSettingsPalette); - else urlLineEditPointer->setPalette(noDomainSettingsPalette); + if (status) + urlLineEditPointer->setPalette(domainSettingsPalette); + else + urlLineEditPointer->setPalette(noDomainSettingsPalette); // Store the domain. currentDomainSettingsDomain = domainSettingsDomain; } -void BrowserWindow::updateJavaScriptAction(const bool &isEnabled) const +void BrowserWindow::updateJavaScriptAction(const bool &isEnabled) { + // Update the JavaScript status. + javaScriptEnabled = isEnabled; + // Set the icon according to the status. - if (isEnabled) javaScriptActionPointer->setIcon(QIcon(":/icons/javascript-warning")); - else javaScriptActionPointer->setIcon(QIcon(":/icons/privacy-mode")); + if (javaScriptEnabled) + javaScriptActionPointer->setIcon(QIcon(":/icons/javascript-warning")); + else + javaScriptActionPointer->setIcon(QIcon(":/icons/privacy-mode")); + + // Update the status of the DOM storage action. + domStorageActionPointer->setEnabled(javaScriptEnabled & cookiesEnabled); } -void BrowserWindow::updateLocalStorageAction(const bool &isEnabled) const +void BrowserWindow::updateDomStorageAction(const bool &isEnabled) const { // Set the icon according to the status. - if (isEnabled) localStorageActionPointer->setIcon(QIcon::fromTheme("disk-quota-low")); - else localStorageActionPointer->setIcon(QIcon::fromTheme("disk-quota")); + if (isEnabled) + domStorageActionPointer->setIcon(QIcon::fromTheme("disk-quota-low")); + else + domStorageActionPointer->setIcon(QIcon::fromTheme("disk-quota")); } void BrowserWindow::updateSearchEngineActions(const QString &searchEngine) const diff --git a/src/windows/BrowserWindow.h b/src/windows/BrowserWindow.h index a35e060..c66a528 100644 --- a/src/windows/BrowserWindow.h +++ b/src/windows/BrowserWindow.h @@ -32,7 +32,7 @@ #include // C++ headers. -#include +#include class BrowserWindow : public KXmlGuiWindow { @@ -63,11 +63,13 @@ private Q_SLOTS: void removeCookieFromList(const QNetworkCookie &cookie) const; void settingsConfigure(); void showProgressBar(const int &progress) const; + void toggleCookies() const; + void toggleDomStorage() const; void toggleJavaScript() const; - void toggleLocalStorage() const; + void updateCookiesAction(const bool &isEnabled); + void updateDomStorageAction(const bool &isEnabled) const; void updateDomainSettingsIndicator(const bool &status, const QString &domainSettingsDomain); - void updateJavaScriptAction(const bool &isEnabled) const; - void updateLocalStorageAction(const bool &isEnabled) const; + void updateJavaScriptAction(const bool &isEnabled); void updateSearchEngineActions(const QString &searchEngine) const; void updateUserAgentActions(const QString &userAgent) const; void updateZoomFactorAction(const double &zoomFactor); @@ -79,14 +81,18 @@ private: // The private variables. BrowserView *browserViewPointer; KConfigDialog *configDialogPointer; - std::forward_list *cookieListPointer; + std::list *cookieListPointer; + QAction *cookiesActionPointer; + bool cookiesEnabled; QString currentDomainSettingsDomain; QUrl currentUrl; double currentZoomFactor; + QAction *domStorageActionPointer; QPalette domainSettingsPalette; QAction *javaScriptActionPointer; - QAction *localStorageActionPointer; + bool javaScriptEnabled; QPalette noDomainSettingsPalette; + QAction *onTheFlyCookiesActionPointer; QProgressBar *progressBarPointer; QLabel *searchEngineLabelPointer; QAction *searchEngineMojeekActionPointer;