diff --git a/src/lib/cookies/cookiejar.cpp b/src/lib/cookies/cookiejar.cpp index 9d15821e3..d1eba318c 100644 --- a/src/lib/cookies/cookiejar.cpp +++ b/src/lib/cookies/cookiejar.cpp @@ -1,6 +1,6 @@ /* ============================================================ * QupZilla - WebKit based browser -* Copyright (C) 2010-2014 David Rosca +* Copyright (C) 2010-2016 David Rosca * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -34,13 +34,10 @@ CookieJar::CookieJar(QObject* parent) , m_client(mApp->webProfile()->cookieStore()) { loadSettings(); + m_client->loadAllCookies(); - connect(m_client, &QWebEngineCookieStore::cookieAdded, this, &CookieJar::cookieAdded); - connect(m_client, &QWebEngineCookieStore::cookieRemoved, this, &CookieJar::cookieRemoved); - - m_client->setCookieFilter([this](QWebEngineCookieStore::FilterRequest &req) { - req.accepted = acceptCookie(req.firstPartyUrl, req.cookieLine, req.cookieSource); - }); + connect(m_client, &QWebEngineCookieStore::cookieAdded, this, &CookieJar::slotCookieAdded); + connect(m_client, &QWebEngineCookieStore::cookieRemoved, this, &CookieJar::slotCookieRemoved); } void CookieJar::loadSettings() @@ -60,9 +57,9 @@ void CookieJar::setAllowCookies(bool allow) m_allowCookies = allow; } -void CookieJar::getAllCookies(const QWebEngineCallback callback) +QVector CookieJar::getAllCookies() const { - m_client->getAllCookies(callback); + return m_cookies; } void CookieJar::deleteAllCookies() @@ -97,6 +94,23 @@ bool CookieJar::listMatchesDomain(const QStringList &list, const QString &cookie return false; } +void CookieJar::slotCookieAdded(const QNetworkCookie &cookie) +{ + if (rejectCookie(QString(), cookie, cookie.domain())) { + m_client->deleteCookie(cookie); + return; + } + + m_cookies.append(cookie); + emit cookieAdded(cookie); +} + +void CookieJar::slotCookieRemoved(const QNetworkCookie &cookie) +{ + if (m_cookies.removeOne(cookie)) + emit cookieRemoved(cookie); +} + bool CookieJar::acceptCookie(const QUrl &firstPartyUrl, const QByteArray &cookieLine, const QUrl &cookieSource) const { const QList cookies = QNetworkCookie::parseCookies(cookieLine); diff --git a/src/lib/cookies/cookiejar.h b/src/lib/cookies/cookiejar.h index 838717b4f..fd75d9152 100644 --- a/src/lib/cookies/cookiejar.h +++ b/src/lib/cookies/cookiejar.h @@ -1,6 +1,6 @@ /* ============================================================ * QupZilla - WebKit based browser -* Copyright (C) 2010-2014 David Rosca +* Copyright (C) 2010-2016 David Rosca * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,7 +18,7 @@ #ifndef COOKIEJAR_H #define COOKIEJAR_H -#include +#include #include #include @@ -37,7 +37,7 @@ public: void setAllowCookies(bool allow); - void getAllCookies(const QWebEngineCallback callback); + QVector getAllCookies() const; void deleteAllCookies(); signals: @@ -49,6 +49,9 @@ protected: bool listMatchesDomain(const QStringList &list, const QString &cookieDomain) const; private: + void slotCookieAdded(const QNetworkCookie &cookie); + void slotCookieRemoved(const QNetworkCookie &cookie); + bool acceptCookie(const QUrl &firstPartyUrl, const QByteArray &cookieLine, const QUrl &cookieSource) const; bool rejectCookie(const QString &domain, const QNetworkCookie &cookie, const QString &cookieDomain) const; @@ -58,7 +61,9 @@ private: QStringList m_whitelist; QStringList m_blacklist; + QWebEngineCookieStore *m_client; + QVector m_cookies; }; #endif // COOKIEJAR_H diff --git a/src/lib/cookies/cookiemanager.cpp b/src/lib/cookies/cookiemanager.cpp index 1544df652..14dfb5c1b 100644 --- a/src/lib/cookies/cookiemanager.cpp +++ b/src/lib/cookies/cookiemanager.cpp @@ -1,6 +1,6 @@ /* ============================================================ * QupZilla - WebKit based browser -* Copyright (C) 2010-2014 David Rosca +* Copyright (C) 2010-2016 David Rosca * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -88,12 +88,8 @@ CookieManager::CookieManager() connect(mApp->cookieJar(), &CookieJar::cookieRemoved, this, &CookieManager::removeCookie); // Load cookies - mApp->cookieJar()->getAllCookies([this](const QByteArray &res) { - const QList &allCookies = QNetworkCookie::parseCookies(res); - foreach (const QNetworkCookie &cookie, allCookies) { - addCookie(cookie); - } - }); + foreach (const QNetworkCookie &cookie, mApp->cookieJar()->getAllCookies()) + addCookie(cookie); QzTools::setWmClass("Cookies", this); }