From ebe4b5da40d8784351821ae0ba173f357bb519f8 Mon Sep 17 00:00:00 2001 From: Pierre Rossi Date: Thu, 12 Feb 2015 16:43:23 +0100 Subject: Move webChannel property out of experimental Add a notify signal to go with the setter. Parent the default-provided channel to the view. Comes with basic documentation. Change-Id: I2bde8153df5928fc92ac36b7fa4d4b3b1da22f53 Reviewed-by: Andras Becsi --- src/webengine/api/qquickwebengineview.cpp | 34 ++++++++++++++++++++++------- src/webengine/api/qquickwebengineview_p.h | 6 +++++ src/webengine/api/qquickwebengineview_p_p.h | 5 ----- 3 files changed, 32 insertions(+), 13 deletions(-) (limited to 'src/webengine') diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp index a47defb7c..e70e7f790 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(d_ptr->adapter->webChannel()); - Q_ASSERT(!d_ptr->adapter->webChannel() || qmlWebChannel); + Q_D(QQuickWebEngineView); + d->ensureContentsAdapter(); + QQmlWebChannel *qmlWebChannel = qobject_cast(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 56a1b47ab..3057cc9a4 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 d7785092f..48eb25cb3 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); -- cgit v1.2.3