diff options
author | Pierre Rossi <pierre.rossi@digia.com> | 2014-03-18 15:29:22 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-04-29 16:37:52 +0200 |
commit | 6fca3ec615102f9ce2e1b3330406ef1d654d2474 (patch) | |
tree | a043ba929f034ed6587f987ceaa9cb0c98aa79fc /src/webenginewidgets/api/qwebenginepage.cpp | |
parent | 070846b2efff8c8f2e8bdebef259f411ddeaac1e (diff) |
WebRTC Widgets API
Simply reuse the existing feature request approach that
was used for geolocation and notifications in QtWebKit.
Change-Id: I8fec4f4e9e81b491163912fadb4ce17d343864dd
Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
Diffstat (limited to 'src/webenginewidgets/api/qwebenginepage.cpp')
-rw-r--r-- | src/webenginewidgets/api/qwebenginepage.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp index ec0c0224d..0006cbd42 100644 --- a/src/webenginewidgets/api/qwebenginepage.cpp +++ b/src/webenginewidgets/api/qwebenginepage.cpp @@ -312,6 +312,21 @@ void QWebEnginePagePrivate::authenticationRequired(const QUrl &requestUrl, const *outPassword = networkAuth.password(); } +void QWebEnginePagePrivate::runMediaAccessPermissionRequest(const QUrl &securityOrigin, WebContentsAdapterClient::MediaRequestFlags requestFlags) +{ + Q_Q(QWebEnginePage); + QWebEnginePage::Feature requestedFeature; + if (requestFlags.testFlag(WebContentsAdapterClient::MediaAudioCapture) && requestFlags.testFlag(WebContentsAdapterClient::MediaVideoCapture)) + requestedFeature = QWebEnginePage::MediaAudioVideoDevices; + else if (requestFlags.testFlag(WebContentsAdapterClient::MediaAudioCapture)) + requestedFeature = QWebEnginePage::MediaAudioDevices; + else if (requestFlags.testFlag(WebContentsAdapterClient::MediaVideoCapture)) + requestedFeature = QWebEnginePage::MediaVideoDevices; + else + return; + Q_EMIT q->featurePermissionRequested(securityOrigin, requestedFeature); +} + void QWebEnginePagePrivate::updateAction(QWebEnginePage::WebAction action) const { #ifdef QT_NO_ACTION @@ -680,6 +695,33 @@ QMenu *QWebEnginePage::createStandardContextMenu() return menu; } +void QWebEnginePage::setFeaturePermission(const QUrl &securityOrigin, QWebEnginePage::Feature feature, QWebEnginePage::PermissionPolicy policy) +{ + Q_D(QWebEnginePage); + WebContentsAdapterClient::MediaRequestFlags flags = WebContentsAdapterClient::MediaNone; + switch (feature) { + case MediaAudioVideoDevices: + case MediaAudioDevices: + case MediaVideoDevices: + if (policy != PermissionUnknown) { + if (policy == PermissionDeniedByUser) + flags = WebContentsAdapterClient::MediaNone; + else { + if (feature == MediaAudioDevices) + flags = WebContentsAdapterClient::MediaAudioCapture; + else if (feature == MediaVideoDevices) + flags = WebContentsAdapterClient::MediaVideoCapture; + else + flags = WebContentsAdapterClient::MediaRequestFlags(WebContentsAdapterClient::MediaVideoCapture | WebContentsAdapterClient::MediaAudioCapture); + } + d->adapter->grantMediaAccessPermission(securityOrigin, flags); + } + break; + default: + break; + } +} + static inline QWebEnginePage::FileSelectionMode toPublic(WebContentsAdapterClient::FileChooserMode mode) { // Should the underlying values change, we'll need a switch here. |