From 55f5a827a7abc2f248c2405e1977222062b88e6b Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Fri, 23 Mar 2018 17:07:49 +0100 Subject: Cookie filter - Requires Qt 5.11 (now required) - New settings: filter.cookies: block.all, block.thirdParty, path --- src/webengine/webengineprofile.cpp | 232 ++++++++++++++++--------------------- 1 file changed, 100 insertions(+), 132 deletions(-) (limited to 'src/webengine/webengineprofile.cpp') 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; -} -- cgit v1.2.1