diff options
author | Aqua-sama <aqua@iserlohn-fortress.net> | 2018-03-23 17:07:49 +0100 |
---|---|---|
committer | Aqua-sama <aqua@iserlohn-fortress.net> | 2018-03-23 17:07:49 +0100 |
commit | 55f5a827a7abc2f248c2405e1977222062b88e6b (patch) | |
tree | 9c49e8fa9b96072ee8c8e4b7ff0e82cd322be1f0 | |
parent | poi-config saving config (diff) | |
download | smolbote-55f5a827a7abc2f248c2405e1977222062b88e6b.tar.xz |
Cookie filter
- Requires Qt 5.11 (now required)
- New settings: filter.cookies: block.all, block.thirdParty, path
-rw-r--r-- | CMakeLists.txt | 5 | ||||
-rw-r--r-- | lib/configuration/configuration.cpp | 3 | ||||
-rw-r--r-- | linux/man/smolbote.7.ronn | 2 | ||||
-rw-r--r-- | src/CMakeLists.txt | 4 | ||||
-rw-r--r-- | src/browser.cpp | 40 | ||||
-rw-r--r-- | src/browser.h | 6 | ||||
-rw-r--r-- | src/webengine/cookiefilter.cpp | 30 | ||||
-rw-r--r-- | src/webengine/cookiefilter.h | 30 | ||||
-rw-r--r-- | src/webengine/cookieinterceptor.cpp | 34 | ||||
-rw-r--r-- | src/webengine/cookieinterceptor.h | 32 | ||||
-rw-r--r-- | src/webengine/webengineprofile.cpp | 232 | ||||
-rw-r--r-- | src/webengine/webengineprofile.h | 27 |
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 |