diff options
author | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2016-04-04 15:13:31 +0200 |
---|---|---|
committer | Kai Koehne <kai.koehne@theqtcompany.com> | 2016-04-05 11:41:08 +0000 |
commit | 3e9a6407bbbc5f83eb8bd56c5c1d899dba9bc56f (patch) | |
tree | b525366744fc29fd0f5ed0e28681e430866b6e52 /src | |
parent | 9da7a0649cfa65c784e86cf3496b188c9d8d15c4 (diff) |
Implement CheckMediaAccessPermission
Fixes access of label of MediaStream tracks
Also fixes the logged error:
WebContentsDelegate::CheckMediaAccessPermission: Not supported.
Change-Id: I3fee9ccd9e8b2e5cbd6b707336cc61425a44ba31
Task-number: QTBUG-52216
Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/core/browser_context_adapter.cpp | 5 | ||||
-rw-r--r-- | src/core/browser_context_adapter.h | 3 | ||||
-rw-r--r-- | src/core/permission_manager_qt.cpp | 6 | ||||
-rw-r--r-- | src/core/permission_manager_qt.h | 1 | ||||
-rw-r--r-- | src/core/web_contents_adapter.cpp | 5 | ||||
-rw-r--r-- | src/core/web_contents_delegate_qt.cpp | 14 | ||||
-rw-r--r-- | src/core/web_contents_delegate_qt.h | 1 |
7 files changed, 35 insertions, 0 deletions
diff --git a/src/core/browser_context_adapter.cpp b/src/core/browser_context_adapter.cpp index d394cd302..7f9363c06 100644 --- a/src/core/browser_context_adapter.cpp +++ b/src/core/browser_context_adapter.cpp @@ -405,6 +405,11 @@ void BrowserContextAdapter::permissionRequestReply(const QUrl &origin, Permissio static_cast<PermissionManagerQt*>(browserContext()->GetPermissionManager())->permissionRequestReply(origin, type, reply); } +bool BrowserContextAdapter::checkPermission(const QUrl &origin, PermissionType type) +{ + return static_cast<PermissionManagerQt*>(browserContext()->GetPermissionManager())->checkPermission(origin, type); +} + QString BrowserContextAdapter::httpAcceptLanguageWithoutQualities() const { const QStringList list = m_httpAcceptLanguage.split(QLatin1Char(',')); diff --git a/src/core/browser_context_adapter.h b/src/core/browser_context_adapter.h index 97a4dca4a..a388e9a0c 100644 --- a/src/core/browser_context_adapter.h +++ b/src/core/browser_context_adapter.h @@ -127,6 +127,8 @@ public: GeolocationPermission = 1, // Reserved: // NotificationPermission = 2, + AudioCapturePermission = 3, + VideoCapturePermission = 4, }; HttpCacheType httpCacheType() const; @@ -152,6 +154,7 @@ public: UserScriptControllerHost *userScriptController(); void permissionRequestReply(const QUrl &origin, PermissionType type, bool reply); + bool checkPermission(const QUrl &origin, PermissionType type); QString httpAcceptLanguageWithoutQualities() const; QString httpAcceptLanguage() const; diff --git a/src/core/permission_manager_qt.cpp b/src/core/permission_manager_qt.cpp index b322e507e..a4b763464 100644 --- a/src/core/permission_manager_qt.cpp +++ b/src/core/permission_manager_qt.cpp @@ -91,6 +91,12 @@ void PermissionManagerQt::permissionRequestReply(const QUrl &origin, BrowserCont } } +bool PermissionManagerQt::checkPermission(const QUrl &origin, BrowserContextAdapter::PermissionType type) +{ + QPair<QUrl, BrowserContextAdapter::PermissionType> key(origin, type); + return m_permissions.contains(key) && m_permissions[key]; +} + void PermissionManagerQt::RequestPermission(content::PermissionType permission, content::RenderFrameHost *frameHost, int request_id, diff --git a/src/core/permission_manager_qt.h b/src/core/permission_manager_qt.h index 6dfc60c39..8d03f275e 100644 --- a/src/core/permission_manager_qt.h +++ b/src/core/permission_manager_qt.h @@ -54,6 +54,7 @@ public: typedef BrowserContextAdapter::PermissionType PermissionType; void permissionRequestReply(const QUrl &origin, PermissionType type, bool reply); + bool checkPermission(const QUrl &origin, PermissionType type); // content::PermissionManager implementation: void RequestPermission( diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp index 608dbf7e7..cd6505df5 100644 --- a/src/core/web_contents_adapter.cpp +++ b/src/core/web_contents_adapter.cpp @@ -844,6 +844,11 @@ void WebContentsAdapter::wasHidden() void WebContentsAdapter::grantMediaAccessPermission(const QUrl &securityOrigin, WebContentsAdapterClient::MediaRequestFlags flags) { Q_D(WebContentsAdapter); + // Let the permission manager remember the reply. + if (flags & WebContentsAdapterClient::MediaAudioCapture) + d->browserContextAdapter->permissionRequestReply(securityOrigin, BrowserContextAdapter::AudioCapturePermission, true); + if (flags & WebContentsAdapterClient::MediaVideoCapture) + d->browserContextAdapter->permissionRequestReply(securityOrigin, BrowserContextAdapter::VideoCapturePermission, true); MediaCaptureDevicesDispatcher::GetInstance()->handleMediaAccessPermissionResponse(d->webContents.get(), securityOrigin, flags); } diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp index e3903c902..bf12537d1 100644 --- a/src/core/web_contents_delegate_qt.cpp +++ b/src/core/web_contents_delegate_qt.cpp @@ -438,4 +438,18 @@ void WebContentsDelegateQt::BeforeUnloadFired(content::WebContents *tab, bool pr m_viewClient->windowCloseRejected(); } +bool WebContentsDelegateQt::CheckMediaAccessPermission(content::WebContents *web_contents, const GURL& security_origin, content::MediaStreamType type) +{ + switch (type) { + case content::MEDIA_DEVICE_AUDIO_CAPTURE: + return m_viewClient->browserContextAdapter()->checkPermission(toQt(security_origin), BrowserContextAdapter::AudioCapturePermission); + case content::MEDIA_DEVICE_VIDEO_CAPTURE: + return m_viewClient->browserContextAdapter()->checkPermission(toQt(security_origin), BrowserContextAdapter::VideoCapturePermission); + default: + LOG(INFO) << "WebContentsDelegateQt::CheckMediaAccessPermission: " + << "Unsupported media stream type checked" << type; + return false; + } +} + } // namespace QtWebEngineCore diff --git a/src/core/web_contents_delegate_qt.h b/src/core/web_contents_delegate_qt.h index c971c75e8..7ead8dc7c 100644 --- a/src/core/web_contents_delegate_qt.h +++ b/src/core/web_contents_delegate_qt.h @@ -96,6 +96,7 @@ public: virtual void HideValidationMessage(content::WebContents *web_contents) Q_DECL_OVERRIDE; virtual void MoveValidationMessage(content::WebContents *web_contents, const gfx::Rect &anchor_in_root_view) Q_DECL_OVERRIDE; void BeforeUnloadFired(content::WebContents* tab, bool proceed, bool* proceed_to_fire_unload) Q_DECL_OVERRIDE; + bool CheckMediaAccessPermission(content::WebContents *web_contents, const GURL& security_origin, content::MediaStreamType type) Q_DECL_OVERRIDE; // WebContentsObserver overrides virtual void RenderFrameDeleted(content::RenderFrameHost *render_frame_host) Q_DECL_OVERRIDE; |