From 1df4983268673e514d700cc4491310da7dd26a26 Mon Sep 17 00:00:00 2001 From: Andras Becsi Date: Wed, 13 May 2015 21:24:48 +0200 Subject: Add invokable to QQuickWebEngineProfile to set cookie client This makes it possible to set a cookie client in the C++ part of a QtQuick application to receive notifications about cookies. Add setting for blocking third party cookies to quicktestbrowser. Change-Id: I627eaab067e92a7be5b36ffed68794e54c7be0e8 Reviewed-by: Allan Sandfeld Jensen --- tests/quicktestbrowser/main.cpp | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) (limited to 'tests/quicktestbrowser/main.cpp') diff --git a/tests/quicktestbrowser/main.cpp b/tests/quicktestbrowser/main.cpp index 7171baf77..166da4d5b 100644 --- a/tests/quicktestbrowser/main.cpp +++ b/tests/quicktestbrowser/main.cpp @@ -50,7 +50,9 @@ typedef QGuiApplication Application; #endif #include #include +#include #include +#include static QUrl startupUrl() { @@ -67,6 +69,24 @@ static QUrl startupUrl() return QUrl(QStringLiteral("http://qt.io/")); } +class CookieClient: public QWebEngineCookieStoreClient +{ + QMetaProperty m_settingProperty; + const QObject *m_object; +public: + CookieClient(const QObject *object) + : m_object(object) + { + const QMetaObject *rootMeta = object->metaObject(); + int index = rootMeta->indexOfProperty("thirdPartyCookiesEnabled"); + Q_ASSERT(index != -1); + m_settingProperty = rootMeta->property(index); + } + virtual bool acceptCookieFromUrl(const QByteArray &, const QUrl &) { + return m_settingProperty.read(m_object).toBool(); + } +}; + int main(int argc, char **argv) { Application app(argc, argv); @@ -80,7 +100,25 @@ int main(int argc, char **argv) Utils utils; appEngine.rootContext()->setContextProperty("utils", &utils); appEngine.load(QUrl("qrc:/ApplicationRoot.qml")); - QMetaObject::invokeMethod(appEngine.rootObjects().first(), "load", Q_ARG(QVariant, startupUrl())); + QObject *rootObject = appEngine.rootObjects().first(); + + QQmlComponent component(&appEngine); + component.setData(QByteArrayLiteral("import QtQuick 2.0\n" + "import QtWebEngine 1.1\n" + "WebEngineProfile {\n" + "storageName: \"Test\"\n" + "}") + , QUrl()); + QObject *profile = component.create(); + CookieClient client(rootObject); + QMetaObject::invokeMethod(profile, "setCookieStoreClient", Q_ARG(QWebEngineCookieStoreClient*, &client)); + const QMetaObject *rootMeta = rootObject->metaObject(); + int index = rootMeta->indexOfProperty("testProfile"); + Q_ASSERT(index != -1); + QMetaProperty profileProperty = rootMeta->property(index); + profileProperty.write(rootObject, qVariantFromValue(profile)); + + QMetaObject::invokeMethod(rootObject, "load", Q_ARG(QVariant, startupUrl())); return app.exec(); } -- cgit v1.2.3