aboutsummaryrefslogtreecommitdiff
path: root/src/webengine
diff options
context:
space:
mode:
Diffstat (limited to 'src/webengine')
-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
6 files changed, 169 insertions, 216 deletions
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