diff options
author | grunell <grunell@chromium.org> | 2014-09-17 17:09:43 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-09-18 00:09:55 +0000 |
commit | 657d4d8c7d26c89c0846479ac322931bfaba4f86 (patch) | |
tree | 2a853ed570eb321b1f0a77fc8afe656a0f0e0210 /chrome/browser/ui/media_utils.cc | |
parent | ee83dcef7d2552d2221ac5be9f8ac831942ba670 (diff) | |
download | chromium_src-657d4d8c7d26c89c0846479ac322931bfaba4f86.zip chromium_src-657d4d8c7d26c89c0846479ac322931bfaba4f86.tar.gz chromium_src-657d4d8c7d26c89c0846479ac322931bfaba4f86.tar.bz2 |
Check media permissions through RenderFrameHostDelegate.
* Add function CheckMediaAccessPermission on RenderFrameHostDelegate, WebContentsDelegate, classes implementing those and chain it to MediaCaptureDevicesDispatcher::CheckMediaAccessPermission through the different paths. (Essentially add this function side-by-side with RequestMediaAccessPermission.)
* Change MediaStreamManager to use this function for checking permission when determining if device labels should be visible.
BUG=406094
Review URL: https://codereview.chromium.org/562263002
Cr-Commit-Position: refs/heads/master@{#295379}
Diffstat (limited to 'chrome/browser/ui/media_utils.cc')
-rw-r--r-- | chrome/browser/ui/media_utils.cc | 50 |
1 files changed, 39 insertions, 11 deletions
diff --git a/chrome/browser/ui/media_utils.cc b/chrome/browser/ui/media_utils.cc index 7101cc4..52d4633 100644 --- a/chrome/browser/ui/media_utils.cc +++ b/chrome/browser/ui/media_utils.cc @@ -6,6 +6,7 @@ #include "chrome/browser/media/media_capture_devices_dispatcher.h" #include "chrome/browser/profiles/profile.h" +#include "content/public/browser/web_contents.h" #if defined(ENABLE_EXTENSIONS) #include "chrome/browser/extensions/extension_service.h" @@ -13,11 +14,24 @@ #include "extensions/common/constants.h" #endif -class Profile; +namespace { -namespace content { -class WebContents; +#if defined(ENABLE_EXTENSIONS) +const extensions::Extension* GetExtensionForOrigin(Profile* profile, + const GURL& security_origin) { + if (!security_origin.SchemeIs(extensions::kExtensionScheme)) + return NULL; + + ExtensionService* extensions_service = + extensions::ExtensionSystem::Get(profile)->extension_service(); + const extensions::Extension* extension = + extensions_service->extensions()->GetByID(security_origin.host()); + DCHECK(extension); + return extension; } +#endif + +} // namespace void RequestMediaAccessPermission( content::WebContents* web_contents, @@ -26,15 +40,29 @@ void RequestMediaAccessPermission( const content::MediaResponseCallback& callback) { const extensions::Extension* extension = NULL; #if defined(ENABLE_EXTENSIONS) - GURL origin(request.security_origin); - if (origin.SchemeIs(extensions::kExtensionScheme)) { - ExtensionService* extensions_service = - extensions::ExtensionSystem::Get(profile)->extension_service(); - extension = extensions_service->extensions()->GetByID(origin.host()); - DCHECK(extension); - } + extension = GetExtensionForOrigin(profile, request.security_origin); #endif - MediaCaptureDevicesDispatcher::GetInstance()->ProcessMediaAccessRequest( web_contents, request, callback, extension); } + +bool CheckMediaAccessPermission(content::WebContents* web_contents, + const GURL& security_origin, + content::MediaStreamType type) { +#if defined(ENABLE_EXTENSIONS) + Profile* profile = + Profile::FromBrowserContext(web_contents->GetBrowserContext()); + const extensions::Extension* extension = + GetExtensionForOrigin(profile, security_origin); + if (extension) { + return MediaCaptureDevicesDispatcher::GetInstance() + ->CheckMediaAccessPermission( + web_contents, security_origin, type, extension); + } + return MediaCaptureDevicesDispatcher::GetInstance() + ->CheckMediaAccessPermission(web_contents, security_origin, type); +#else + return MediaCaptureDevicesDispatcher::GetInstance() + ->CheckMediaAccessPermission(web_contents, security_origin, type); +#endif +} |