aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2018-03-23 17:07:49 +0100
committerAqua-sama <aqua@iserlohn-fortress.net>2018-03-23 17:07:49 +0100
commit55f5a827a7abc2f248c2405e1977222062b88e6b (patch)
tree9c49e8fa9b96072ee8c8e4b7ff0e82cd322be1f0
parentpoi-config saving config (diff)
downloadsmolbote-55f5a827a7abc2f248c2405e1977222062b88e6b.tar.xz
Cookie filter
- Requires Qt 5.11 (now required) - New settings: filter.cookies: block.all, block.thirdParty, path
-rw-r--r--CMakeLists.txt5
-rw-r--r--lib/configuration/configuration.cpp3
-rw-r--r--linux/man/smolbote.7.ronn2
-rw-r--r--src/CMakeLists.txt4
-rw-r--r--src/browser.cpp40
-rw-r--r--src/browser.h6
-rw-r--r--src/webengine/cookiefilter.cpp30
-rw-r--r--src/webengine/cookiefilter.h30
-rw-r--r--src/webengine/cookieinterceptor.cpp34
-rw-r--r--src/webengine/cookieinterceptor.h32
-rw-r--r--src/webengine/webengineprofile.cpp232
-rw-r--r--src/webengine/webengineprofile.h27
12 files changed, 205 insertions, 240 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a7cd876..88d461c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,10 +7,7 @@ option(QtDeprecatedWarnings "Qt deprecated warnings" ON)
option(UseLibCpp "Use libc++ over stdlibc++ (requires clang)" OFF)
# Libraries
-find_package(Qt5Core REQUIRED)
-find_package(Qt5Widgets REQUIRED)
-find_package(Qt5Concurrent REQUIRED)
-find_package(Qt5WebEngineWidgets REQUIRED)
+find_package(Qt5 5.11 COMPONENTS Core Widgets Concurrent WebEngineWidgets REQUIRED)
find_package(Boost COMPONENTS program_options REQUIRED)
# Global C++ settings
diff --git a/lib/configuration/configuration.cpp b/lib/configuration/configuration.cpp
index c9bae90..75d0a5b 100644
--- a/lib/configuration/configuration.cpp
+++ b/lib/configuration/configuration.cpp
@@ -60,6 +60,9 @@ Configuration::Configuration()
// Filter settings
("filter.path", po::value<std::string>()->default_value("~/.config/smolbote/hosts.d"))
+ ("filter.cookies.block.all", po::value<bool>()->default_value(false))
+ ("filter.cookies.block.thirdParty", po::value<bool>()->default_value(true))
+ ("filter.cookies.path", po::value<std::string>()->default_value("~/.config/smolbote/cookies.d"))
// Plugin settings
("plugins.path", po::value<std::string>()->default_value("~/.config/smolbote/plugins.d"))
diff --git a/linux/man/smolbote.7.ronn b/linux/man/smolbote.7.ronn
index c1e9aa0..03d0088 100644
--- a/linux/man/smolbote.7.ronn
+++ b/linux/man/smolbote.7.ronn
@@ -65,6 +65,8 @@ Settings are only loaded on launch, so re-run the browser to apply changes.
### Filter settings
* filter.path: ~/.config/smolbote/hosts.d
+* filter.cookies.block.all: false
+* filter.cookies.block.thirdParty: true
### Plugin settings
* plugins.path: ~/.config/smolbote/plugins.d
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index f017d6b..0969af6 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -48,8 +48,8 @@ add_executable(poi
widgets/mainwindowtabbar.h
# webengine
- webengine/cookieinterceptor.cpp
- webengine/cookieinterceptor.h
+ webengine/cookiefilter.cpp
+ webengine/cookiefilter.h
webengine/urlinterceptor.cpp
webengine/urlinterceptor.h
webengine/webengineprofile.cpp # todo: rename to profile
diff --git a/src/browser.cpp b/src/browser.cpp
index 22af1f0..d1e763f 100644
--- a/src/browser.cpp
+++ b/src/browser.cpp
@@ -24,21 +24,15 @@ Browser::Browser(int &argc, char *argv[])
Browser::~Browser()
{
- /* We can't modify config, so no point in saving it
- if(m_config) {
- //QtConcurrent::run(QThreadPool::globalInstance(), m_config.get(), &Configuration::writeIfNeeded);
- QtConcurrent::run([c = m_config.get()]() {
- qDebug("Writing configuration: %s", c->writeIfNeeded() ? "ok" : "failed");
- });
- }
- */
-
if(m_bookmarksManager) {
QtConcurrent::run(QThreadPool::globalInstance(), m_bookmarksManager.get(), &BookmarksWidget::save);
}
qDebug("Waiting for threads to wind down...");
qDebug("Thread pool is done: %s", QThreadPool::globalInstance()->waitForDone() ? "okay" : "failed");
+
+ delete m_urlRequestInterceptor;
+ delete m_cookieInterceptor;
}
void Browser::setConfiguration(std::shared_ptr<Configuration> &config)
@@ -66,8 +60,10 @@ void Browser::setConfiguration(std::shared_ptr<Configuration> &config)
m_bookmarksManager = std::make_shared<BookmarksWidget>(QString::fromStdString(m_config->value<std::string>("bookmarks.path").value()));
m_downloadManager = std::make_shared<DownloadsWidget>(QString::fromStdString(m_config->value<std::string>("downloads.path").value()));
- m_urlRequestInterceptor = std::make_shared<UrlRequestInterceptor>(QString::fromStdString(m_config->value<std::string>("filter.path").value()));
- m_cookieInterceptor = std::make_shared<CookieInterceptor>("");
+ m_urlRequestInterceptor = new UrlRequestInterceptor(QString::fromStdString(m_config->value<std::string>("filter.path").value()));
+ m_cookieInterceptor = new CookieFilter(
+ m_config->value<bool>("filter.cookies.block.all").value(),
+ m_config->value<bool>("filter.cookies.block.thirdParty").value());
// set default profile
m_defaultProfile = profile(QString::fromStdString(m_config->value<std::string>("browser.profile").value()));
@@ -140,11 +136,25 @@ std::shared_ptr<WebEngineProfile> Browser::profile(const QString &storageName)
Q_ASSERT(m_config);
const QString &path = QString::fromStdString(m_config->value<std::string>("profile.path").value());
- std::shared_ptr<WebEngineProfile> _profile = std::shared_ptr<WebEngineProfile>(createProfile(storageName, path, nullptr));
- _profile->setRequestInterceptor(m_urlRequestInterceptor.get());
- _profile->setCookieInterceptor(m_cookieInterceptor.get());
+ std::shared_ptr<WebEngineProfile> _profile;
+
+ if(storageName.isEmpty()) {
+ // create off-the-record profile
+ _profile = std::make_shared<WebEngineProfile>(nullptr);
+ } else {
+ // regular profile
+ _profile = std::make_shared<WebEngineProfile>(storageName, nullptr);
+ _profile->setPersistentStoragePath(path + "/storage");
+ _profile->setCachePath(path + "/cache");
+ }
+
+ _profile->setRequestInterceptor(m_urlRequestInterceptor);
+ _profile->cookieStore()->setCookieFilter([this](QWebEngineCookieStore::FilterRequest &request) {
+ request.accepted = !m_cookieInterceptor->shouldBlock(request);
+ });
+
connect(_profile.get(), &WebEngineProfile::downloadRequested, m_downloadManager.get(), &DownloadsWidget::addDownload);
- m_profiles.insert(storageName, _profile);
+ m_profiles.insert(storageName, _profile);
return _profile;
}
diff --git a/src/browser.h b/src/browser.h
index 2b9317d..acdf9a3 100644
--- a/src/browser.h
+++ b/src/browser.h
@@ -14,7 +14,7 @@
#include "webengine/webengineprofile.h"
#include <QVector>
#include <memory>
-#include "webengine/cookieinterceptor.h"
+#include "webengine/cookiefilter.h"
#include "../plugins/interfaces.h"
class MainWindow;
@@ -60,8 +60,8 @@ private:
QHash<QString, std::shared_ptr<WebEngineProfile>> m_profiles;
std::shared_ptr<WebEngineProfile> m_defaultProfile;
- std::shared_ptr<UrlRequestInterceptor> m_urlRequestInterceptor;
- std::shared_ptr<CookieInterceptor> m_cookieInterceptor;
+ UrlRequestInterceptor* m_urlRequestInterceptor;
+ CookieFilter* m_cookieInterceptor;
std::shared_ptr<BookmarksWidget> m_bookmarksManager;
std::shared_ptr<DownloadsWidget> m_downloadManager;
};
diff --git a/src/webengine/cookiefilter.cpp b/src/webengine/cookiefilter.cpp
new file mode 100644
index 0000000..08938b1
--- /dev/null
+++ b/src/webengine/cookiefilter.cpp
@@ -0,0 +1,30 @@
+/*
+ * This file is part of smolbote. It's copyrighted by the contributors recorded
+ * in the version control history of the file, available from its original
+ * location: https://neueland.iserlohn-fortress.net/smolbote.hg
+ *
+ * SPDX-License-Identifier: GPL-3.0
+ */
+
+#include "cookiefilter.h"
+
+CookieFilter::CookieFilter(bool shouldBlockAll, bool shouldBlockThirdParty, QObject *parent)
+ : QObject(parent)
+{
+ blockAll = shouldBlockAll;
+ blockThirdParty = shouldBlockThirdParty;
+}
+
+bool CookieFilter::shouldBlock(const QWebEngineCookieStore::FilterRequest &filter)
+{
+ // block all check
+ if(blockAll)
+ return true;
+
+ // block third-party cookies check
+ if(blockThirdParty && filter.thirdParty)
+ return true;
+
+ // otherwise, don't block
+ return false;
+}
diff --git a/src/webengine/cookiefilter.h b/src/webengine/cookiefilter.h
new file mode 100644
index 0000000..b537c57
--- /dev/null
+++ b/src/webengine/cookiefilter.h
@@ -0,0 +1,30 @@
+/*
+ * This file is part of smolbote. It's copyrighted by the contributors recorded
+ * in the version control history of the file, available from its original
+ * location: https://neueland.iserlohn-fortress.net/smolbote.hg
+ *
+ * SPDX-License-Identifier: GPL-3.0
+ */
+
+#ifndef SMOLBOTE_COOKIEFILTER_H
+#define SMOLBOTE_COOKIEFILTER_H
+
+#include <QObject>
+#include <QWebEngineCookieStore>
+
+class CookieFilter : public QObject
+{
+ Q_OBJECT
+
+public:
+ explicit CookieFilter(bool shouldBlockAll, bool shouldBlockThirdParty, QObject *parent = nullptr);
+
+public:
+ bool shouldBlock(const QWebEngineCookieStore::FilterRequest &filter);
+
+private:
+ bool blockAll = false;
+ bool blockThirdParty = false;
+};
+
+#endif //SMOLBOTE_COOKIEFILTER_H
diff --git a/src/webengine/cookieinterceptor.cpp b/src/webengine/cookieinterceptor.cpp
deleted file mode 100644
index e1a7d6b..0000000
--- a/src/webengine/cookieinterceptor.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * This file is part of smolbote. It's copyrighted by the contributors recorded
- * in the version control history of the file, available from its original
- * location: https://neueland.iserlohn-fortress.net/smolbote.hg
- *
- * SPDX-License-Identifier: GPL-3.0
- */
-
-#include "cookieinterceptor.h"
-#include <QDateTime>
-#include <QWebEngineCookieStore>
-
-CookieInterceptor::CookieInterceptor(const QString &path, QObject *parent)
- : QObject(parent)
-{
-}
-
-void CookieInterceptor::judgeCookie(const QNetworkCookie &cookie) {
- QWebEngineCookieStore *store = dynamic_cast<QWebEngineCookieStore *>(sender());
- Q_CHECK_PTR(store);
-
- qDebug("Added cookie %s::%s", qUtf8Printable(cookie.domain()), qUtf8Printable(cookie.name()));
-
- // A session cookie is a cookie which has no expiration date, which means it should be discarded when
- // the application's concept of session is over (usually, when the application exits)
- if(!cookie.isSessionCookie()) {
- QNetworkCookie copyCookie(cookie);
- copyCookie.setExpirationDate(QDateTime::fromString(""));
- qDebug("cookie is now session?: %s", copyCookie.isSessionCookie() ? "yes" : "no");
-
- store->deleteCookie(cookie, cookie.domain());
- store->setCookie(copyCookie, copyCookie.domain());
- }
-}
diff --git a/src/webengine/cookieinterceptor.h b/src/webengine/cookieinterceptor.h
deleted file mode 100644
index da21f04..0000000
--- a/src/webengine/cookieinterceptor.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * This file is part of smolbote. It's copyrighted by the contributors recorded
- * in the version control history of the file, available from its original
- * location: https://neueland.iserlohn-fortress.net/smolbote.hg
- *
- * SPDX-License-Identifier: GPL-3.0
- */
-
-#ifndef COOKIEINTERCEPTOR_H
-#define COOKIEINTERCEPTOR_H
-
-#include <QObject>
-#include <QNetworkCookie>
-
-class CookieInterceptor : public QObject
-{
- Q_OBJECT
-
-public:
- struct CookieRule {
- bool isBlocking;
- };
-
- explicit CookieInterceptor(const QString &path, QObject *parent = nullptr);
-
-public slots:
- void judgeCookie(const QNetworkCookie &cookie);
-
-private:
-};
-
-#endif //COOKIEINTERCEPTOR_H
diff --git a/src/webengine/webengineprofile.cpp b/src/webengine/webengineprofile.cpp
index e8aa0ae..263dcb5 100644
--- a/src/webengine/webengineprofile.cpp
+++ b/src/webengine/webengineprofile.cpp
@@ -24,7 +24,7 @@ WebEngineProfile::WebEngineProfile(QObject *parent)
// Off-the-record profiles have no persistent path
}
-WebEngineProfile::WebEngineProfile(const QString &name, const QString &path, QObject *parent)
+WebEngineProfile::WebEngineProfile(const QString &name, QObject *parent)
: QWebEngineProfile(name, parent)
{
m_name = name;
@@ -32,17 +32,9 @@ WebEngineProfile::WebEngineProfile(const QString &name, const QString &path, QOb
#ifdef QT_DEBUG
qDebug("Creating profile %s", qUtf8Printable(m_name));
#endif
-
- setPersistentStoragePath(path + "/storage");
- setCachePath(path + "/cache");
}
-WebEngineProfile::~WebEngineProfile()
-{
- if(shouldSaveProfile) {
- saveProfile();
- }
-}
+WebEngineProfile::~WebEngineProfile() = default;
QString WebEngineProfile::name() const
{
@@ -54,22 +46,112 @@ QUrl WebEngineProfile::homepage() const
return m_homepage;
}
-void WebEngineProfile::setHomepage(const QUrl &url)
-{
- m_homepage = url;
-}
-
QUrl WebEngineProfile::newtab() const
{
return m_newtab;
}
-void WebEngineProfile::setNewtab(const QUrl &url)
+void WebEngineProfile::loadProfile(const QString &path)
{
- m_newtab = url;
+ m_configPath = path;
+
+ // check if config file exists
+ if(!QFileInfo::exists(m_configPath)) {
+#ifdef QT_DEBUG
+ qDebug("No config for profile '%s': %s", qUtf8Printable(m_name), qUtf8Printable(m_configPath));
+#endif
+ return;
+ }
+
+#ifdef QT_DEBUG
+ qDebug("Reading config for profile '%s': %s", qUtf8Printable(m_name), qUtf8Printable(m_configPath));
+#endif
+ QSettings config(m_configPath, QSettings::IniFormat);
+
+ m_homepage = config.value("homepage", m_homepage).toUrl();
+ m_newtab = config.value("newtab", m_newtab).toUrl();
+
+ config.beginGroup("http");
+ setHttpUserAgent(config.value("userAgent", httpUserAgent()).toString());
+ setHttpAcceptLanguage(config.value("accept-lang", httpAcceptLanguage()).toString());
+ {
+ QString cacheType = config.value("cacheType").toString();
+ if(cacheType == "memory") {
+ setHttpCacheType(QWebEngineProfile::MemoryHttpCache);
+ } else if(cacheType == "disk") {
+ setHttpCacheType(QWebEngineProfile::DiskHttpCache);
+ } else if(cacheType == "disabled") {
+ setHttpCacheType(QWebEngineProfile::NoCache);
+ }
+ }
+ setHttpCacheMaximumSize(config.value("cacheSize").toInt());
+ config.endGroup(); // http
+
+ config.beginGroup("policy");
+ {
+ QString cookies = config.value("cookies").toString();
+ if(cookies == "disabled") {
+ setPersistentCookiesPolicy(QWebEngineProfile::NoPersistentCookies);
+ } else if(cookies == "allow") {
+ setPersistentCookiesPolicy(QWebEngineProfile::AllowPersistentCookies);
+ } else if(cookies == "force") {
+ setPersistentCookiesPolicy(QWebEngineProfile::ForcePersistentCookies);
+ }
+ }
+ config.endGroup(); // policy
+
+ config.beginGroup("attributes");
+ QWebEngineSettings *s = settings();
+ s->setAttribute(QWebEngineSettings::AutoLoadImages,
+ config.value("autoLoadImages", s->testAttribute(QWebEngineSettings::AutoLoadImages)).toBool());
+ s->setAttribute(QWebEngineSettings::JavascriptEnabled,
+ config.value("javascriptEnabled", s->testAttribute(QWebEngineSettings::JavascriptEnabled)).toBool());
+ s->setAttribute(QWebEngineSettings::JavascriptCanOpenWindows,
+ config.value("javascriptCanOpenWindows", s->testAttribute(QWebEngineSettings::JavascriptCanOpenWindows)).toBool());
+ s->setAttribute(QWebEngineSettings::JavascriptCanAccessClipboard,
+ config.value("javascriptCanAccessClipboard", s->testAttribute(QWebEngineSettings::JavascriptCanAccessClipboard)).toBool());
+ s->setAttribute(QWebEngineSettings::LinksIncludedInFocusChain,
+ config.value("linksIncludedInFocusChain", s->testAttribute(QWebEngineSettings::LinksIncludedInFocusChain)).toBool());
+ s->setAttribute(QWebEngineSettings::LocalStorageEnabled,
+ config.value("localStorageEnabled", s->testAttribute(QWebEngineSettings::LocalStorageEnabled)).toBool());
+ s->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls,
+ config.value("localContentCanAccessRemoteUrls", s->testAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls)).toBool());
+ s->setAttribute(QWebEngineSettings::XSSAuditingEnabled,
+ config.value("xssAuditingEnabled", s->testAttribute(QWebEngineSettings::XSSAuditingEnabled)).toBool());
+ s->setAttribute(QWebEngineSettings::SpatialNavigationEnabled,
+ config.value("spatialNavigationEnabled", s->testAttribute(QWebEngineSettings::SpatialNavigationEnabled)).toBool());
+ s->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls,
+ config.value("localContentCanAccessFileUrls", s->testAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls)).toBool());
+ s->setAttribute(QWebEngineSettings::HyperlinkAuditingEnabled,
+ config.value("hyperlinkAuditingEnabled", s->testAttribute(QWebEngineSettings::HyperlinkAuditingEnabled)).toBool());
+ s->setAttribute(QWebEngineSettings::ScrollAnimatorEnabled,
+ config.value("scrollAnimatorEnabled", s->testAttribute(QWebEngineSettings::ScrollAnimatorEnabled)).toBool());
+ s->setAttribute(QWebEngineSettings::ErrorPageEnabled,
+ config.value("errorPageEnabled", s->testAttribute(QWebEngineSettings::ErrorPageEnabled)).toBool());
+ s->setAttribute(QWebEngineSettings::PluginsEnabled,
+ config.value("pluginsEnabled", s->testAttribute(QWebEngineSettings::PluginsEnabled)).toBool());
+ s->setAttribute(QWebEngineSettings::FullScreenSupportEnabled,
+ config.value("fullscreenSupportEnabled", s->testAttribute(QWebEngineSettings::FullScreenSupportEnabled)).toBool());
+ s->setAttribute(QWebEngineSettings::ScreenCaptureEnabled,
+ config.value("screenCaptureEnabled", s->testAttribute(QWebEngineSettings::ScreenCaptureEnabled)).toBool());
+ s->setAttribute(QWebEngineSettings::WebGLEnabled,
+ config.value("webglEnabled", s->testAttribute(QWebEngineSettings::WebGLEnabled)).toBool());
+ s->setAttribute(QWebEngineSettings::Accelerated2dCanvasEnabled,
+ config.value("accelerated2dCanvasEnabled", s->testAttribute(QWebEngineSettings::Accelerated2dCanvasEnabled)).toBool());
+ s->setAttribute(QWebEngineSettings::AutoLoadIconsForPage,
+ config.value("autoLoadIconsForPage", s->testAttribute(QWebEngineSettings::AutoLoadIconsForPage)).toBool());
+ s->setAttribute(QWebEngineSettings::TouchIconsEnabled,
+ config.value("touchIconsEnabled", s->testAttribute(QWebEngineSettings::TouchIconsEnabled)).toBool());
+ s->setAttribute(QWebEngineSettings::FocusOnNavigationEnabled,
+ config.value("focusOnNavigationEnabled", s->testAttribute(QWebEngineSettings::FocusOnNavigationEnabled)).toBool());
+ s->setAttribute(QWebEngineSettings::PrintElementBackgrounds,
+ config.value("printElementBackgrounds", s->testAttribute(QWebEngineSettings::PrintElementBackgrounds)).toBool());
+ s->setAttribute(QWebEngineSettings::AllowRunningInsecureContent,
+ config.value("allowRunningInsecureContent", s->testAttribute(QWebEngineSettings::AllowRunningInsecureContent)).toBool());
+ config.endGroup(); // attributes
}
-void WebEngineProfile::saveProfile()
+void WebEngineProfile::saveProfile(const QString &path)
{
QSettings config(persistentStoragePath() + "/profile.ini", QSettings::IniFormat);
@@ -138,117 +220,3 @@ void WebEngineProfile::saveProfile()
config.sync();
}
-
-void WebEngineProfile::setCookieInterceptor(CookieInterceptor *interceptor)
-{
- connect(cookieStore(), &QWebEngineCookieStore::cookieAdded, interceptor, &CookieInterceptor::judgeCookie);
- cookieStore()->loadAllCookies();
-}
-
-WebEngineProfile *createProfile(const QString &name, const QString &path, QObject *parent)
-{
- WebEngineProfile *profile;
- if(name.isEmpty()) {
- profile = new WebEngineProfile(parent);
- } else {
- profile = new WebEngineProfile(name, path, parent);
- }
-
- // Read profile settings
- const QString profileIniPath = path + "/profile.ini";
- if(QFileInfo::exists(profileIniPath)) {
- qDebug("Reading profile from [%s]", qUtf8Printable(profileIniPath));
- QSettings config(profileIniPath, QSettings::IniFormat);
-
- profile->setHomepage(config.value("homepage", profile->homepage()).toUrl());
- profile->setNewtab(config.value("newtab", profile->newtab()).toUrl());
-
- config.beginGroup("http");
- profile->setHttpUserAgent(config.value("userAgent").toString());
- profile->setHttpAcceptLanguage(config.value("accept-lang").toString());
- {
- QString cacheType = config.value("cacheType").toString();
- if(cacheType == "memory") {
- profile->setHttpCacheType(QWebEngineProfile::MemoryHttpCache);
- } else if(cacheType == "disk") {
- profile->setHttpCacheType(QWebEngineProfile::DiskHttpCache);
- } else if(cacheType == "disabled") {
- profile->setHttpCacheType(QWebEngineProfile::NoCache);
- }
- }
- profile->setHttpCacheMaximumSize(config.value("cacheSize").toInt());
- config.endGroup(); // http
-
- config.beginGroup("policy");
- {
- QString cookies = config.value("cookies").toString();
- if(cookies == "disabled") {
- profile->setPersistentCookiesPolicy(QWebEngineProfile::NoPersistentCookies);
- } else if(cookies == "allow") {
- profile->setPersistentCookiesPolicy(QWebEngineProfile::AllowPersistentCookies);
- } else if(cookies == "force") {
- profile->setPersistentCookiesPolicy(QWebEngineProfile::ForcePersistentCookies);
- }
- }
- config.endGroup(); // policy
-
- config.beginGroup("attributes");
- QWebEngineSettings *s = profile->settings();
- s->setAttribute(QWebEngineSettings::AutoLoadImages,
- config.value("autoLoadImages", s->testAttribute(QWebEngineSettings::AutoLoadImages)).toBool());
- s->setAttribute(QWebEngineSettings::JavascriptEnabled,
- config.value("javascriptEnabled", s->testAttribute(QWebEngineSettings::JavascriptEnabled)).toBool());
- s->setAttribute(QWebEngineSettings::JavascriptCanOpenWindows,
- config.value("javascriptCanOpenWindows", s->testAttribute(QWebEngineSettings::JavascriptCanOpenWindows)).toBool());
- s->setAttribute(QWebEngineSettings::JavascriptCanAccessClipboard,
- config.value("javascriptCanAccessClipboard", s->testAttribute(QWebEngineSettings::JavascriptCanAccessClipboard)).toBool());
- s->setAttribute(QWebEngineSettings::LinksIncludedInFocusChain,
- config.value("linksIncludedInFocusChain", s->testAttribute(QWebEngineSettings::LinksIncludedInFocusChain)).toBool());
- s->setAttribute(QWebEngineSettings::LocalStorageEnabled,
- config.value("localStorageEnabled", s->testAttribute(QWebEngineSettings::LocalStorageEnabled)).toBool());
- s->setAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls,
- config.value("localContentCanAccessRemoteUrls", s->testAttribute(QWebEngineSettings::LocalContentCanAccessRemoteUrls)).toBool());
- s->setAttribute(QWebEngineSettings::XSSAuditingEnabled,
- config.value("xssAuditingEnabled", s->testAttribute(QWebEngineSettings::XSSAuditingEnabled)).toBool());
- s->setAttribute(QWebEngineSettings::SpatialNavigationEnabled,
- config.value("spatialNavigationEnabled", s->testAttribute(QWebEngineSettings::SpatialNavigationEnabled)).toBool());
- s->setAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls,
- config.value("localContentCanAccessFileUrls", s->testAttribute(QWebEngineSettings::LocalContentCanAccessFileUrls)).toBool());
- s->setAttribute(QWebEngineSettings::HyperlinkAuditingEnabled,
- config.value("hyperlinkAuditingEnabled", s->testAttribute(QWebEngineSettings::HyperlinkAuditingEnabled)).toBool());
- s->setAttribute(QWebEngineSettings::ScrollAnimatorEnabled,
- config.value("scrollAnimatorEnabled", s->testAttribute(QWebEngineSettings::ScrollAnimatorEnabled)).toBool());
- s->setAttribute(QWebEngineSettings::ErrorPageEnabled,
- config.value("errorPageEnabled", s->testAttribute(QWebEngineSettings::ErrorPageEnabled)).toBool());
- s->setAttribute(QWebEngineSettings::PluginsEnabled,
- config.value("pluginsEnabled", s->testAttribute(QWebEngineSettings::PluginsEnabled)).toBool());
- s->setAttribute(QWebEngineSettings::FullScreenSupportEnabled,
- config.value("fullscreenSupportEnabled", s->testAttribute(QWebEngineSettings::FullScreenSupportEnabled)).toBool());
- s->setAttribute(QWebEngineSettings::ScreenCaptureEnabled,
- config.value("screenCaptureEnabled", s->testAttribute(QWebEngineSettings::ScreenCaptureEnabled)).toBool());
- s->setAttribute(QWebEngineSettings::WebGLEnabled,
- config.value("webglEnabled", s->testAttribute(QWebEngineSettings::WebGLEnabled)).toBool());
- s->setAttribute(QWebEngineSettings::Accelerated2dCanvasEnabled,
- config.value("accelerated2dCanvasEnabled", s->testAttribute(QWebEngineSettings::Accelerated2dCanvasEnabled)).toBool());
- s->setAttribute(QWebEngineSettings::AutoLoadIconsForPage,
- config.value("autoLoadIconsForPage", s->testAttribute(QWebEngineSettings::AutoLoadIconsForPage)).toBool());
- s->setAttribute(QWebEngineSettings::TouchIconsEnabled,
- config.value("touchIconsEnabled", s->testAttribute(QWebEngineSettings::TouchIconsEnabled)).toBool());
-#if QT_VERSION >= QT_VERSION_CHECK(5, 8, 0)
- s->setAttribute(QWebEngineSettings::FocusOnNavigationEnabled,
- config.value("focusOnNavigationEnabled", s->testAttribute(QWebEngineSettings::FocusOnNavigationEnabled)).toBool());
- s->setAttribute(QWebEngineSettings::PrintElementBackgrounds,
- config.value("printElementBackgrounds", s->testAttribute(QWebEngineSettings::PrintElementBackgrounds)).toBool());
- s->setAttribute(QWebEngineSettings::AllowRunningInsecureContent,
- config.value("allowRunningInsecureContent", s->testAttribute(QWebEngineSettings::AllowRunningInsecureContent)).toBool());
-#endif
- config.endGroup(); // attributes
- }
-#ifdef QT_DEBUG
- else {
- qDebug("No config for profile %s: %s", qUtf8Printable(name), qUtf8Printable(profileIniPath));
- }
-#endif
-
- return profile;
-}
diff --git a/src/webengine/webengineprofile.h b/src/webengine/webengineprofile.h
index d93e079..6a0d4e2 100644
--- a/src/webengine/webengineprofile.h
+++ b/src/webengine/webengineprofile.h
@@ -6,44 +6,35 @@
* SPDX-License-Identifier: GPL-3.0
*/
-#ifndef WEBENGINEPROFILE_H
-#define WEBENGINEPROFILE_H
+#ifndef SMOLBOTE_WEBENGINEPROFILE_H
+#define SMOLBOTE_WEBENGINEPROFILE_H
#include <QUrl>
#include <QWebEngineProfile>
-#include "cookieinterceptor.h"
+#include "cookiefilter.h"
class WebEngineProfile : public QWebEngineProfile
{
Q_OBJECT
public:
explicit WebEngineProfile(QObject *parent = nullptr);
- explicit WebEngineProfile(const QString &name, const QString &path, QObject *parent = nullptr);
+ explicit WebEngineProfile(const QString &name, QObject *parent = nullptr);
- ~WebEngineProfile();
+ ~WebEngineProfile() override;
QString name() const;
-
QUrl homepage() const;
- void setHomepage(const QUrl &url);
-
QUrl newtab() const;
- void setNewtab(const QUrl &url);
-
- void setCookieInterceptor(CookieInterceptor *interceptor);
-
-signals:
public slots:
- void saveProfile();
+ void loadProfile(const QString &path);
+ void saveProfile(const QString &path = QString());
private:
+ QString m_configPath;
QString m_name;
- bool shouldSaveProfile = false;
QUrl m_homepage = QUrl("about:blank");
QUrl m_newtab = QUrl("about:blank");
};
-[[nodiscard]] WebEngineProfile *createProfile(const QString &name, const QString &path, QObject *parent);
-
-#endif // WEBENGINEPROFILE_H
+#endif // SMOLBOTE_WEBENGINEPROFILE_H