diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp index a47defb7cc8205dab84ee4a84def30b95c6cd724..e70e7f790ed8cd60844152f9b359ef3373095bfc 100644 --- a/src/webengine/api/qquickwebengineview.cpp +++ b/src/webengine/api/qquickwebengineview.cpp @@ -812,21 +812,39 @@ QQuickWebEngineHistory *QQuickWebEngineViewExperimental::navigationHistory() con return d_ptr->m_history.data(); } -QQmlWebChannel *QQuickWebEngineViewExperimental::webChannel() const +/*! + * \qmlproperty QQmlWebChannel WebEngineView::webChannel + * \since QtWebEngine 1.1 + * + * The web channel instance used by this view. + * This channel is automatically using the internal QtWebEngine transport mechanism over Chromium IPC, + * and exposed in the javascript context of the page it is rendering as \c navigator.qtWebChannelTransport. + * This transport object is used when instantiating the JavaScript counterpart of QWebChannel using + * the \l{Qt WebChannel JavaScript API}. + * + * \note The view does not take ownership when explicitly setting a webChannel object. + */ + +QQmlWebChannel *QQuickWebEngineView::webChannel() { - d_ptr->ensureContentsAdapter(); - QQmlWebChannel *qmlWebChannel = qobject_cast<QQmlWebChannel *>(d_ptr->adapter->webChannel()); - Q_ASSERT(!d_ptr->adapter->webChannel() || qmlWebChannel); + Q_D(QQuickWebEngineView); + d->ensureContentsAdapter(); + QQmlWebChannel *qmlWebChannel = qobject_cast<QQmlWebChannel *>(d->adapter->webChannel()); + Q_ASSERT(!d->adapter->webChannel() || qmlWebChannel); if (!qmlWebChannel) { - qmlWebChannel = new QQmlWebChannel; - d_ptr->adapter->setWebChannel(qmlWebChannel); + qmlWebChannel = new QQmlWebChannel(this); + d->adapter->setWebChannel(qmlWebChannel); } return qmlWebChannel; } -void QQuickWebEngineViewExperimental::setWebChannel(QQmlWebChannel *webChannel) +void QQuickWebEngineView::setWebChannel(QQmlWebChannel *webChannel) { - d_ptr->adapter->setWebChannel(webChannel); + Q_D(QQuickWebEngineView); + bool notify = (d->adapter->webChannel() == webChannel); + d->adapter->setWebChannel(webChannel); + if (notify) + Q_EMIT webChannelChanged(); } void QQuickWebEngineViewExperimental::grantFeaturePermission(const QUrl &securityOrigin, QQuickWebEngineViewExperimental::Feature feature, bool granted) diff --git a/src/webengine/api/qquickwebengineview_p.h b/src/webengine/api/qquickwebengineview_p.h index 56a1b47abd6c01e6e1a239d4a5c6f9c4f4259f2c..3057cc9a44c49d8b037d03d2a3d1dadd96cab8d8 100644 --- a/src/webengine/api/qquickwebengineview_p.h +++ b/src/webengine/api/qquickwebengineview_p.h @@ -42,6 +42,7 @@ QT_BEGIN_NAMESPACE +class QQmlWebChannel; class QQuickWebEngineCertificateError; class QQuickWebEngineLoadRequest; class QQuickWebEngineNavigationRequest; @@ -63,6 +64,7 @@ class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineView : public QQuickItem { Q_PROPERTY(qreal zoomFactor READ zoomFactor WRITE setZoomFactor NOTIFY zoomFactorChanged REVISION 1) Q_PROPERTY(QQuickWebEngineProfile *profile READ profile WRITE setProfile FINAL REVISION 1) Q_PROPERTY(QQuickWebEngineSettings *settings READ settings REVISION 1) + Q_PROPERTY(QQmlWebChannel *webChannel READ webChannel WRITE setWebChannel NOTIFY webChannelChanged REVISION 1) Q_ENUMS(NavigationRequestAction); Q_ENUMS(NavigationType); Q_ENUMS(LoadStatus); @@ -143,6 +145,8 @@ public: void setProfile(QQuickWebEngineProfile *); QQuickWebEngineSettings *settings() const; + QQmlWebChannel *webChannel(); + void setWebChannel(QQmlWebChannel *); public Q_SLOTS: void runJavaScript(const QString&, const QJSValue & = QJSValue()); @@ -164,6 +168,8 @@ Q_SIGNALS: Q_REVISION(1) void certificateError(QQuickWebEngineCertificateError *error); Q_REVISION(1) void newViewRequested(QQuickWebEngineNewViewRequest *request); Q_REVISION(1) void zoomFactorChanged(qreal arg); + Q_REVISION(1) void webChannelChanged(); + protected: void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry); diff --git a/src/webengine/api/qquickwebengineview_p_p.h b/src/webengine/api/qquickwebengineview_p_p.h index d7785092f5ab5b18788d036c41be93dbfd76cb8e..48eb25cb3294bd96e7b543714e6cd706cf98f469 100644 --- a/src/webengine/api/qquickwebengineview_p_p.h +++ b/src/webengine/api/qquickwebengineview_p_p.h @@ -55,7 +55,6 @@ class QQuickWebEngineView; class QQmlComponent; class QQmlContext; class QQuickWebEngineSettings; -class QQmlWebChannel; class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineViewport : public QObject { Q_OBJECT @@ -81,7 +80,6 @@ class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineViewExperimental : public QObjec Q_PROPERTY(QQmlComponent *extraContextMenuEntriesComponent READ extraContextMenuEntriesComponent WRITE setExtraContextMenuEntriesComponent NOTIFY extraContextMenuEntriesComponentChanged) Q_PROPERTY(bool isFullScreen READ isFullScreen WRITE setIsFullScreen NOTIFY isFullScreenChanged) Q_PROPERTY(QQuickWebEngineHistory *navigationHistory READ navigationHistory CONSTANT FINAL) - Q_PROPERTY(QQmlWebChannel *webChannel READ webChannel WRITE setWebChannel) Q_ENUMS(Feature) Q_FLAGS(FindFlags) @@ -105,9 +103,6 @@ public: void setExtraContextMenuEntriesComponent(QQmlComponent *); QQmlComponent *extraContextMenuEntriesComponent() const; QQuickWebEngineHistory *navigationHistory() const; - QQuickWebEngineSettings *settings() const; - QQmlWebChannel *webChannel() const; - void setWebChannel(QQmlWebChannel *); public Q_SLOTS: void goBackTo(int index); diff --git a/tests/auto/quick/qmltests/data/tst_webchannel.qml b/tests/auto/quick/qmltests/data/tst_webchannel.qml index 1abb191e1bc6fb6e70a9374b0b24a9c96eff6a8b..c3618659a1289ca96e0b2f2bfd1a53206d76dcb9 100644 --- a/tests/auto/quick/qmltests/data/tst_webchannel.qml +++ b/tests/auto/quick/qmltests/data/tst_webchannel.qml @@ -2,7 +2,7 @@ ** Copyright (C) 2014 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Milian Wolff <milian.wolff@kdab.com> ** Contact: http://www.qt-project.org/legal ** -** This file is part of the QtWebChannel module of the Qt Toolkit. +** This file is part of the QtWebEngine module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage @@ -70,7 +70,7 @@ Item { TestWebEngineView { id: webView - experimental.webChannel.registeredObjects: [testObject] + webChannel.registeredObjects: [testObject] } SignalSpy {