Index: content/browser/renderer_host/media/media_stream_device_settings.cc |
diff --git a/content/browser/renderer_host/media/media_stream_device_settings.cc b/content/browser/renderer_host/media/media_stream_device_settings.cc |
index 39d66e7a5b2693abfd124a9638a65eb6eed3e67f..294e092685f89c1b504f40961538757fb0d23586 100644 |
--- a/content/browser/renderer_host/media/media_stream_device_settings.cc |
+++ b/content/browser/renderer_host/media/media_stream_device_settings.cc |
@@ -10,6 +10,8 @@ |
#include "base/callback.h" |
#include "base/stl_util.h" |
#include "content/browser/renderer_host/media/media_stream_settings_requester.h" |
+#include "content/browser/renderer_host/render_view_host_delegate.h" |
+#include "content/browser/renderer_host/render_view_host_impl.h" |
#include "content/common/media/media_stream_options.h" |
#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/content_browser_client.h" |
@@ -106,6 +108,28 @@ class MediaStreamDeviceSettingsRequest : public MediaStreamRequest { |
bool posted_task; |
}; |
+namespace { |
+ |
+// Sends the request to the appropriate WebContents. |
+void DoDeviceRequest( |
+ const MediaStreamDeviceSettingsRequest* request, |
+ const content::MediaResponseCallback& callback) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ |
+ // Send the permission request to the web contents. |
+ content::RenderViewHostImpl* host = |
+ content::RenderViewHostImpl::FromID(request->render_process_id, |
+ request->render_view_id); |
+ |
+ // Tab may have gone away. |
+ if (!host || !host->GetDelegate()) |
+ callback.Run(content::MediaStreamDevices()); |
+ |
+ host->GetDelegate()->RequestMediaAccessPermission(request, callback); |
+} |
+ |
+} // namespace |
+ |
MediaStreamDeviceSettings::MediaStreamDeviceSettings( |
SettingsRequester* requester) |
: requester_(requester), |
@@ -322,19 +346,15 @@ void MediaStreamDeviceSettings::PostRequestToUi(const std::string& label) { |
} |
} |
- // Send the permission request to the content client. |
scoped_refptr<ResponseCallbackHelper> helper = |
new ResponseCallbackHelper(AsWeakPtr()); |
content::MediaResponseCallback callback = |
base::Bind(&ResponseCallbackHelper::PostResponse, |
helper.get(), label); |
+ |
BrowserThread::PostTask( |
BrowserThread::UI, FROM_HERE, |
- base::Bind( |
- &content::ContentBrowserClient::RequestMediaAccessPermission, |
- base::Unretained(content::GetContentClient()->browser()), |
- request, callback)); |
- |
+ base::Bind(&DoDeviceRequest, request, callback)); |
} |
} // namespace media_stream |