]> gitweb.stoutner.com Git - PrivacyBrowserPC.git/blobdiff - src/windows/BrowserWindow.cpp
Initial Cookies implementation using a QVBoxLayout.
[PrivacyBrowserPC.git] / src / windows / BrowserWindow.cpp
index 44614194b78b1e75621316ed4afc52ff5d541781..3293f02dbb4983eccd9246d052bcfdce0f6c256a 100644 (file)
@@ -22,6 +22,7 @@
 #include "Settings.h"
 #include "ui_SettingsPrivacy.h"
 #include "ui_SettingsGeneral.h"
+#include "dialogs/CookiesDialog.h"
 #include "dialogs/DomainSettingsDialog.h"
 #include "helpers/SearchEngineHelper.h"
 #include "helpers/UserAgentHelper.h"
@@ -32,6 +33,7 @@
 
 // Qt toolkit headers.
 #include <QInputDialog>
+#include <QNetworkCookie>
 #include <QStatusBar>
 
 BrowserWindow::BrowserWindow() : KXmlGuiWindow()
@@ -56,6 +58,7 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow()
 
     // Add the custom actions.
     userAgentPrivacyBrowserActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_privacy_browser"));
+    userAgentWebEngineDefaultActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_webengine_default"));
     userAgentFirefoxLinuxActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_firefox_linux"));
     userAgentChromiumLinuxActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_chromium_linux"));
     userAgentFirefoxWindowsActionPointer = actionCollectionPointer->addAction(QStringLiteral("user_agent_firefox_windows"));
@@ -71,9 +74,10 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow()
     searchEngineBingActionPointer = actionCollectionPointer->addAction(QStringLiteral("search_engine_bing"));
     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"));
     javaScriptActionPointer = actionCollectionPointer->addAction(QStringLiteral("javascript"));
     localStorageActionPointer = actionCollectionPointer->addAction(QStringLiteral("local_storage"));
-    domainSettingsActionPointer = actionCollectionPointer->addAction(QStringLiteral("domain_settings"));
 
     // Create the action groups
     QActionGroup *userAgentActionGroupPointer = new QActionGroup(this);
@@ -81,6 +85,7 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow()
 
     // Add the actions to the groups.
     userAgentActionGroupPointer->addAction(userAgentPrivacyBrowserActionPointer);
+    userAgentActionGroupPointer->addAction(userAgentWebEngineDefaultActionPointer);
     userAgentActionGroupPointer->addAction(userAgentFirefoxLinuxActionPointer);
     userAgentActionGroupPointer->addAction(userAgentChromiumLinuxActionPointer);
     userAgentActionGroupPointer->addAction(userAgentFirefoxWindowsActionPointer);
@@ -98,6 +103,7 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow()
 
     // Set some actions to be checkable.
     userAgentPrivacyBrowserActionPointer->setCheckable(true);
+    userAgentWebEngineDefaultActionPointer->setCheckable(true);
     userAgentFirefoxLinuxActionPointer->setCheckable(true);
     userAgentChromiumLinuxActionPointer->setCheckable(true);
     userAgentFirefoxWindowsActionPointer->setCheckable(true);
@@ -115,6 +121,7 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow()
 
     // Set the non-mutable action text.
     userAgentPrivacyBrowserActionPointer->setText(UserAgentHelper::PRIVACY_BROWSER_TRANSLATED);
+    userAgentWebEngineDefaultActionPointer->setText(UserAgentHelper::WEB_ENGINE_DEFAULT_TRANSLATED);
     userAgentFirefoxLinuxActionPointer->setText(UserAgentHelper::FIREFOX_LINUX_TRANSLATED);
     userAgentChromiumLinuxActionPointer->setText(UserAgentHelper::CHROMIUM_LINUX_TRANSLATED);
     userAgentFirefoxWindowsActionPointer->setText(UserAgentHelper::FIREFOX_WINDOWS_TRANSLATED);
@@ -127,12 +134,14 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow()
     searchEngineGoogleActionPointer->setText(i18nc("Search engine", "Google"));
     searchEngineBingActionPointer->setText(i18nc("Search engine", "Bing"));
     searchEngineYahooActionPointer->setText(i18nc("Search engine", "Yahoo"));
-    javaScriptActionPointer->setText(i18nc("JavaScript button", "JavaScript"));
-    localStorageActionPointer->setText(i18nc("Local Storage Button", "Local Storage"));
-    domainSettingsActionPointer->setText(i18nc("Domain Settings button", "Domain Settings"));
+    domainSettingsActionPointer->setText(i18nc("Domain Settings action", "Domain Settings"));
+    cookiesActionPointer->setText(i18nc("Cookies action", "Cookies"));
+    javaScriptActionPointer->setText(i18nc("JavaScript action", "JavaScript"));
+    localStorageActionPointer->setText(i18nc("Local Storage action", "Local Storage"));
 
     // Set the action icons.
     userAgentPrivacyBrowserActionPointer->setIcon(QIcon(":/icons/privacy-mode"));
+    userAgentWebEngineDefaultActionPointer->setIcon(QIcon::fromTheme(QStringLiteral("user-group-properties")));
     userAgentFirefoxLinuxActionPointer->setIcon(QIcon::fromTheme(QStringLiteral("firefox-esr")));
     userAgentChromiumLinuxActionPointer->setIcon(QIcon::fromTheme(QStringLiteral("chromium")));
     userAgentFirefoxWindowsActionPointer->setIcon(QIcon::fromTheme(QStringLiteral("firefox-esr")));
@@ -149,6 +158,7 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow()
     searchEngineCustomActionPointer->setIcon(QIcon::fromTheme(QStringLiteral("search")));
     zoomFactorActionPointer->setIcon(QIcon::fromTheme(QStringLiteral("zoom")));
     domainSettingsActionPointer->setIcon(QIcon::fromTheme(QStringLiteral("settings-configure")));
+    cookiesActionPointer->setIcon(QIcon::fromTheme(QStringLiteral("preferences-web-browser-cookies")));
 
     // Update the on-the-fly menus.
     connect(browserViewPointer, SIGNAL(updateUserAgentActions(QString)), this, SLOT(updateUserAgentActions(QString)));
@@ -161,11 +171,12 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow()
 
     // Display dialogs.
     connect(zoomFactorActionPointer, SIGNAL(triggered()), this, SLOT(getZoomFactorFromUser()));
+    connect(cookiesActionPointer, SIGNAL(triggered()), this, SLOT(openCookiesDialog()));
+    connect(domainSettingsActionPointer, SIGNAL(triggered()), this, SLOT(openDomainSettings()));
 
     // Connect the URL toolbar actions.
     connect(javaScriptActionPointer, SIGNAL(triggered()), this, SLOT(toggleJavaScript()));
     connect(localStorageActionPointer, SIGNAL(triggered()), this, SLOT(toggleLocalStorage()));
-    connect(domainSettingsActionPointer, SIGNAL(triggered()), this, SLOT(openDomainSettings()));
 
     // Update the URL toolbar actions.
     connect(browserViewPointer, SIGNAL(updateBackAction(bool)), backActionPointer, SLOT(setEnabled(bool)));
@@ -213,6 +224,9 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow()
     connect(browserViewPointer, SIGNAL(showProgressBar(const int)), this, SLOT(showProgressBar(const int)));
     connect(browserViewPointer, SIGNAL(hideProgressBar()), progressBarPointer, SLOT(hide()));
 
+    // Clear the URL line edit focus when requested.
+    connect(browserViewPointer, SIGNAL(clearUrlLineEditFocus()), this, SLOT(clearUrlLineEditFocus()));
+
     // Get the URL line edit palettes.
     noDomainSettingsPalette = urlLineEditPointer->palette();
     domainSettingsPalette = urlLineEditPointer->palette();
@@ -223,10 +237,29 @@ BrowserWindow::BrowserWindow() : KXmlGuiWindow()
     // Update the applied palette.
     connect(browserViewPointer, SIGNAL(updateDomainSettingsIndicator(bool, QString)), this, SLOT(updateDomainSettingsIndicator(bool, QString)));
 
+    // Initialize the cookie list.
+    cookieListPointer = new QList<QNetworkCookie>;
+
+    // Add new cookies to the list.
+    connect(browserViewPointer, SIGNAL(addCookie(QNetworkCookie)), this, SLOT(addCookie(QNetworkCookie)));
+
     // Load the initial website.
     browserViewPointer->loadInitialWebsite();
 }
 
+void BrowserWindow::addCookie(const QNetworkCookie &newCookie) const
+{
+    // Check to see if the list already contains a cookie with this ID.
+    for (QNetworkCookie existingCookie : *cookieListPointer)
+    {
+        // Remove the old version of the cookie.
+        if (existingCookie.hasSameIdentifier(newCookie)) cookieListPointer->removeOne(existingCookie);
+    }
+
+    // Add the new cookie to the list.
+    cookieListPointer->append(newCookie);
+}
+
 void BrowserWindow::addOrEditDomainSettings() const
 {
     // Remove the focus from the URL line edit.
@@ -269,6 +302,12 @@ void BrowserWindow::back() const
     browserViewPointer->back();
 }
 
+void BrowserWindow::clearUrlLineEditFocus() const
+{
+    // Remove the focus from the URL line edit.
+    urlLineEditPointer->clearFocus();
+}
+
 void BrowserWindow::fileNew() const
 {
     // Display a new instance of Privacy Browser.
@@ -326,6 +365,22 @@ void BrowserWindow::loadUrlFromLineEdit(const QString &url) const
     browserViewPointer->loadUrlFromLineEdit(url);
 }
 
+void BrowserWindow::openCookiesDialog()
+{
+    // Remove the focus from the URL line edit.
+    urlLineEditPointer->clearFocus();
+
+    // Instantiate the cookie settings dialog.
+    CookiesDialog *cookiesDialogPointer = new CookiesDialog(cookieListPointer);
+
+    // Show the dialog.
+    cookiesDialogPointer->show();
+
+    // Connect the dialog signals.
+    connect(cookiesDialogPointer, SIGNAL(deleteAllCookies()), browserViewPointer, SLOT(deleteAllCookies()));
+}
+
+
 void BrowserWindow::openDomainSettings() const
 {
     // Remove the focus from the URL line edit.
@@ -334,12 +389,6 @@ void BrowserWindow::openDomainSettings() const
     // Instantiate the domain settings dialog.
     DomainSettingsDialog *domainSettingsDialogPointer = new DomainSettingsDialog();
 
-    // Set the dialog window title.
-    domainSettingsDialogPointer->setWindowTitle(i18nc("The domain settings dialog title", "Domain Settings"));
-
-    // Set the modality.
-    domainSettingsDialogPointer->setWindowModality(Qt::WindowModality::WindowModal);;
-
     // Show the dialog.
     domainSettingsDialogPointer->show();
 
@@ -552,6 +601,7 @@ void BrowserWindow::updateUserAgentActions(const QString &userAgent) const
 
     // Check the indicated on-the-fly user agent.
     if (userAgent == UserAgentHelper::PRIVACY_BROWSER_USER_AGENT) userAgentPrivacyBrowserActionPointer->setChecked(true);  // Privacy Browser.
+    else if (userAgent == BrowserView::webEngineDefaultUserAgent) userAgentWebEngineDefaultActionPointer->setChecked(true);  // WebEngine default.
     else if (userAgent == UserAgentHelper::FIREFOX_LINUX_USER_AGENT) userAgentFirefoxLinuxActionPointer->setChecked(true);  // Firefox Linux.
     else if (userAgent == UserAgentHelper::CHROMIUM_LINUX_USER_AGENT) userAgentChromiumLinuxActionPointer->setChecked(true);  // Chromium Linux.
     else if (userAgent == UserAgentHelper::FIREFOX_WINDOWS_USER_AGENT) userAgentFirefoxWindowsActionPointer->setChecked(true);  // Firefox Windows.