diff --git a/src/lib/cookies/cookiejar.cpp b/src/lib/cookies/cookiejar.cpp index 619c1a67b..cf3781cb8 100644 --- a/src/lib/cookies/cookiejar.cpp +++ b/src/lib/cookies/cookiejar.cpp @@ -36,6 +36,10 @@ CookieJar::CookieJar(QObject* parent) loadSettings(); m_client->loadAllCookies(); +#if QT_VERSION >= QT_VERSION_CHECK(5, 11, 0) + m_client->setCookieFilter(std::bind(&CookieJar::cookieFilter, this, std::placeholders::_1)); +#endif + connect(m_client, &QWebEngineCookieStore::cookieAdded, this, &CookieJar::slotCookieAdded); connect(m_client, &QWebEngineCookieStore::cookieRemoved, this, &CookieJar::slotCookieRemoved); } @@ -116,14 +120,40 @@ void CookieJar::slotCookieRemoved(const QNetworkCookie &cookie) emit cookieRemoved(cookie); } -bool CookieJar::acceptCookie(const QUrl &firstPartyUrl, const QByteArray &cookieLine, const QUrl &cookieSource) const +#if QT_VERSION >= QT_VERSION_CHECK(5, 11, 0) +void CookieJar::cookieFilter(QWebEngineCookieStore::FilterRequest &request) const { - const QList cookies = QNetworkCookie::parseCookies(cookieLine); - Q_ASSERT(cookies.size() == 1); + if (!m_allowCookies) { + bool result = listMatchesDomain(m_whitelist, request.origin.host()); + if (!result) { +#ifdef COOKIE_DEBUG + qDebug() << "not in whitelist" << request.origin; +#endif + request.accepted = false; + return; + } + } + + if (m_allowCookies) { + bool result = listMatchesDomain(m_blacklist, request.origin.host()); + if (result) { +#ifdef COOKIE_DEBUG + qDebug() << "found in blacklist" << request.origin.host(); +#endif + request.accepted = false; + return; + } + } - const QNetworkCookie cookie = cookies.at(0); - return !rejectCookie(firstPartyUrl.host(), cookie, cookieSource.host()); + if (m_filterThirdParty && request.thirdParty) { +#ifdef COOKIE_DEBUG + qDebug() << "thirdParty" << request.firstPartyUrl << request.origin; +#endif + request.accepted = false; + return; + } } +#endif bool CookieJar::rejectCookie(const QString &domain, const QNetworkCookie &cookie, const QString &cookieDomain) const { diff --git a/src/lib/cookies/cookiejar.h b/src/lib/cookies/cookiejar.h index 27011f3cd..d48b84662 100644 --- a/src/lib/cookies/cookiejar.h +++ b/src/lib/cookies/cookiejar.h @@ -54,6 +54,10 @@ private: void slotCookieAdded(const QNetworkCookie &cookie); void slotCookieRemoved(const QNetworkCookie &cookie); +#if QT_VERSION >= QT_VERSION_CHECK(5, 11, 0) + void cookieFilter(QWebEngineCookieStore::FilterRequest &request) const; +#endif + bool acceptCookie(const QUrl &firstPartyUrl, const QByteArray &cookieLine, const QUrl &cookieSource) const; bool rejectCookie(const QString &domain, const QNetworkCookie &cookie, const QString &cookieDomain) const; diff --git a/src/lib/cookies/cookiemanager.cpp b/src/lib/cookies/cookiemanager.cpp index a6fba010f..dd4a65f5c 100644 --- a/src/lib/cookies/cookiemanager.cpp +++ b/src/lib/cookies/cookiemanager.cpp @@ -75,8 +75,9 @@ CookieManager::CookieManager(QWidget *parent) ui->blackList->addItems(settings.value("blacklist", QStringList()).toStringList()); settings.endGroup(); - // QTWEBENGINE_DISABLED +#if QT_VERSION < QT_VERSION_CHECK(5, 11, 0) ui->filter3rdParty->hide(); +#endif ui->search->setPlaceholderText(tr("Search")); ui->cookieTree->setDefaultItemShowMode(TreeWidget::ItemsCollapsed);