27#include <QNetworkCookie>
28#include <QWebEngineProfile>
29#include <QWebEngineSettings>
36 , m_client(
mApp->webProfile()->cookieStore())
39 m_client->loadAllCookies();
41 m_client->setCookieFilter(std::bind(&CookieJar::cookieFilter,
this, std::placeholders::_1));
43 connect(m_client, &QWebEngineCookieStore::cookieAdded,
this, &CookieJar::slotCookieAdded);
44 connect(m_client, &QWebEngineCookieStore::cookieRemoved,
this, &CookieJar::slotCookieRemoved);
49 m_client->setCookieFilter(
nullptr);
56 m_allowCookies = settings.
value(
QSL(
"allowCookies"),
true).toBool();
57 m_filterThirdParty = settings.
value(
QSL(
"filterThirdPartyCookies"),
false).toBool();
58 m_filterTrackingCookie = settings.
value(
QSL(
"filterTrackingCookie"),
false).toBool();
64 m_allowCookies = allow;
69 m_client->deleteCookie(cookie);
79 QStringList whitelist;
82 QString sqlTable =
mApp->siteSettingsManager()->sqlTable();
85 query.prepare(
QSL(
"SELECT server FROM %1 WHERE %2=?").arg(sqlTable, sqlColumn));
89 while (query.next()) {
90 QString server = query.value(0).toString();
91 whitelist.append(server);
94 if (deleteAll || whitelist.isEmpty()) {
95 m_client->deleteAllCookies();
99 for (
const QNetworkCookie &cookie : std::as_const(m_cookies)) {
101 m_client->deleteCookie(cookie);
111 if (cookieDomain.startsWith(QLatin1Char(
'.'))) {
112 cookieDomain.remove(0, 1);
115 if (siteDomain.startsWith(QLatin1Char(
'.'))) {
116 siteDomain.remove(0, 1);
124 for (
const QString &d : list) {
133void CookieJar::slotCookieAdded(
const QNetworkCookie &cookie)
135 if (rejectCookie(QString(), cookie, cookie.domain())) {
136 m_client->deleteCookie(cookie);
140 m_cookies.append(cookie);
144void CookieJar::slotCookieRemoved(
const QNetworkCookie &cookie)
146 if (m_cookies.removeOne(cookie))
150bool CookieJar::cookieFilter(
const QWebEngineCookieStore::FilterRequest &request)
const
159 qDebug() <<
"Cookies not allowed" << request.origin;
166 qDebug() <<
"Cookies denied" << request.origin;
171 if (m_filterThirdParty && request.thirdParty) {
173 qDebug() <<
"thirdParty" << request.firstPartyUrl << request.origin;
181bool CookieJar::rejectCookie(
const QString &domain,
const QNetworkCookie &cookie,
const QString &cookieDomain)
const
192 qDebug() <<
"Cookies not allowed" << cookie;
199 qDebug() <<
"Cookies denied" << cookie;
204#ifdef QTWEBENGINE_DISABLED
205 if (m_filterThirdParty) {
209 qDebug() <<
"purged for domain mismatch" << cookie << cookieDomain << domain;
216 if (m_filterTrackingCookie && cookie.name().startsWith(
"__utm")) {
218 qDebug() <<
"purged as tracking " << cookie;
bool listMatchesDomain(const QStringList &list, const QString &cookieDomain) const
QVector< QNetworkCookie > getAllCookies() const
void cookieAdded(const QNetworkCookie &cookie)
void cookieRemoved(const QNetworkCookie &cookie)
void deleteCookie(const QNetworkCookie &cookie)
void deleteAllCookies(bool deleteAll=true)
void setAllowCookies(bool allow)
CookieJar(QObject *parent=nullptr)
bool matchDomain(QString cookieDomain, QString siteDomain) const
void beginGroup(const QString &prefix)
QVariant value(const QString &key, const QVariant &defaultValue=QVariant())
static SqlDatabase * instance()