| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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_devices_dispatcher_host.h" | 5 #include "content/browser/renderer_host/media/media_devices_dispatcher_host.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 81 MediaDevicesDispatcherHost::MediaDevicesDispatcherHost( | 81 MediaDevicesDispatcherHost::MediaDevicesDispatcherHost( |
| 82 int render_process_id, | 82 int render_process_id, |
| 83 int render_frame_id, | 83 int render_frame_id, |
| 84 const std::string& device_id_salt, | 84 const std::string& device_id_salt, |
| 85 MediaStreamManager* media_stream_manager) | 85 MediaStreamManager* media_stream_manager) |
| 86 : render_process_id_(render_process_id), | 86 : render_process_id_(render_process_id), |
| 87 render_frame_id_(render_frame_id), | 87 render_frame_id_(render_frame_id), |
| 88 device_id_salt_(device_id_salt), | 88 device_id_salt_(device_id_salt), |
| 89 group_id_salt_(ResourceContext::CreateRandomMediaDeviceIDSalt()), | 89 group_id_salt_(ResourceContext::CreateRandomMediaDeviceIDSalt()), |
| 90 media_stream_manager_(media_stream_manager), | 90 media_stream_manager_(media_stream_manager), |
| 91 permission_checker_(base::MakeUnique<MediaDevicesPermissionChecker>()), |
| 91 weak_factory_(this) { | 92 weak_factory_(this) { |
| 92 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 93 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 93 } | 94 } |
| 94 | 95 |
| 95 MediaDevicesDispatcherHost::~MediaDevicesDispatcherHost() { | 96 MediaDevicesDispatcherHost::~MediaDevicesDispatcherHost() { |
| 96 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 97 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 97 for (size_t i = 0; i < NUM_MEDIA_DEVICE_TYPES; ++i) { | 98 for (size_t i = 0; i < NUM_MEDIA_DEVICE_TYPES; ++i) { |
| 98 if (!device_change_subscriptions_[i].empty()) { | 99 if (!device_change_subscriptions_[i].empty()) { |
| 99 media_stream_manager_->media_devices_manager() | 100 media_stream_manager_->media_devices_manager() |
| 100 ->UnsubscribeDeviceChangeNotifications( | 101 ->UnsubscribeDeviceChangeNotifications( |
| (...skipping 21 matching lines...) Expand all Loading... |
| 122 bad_message::ReceivedBadMessage(render_process_id_, | 123 bad_message::ReceivedBadMessage(render_process_id_, |
| 123 bad_message::MDDH_UNAUTHORIZED_ORIGIN); | 124 bad_message::MDDH_UNAUTHORIZED_ORIGIN); |
| 124 return; | 125 return; |
| 125 } | 126 } |
| 126 | 127 |
| 127 MediaDevicesManager::BoolDeviceTypes devices_to_enumerate; | 128 MediaDevicesManager::BoolDeviceTypes devices_to_enumerate; |
| 128 devices_to_enumerate[MEDIA_DEVICE_TYPE_AUDIO_INPUT] = request_audio_input; | 129 devices_to_enumerate[MEDIA_DEVICE_TYPE_AUDIO_INPUT] = request_audio_input; |
| 129 devices_to_enumerate[MEDIA_DEVICE_TYPE_VIDEO_INPUT] = request_video_input; | 130 devices_to_enumerate[MEDIA_DEVICE_TYPE_VIDEO_INPUT] = request_video_input; |
| 130 devices_to_enumerate[MEDIA_DEVICE_TYPE_AUDIO_OUTPUT] = request_audio_output; | 131 devices_to_enumerate[MEDIA_DEVICE_TYPE_AUDIO_OUTPUT] = request_audio_output; |
| 131 | 132 |
| 132 permission_checker_.CheckPermissions( | 133 permission_checker_->CheckPermissions( |
| 133 devices_to_enumerate, render_process_id_, render_frame_id_, | 134 devices_to_enumerate, render_process_id_, render_frame_id_, |
| 134 security_origin, | 135 security_origin, |
| 135 base::Bind(&MediaDevicesDispatcherHost::DoEnumerateDevices, | 136 base::Bind(&MediaDevicesDispatcherHost::DoEnumerateDevices, |
| 136 weak_factory_.GetWeakPtr(), devices_to_enumerate, | 137 weak_factory_.GetWeakPtr(), devices_to_enumerate, |
| 137 security_origin, client_callback)); | 138 security_origin, client_callback)); |
| 138 } | 139 } |
| 139 | 140 |
| 140 void MediaDevicesDispatcherHost::SubscribeDeviceChangeNotifications( | 141 void MediaDevicesDispatcherHost::SubscribeDeviceChangeNotifications( |
| 141 MediaDeviceType type, | 142 MediaDeviceType type, |
| 142 uint32_t subscription_id, | 143 uint32_t subscription_id, |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 223 if (!render_frame_host) | 224 if (!render_frame_host) |
| 224 return; | 225 return; |
| 225 | 226 |
| 226 render_frame_host->GetRemoteInterfaces()->GetInterface( | 227 render_frame_host->GetRemoteInterfaces()->GetInterface( |
| 227 mojo::GetProxy(&media_devices_listener)); | 228 mojo::GetProxy(&media_devices_listener)); |
| 228 if (!media_devices_listener) | 229 if (!media_devices_listener) |
| 229 return; | 230 return; |
| 230 } | 231 } |
| 231 | 232 |
| 232 for (const auto& subscription : subscriptions) { | 233 for (const auto& subscription : subscriptions) { |
| 233 bool has_permission = permission_checker_.CheckPermissionOnUIThread( | 234 bool has_permission = permission_checker_->CheckPermissionOnUIThread( |
| 234 type, render_process_id_, render_frame_id_, | 235 type, render_process_id_, render_frame_id_, |
| 235 subscription.security_origin); | 236 subscription.security_origin); |
| 236 media_devices_listener->OnDevicesChanged( | 237 media_devices_listener->OnDevicesChanged( |
| 237 type, subscription.subscription_id, | 238 type, subscription.subscription_id, |
| 238 TranslateMediaDeviceInfoArray( | 239 TranslateMediaDeviceInfoArray( |
| 239 has_permission, device_id_salt_, group_id_salt_, | 240 has_permission, device_id_salt_, group_id_salt_, |
| 240 subscription.security_origin, device_infos)); | 241 subscription.security_origin, device_infos)); |
| 241 } | 242 } |
| 242 } | 243 } |
| 243 | 244 |
| 244 void MediaDevicesDispatcherHost::SetPermissionChecker( | 245 void MediaDevicesDispatcherHost::SetPermissionChecker( |
| 245 const MediaDevicesPermissionChecker& permission_checker) { | 246 std::unique_ptr<MediaDevicesPermissionChecker> permission_checker) { |
| 246 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 247 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 247 permission_checker_ = permission_checker; | 248 DCHECK(permission_checker); |
| 249 permission_checker_ = std::move(permission_checker); |
| 248 } | 250 } |
| 249 | 251 |
| 250 void MediaDevicesDispatcherHost::SetDeviceChangeListenerForTesting( | 252 void MediaDevicesDispatcherHost::SetDeviceChangeListenerForTesting( |
| 251 ::mojom::MediaDevicesListenerPtr listener) { | 253 ::mojom::MediaDevicesListenerPtr listener) { |
| 252 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 254 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 253 device_change_listener_ = std::move(listener); | 255 device_change_listener_ = std::move(listener); |
| 254 } | 256 } |
| 255 | 257 |
| 256 void MediaDevicesDispatcherHost::DoEnumerateDevices( | 258 void MediaDevicesDispatcherHost::DoEnumerateDevices( |
| 257 const MediaDevicesManager::BoolDeviceTypes& requested_types, | 259 const MediaDevicesManager::BoolDeviceTypes& requested_types, |
| (...skipping 23 matching lines...) Expand all Loading... |
| 281 for (const auto& device_info : enumeration[i]) { | 283 for (const auto& device_info : enumeration[i]) { |
| 282 result[i].push_back(TranslateDeviceInfo(has_permissions[i], | 284 result[i].push_back(TranslateDeviceInfo(has_permissions[i], |
| 283 device_id_salt_, group_id_salt_, | 285 device_id_salt_, group_id_salt_, |
| 284 security_origin, device_info)); | 286 security_origin, device_info)); |
| 285 } | 287 } |
| 286 } | 288 } |
| 287 client_callback.Run(result); | 289 client_callback.Run(result); |
| 288 } | 290 } |
| 289 | 291 |
| 290 } // namespace content | 292 } // namespace content |
| OLD | NEW |