• 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