| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/renderer_host/media/media_stream_device_settings.h" | 5 #include "content/browser/renderer_host/media/media_stream_device_settings.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| 11 #include "base/stl_util.h" | 11 #include "base/stl_util.h" |
| 12 #include "content/browser/renderer_host/media/media_stream_settings_requester.h" | 12 #include "content/browser/renderer_host/media/media_stream_settings_requester.h" |
| 13 #include "content/browser/renderer_host/render_view_host_delegate.h" |
| 14 #include "content/browser/renderer_host/render_view_host_impl.h" |
| 13 #include "content/common/media/media_stream_options.h" | 15 #include "content/common/media/media_stream_options.h" |
| 14 #include "content/public/browser/browser_thread.h" | 16 #include "content/public/browser/browser_thread.h" |
| 15 #include "content/public/browser/content_browser_client.h" | 17 #include "content/public/browser/content_browser_client.h" |
| 16 #include "content/public/common/media_stream_request.h" | 18 #include "content/public/common/media_stream_request.h" |
| 17 #include "googleurl/src/gurl.h" | 19 #include "googleurl/src/gurl.h" |
| 18 | 20 |
| 19 using content::BrowserThread; | 21 using content::BrowserThread; |
| 20 using content::MediaStreamDevice; | 22 using content::MediaStreamDevice; |
| 21 using content::MediaStreamRequest; | 23 using content::MediaStreamRequest; |
| 22 | 24 |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 | 101 |
| 100 // Request options. | 102 // Request options. |
| 101 StreamOptions options; | 103 StreamOptions options; |
| 102 // Map containing available devices for the requested capture types. | 104 // Map containing available devices for the requested capture types. |
| 103 DeviceMap devices_full; | 105 DeviceMap devices_full; |
| 104 // Whether or not a task was posted to make the call to | 106 // Whether or not a task was posted to make the call to |
| 105 // RequestMediaAccessPermission, to make sure that we never post twice to it. | 107 // RequestMediaAccessPermission, to make sure that we never post twice to it. |
| 106 bool posted_task; | 108 bool posted_task; |
| 107 }; | 109 }; |
| 108 | 110 |
| 111 namespace { |
| 112 |
| 113 // Sends the request to the appropriate WebContents. |
| 114 void DoDeviceRequest( |
| 115 const MediaStreamDeviceSettingsRequest* request, |
| 116 const content::MediaResponseCallback& callback) { |
| 117 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 118 |
| 119 // Send the permission request to the web contents. |
| 120 content::RenderViewHostImpl* host = |
| 121 content::RenderViewHostImpl::FromID(request->render_process_id, |
| 122 request->render_view_id); |
| 123 |
| 124 // Tab may have gone away. |
| 125 if (!host || !host->GetDelegate()) |
| 126 callback.Run(content::MediaStreamDevices()); |
| 127 |
| 128 host->GetDelegate()->RequestMediaAccessPermission(request, callback); |
| 129 } |
| 130 |
| 131 } // namespace |
| 132 |
| 109 MediaStreamDeviceSettings::MediaStreamDeviceSettings( | 133 MediaStreamDeviceSettings::MediaStreamDeviceSettings( |
| 110 SettingsRequester* requester) | 134 SettingsRequester* requester) |
| 111 : requester_(requester), | 135 : requester_(requester), |
| 112 use_fake_ui_(false) { | 136 use_fake_ui_(false) { |
| 113 DCHECK(requester_); | 137 DCHECK(requester_); |
| 114 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 138 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 115 } | 139 } |
| 116 | 140 |
| 117 MediaStreamDeviceSettings::~MediaStreamDeviceSettings() { | 141 MediaStreamDeviceSettings::~MediaStreamDeviceSettings() { |
| 118 STLDeleteValues(&requests_); | 142 STLDeleteValues(&requests_); |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 315 for (DeviceMap::iterator it = request->devices_full.begin(); | 339 for (DeviceMap::iterator it = request->devices_full.begin(); |
| 316 it != request->devices_full.end(); ++it) { | 340 it != request->devices_full.end(); ++it) { |
| 317 request->devices[it->first].clear(); | 341 request->devices[it->first].clear(); |
| 318 for (StreamDeviceInfoArray::iterator device = it->second.begin(); | 342 for (StreamDeviceInfoArray::iterator device = it->second.begin(); |
| 319 device != it->second.end(); ++device) { | 343 device != it->second.end(); ++device) { |
| 320 request->devices[it->first].push_back(MediaStreamDevice( | 344 request->devices[it->first].push_back(MediaStreamDevice( |
| 321 it->first, device->device_id, device->name)); | 345 it->first, device->device_id, device->name)); |
| 322 } | 346 } |
| 323 } | 347 } |
| 324 | 348 |
| 325 // Send the permission request to the content client. | |
| 326 scoped_refptr<ResponseCallbackHelper> helper = | 349 scoped_refptr<ResponseCallbackHelper> helper = |
| 327 new ResponseCallbackHelper(AsWeakPtr()); | 350 new ResponseCallbackHelper(AsWeakPtr()); |
| 328 content::MediaResponseCallback callback = | 351 content::MediaResponseCallback callback = |
| 329 base::Bind(&ResponseCallbackHelper::PostResponse, | 352 base::Bind(&ResponseCallbackHelper::PostResponse, |
| 330 helper.get(), label); | 353 helper.get(), label); |
| 354 |
| 331 BrowserThread::PostTask( | 355 BrowserThread::PostTask( |
| 332 BrowserThread::UI, FROM_HERE, | 356 BrowserThread::UI, FROM_HERE, |
| 333 base::Bind( | 357 base::Bind(&DoDeviceRequest, request, callback)); |
| 334 &content::ContentBrowserClient::RequestMediaAccessPermission, | |
| 335 base::Unretained(content::GetContentClient()->browser()), | |
| 336 request, callback)); | |
| 337 | |
| 338 } | 358 } |
| 339 | 359 |
| 340 } // namespace media_stream | 360 } // namespace media_stream |
| OLD | NEW |