From 5244b35aa64ea15f188fa0fa1c9df23006c90e27 Mon Sep 17 00:00:00 2001 From: Pierre Rossi Date: Tue, 25 Mar 2014 19:44:14 +0100 Subject: Simple experimental WebRTC API for QtQuick Change-Id: I18059c2894893d28c03dc790037bdd3ff28cfd07 Reviewed-by: Zeno Albisser --- src/webengine/api/qquickwebengineview.cpp | 35 +++++++++++++++++++++++++++++ src/webengine/api/qquickwebengineview_p_p.h | 11 ++++++++- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp index 20610150a..772befe12 100644 --- a/src/webengine/api/qquickwebengineview.cpp +++ b/src/webengine/api/qquickwebengineview.cpp @@ -343,6 +343,20 @@ void QQuickWebEngineViewPrivate::javaScriptConsoleMessage(JavaScriptConsoleMessa Q_EMIT q->javaScriptConsoleMessage(static_cast(level), message, lineNumber, sourceID); } +void QQuickWebEngineViewPrivate::runMediaAccessPermissionRequest(const QUrl &securityOrigin, WebContentsAdapterClient::MediaRequestFlags requestFlags) +{ + if (!requestFlags) + return; + QQuickWebEngineViewExperimental::Feature feature; + if (requestFlags.testFlag(WebContentsAdapterClient::MediaAudioCapture) && requestFlags.testFlag(WebContentsAdapterClient::MediaAudioCapture)) + feature = QQuickWebEngineViewExperimental::MediaAudioVideoDevices; + else if (requestFlags.testFlag(WebContentsAdapterClient::MediaAudioCapture)) + feature = QQuickWebEngineViewExperimental::MediaAudioDevices; + else if (requestFlags.testFlag(WebContentsAdapterClient::MediaVideoCapture)) + feature = QQuickWebEngineViewExperimental::MediaVideoDevices; + Q_EMIT e->featurePermissionRequested(securityOrigin, feature); +} + void QQuickWebEngineViewPrivate::setDevicePixelRatio(qreal devicePixelRatio) { this->devicePixelRatio = devicePixelRatio; @@ -541,6 +555,27 @@ QQuickWebEngineHistory *QQuickWebEngineViewExperimental::navigationHistory() con return d_ptr->m_history.data(); } +void QQuickWebEngineViewExperimental::grantFeaturePermission(const QUrl &securityOrigin, QQuickWebEngineViewExperimental::Feature feature, bool granted) +{ + if (!granted && feature >= MediaAudioDevices && feature <= MediaAudioVideoDevices) { + d_ptr->adapter->grantMediaAccessPermission(securityOrigin, WebContentsAdapterClient::MediaNone); + return; + } + + switch (feature) { + case MediaAudioDevices: + d_ptr->adapter->grantMediaAccessPermission(securityOrigin, WebContentsAdapterClient::MediaAudioCapture); + break; + case MediaVideoDevices: + d_ptr->adapter->grantMediaAccessPermission(securityOrigin, WebContentsAdapterClient::MediaVideoCapture); + break; + case MediaAudioVideoDevices: + d_ptr->adapter->grantMediaAccessPermission(securityOrigin, WebContentsAdapterClient::MediaRequestFlags(WebContentsAdapterClient::MediaAudioCapture + | WebContentsAdapterClient::MediaVideoCapture)); + break; + } +} + void QQuickWebEngineViewExperimental::goBackTo(int index) { int count = d_ptr->adapter->currentNavigationEntryIndex(); diff --git a/src/webengine/api/qquickwebengineview_p_p.h b/src/webengine/api/qquickwebengineview_p_p.h index cde8d297d..ec03badaf 100644 --- a/src/webengine/api/qquickwebengineview_p_p.h +++ b/src/webengine/api/qquickwebengineview_p_p.h @@ -85,8 +85,15 @@ 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_ENUMS(Feature) public: + enum Feature { + MediaAudioDevices, + MediaVideoDevices, + MediaAudioVideoDevices + }; + void setIsFullScreen(bool fullscreen); bool isFullScreen() const; QQuickWebEngineViewport *viewport() const; @@ -98,12 +105,14 @@ public Q_SLOTS: void goBackTo(int index); void goForwardTo(int index); void runJavaScript(const QString&, const QJSValue & = QJSValue()); + void grantFeaturePermission(const QUrl &securityOrigin, Feature, bool granted); Q_SIGNALS: void newViewRequested(QQuickWebEngineNewViewRequest *request); void fullScreenRequested(bool fullScreen); void isFullScreenChanged(); void extraContextMenuEntriesComponentChanged(); + void featurePermissionRequested(const QUrl &securityOrigin, Feature feature); private: QQuickWebEngineViewExperimental(QQuickWebEngineViewPrivate* viewPrivate); @@ -153,7 +162,7 @@ public: virtual void passOnFocus(bool reverse) Q_DECL_OVERRIDE; virtual void javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString& message, int lineNumber, const QString& sourceID) Q_DECL_OVERRIDE; virtual void authenticationRequired(const QUrl&, const QString&, bool, const QString&, QString*, QString*) Q_DECL_OVERRIDE { } - virtual void runMediaAccessPermissionRequest(const QUrl &securityOrigin, MediaRequestFlags requestFlags) Q_DECL_OVERRIDE { } + virtual void runMediaAccessPermissionRequest(const QUrl &securityOrigin, MediaRequestFlags requestFlags) Q_DECL_OVERRIDE; void setDevicePixelRatio(qreal); void adoptWebContents(WebContentsAdapter *webContents); -- cgit v1.2.3