• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 
5 #include "libcef/browser/media_capture_devices_dispatcher.h"
6 
7 #include "chrome/common/pref_names.h"
8 #include "components/prefs/pref_registry_simple.h"
9 #include "components/prefs/pref_service.h"
10 #include "content/public/browser/browser_thread.h"
11 #include "content/public/browser/media_capture_devices.h"
12 
13 using blink::MediaStreamDevices;
14 using content::BrowserThread;
15 
16 namespace {
17 
FindDefaultDeviceWithId(const blink::MediaStreamDevices & devices,const std::string & device_id)18 const blink::MediaStreamDevice* FindDefaultDeviceWithId(
19     const blink::MediaStreamDevices& devices,
20     const std::string& device_id) {
21   if (devices.empty())
22     return nullptr;
23 
24   blink::MediaStreamDevices::const_iterator iter = devices.begin();
25   for (; iter != devices.end(); ++iter) {
26     if (iter->id == device_id) {
27       return &(*iter);
28     }
29   }
30 
31   return &(*devices.begin());
32 }
33 
34 }  // namespace
35 
36 CefMediaCaptureDevicesDispatcher*
GetInstance()37 CefMediaCaptureDevicesDispatcher::GetInstance() {
38   return base::Singleton<CefMediaCaptureDevicesDispatcher>::get();
39 }
40 
CefMediaCaptureDevicesDispatcher()41 CefMediaCaptureDevicesDispatcher::CefMediaCaptureDevicesDispatcher() {}
42 
~CefMediaCaptureDevicesDispatcher()43 CefMediaCaptureDevicesDispatcher::~CefMediaCaptureDevicesDispatcher() {}
44 
RegisterPrefs(PrefRegistrySimple * registry)45 void CefMediaCaptureDevicesDispatcher::RegisterPrefs(
46     PrefRegistrySimple* registry) {
47   registry->RegisterStringPref(prefs::kDefaultAudioCaptureDevice,
48                                std::string());
49   registry->RegisterStringPref(prefs::kDefaultVideoCaptureDevice,
50                                std::string());
51 }
52 
GetDefaultDevices(PrefService * prefs,bool audio,bool video,blink::MediaStreamDevices * devices)53 void CefMediaCaptureDevicesDispatcher::GetDefaultDevices(
54     PrefService* prefs,
55     bool audio,
56     bool video,
57     blink::MediaStreamDevices* devices) {
58   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
59   DCHECK(audio || video);
60 
61   std::string default_device;
62   if (audio) {
63     default_device = prefs->GetString(prefs::kDefaultAudioCaptureDevice);
64     GetRequestedDevice(default_device, true, false, devices);
65   }
66 
67   if (video) {
68     default_device = prefs->GetString(prefs::kDefaultVideoCaptureDevice);
69     GetRequestedDevice(default_device, false, true, devices);
70   }
71 }
72 
GetRequestedDevice(const std::string & requested_device_id,bool audio,bool video,blink::MediaStreamDevices * devices)73 void CefMediaCaptureDevicesDispatcher::GetRequestedDevice(
74     const std::string& requested_device_id,
75     bool audio,
76     bool video,
77     blink::MediaStreamDevices* devices) {
78   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
79   DCHECK(audio || video);
80 
81   if (audio) {
82     const blink::MediaStreamDevices& audio_devices = GetAudioCaptureDevices();
83     const blink::MediaStreamDevice* const device =
84         FindDefaultDeviceWithId(audio_devices, requested_device_id);
85     if (device)
86       devices->push_back(*device);
87   }
88   if (video) {
89     const blink::MediaStreamDevices& video_devices = GetVideoCaptureDevices();
90     const blink::MediaStreamDevice* const device =
91         FindDefaultDeviceWithId(video_devices, requested_device_id);
92     if (device)
93       devices->push_back(*device);
94   }
95 }
96 
OnAudioCaptureDevicesChanged()97 void CefMediaCaptureDevicesDispatcher::OnAudioCaptureDevicesChanged() {}
98 
OnVideoCaptureDevicesChanged()99 void CefMediaCaptureDevicesDispatcher::OnVideoCaptureDevicesChanged() {}
100 
OnMediaRequestStateChanged(int render_process_id,int render_frame_id,int page_request_id,const GURL & security_origin,blink::mojom::MediaStreamType stream_type,content::MediaRequestState state)101 void CefMediaCaptureDevicesDispatcher::OnMediaRequestStateChanged(
102     int render_process_id,
103     int render_frame_id,
104     int page_request_id,
105     const GURL& security_origin,
106     blink::mojom::MediaStreamType stream_type,
107     content::MediaRequestState state) {}
108 
OnCreatingAudioStream(int render_process_id,int render_view_id)109 void CefMediaCaptureDevicesDispatcher::OnCreatingAudioStream(
110     int render_process_id,
111     int render_view_id) {}
112 
OnSetCapturingLinkSecured(int render_process_id,int render_frame_id,int page_request_id,blink::mojom::MediaStreamType stream_type,bool is_secure)113 void CefMediaCaptureDevicesDispatcher::OnSetCapturingLinkSecured(
114     int render_process_id,
115     int render_frame_id,
116     int page_request_id,
117     blink::mojom::MediaStreamType stream_type,
118     bool is_secure) {}
119 
120 const MediaStreamDevices&
GetAudioCaptureDevices()121 CefMediaCaptureDevicesDispatcher::GetAudioCaptureDevices() {
122   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
123   return content::MediaCaptureDevices::GetInstance()->GetAudioCaptureDevices();
124 }
125 
126 const MediaStreamDevices&
GetVideoCaptureDevices()127 CefMediaCaptureDevicesDispatcher::GetVideoCaptureDevices() {
128   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
129   return content::MediaCaptureDevices::GetInstance()->GetVideoCaptureDevices();
130 }
131