Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(290)

Side by Side Diff: content/browser/renderer_host/media/media_devices_dispatcher_host.cc

Issue 2824193002: Enable use_once_callback for //content/common/*.mojom (Closed)
Patch Set: rebase Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 static_cast<MediaDeviceType>(i), this); 135 static_cast<MediaDeviceType>(i), this);
136 } 136 }
137 } 137 }
138 } 138 }
139 139
140 void MediaDevicesDispatcherHost::EnumerateDevices( 140 void MediaDevicesDispatcherHost::EnumerateDevices(
141 bool request_audio_input, 141 bool request_audio_input,
142 bool request_video_input, 142 bool request_video_input,
143 bool request_audio_output, 143 bool request_audio_output,
144 const url::Origin& security_origin, 144 const url::Origin& security_origin,
145 const EnumerateDevicesCallback& client_callback) { 145 EnumerateDevicesCallback client_callback) {
146 DCHECK_CURRENTLY_ON(BrowserThread::IO); 146 DCHECK_CURRENTLY_ON(BrowserThread::IO);
147 147
148 if (!request_audio_input && !request_video_input && !request_audio_output) { 148 if (!request_audio_input && !request_video_input && !request_audio_output) {
149 bad_message::ReceivedBadMessage( 149 bad_message::ReceivedBadMessage(
150 render_process_id_, bad_message::MDDH_INVALID_DEVICE_TYPE_REQUEST); 150 render_process_id_, bad_message::MDDH_INVALID_DEVICE_TYPE_REQUEST);
151 return; 151 return;
152 } 152 }
153 153
154 // Ignore requests from unique origins, but do not crash the renderer. 154 // Ignore requests from unique origins, but do not crash the renderer.
155 if (security_origin.unique()) 155 if (security_origin.unique())
156 return; 156 return;
157 157
158 if (!MediaStreamManager::IsOriginAllowed(render_process_id_, 158 if (!MediaStreamManager::IsOriginAllowed(render_process_id_,
159 security_origin)) { 159 security_origin)) {
160 bad_message::ReceivedBadMessage(render_process_id_, 160 bad_message::ReceivedBadMessage(render_process_id_,
161 bad_message::MDDH_UNAUTHORIZED_ORIGIN); 161 bad_message::MDDH_UNAUTHORIZED_ORIGIN);
162 return; 162 return;
163 } 163 }
164 164
165 MediaDevicesManager::BoolDeviceTypes devices_to_enumerate; 165 MediaDevicesManager::BoolDeviceTypes devices_to_enumerate;
166 devices_to_enumerate[MEDIA_DEVICE_TYPE_AUDIO_INPUT] = request_audio_input; 166 devices_to_enumerate[MEDIA_DEVICE_TYPE_AUDIO_INPUT] = request_audio_input;
167 devices_to_enumerate[MEDIA_DEVICE_TYPE_VIDEO_INPUT] = request_video_input; 167 devices_to_enumerate[MEDIA_DEVICE_TYPE_VIDEO_INPUT] = request_video_input;
168 devices_to_enumerate[MEDIA_DEVICE_TYPE_AUDIO_OUTPUT] = request_audio_output; 168 devices_to_enumerate[MEDIA_DEVICE_TYPE_AUDIO_OUTPUT] = request_audio_output;
169 169
170 permission_checker_->CheckPermissions( 170 permission_checker_->CheckPermissions(
171 devices_to_enumerate, render_process_id_, render_frame_id_, 171 devices_to_enumerate, render_process_id_, render_frame_id_,
172 security_origin, 172 security_origin,
173 base::Bind(&MediaDevicesDispatcherHost::DoEnumerateDevices, 173 base::Bind(&MediaDevicesDispatcherHost::DoEnumerateDevices,
174 weak_factory_.GetWeakPtr(), devices_to_enumerate, 174 weak_factory_.GetWeakPtr(), devices_to_enumerate,
175 security_origin, client_callback)); 175 security_origin, base::Passed(&client_callback)));
176 } 176 }
177 177
178 void MediaDevicesDispatcherHost::GetVideoInputCapabilities( 178 void MediaDevicesDispatcherHost::GetVideoInputCapabilities(
179 const url::Origin& security_origin, 179 const url::Origin& security_origin,
180 const GetVideoInputCapabilitiesCallback& client_callback) { 180 GetVideoInputCapabilitiesCallback client_callback) {
181 DCHECK_CURRENTLY_ON(BrowserThread::IO); 181 DCHECK_CURRENTLY_ON(BrowserThread::IO);
182 if (!MediaStreamManager::IsOriginAllowed(render_process_id_, 182 if (!MediaStreamManager::IsOriginAllowed(render_process_id_,
183 security_origin)) { 183 security_origin)) {
184 bad_message::ReceivedBadMessage(render_process_id_, 184 bad_message::ReceivedBadMessage(render_process_id_,
185 bad_message::MDDH_UNAUTHORIZED_ORIGIN); 185 bad_message::MDDH_UNAUTHORIZED_ORIGIN);
186 return; 186 return;
187 } 187 }
188 188
189 GetDefaultMediaDeviceID( 189 GetDefaultMediaDeviceID(
190 MEDIA_DEVICE_TYPE_VIDEO_INPUT, render_process_id_, render_frame_id_, 190 MEDIA_DEVICE_TYPE_VIDEO_INPUT, render_process_id_, render_frame_id_,
191 base::Bind(&MediaDevicesDispatcherHost::GotDefaultVideoInputDeviceID, 191 base::Bind(&MediaDevicesDispatcherHost::GotDefaultVideoInputDeviceID,
192 weak_factory_.GetWeakPtr(), security_origin, client_callback)); 192 weak_factory_.GetWeakPtr(), security_origin,
193 base::Passed(&client_callback)));
193 } 194 }
194 195
195 void MediaDevicesDispatcherHost::SubscribeDeviceChangeNotifications( 196 void MediaDevicesDispatcherHost::SubscribeDeviceChangeNotifications(
196 MediaDeviceType type, 197 MediaDeviceType type,
197 uint32_t subscription_id, 198 uint32_t subscription_id,
198 const url::Origin& security_origin) { 199 const url::Origin& security_origin) {
199 DCHECK_CURRENTLY_ON(BrowserThread::IO); 200 DCHECK_CURRENTLY_ON(BrowserThread::IO);
200 DCHECK(IsValidMediaDeviceType(type)); 201 DCHECK(IsValidMediaDeviceType(type));
201 if (!MediaStreamManager::IsOriginAllowed(render_process_id_, 202 if (!MediaStreamManager::IsOriginAllowed(render_process_id_,
202 security_origin)) { 203 security_origin)) {
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 306
306 void MediaDevicesDispatcherHost::SetDeviceChangeListenerForTesting( 307 void MediaDevicesDispatcherHost::SetDeviceChangeListenerForTesting(
307 ::mojom::MediaDevicesListenerPtr listener) { 308 ::mojom::MediaDevicesListenerPtr listener) {
308 DCHECK_CURRENTLY_ON(BrowserThread::UI); 309 DCHECK_CURRENTLY_ON(BrowserThread::UI);
309 device_change_listener_ = std::move(listener); 310 device_change_listener_ = std::move(listener);
310 } 311 }
311 312
312 void MediaDevicesDispatcherHost::DoEnumerateDevices( 313 void MediaDevicesDispatcherHost::DoEnumerateDevices(
313 const MediaDevicesManager::BoolDeviceTypes& requested_types, 314 const MediaDevicesManager::BoolDeviceTypes& requested_types,
314 const url::Origin& security_origin, 315 const url::Origin& security_origin,
315 const EnumerateDevicesCallback& client_callback, 316 EnumerateDevicesCallback client_callback,
316 const MediaDevicesManager::BoolDeviceTypes& has_permissions) { 317 const MediaDevicesManager::BoolDeviceTypes& has_permissions) {
317 DCHECK_CURRENTLY_ON(BrowserThread::IO); 318 DCHECK_CURRENTLY_ON(BrowserThread::IO);
318 media_stream_manager_->media_devices_manager()->EnumerateDevices( 319 media_stream_manager_->media_devices_manager()->EnumerateDevices(
319 requested_types, 320 requested_types,
320 base::Bind(&MediaDevicesDispatcherHost::DevicesEnumerated, 321 base::Bind(&MediaDevicesDispatcherHost::DevicesEnumerated,
321 weak_factory_.GetWeakPtr(), requested_types, security_origin, 322 weak_factory_.GetWeakPtr(), requested_types, security_origin,
322 client_callback, has_permissions)); 323 base::Passed(&client_callback), has_permissions));
323 } 324 }
324 325
325 void MediaDevicesDispatcherHost::DevicesEnumerated( 326 void MediaDevicesDispatcherHost::DevicesEnumerated(
326 const MediaDevicesManager::BoolDeviceTypes& requested_types, 327 const MediaDevicesManager::BoolDeviceTypes& requested_types,
327 const url::Origin& security_origin, 328 const url::Origin& security_origin,
328 const EnumerateDevicesCallback& client_callback, 329 EnumerateDevicesCallback client_callback,
329 const MediaDevicesManager::BoolDeviceTypes& has_permissions, 330 const MediaDevicesManager::BoolDeviceTypes& has_permissions,
330 const MediaDeviceEnumeration& enumeration) { 331 const MediaDeviceEnumeration& enumeration) {
331 DCHECK_CURRENTLY_ON(BrowserThread::IO); 332 DCHECK_CURRENTLY_ON(BrowserThread::IO);
332 std::vector<std::vector<MediaDeviceInfo>> result(NUM_MEDIA_DEVICE_TYPES); 333 std::vector<std::vector<MediaDeviceInfo>> result(NUM_MEDIA_DEVICE_TYPES);
333 for (size_t i = 0; i < NUM_MEDIA_DEVICE_TYPES; ++i) { 334 for (size_t i = 0; i < NUM_MEDIA_DEVICE_TYPES; ++i) {
334 if (!requested_types[i]) 335 if (!requested_types[i])
335 continue; 336 continue;
336 337
337 for (const auto& device_info : enumeration[i]) { 338 for (const auto& device_info : enumeration[i]) {
338 result[i].push_back(TranslateDeviceInfo(has_permissions[i], 339 result[i].push_back(TranslateDeviceInfo(has_permissions[i],
339 device_id_salt_, group_id_salt_, 340 device_id_salt_, group_id_salt_,
340 security_origin, device_info)); 341 security_origin, device_info));
341 } 342 }
342 } 343 }
343 client_callback.Run(result); 344 std::move(client_callback).Run(result);
344 } 345 }
345 346
346 void MediaDevicesDispatcherHost::GotDefaultVideoInputDeviceID( 347 void MediaDevicesDispatcherHost::GotDefaultVideoInputDeviceID(
347 const url::Origin& security_origin, 348 const url::Origin& security_origin,
348 const GetVideoInputCapabilitiesCallback& client_callback, 349 GetVideoInputCapabilitiesCallback client_callback,
349 const std::string& default_device_id) { 350 const std::string& default_device_id) {
350 MediaDevicesManager::BoolDeviceTypes devices_to_enumerate; 351 MediaDevicesManager::BoolDeviceTypes devices_to_enumerate;
351 devices_to_enumerate[MEDIA_DEVICE_TYPE_VIDEO_INPUT] = true; 352 devices_to_enumerate[MEDIA_DEVICE_TYPE_VIDEO_INPUT] = true;
352 media_stream_manager_->video_capture_manager()->EnumerateDevices( 353 media_stream_manager_->video_capture_manager()->EnumerateDevices(
353 base::Bind(&MediaDevicesDispatcherHost::FinalizeGetVideoInputCapabilities, 354 base::Bind(&MediaDevicesDispatcherHost::FinalizeGetVideoInputCapabilities,
354 weak_factory_.GetWeakPtr(), security_origin, client_callback, 355 weak_factory_.GetWeakPtr(), security_origin,
355 default_device_id)); 356 base::Passed(&client_callback), default_device_id));
356 } 357 }
357 358
358 void MediaDevicesDispatcherHost::FinalizeGetVideoInputCapabilities( 359 void MediaDevicesDispatcherHost::FinalizeGetVideoInputCapabilities(
359 const url::Origin& security_origin, 360 const url::Origin& security_origin,
360 const GetVideoInputCapabilitiesCallback& client_callback, 361 GetVideoInputCapabilitiesCallback client_callback,
361 const std::string& default_device_id, 362 const std::string& default_device_id,
362 const media::VideoCaptureDeviceDescriptors& device_descriptors) { 363 const media::VideoCaptureDeviceDescriptors& device_descriptors) {
363 DCHECK_CURRENTLY_ON(BrowserThread::IO); 364 DCHECK_CURRENTLY_ON(BrowserThread::IO);
364 std::vector<::mojom::VideoInputDeviceCapabilitiesPtr> 365 std::vector<::mojom::VideoInputDeviceCapabilitiesPtr>
365 video_input_capabilities; 366 video_input_capabilities;
366 for (const auto& descriptor : device_descriptors) { 367 for (const auto& descriptor : device_descriptors) {
367 std::string hmac_device_id = GetHMACForMediaDeviceID( 368 std::string hmac_device_id = GetHMACForMediaDeviceID(
368 device_id_salt_, security_origin, descriptor.device_id); 369 device_id_salt_, security_origin, descriptor.device_id);
369 ::mojom::VideoInputDeviceCapabilitiesPtr capabilities = 370 ::mojom::VideoInputDeviceCapabilitiesPtr capabilities =
370 ::mojom::VideoInputDeviceCapabilities::New(); 371 ::mojom::VideoInputDeviceCapabilities::New();
(...skipping 22 matching lines...) Expand all
393 capabilities->facing_mode = ::mojom::FacingMode::ENVIRONMENT; 394 capabilities->facing_mode = ::mojom::FacingMode::ENVIRONMENT;
394 #endif 395 #endif
395 if (descriptor.device_id == default_device_id) { 396 if (descriptor.device_id == default_device_id) {
396 video_input_capabilities.insert(video_input_capabilities.begin(), 397 video_input_capabilities.insert(video_input_capabilities.begin(),
397 std::move(capabilities)); 398 std::move(capabilities));
398 } else { 399 } else {
399 video_input_capabilities.push_back(std::move(capabilities)); 400 video_input_capabilities.push_back(std::move(capabilities));
400 } 401 }
401 } 402 }
402 403
403 client_callback.Run(std::move(video_input_capabilities)); 404 std::move(client_callback).Run(std::move(video_input_capabilities));
404 } 405 }
405 406
406 media::VideoCaptureFormats MediaDevicesDispatcherHost::GetVideoInputFormats( 407 media::VideoCaptureFormats MediaDevicesDispatcherHost::GetVideoInputFormats(
407 const std::string& device_id) { 408 const std::string& device_id) {
408 DCHECK_CURRENTLY_ON(BrowserThread::IO); 409 DCHECK_CURRENTLY_ON(BrowserThread::IO);
409 media::VideoCaptureFormats formats; 410 media::VideoCaptureFormats formats;
410 base::Optional<media::VideoCaptureFormat> format = 411 base::Optional<media::VideoCaptureFormat> format =
411 media_stream_manager_->video_capture_manager()->GetDeviceFormatInUse( 412 media_stream_manager_->video_capture_manager()->GetDeviceFormatInUse(
412 MEDIA_DEVICE_VIDEO_CAPTURE, device_id); 413 MEDIA_DEVICE_VIDEO_CAPTURE, device_id);
413 if (format.has_value()) { 414 if (format.has_value()) {
414 formats.push_back(format.value()); 415 formats.push_back(format.value());
415 return formats; 416 return formats;
416 } 417 }
417 418
418 media_stream_manager_->video_capture_manager()->GetDeviceSupportedFormats( 419 media_stream_manager_->video_capture_manager()->GetDeviceSupportedFormats(
419 device_id, &formats); 420 device_id, &formats);
420 return formats; 421 return formats;
421 } 422 }
422 423
423 } // namespace content 424 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698