summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPierre Rossi <pierre.rossi@digia.com>2014-03-18 15:29:22 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-04-29 16:37:52 +0200
commit6fca3ec615102f9ce2e1b3330406ef1d654d2474 (patch)
treea043ba929f034ed6587f987ceaa9cb0c98aa79fc /src
parent070846b2efff8c8f2e8bdebef259f411ddeaac1e (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')
-rw-r--r--src/webenginewidgets/api/qwebenginepage.cpp42
-rw-r--r--src/webenginewidgets/api/qwebenginepage.h18
-rw-r--r--src/webenginewidgets/api/qwebenginepage_p.h2
3 files changed, 61 insertions, 1 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.
diff --git a/src/webenginewidgets/api/qwebenginepage.h b/src/webenginewidgets/api/qwebenginepage.h
index 4e0eaf27f..9ef6e6840 100644
--- a/src/webenginewidgets/api/qwebenginepage.h
+++ b/src/webenginewidgets/api/qwebenginepage.h
@@ -111,6 +111,19 @@ public:
WebDialog
};
+ enum PermissionPolicy {
+ PermissionUnknown,
+ PermissionGrantedByUser,
+ PermissionDeniedByUser
+ };
+
+ enum Feature {
+ Notifications,
+ Geolocation,
+ MediaAudioDevices,
+ MediaVideoDevices,
+ MediaAudioVideoDevices
+ };
// Ex-QWebFrame enum
enum FileSelectionMode {
@@ -144,6 +157,8 @@ public:
void findText(const QString &subString, FindFlags options = 0, const QWebEngineCallback<bool> &resultCallback = QWebEngineCallback<bool>());
QMenu *createStandardContextMenu();
+ void setFeaturePermission(const QUrl &securityOrigin, Feature feature, PermissionPolicy policy);
+
// Ex-QWebFrame methods
void load(const QUrl &url);
void setHtml(const QString &html, const QUrl &baseUrl = QUrl());
@@ -172,6 +187,9 @@ Q_SIGNALS:
void geometryChangeRequested(const QRect& geom);
void windowCloseRequested();
+ void featurePermissionRequested(const QUrl &securityOrigin, QWebEnginePage::Feature feature);
+ void featurePermissionRequestCanceled(const QUrl &securityOrigin, QWebEnginePage::Feature feature);
+
void authenticationRequired(const QUrl &requestUrl, QAuthenticator *authenticator);
void proxyAuthenticationRequired(const QUrl &requestUrl, QAuthenticator *authenticator, const QString &proxyHost);
diff --git a/src/webenginewidgets/api/qwebenginepage_p.h b/src/webenginewidgets/api/qwebenginepage_p.h
index 0c4d3b850..827840c7b 100644
--- a/src/webenginewidgets/api/qwebenginepage_p.h
+++ b/src/webenginewidgets/api/qwebenginepage_p.h
@@ -136,7 +136,7 @@ public:
virtual void passOnFocus(bool reverse) Q_DECL_OVERRIDE { Q_UNUSED(reverse); };
virtual void javaScriptConsoleMessage(JavaScriptConsoleMessageLevel level, const QString& message, int lineNumber, const QString& sourceID) Q_DECL_OVERRIDE;
virtual void authenticationRequired(const QUrl &requestUrl, const QString &realm, bool isProxy, const QString &challengingHost, QString *outUser, QString *outPassword) 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 updateAction(QWebEnginePage::WebAction) const;
void updateNavigationActions();