]> gitweb.stoutner.com Git - PrivacyBrowserPC.git/blobdiff - src/windows/BrowserWindow.cpp
Implement manual adding of cookies.
[PrivacyBrowserPC.git] / src / windows / BrowserWindow.cpp
index 3ddba02c9e3809475a6d7393354b5cbc5eae33fb..c70bab18cbffbc5539d43b12b858eb2fb051eac2 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()
@@ -72,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);
@@ -131,9 +134,10 @@ 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"));
@@ -154,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)));
@@ -166,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)));
@@ -231,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(addCookieToList(QNetworkCookie)));
+
     // Load the initial website.
     browserViewPointer->loadInitialWebsite();
 }
 
+void BrowserWindow::addCookieToList(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.
@@ -340,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(addCookie(QNetworkCookie)), browserViewPointer, SLOT(addCookieToStore(QNetworkCookie)));
+    connect(cookiesDialogPointer, SIGNAL(deleteAllCookies()), browserViewPointer, SLOT(deleteAllCookies()));
+}
+
 void BrowserWindow::openDomainSettings() const
 {
     // Remove the focus from the URL line edit.
@@ -348,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();