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

Side by Side Diff: chrome/browser/media/webrtc/media_capture_devices_dispatcher.cc

Issue 2746873004: Move ChromeOS login media access logic into a MediaAccessHandler (Closed)
Patch Set: Move SAML access logic into MediaAccessHandler Created 3 years, 9 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 (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/webrtc/media_capture_devices_dispatcher.h" 5 #include "chrome/browser/media/webrtc/media_capture_devices_dispatcher.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/metrics/field_trial.h" 9 #include "base/metrics/field_trial.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 20 matching lines...) Expand all
31 #include "content/public/browser/web_contents.h" 31 #include "content/public/browser/web_contents.h"
32 #include "content/public/common/media_stream_request.h" 32 #include "content/public/common/media_stream_request.h"
33 #include "extensions/common/constants.h" 33 #include "extensions/common/constants.h"
34 #include "extensions/features/features.h" 34 #include "extensions/features/features.h"
35 #include "media/base/media_switches.h" 35 #include "media/base/media_switches.h"
36 36
37 #if defined(OS_CHROMEOS) 37 #if defined(OS_CHROMEOS)
38 #include "ash/shell.h" 38 #include "ash/shell.h"
39 #include "chrome/browser/media/public_session_media_access_handler.h" 39 #include "chrome/browser/media/public_session_media_access_handler.h"
40 #include "chrome/browser/media/public_session_tab_capture_access_handler.h" 40 #include "chrome/browser/media/public_session_tab_capture_access_handler.h"
41 #include "chrome/browser/media/saml_media_access_handler.h"
41 #endif // defined(OS_CHROMEOS) 42 #endif // defined(OS_CHROMEOS)
42 43
43 #if BUILDFLAG(ENABLE_EXTENSIONS) 44 #if BUILDFLAG(ENABLE_EXTENSIONS)
44 #include "chrome/browser/media/extension_media_access_handler.h" 45 #include "chrome/browser/media/extension_media_access_handler.h"
45 #include "chrome/browser/media/webrtc/desktop_capture_access_handler.h" 46 #include "chrome/browser/media/webrtc/desktop_capture_access_handler.h"
46 #include "chrome/browser/media/webrtc/tab_capture_access_handler.h" 47 #include "chrome/browser/media/webrtc/tab_capture_access_handler.h"
47 #include "extensions/browser/extension_registry.h" 48 #include "extensions/browser/extension_registry.h"
48 #include "extensions/common/extension.h" 49 #include "extensions/common/extension.h"
49 #include "extensions/common/permissions/permissions_data.h" 50 #include "extensions/common/permissions/permissions_data.h"
50 #endif 51 #endif
(...skipping 10 matching lines...) Expand all
61 const std::string& device_id) { 62 const std::string& device_id) {
62 content::MediaStreamDevices::const_iterator iter = devices.begin(); 63 content::MediaStreamDevices::const_iterator iter = devices.begin();
63 for (; iter != devices.end(); ++iter) { 64 for (; iter != devices.end(); ++iter) {
64 if (iter->id == device_id) { 65 if (iter->id == device_id) {
65 return &(*iter); 66 return &(*iter);
66 } 67 }
67 } 68 }
68 return NULL; 69 return NULL;
69 } 70 }
70 71
72 content::WebContents* WebContentsFromIds(int render_process_id,
73 int render_frame_id) {
74 return content::WebContents::FromRenderFrameHost(
75 content::RenderFrameHost::FromID(render_process_id, render_frame_id));
76 }
77
71 #if BUILDFLAG(ENABLE_EXTENSIONS) 78 #if BUILDFLAG(ENABLE_EXTENSIONS)
72 inline CaptureAccessHandlerBase* ToCaptureAccessHandlerBase( 79 inline CaptureAccessHandlerBase* ToCaptureAccessHandlerBase(
73 MediaAccessHandler* handler) { 80 MediaAccessHandler* handler) {
74 return static_cast<CaptureAccessHandlerBase*>(handler); 81 return static_cast<CaptureAccessHandlerBase*>(handler);
75 } 82 }
76 #endif 83 #endif
77 } // namespace 84 } // namespace
78 85
79 MediaCaptureDevicesDispatcher* MediaCaptureDevicesDispatcher::GetInstance() { 86 MediaCaptureDevicesDispatcher* MediaCaptureDevicesDispatcher::GetInstance() {
80 return base::Singleton<MediaCaptureDevicesDispatcher>::get(); 87 return base::Singleton<MediaCaptureDevicesDispatcher>::get();
81 } 88 }
82 89
83 MediaCaptureDevicesDispatcher::MediaCaptureDevicesDispatcher() 90 MediaCaptureDevicesDispatcher::MediaCaptureDevicesDispatcher()
84 : is_device_enumeration_disabled_(false), 91 : is_device_enumeration_disabled_(false),
85 media_stream_capture_indicator_(new MediaStreamCaptureIndicator()) { 92 media_stream_capture_indicator_(new MediaStreamCaptureIndicator()) {
86 DCHECK_CURRENTLY_ON(BrowserThread::UI); 93 DCHECK_CURRENTLY_ON(BrowserThread::UI);
87 94
88 #if BUILDFLAG(ENABLE_EXTENSIONS) 95 #if BUILDFLAG(ENABLE_EXTENSIONS)
89 #if defined(OS_CHROMEOS) 96 #if defined(OS_CHROMEOS)
97 media_access_handlers_.push_back(new SamlMediaAccessHandler());
90 // Wrapper around ExtensionMediaAccessHandler used in Public Sessions. 98 // Wrapper around ExtensionMediaAccessHandler used in Public Sessions.
91 media_access_handlers_.push_back(new PublicSessionMediaAccessHandler()); 99 media_access_handlers_.push_back(new PublicSessionMediaAccessHandler());
92 #else 100 #else
93 media_access_handlers_.push_back(new ExtensionMediaAccessHandler()); 101 media_access_handlers_.push_back(new ExtensionMediaAccessHandler());
94 #endif 102 #endif
95 media_access_handlers_.push_back(new DesktopCaptureAccessHandler()); 103 media_access_handlers_.push_back(new DesktopCaptureAccessHandler());
96 #if defined(OS_CHROMEOS) 104 #if defined(OS_CHROMEOS)
97 // Wrapper around TabCaptureAccessHandler used in Public Sessions. 105 // Wrapper around TabCaptureAccessHandler used in Public Sessions.
98 media_access_handlers_.push_back(new PublicSessionTabCaptureAccessHandler()); 106 media_access_handlers_.push_back(new PublicSessionTabCaptureAccessHandler());
99 #else 107 #else
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 } 160 }
153 161
154 void MediaCaptureDevicesDispatcher::ProcessMediaAccessRequest( 162 void MediaCaptureDevicesDispatcher::ProcessMediaAccessRequest(
155 content::WebContents* web_contents, 163 content::WebContents* web_contents,
156 const content::MediaStreamRequest& request, 164 const content::MediaStreamRequest& request,
157 const content::MediaResponseCallback& callback, 165 const content::MediaResponseCallback& callback,
158 const extensions::Extension* extension) { 166 const extensions::Extension* extension) {
159 DCHECK_CURRENTLY_ON(BrowserThread::UI); 167 DCHECK_CURRENTLY_ON(BrowserThread::UI);
160 168
161 for (MediaAccessHandler* handler : media_access_handlers_) { 169 for (MediaAccessHandler* handler : media_access_handlers_) {
162 if (handler->SupportsStreamType(request.video_type, extension) || 170 if (handler->SupportsStreamType(web_contents, request.video_type,
163 handler->SupportsStreamType(request.audio_type, extension)) { 171 extension) ||
172 handler->SupportsStreamType(web_contents, request.audio_type,
173 extension)) {
164 handler->HandleRequest(web_contents, request, callback, extension); 174 handler->HandleRequest(web_contents, request, callback, extension);
165 return; 175 return;
166 } 176 }
167 } 177 }
168 callback.Run(content::MediaStreamDevices(), 178 callback.Run(content::MediaStreamDevices(),
169 content::MEDIA_DEVICE_NOT_SUPPORTED, nullptr); 179 content::MEDIA_DEVICE_NOT_SUPPORTED, nullptr);
170 } 180 }
171 181
172 bool MediaCaptureDevicesDispatcher::CheckMediaAccessPermission( 182 bool MediaCaptureDevicesDispatcher::CheckMediaAccessPermission(
173 content::WebContents* web_contents, 183 content::WebContents* web_contents,
174 const GURL& security_origin, 184 const GURL& security_origin,
175 content::MediaStreamType type) { 185 content::MediaStreamType type) {
176 DCHECK_CURRENTLY_ON(BrowserThread::UI); 186 DCHECK_CURRENTLY_ON(BrowserThread::UI);
177 return CheckMediaAccessPermission(web_contents, security_origin, type, 187 return CheckMediaAccessPermission(web_contents, security_origin, type,
178 nullptr); 188 nullptr);
179 } 189 }
180 190
181 bool MediaCaptureDevicesDispatcher::CheckMediaAccessPermission( 191 bool MediaCaptureDevicesDispatcher::CheckMediaAccessPermission(
182 content::WebContents* web_contents, 192 content::WebContents* web_contents,
183 const GURL& security_origin, 193 const GURL& security_origin,
184 content::MediaStreamType type, 194 content::MediaStreamType type,
185 const extensions::Extension* extension) { 195 const extensions::Extension* extension) {
186 DCHECK_CURRENTLY_ON(BrowserThread::UI); 196 DCHECK_CURRENTLY_ON(BrowserThread::UI);
187 for (MediaAccessHandler* handler : media_access_handlers_) { 197 for (MediaAccessHandler* handler : media_access_handlers_) {
188 if (handler->SupportsStreamType(type, extension)) { 198 if (handler->SupportsStreamType(web_contents, type, extension)) {
189 return handler->CheckMediaAccessPermission(web_contents, security_origin, 199 return handler->CheckMediaAccessPermission(web_contents, security_origin,
190 type, extension); 200 type, extension);
191 } 201 }
192 } 202 }
193 return false; 203 return false;
194 } 204 }
195 205
196 void MediaCaptureDevicesDispatcher::GetDefaultDevicesForProfile( 206 void MediaCaptureDevicesDispatcher::GetDefaultDevicesForProfile(
197 Profile* profile, 207 Profile* profile,
198 bool audio, 208 bool audio,
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 observer.OnUpdateVideoDevices(devices); 358 observer.OnUpdateVideoDevices(devices);
349 } 359 }
350 360
351 void MediaCaptureDevicesDispatcher::UpdateMediaRequestStateOnUIThread( 361 void MediaCaptureDevicesDispatcher::UpdateMediaRequestStateOnUIThread(
352 int render_process_id, 362 int render_process_id,
353 int render_frame_id, 363 int render_frame_id,
354 int page_request_id, 364 int page_request_id,
355 const GURL& security_origin, 365 const GURL& security_origin,
356 content::MediaStreamType stream_type, 366 content::MediaStreamType stream_type,
357 content::MediaRequestState state) { 367 content::MediaRequestState state) {
368 DCHECK_CURRENTLY_ON(BrowserThread::UI);
358 for (MediaAccessHandler* handler : media_access_handlers_) { 369 for (MediaAccessHandler* handler : media_access_handlers_) {
359 if (handler->SupportsStreamType(stream_type, nullptr)) { 370 if (handler->SupportsStreamType(
371 WebContentsFromIds(render_process_id, render_frame_id), stream_type,
372 nullptr)) {
360 handler->UpdateMediaRequestState(render_process_id, render_frame_id, 373 handler->UpdateMediaRequestState(render_process_id, render_frame_id,
361 page_request_id, stream_type, state); 374 page_request_id, stream_type, state);
362 break; 375 break;
363 } 376 }
364 } 377 }
365 378
366 #if defined(OS_CHROMEOS) 379 #if defined(OS_CHROMEOS)
367 if (IsOriginForCasting(security_origin) && IsVideoMediaType(stream_type)) { 380 if (IsOriginForCasting(security_origin) && IsVideoMediaType(stream_type)) {
368 // Notify ash that casting state has changed. 381 // Notify ash that casting state has changed.
369 if (state == content::MEDIA_REQUEST_STATE_DONE) { 382 if (state == content::MEDIA_REQUEST_STATE_DONE) {
(...skipping 17 matching lines...) Expand all
387 for (auto& observer : observers_) 400 for (auto& observer : observers_)
388 observer.OnCreatingAudioStream(render_process_id, render_frame_id); 401 observer.OnCreatingAudioStream(render_process_id, render_frame_id);
389 } 402 }
390 403
391 bool MediaCaptureDevicesDispatcher::IsInsecureCapturingInProgress( 404 bool MediaCaptureDevicesDispatcher::IsInsecureCapturingInProgress(
392 int render_process_id, 405 int render_process_id,
393 int render_frame_id) { 406 int render_frame_id) {
394 DCHECK_CURRENTLY_ON(BrowserThread::UI); 407 DCHECK_CURRENTLY_ON(BrowserThread::UI);
395 #if BUILDFLAG(ENABLE_EXTENSIONS) 408 #if BUILDFLAG(ENABLE_EXTENSIONS)
396 for (MediaAccessHandler* handler : media_access_handlers_) { 409 for (MediaAccessHandler* handler : media_access_handlers_) {
397 if (handler->SupportsStreamType(content::MEDIA_DESKTOP_VIDEO_CAPTURE, 410 if (handler->SupportsStreamType(
398 nullptr) || 411 WebContentsFromIds(render_process_id, render_frame_id),
399 handler->SupportsStreamType(content::MEDIA_TAB_VIDEO_CAPTURE, 412 content::MEDIA_DESKTOP_VIDEO_CAPTURE, nullptr) ||
400 nullptr)) { 413 handler->SupportsStreamType(
414 WebContentsFromIds(render_process_id, render_frame_id),
415 content::MEDIA_TAB_VIDEO_CAPTURE, nullptr)) {
401 if (ToCaptureAccessHandlerBase(handler)->IsInsecureCapturingInProgress( 416 if (ToCaptureAccessHandlerBase(handler)->IsInsecureCapturingInProgress(
402 render_process_id, render_frame_id)) 417 render_process_id, render_frame_id))
403 return true; 418 return true;
404 } 419 }
405 } 420 }
406 #endif 421 #endif
407 return false; 422 return false;
408 } 423 }
409 424
410 void MediaCaptureDevicesDispatcher::SetTestAudioCaptureDevices( 425 void MediaCaptureDevicesDispatcher::SetTestAudioCaptureDevices(
(...skipping 30 matching lines...) Expand all
441 int page_request_id, 456 int page_request_id,
442 content::MediaStreamType stream_type, 457 content::MediaStreamType stream_type,
443 bool is_secure) { 458 bool is_secure) {
444 DCHECK_CURRENTLY_ON(BrowserThread::UI); 459 DCHECK_CURRENTLY_ON(BrowserThread::UI);
445 if (stream_type != content::MEDIA_TAB_VIDEO_CAPTURE && 460 if (stream_type != content::MEDIA_TAB_VIDEO_CAPTURE &&
446 stream_type != content::MEDIA_DESKTOP_VIDEO_CAPTURE) 461 stream_type != content::MEDIA_DESKTOP_VIDEO_CAPTURE)
447 return; 462 return;
448 463
449 #if BUILDFLAG(ENABLE_EXTENSIONS) 464 #if BUILDFLAG(ENABLE_EXTENSIONS)
450 for (MediaAccessHandler* handler : media_access_handlers_) { 465 for (MediaAccessHandler* handler : media_access_handlers_) {
451 if (handler->SupportsStreamType(stream_type, nullptr)) { 466 if (handler->SupportsStreamType(
467 WebContentsFromIds(render_process_id, render_frame_id), stream_type,
468 nullptr)) {
452 ToCaptureAccessHandlerBase(handler)->UpdateCapturingLinkSecured( 469 ToCaptureAccessHandlerBase(handler)->UpdateCapturingLinkSecured(
453 render_process_id, render_frame_id, page_request_id, is_secure); 470 render_process_id, render_frame_id, page_request_id, is_secure);
454 break; 471 break;
455 } 472 }
456 } 473 }
457 #endif 474 #endif
458 } 475 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698