summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/core/api/qwebenginecallback_p.h5
-rw-r--r--src/core/api/qwebenginecookiestoreclient.cpp101
-rw-r--r--src/core/api/qwebenginecookiestoreclient.h8
-rw-r--r--src/core/api/qwebenginecookiestoreclient_p.h8
-rw-r--r--src/core/cookie_monster_delegate_qt.cpp38
-rw-r--r--src/core/cookie_monster_delegate_qt.h3
6 files changed, 163 insertions, 0 deletions
diff --git a/src/core/api/qwebenginecallback_p.h b/src/core/api/qwebenginecallback_p.h
index 9eb627ad3..44d9ceb14 100644
--- a/src/core/api/qwebenginecallback_p.h
+++ b/src/core/api/qwebenginecallback_p.h
@@ -40,6 +40,7 @@
#include "qtwebenginecoreglobal_p.h"
#include "qwebenginecallback.h"
+#include <QByteArray>
#include <QHash>
#include <QSharedData>
#include <QString>
@@ -50,6 +51,7 @@
F(bool) \
F(int) \
F(const QString &) \
+ F(const QByteArray &) \
F(const QVariant &)
namespace QtWebEngineCore {
@@ -75,6 +77,9 @@ public:
enum ReservedCallbackIds {
NoCallbackId = 0,
DeleteCookieCallbackId,
+ DeleteSessionCookiesCallbackId,
+ DeleteAllCookiesCallbackId,
+ GetAllCookiesCallbackId,
// Place reserved id's before this.
ReservedCallbackIdsEnd
diff --git a/src/core/api/qwebenginecookiestoreclient.cpp b/src/core/api/qwebenginecookiestoreclient.cpp
index b0e91021d..f4770927e 100644
--- a/src/core/api/qwebenginecookiestoreclient.cpp
+++ b/src/core/api/qwebenginecookiestoreclient.cpp
@@ -46,6 +46,9 @@ using namespace QtWebEngineCore;
QWebEngineCookieStoreClientPrivate::QWebEngineCookieStoreClientPrivate(QWebEngineCookieStoreClient* q)
: m_nextCallbackId(CallbackDirectory::ReservedCallbackIdsEnd)
+ , m_deleteSessionCookiesPending(false)
+ , m_deleteAllCookiesPending(false)
+ , m_getAllCookiesPending(false)
, delegate(0)
, q_ptr(q)
{
@@ -61,6 +64,21 @@ void QWebEngineCookieStoreClientPrivate::processPendingUserCookies()
Q_ASSERT(delegate);
Q_ASSERT(delegate->hasCookieMonster());
+ if (m_getAllCookiesPending) {
+ m_getAllCookiesPending = false;
+ delegate->getAllCookies(CallbackDirectory::GetAllCookiesCallbackId);
+ }
+
+ if (m_deleteAllCookiesPending) {
+ m_deleteAllCookiesPending = false;
+ delegate->deleteAllCookies(CallbackDirectory::DeleteAllCookiesCallbackId);
+ }
+
+ if (m_deleteSessionCookiesPending) {
+ m_deleteSessionCookiesPending = false;
+ delegate->deleteSessionCookies(CallbackDirectory::DeleteSessionCookiesCallbackId);
+ }
+
if (m_pendingUserCookies.isEmpty())
return;
@@ -99,11 +117,51 @@ void QWebEngineCookieStoreClientPrivate::deleteCookie(const QNetworkCookie &cook
delegate->deleteCookie(cookie, url);
}
+void QWebEngineCookieStoreClientPrivate::deleteSessionCookies()
+{
+ if (!delegate || !delegate->hasCookieMonster()) {
+ m_deleteSessionCookiesPending = true;
+ return;
+ }
+
+ delegate->deleteSessionCookies(CallbackDirectory::DeleteSessionCookiesCallbackId);
+}
+
+void QWebEngineCookieStoreClientPrivate::deleteAllCookies()
+{
+ if (!delegate || !delegate->hasCookieMonster()) {
+ m_deleteAllCookiesPending = true;
+ m_deleteSessionCookiesPending = false;
+ return;
+ }
+
+ delegate->deleteAllCookies(CallbackDirectory::DeleteAllCookiesCallbackId);
+}
+
+void QWebEngineCookieStoreClientPrivate::getAllCookies()
+{
+ if (!delegate || !delegate->hasCookieMonster()) {
+ m_getAllCookiesPending = true;
+ return;
+ }
+
+ delegate->getAllCookies(CallbackDirectory::GetAllCookiesCallbackId);
+}
+
+void QWebEngineCookieStoreClientPrivate::onGetAllCallbackResult(qint64 callbackId, const QByteArray &cookieList)
+{
+ callbackDirectory.invoke(callbackId, cookieList);
+}
void QWebEngineCookieStoreClientPrivate::onSetCallbackResult(qint64 callbackId, bool success)
{
callbackDirectory.invoke(callbackId, success);
}
+void QWebEngineCookieStoreClientPrivate::onDeleteCallbackResult(qint64 callbackId, int numCookies)
+{
+ callbackDirectory.invoke(callbackId, numCookies);
+}
+
void QWebEngineCookieStoreClientPrivate::onCookieChanged(const QNetworkCookie &cookie, bool removed)
{
Q_Q(QWebEngineCookieStoreClient);
@@ -142,4 +200,47 @@ void QWebEngineCookieStoreClient::deleteCookie(const QNetworkCookie &cookie, con
d->deleteCookie(cookie, origin);
}
+void QWebEngineCookieStoreClient::getAllCookies(const QWebEngineCallback<const QByteArray&> &resultCallback)
+{
+ Q_D(QWebEngineCookieStoreClient);
+ if (d->m_getAllCookiesPending) {
+ d->callbackDirectory.invokeEmpty(resultCallback);
+ return;
+ }
+ d->callbackDirectory.registerCallback(CallbackDirectory::GetAllCookiesCallbackId, resultCallback);
+ d->getAllCookies();
+}
+
+void QWebEngineCookieStoreClient::deleteSessionCookiesWithCallback(const QWebEngineCallback<int> &resultCallback)
+{
+ Q_D(QWebEngineCookieStoreClient);
+ if (d->m_deleteAllCookiesPending || d->m_deleteSessionCookiesPending) {
+ d->callbackDirectory.invokeEmpty(resultCallback);
+ return;
+ }
+ d->callbackDirectory.registerCallback(CallbackDirectory::DeleteSessionCookiesCallbackId, resultCallback);
+ d->deleteSessionCookies();
+}
+
+void QWebEngineCookieStoreClient::deleteAllCookiesWithCallback(const QWebEngineCallback<int> &resultCallback)
+{
+ Q_D(QWebEngineCookieStoreClient);
+ if (d->m_deleteAllCookiesPending) {
+ d->callbackDirectory.invokeEmpty(resultCallback);
+ return;
+ }
+ d->callbackDirectory.registerCallback(CallbackDirectory::DeleteAllCookiesCallbackId, resultCallback);
+ d->deleteAllCookies();
+}
+
+void QWebEngineCookieStoreClient::deleteSessionCookies()
+{
+ deleteSessionCookiesWithCallback(QWebEngineCallback<int>());
+}
+
+void QWebEngineCookieStoreClient::deleteAllCookies()
+{
+ deleteAllCookiesWithCallback(QWebEngineCallback<int>());
+}
+
QT_END_NAMESPACE
diff --git a/src/core/api/qwebenginecookiestoreclient.h b/src/core/api/qwebenginecookiestoreclient.h
index 58a332542..c9cfc1b37 100644
--- a/src/core/api/qwebenginecookiestoreclient.h
+++ b/src/core/api/qwebenginecookiestoreclient.h
@@ -60,11 +60,19 @@ public:
#ifdef Q_QDOC
void setCookieWithCallback(const QNetworkCookie &cookie, FunctorOrLambda resultCallback, const QUrl &origin = QUrl());
+ void deleteSessionCookiesWithCallback(FunctorOrLambda resultCallback);
+ void deleteAllCookiesWithCallback(FunctorOrLambda resultCallback);
+ void getAllCookies(FunctorOrLambda resultCallback);
#else
void setCookieWithCallback(const QNetworkCookie &cookie, const QWebEngineCallback<bool> &resultCallback, const QUrl &origin = QUrl());
+ void deleteSessionCookiesWithCallback(const QWebEngineCallback<int> &resultCallback);
+ void deleteAllCookiesWithCallback(const QWebEngineCallback<int> &resultCallback);
+ void getAllCookies(const QWebEngineCallback<const QByteArray&> &resultCallback);
#endif
void setCookie(const QNetworkCookie &cookie, const QUrl &origin = QUrl());
void deleteCookie(const QNetworkCookie &cookie, const QUrl &origin = QUrl());
+ void deleteSessionCookies();
+ void deleteAllCookies();
Q_SIGNALS:
void cookieAdded(const QNetworkCookie &cookie);
diff --git a/src/core/api/qwebenginecookiestoreclient_p.h b/src/core/api/qwebenginecookiestoreclient_p.h
index 4a0f280f5..ba7914d94 100644
--- a/src/core/api/qwebenginecookiestoreclient_p.h
+++ b/src/core/api/qwebenginecookiestoreclient_p.h
@@ -73,6 +73,9 @@ public:
QtWebEngineCore::CallbackDirectory callbackDirectory;
QList<CookieData> m_pendingUserCookies;
quint64 m_nextCallbackId;
+ bool m_deleteSessionCookiesPending;
+ bool m_deleteAllCookiesPending;
+ bool m_getAllCookiesPending;
QtWebEngineCore::CookieMonsterDelegateQt *delegate;
QWebEngineCookieStoreClient *q_ptr;
@@ -83,8 +86,13 @@ public:
void processPendingUserCookies();
void setCookie(const QWebEngineCallback<bool> &callback, const QNetworkCookie &cookie, const QUrl &origin);
void deleteCookie(const QNetworkCookie &cookie, const QUrl &url);
+ void deleteSessionCookies();
+ void deleteAllCookies();
+ void getAllCookies();
+ void onGetAllCallbackResult(qint64 callbackId, const QByteArray &cookieList);
void onSetCallbackResult(qint64 callbackId, bool success);
+ void onDeleteCallbackResult(qint64 callbackId, int numCookies);
void onCookieChanged(const QNetworkCookie &cookie, bool removed);
};
diff --git a/src/core/cookie_monster_delegate_qt.cpp b/src/core/cookie_monster_delegate_qt.cpp
index d40abf13e..6b808e76c 100644
--- a/src/core/cookie_monster_delegate_qt.cpp
+++ b/src/core/cookie_monster_delegate_qt.cpp
@@ -44,6 +44,8 @@
#include "api/qwebenginecookiestoreclient_p.h"
#include "type_conversion.h"
+#include <QStringBuilder>
+
namespace QtWebEngineCore {
static GURL sourceUrlForCookie(const QNetworkCookie &cookie) {
@@ -55,6 +57,18 @@ static void onSetCookieCallback(QWebEngineCookieStoreClientPrivate *client, qint
client->onSetCallbackResult(callbackId, success);
}
+static void onDeleteCookiesCallback(QWebEngineCookieStoreClientPrivate *client, qint64 callbackId, int numCookies) {
+ client->onDeleteCallbackResult(callbackId, numCookies);
+}
+
+static void onGetAllCookiesCallback(QWebEngineCookieStoreClientPrivate *client, qint64 callbackId, const net::CookieList& cookies) {
+ QByteArray rawCookies;
+ for (auto&& cookie: cookies)
+ rawCookies += toQt(cookie).toRawForm() % QByteArrayLiteral("\n");
+
+ client->onGetAllCallbackResult(callbackId, rawCookies);
+}
+
CookieMonsterDelegateQt::CookieMonsterDelegateQt()
: m_client(0)
, m_cookieMonster(0)
@@ -72,6 +86,12 @@ bool CookieMonsterDelegateQt::hasCookieMonster()
return m_cookieMonster.get();
}
+void CookieMonsterDelegateQt::getAllCookies(quint64 callbackId)
+{
+ net::CookieMonster::GetCookieListCallback callback = base::Bind(&onGetAllCookiesCallback, m_client->d_func(), callbackId);
+ m_cookieMonster->GetAllCookiesAsync(callback);
+}
+
void CookieMonsterDelegateQt::setCookie(quint64 callbackId, const QNetworkCookie &cookie, const QUrl &origin)
{
Q_ASSERT(hasCookieMonster());
@@ -99,6 +119,24 @@ void CookieMonsterDelegateQt::deleteCookie(const QNetworkCookie &cookie, const Q
m_cookieMonster->DeleteCookieAsync(gurl, cookie.name().toStdString(), base::Closure());
}
+void CookieMonsterDelegateQt::deleteSessionCookies(quint64 callbackId)
+{
+ Q_ASSERT(hasCookieMonster());
+ Q_ASSERT(m_client);
+
+ net::CookieMonster::DeleteCallback callback = base::Bind(&onDeleteCookiesCallback, m_client->d_func(), callbackId);
+ m_cookieMonster->DeleteSessionCookiesAsync(callback);
+}
+
+void CookieMonsterDelegateQt::deleteAllCookies(quint64 callbackId)
+{
+ Q_ASSERT(hasCookieMonster());
+ Q_ASSERT(m_client);
+
+ net::CookieMonster::DeleteCallback callback = base::Bind(&onDeleteCookiesCallback, m_client->d_func(), callbackId);
+ m_cookieMonster->DeleteAllAsync(callback);
+}
+
void CookieMonsterDelegateQt::setCookieMonster(net::CookieMonster* monster)
{
m_cookieMonster = monster;
diff --git a/src/core/cookie_monster_delegate_qt.h b/src/core/cookie_monster_delegate_qt.h
index 7cd76bff0..971a09bbc 100644
--- a/src/core/cookie_monster_delegate_qt.h
+++ b/src/core/cookie_monster_delegate_qt.h
@@ -66,6 +66,9 @@ public:
void setCookie(quint64 callbackId, const QNetworkCookie &cookie, const QUrl &origin);
void deleteCookie(const QNetworkCookie &cookie, const QUrl &origin);
+ void getAllCookies(quint64 callbackId);
+ void deleteSessionCookies(quint64 callbackId);
+ void deleteAllCookies(quint64 callbackId);
void setCookieMonster(net::CookieMonster* monster);
void setClient(QWebEngineCookieStoreClient *client);