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 "chrome/browser/media/media_stream_devices_controller.h" | 5 #include "chrome/browser/media/media_stream_devices_controller.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
9 #include "base/values.h" | 9 #include "base/values.h" |
10 #include "chrome/browser/content_settings/content_settings_provider.h" | 10 #include "chrome/browser/content_settings/content_settings_provider.h" |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
181 // Get the default devices for the request. | 181 // Get the default devices for the request. |
182 content::MediaStreamDevices devices; | 182 content::MediaStreamDevices devices; |
183 bool audio_allowed = IsDeviceAudioCaptureRequestedAndAllowed(); | 183 bool audio_allowed = IsDeviceAudioCaptureRequestedAndAllowed(); |
184 bool video_allowed = IsDeviceVideoCaptureRequestedAndAllowed(); | 184 bool video_allowed = IsDeviceVideoCaptureRequestedAndAllowed(); |
185 if (audio_allowed || video_allowed) { | 185 if (audio_allowed || video_allowed) { |
186 switch (request_.request_type) { | 186 switch (request_.request_type) { |
187 case content::MEDIA_OPEN_DEVICE: { | 187 case content::MEDIA_OPEN_DEVICE: { |
188 const content::MediaStreamDevice* device = NULL; | 188 const content::MediaStreamDevice* device = NULL; |
189 // For open device request pick the desired device or fall back to the | 189 // For open device request pick the desired device or fall back to the |
190 // first available of the given type. | 190 // first available of the given type. |
191 if (request_.audio_type == content::MEDIA_DEVICE_AUDIO_CAPTURE) { | 191 if (audio_allowed && |
| 192 request_.audio_type == content::MEDIA_DEVICE_AUDIO_CAPTURE) { |
192 device = MediaCaptureDevicesDispatcher::GetInstance()-> | 193 device = MediaCaptureDevicesDispatcher::GetInstance()-> |
193 GetRequestedAudioDevice(request_.requested_audio_device_id); | 194 GetRequestedAudioDevice(request_.requested_audio_device_id); |
194 // TODO(wjia): Confirm this is the intended behavior. | 195 // TODO(wjia): Confirm this is the intended behavior. |
195 if (!device) { | 196 if (!device) { |
196 device = MediaCaptureDevicesDispatcher::GetInstance()-> | 197 device = MediaCaptureDevicesDispatcher::GetInstance()-> |
197 GetFirstAvailableAudioDevice(); | 198 GetFirstAvailableAudioDevice(); |
198 } | 199 } |
199 } else if (request_.video_type == content::MEDIA_DEVICE_VIDEO_CAPTURE) { | 200 } else if (video_allowed && |
| 201 request_.video_type == content::MEDIA_DEVICE_VIDEO_CAPTURE) { |
200 // Pepper API opens only one device at a time. | 202 // Pepper API opens only one device at a time. |
201 device = MediaCaptureDevicesDispatcher::GetInstance()-> | 203 device = MediaCaptureDevicesDispatcher::GetInstance()-> |
202 GetRequestedVideoDevice(request_.requested_video_device_id); | 204 GetRequestedVideoDevice(request_.requested_video_device_id); |
203 // TODO(wjia): Confirm this is the intended behavior. | 205 // TODO(wjia): Confirm this is the intended behavior. |
204 if (!device) { | 206 if (!device) { |
205 device = MediaCaptureDevicesDispatcher::GetInstance()-> | 207 device = MediaCaptureDevicesDispatcher::GetInstance()-> |
206 GetFirstAvailableVideoDevice(); | 208 GetFirstAvailableVideoDevice(); |
207 } | 209 } |
208 } | 210 } |
209 if (device) | 211 if (device) |
210 devices.push_back(*device); | 212 devices.push_back(*device); |
211 break; | 213 break; |
212 } case content::MEDIA_GENERATE_STREAM: { | 214 } |
213 bool needs_audio_device = audio_allowed; | 215 case content::MEDIA_GENERATE_STREAM: { |
214 bool needs_video_device = video_allowed; | 216 bool get_default_audio_device = audio_allowed; |
| 217 bool get_default_video_device = video_allowed; |
215 | 218 |
216 // Get the exact audio or video device if an id is specified. | 219 // Get the exact audio or video device if an id is specified. |
217 if (!request_.requested_audio_device_id.empty()) { | 220 if (audio_allowed && !request_.requested_audio_device_id.empty()) { |
218 const content::MediaStreamDevice* audio_device = | 221 const content::MediaStreamDevice* audio_device = |
219 MediaCaptureDevicesDispatcher::GetInstance()-> | 222 MediaCaptureDevicesDispatcher::GetInstance()-> |
220 GetRequestedAudioDevice(request_.requested_audio_device_id); | 223 GetRequestedAudioDevice(request_.requested_audio_device_id); |
221 if (audio_device) { | 224 if (audio_device) { |
222 devices.push_back(*audio_device); | 225 devices.push_back(*audio_device); |
223 needs_audio_device = false; | 226 get_default_audio_device = false; |
224 } | 227 } |
225 } | 228 } |
226 if (!request_.requested_video_device_id.empty()) { | 229 if (video_allowed && !request_.requested_video_device_id.empty()) { |
227 const content::MediaStreamDevice* video_device = | 230 const content::MediaStreamDevice* video_device = |
228 MediaCaptureDevicesDispatcher::GetInstance()-> | 231 MediaCaptureDevicesDispatcher::GetInstance()-> |
229 GetRequestedVideoDevice(request_.requested_video_device_id); | 232 GetRequestedVideoDevice(request_.requested_video_device_id); |
230 if (video_device) { | 233 if (video_device) { |
231 devices.push_back(*video_device); | 234 devices.push_back(*video_device); |
232 needs_video_device = false; | 235 get_default_video_device = false; |
233 } | 236 } |
234 } | 237 } |
235 | 238 |
236 // If either or both audio and video devices were requested but not | 239 // If either or both audio and video devices were requested but not |
237 // specified by id, get the default devices. | 240 // specified by id, get the default devices. |
238 if (needs_audio_device || needs_video_device) { | 241 if (get_default_audio_device || get_default_video_device) { |
239 MediaCaptureDevicesDispatcher::GetInstance()-> | 242 MediaCaptureDevicesDispatcher::GetInstance()-> |
240 GetDefaultDevicesForProfile(profile_, | 243 GetDefaultDevicesForProfile(profile_, |
241 needs_audio_device, | 244 get_default_audio_device, |
242 needs_video_device, | 245 get_default_video_device, |
243 &devices); | 246 &devices); |
244 } | 247 } |
245 break; | 248 break; |
246 } case content::MEDIA_DEVICE_ACCESS: | 249 } |
| 250 case content::MEDIA_DEVICE_ACCESS: { |
247 // Get the default devices for the request. | 251 // Get the default devices for the request. |
248 MediaCaptureDevicesDispatcher::GetInstance()-> | 252 MediaCaptureDevicesDispatcher::GetInstance()-> |
249 GetDefaultDevicesForProfile(profile_, | 253 GetDefaultDevicesForProfile(profile_, |
250 audio_allowed, | 254 audio_allowed, |
251 video_allowed, | 255 video_allowed, |
252 &devices); | 256 &devices); |
253 break; | 257 break; |
254 case content::MEDIA_ENUMERATE_DEVICES: | 258 } |
| 259 case content::MEDIA_ENUMERATE_DEVICES: { |
255 // Do nothing. | 260 // Do nothing. |
256 NOTREACHED(); | 261 NOTREACHED(); |
257 break; | 262 break; |
258 } | 263 } |
| 264 } // switch |
259 | 265 |
260 // TODO(raymes): We currently set the content permission for non-https | 266 // TODO(raymes): We currently set the content permission for non-https |
261 // websites for Pepper requests as well. This is temporary and should be | 267 // websites for Pepper requests as well. This is temporary and should be |
262 // removed. | 268 // removed. |
263 if (update_content_setting) { | 269 if (update_content_setting) { |
264 if ((IsSchemeSecure() && !devices.empty()) || | 270 if ((IsSchemeSecure() && !devices.empty()) || |
265 request_.request_type == content::MEDIA_OPEN_DEVICE) { | 271 request_.request_type == content::MEDIA_OPEN_DEVICE) { |
266 SetPermission(true); | 272 SetPermission(true); |
267 } | 273 } |
268 } | 274 } |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
504 request_permissions_.find(content::MEDIA_DEVICE_AUDIO_CAPTURE); | 510 request_permissions_.find(content::MEDIA_DEVICE_AUDIO_CAPTURE); |
505 return it != request_permissions_.end() && it->second == MEDIA_ALLOWED; | 511 return it != request_permissions_.end() && it->second == MEDIA_ALLOWED; |
506 } | 512 } |
507 | 513 |
508 bool MediaStreamDevicesController::IsDeviceVideoCaptureRequestedAndAllowed() | 514 bool MediaStreamDevicesController::IsDeviceVideoCaptureRequestedAndAllowed() |
509 const { | 515 const { |
510 MediaStreamTypePermissionMap::const_iterator it = | 516 MediaStreamTypePermissionMap::const_iterator it = |
511 request_permissions_.find(content::MEDIA_DEVICE_VIDEO_CAPTURE); | 517 request_permissions_.find(content::MEDIA_DEVICE_VIDEO_CAPTURE); |
512 return it != request_permissions_.end() && it->second == MEDIA_ALLOWED; | 518 return it != request_permissions_.end() && it->second == MEDIA_ALLOWED; |
513 } | 519 } |
OLD | NEW |