Index: chrome/browser/media/media_capture_devices_dispatcher.cc |
diff --git a/chrome/browser/media/media_capture_devices_dispatcher.cc b/chrome/browser/media/media_capture_devices_dispatcher.cc |
index 6f94d2be5c08c1480311c13eb36a8cd88ee5da4c..d289aef160c69ef979f47f2c7b8da60d016b04ea 100644 |
--- a/chrome/browser/media/media_capture_devices_dispatcher.cc |
+++ b/chrome/browser/media/media_capture_devices_dispatcher.cc |
@@ -55,6 +55,14 @@ const content::MediaStreamDevice* FindDeviceWithId( |
return NULL; |
}; |
+// This is a short-term solution to grant microphone access to virtual keyboard |
+// extension for voice input. Once http://crbug.com/292856 is fixed, remove this |
+// whitelist. |
+bool IsMediaRequestWhitelistedForExtension( |
+ const extensions::Extension* extension) { |
+ return extension->id() == "mppnpdlheglhdfmldimlhpnegondlapf"; |
+} |
+ |
// This is a short-term solution to allow testing of the the Screen Capture API |
// with Google Hangouts in M27. |
// TODO(sergeyu): Remove this whitelist as soon as possible. |
@@ -199,9 +207,10 @@ void MediaCaptureDevicesDispatcher::ProcessMediaAccessRequest( |
request.audio_type == content::MEDIA_TAB_AUDIO_CAPTURE) { |
ProcessTabCaptureAccessRequest( |
web_contents, request, callback, extension); |
- } else if (extension && extension->is_platform_app()) { |
+ } else if (extension && (extension->is_platform_app() || |
+ IsMediaRequestWhitelistedForExtension(extension))) { |
// For extensions access is approved based on extension permissions. |
- ProcessMediaAccessRequestFromPlatformApp( |
+ ProcessMediaAccessRequestFromPlatformAppOrExtension( |
web_contents, request, callback, extension); |
} else { |
ProcessRegularMediaAccessRequest(web_contents, request, callback); |
@@ -404,11 +413,12 @@ void MediaCaptureDevicesDispatcher::ProcessTabCaptureAccessRequest( |
#endif // !defined(OS_ANDROID) |
} |
-void MediaCaptureDevicesDispatcher::ProcessMediaAccessRequestFromPlatformApp( |
- content::WebContents* web_contents, |
- const content::MediaStreamRequest& request, |
- const content::MediaResponseCallback& callback, |
- const extensions::Extension* extension) { |
+void MediaCaptureDevicesDispatcher:: |
+ ProcessMediaAccessRequestFromPlatformAppOrExtension( |
+ content::WebContents* web_contents, |
+ const content::MediaStreamRequest& request, |
+ const content::MediaResponseCallback& callback, |
+ const extensions::Extension* extension) { |
content::MediaStreamDevices devices; |
Profile* profile = |
Profile::FromBrowserContext(web_contents->GetBrowserContext()); |