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

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

Issue 12153002: Move chrome://media-internals to content. This allows us to hide implementation details from the pu… (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 10 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 | Annotate | Revision Log
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/media_capture_devices_dispatcher.h" 5 #include "chrome/browser/media/media_capture_devices_dispatcher.h"
6 6
7 #include "chrome/browser/media/media_stream_capture_indicator.h"
7 #include "chrome/browser/prefs/scoped_user_pref_update.h" 8 #include "chrome/browser/prefs/scoped_user_pref_update.h"
9 #include "chrome/browser/profiles/profile.h"
8 #include "chrome/common/pref_names.h" 10 #include "chrome/common/pref_names.h"
9 #include "content/public/browser/browser_thread.h" 11 #include "content/public/browser/browser_thread.h"
10 #include "content/public/browser/media_devices_monitor.h" 12 #include "content/public/browser/media_devices_monitor.h"
11 #include "content/public/common/media_stream_request.h" 13 #include "content/public/common/media_stream_request.h"
12 14
13 using content::BrowserThread; 15 using content::BrowserThread;
14 using content::MediaStreamDevices; 16 using content::MediaStreamDevices;
15 17
18 namespace {
19
20 const content::MediaStreamDevice* FindDefaultDeviceWithId(
21 const content::MediaStreamDevices& devices,
22 const std::string& device_id) {
23 if (devices.empty())
24 return NULL;
25
26 content::MediaStreamDevices::const_iterator iter = devices.begin();
27 for (; iter != devices.end(); ++iter) {
28 if (iter->id == device_id) {
29 return &(*iter);
30 }
31 }
32
33 return &(*devices.begin());
34 };
35
36 } // namespace
37
38
39 MediaCaptureDevicesDispatcher* MediaCaptureDevicesDispatcher::GetInstance() {
40 return Singleton<MediaCaptureDevicesDispatcher>::get();
41 }
42
16 MediaCaptureDevicesDispatcher::MediaCaptureDevicesDispatcher() 43 MediaCaptureDevicesDispatcher::MediaCaptureDevicesDispatcher()
17 : devices_enumerated_(false) {} 44 : devices_enumerated_(false),
45 media_stream_capture_indicator_(new MediaStreamCaptureIndicator()) {}
18 46
19 MediaCaptureDevicesDispatcher::~MediaCaptureDevicesDispatcher() {} 47 MediaCaptureDevicesDispatcher::~MediaCaptureDevicesDispatcher() {}
20 48
21 void MediaCaptureDevicesDispatcher::RegisterUserPrefs( 49 void MediaCaptureDevicesDispatcher::RegisterUserPrefs(
22 PrefServiceSyncable* user_prefs) { 50 PrefServiceSyncable* user_prefs) {
23 if (!user_prefs->FindPreference(prefs::kDefaultAudioCaptureDevice)) { 51 if (!user_prefs->FindPreference(prefs::kDefaultAudioCaptureDevice)) {
24 user_prefs->RegisterStringPref(prefs::kDefaultAudioCaptureDevice, 52 user_prefs->RegisterStringPref(prefs::kDefaultAudioCaptureDevice,
25 std::string(), 53 std::string(),
26 PrefServiceSyncable::UNSYNCABLE_PREF); 54 PrefServiceSyncable::UNSYNCABLE_PREF);
27 } 55 }
28 if (!user_prefs->FindPreference(prefs::kDefaultVideoCaptureDevice)) { 56 if (!user_prefs->FindPreference(prefs::kDefaultVideoCaptureDevice)) {
29 user_prefs->RegisterStringPref(prefs::kDefaultVideoCaptureDevice, 57 user_prefs->RegisterStringPref(prefs::kDefaultVideoCaptureDevice,
30 std::string(), 58 std::string(),
31 PrefServiceSyncable::UNSYNCABLE_PREF); 59 PrefServiceSyncable::UNSYNCABLE_PREF);
32 } 60 }
33 } 61 }
34 62
35 void MediaCaptureDevicesDispatcher::AudioCaptureDevicesChanged(
36 const MediaStreamDevices& devices) {
37 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
38
39 BrowserThread::PostTask(
40 BrowserThread::UI, FROM_HERE,
41 base::Bind(&MediaCaptureDevicesDispatcher::UpdateAudioDevicesOnUIThread,
42 this, devices));
43 }
44
45 void MediaCaptureDevicesDispatcher::VideoCaptureDevicesChanged(
46 const MediaStreamDevices& devices) {
47 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
48
49 BrowserThread::PostTask(
50 BrowserThread::UI, FROM_HERE,
51 base::Bind(&MediaCaptureDevicesDispatcher::UpdateVideoDevicesOnUIThread,
52 this, devices));
53 }
54
55 void MediaCaptureDevicesDispatcher::AddObserver(Observer* observer) { 63 void MediaCaptureDevicesDispatcher::AddObserver(Observer* observer) {
56 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 64 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
57 if (!observers_.HasObserver(observer)) 65 if (!observers_.HasObserver(observer))
58 observers_.AddObserver(observer); 66 observers_.AddObserver(observer);
59 } 67 }
60 68
61 void MediaCaptureDevicesDispatcher::RemoveObserver(Observer* observer) { 69 void MediaCaptureDevicesDispatcher::RemoveObserver(Observer* observer) {
62 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 70 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
63 observers_.RemoveObserver(observer); 71 observers_.RemoveObserver(observer);
64 } 72 }
(...skipping 15 matching lines...) Expand all
80 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 88 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
81 if (!devices_enumerated_) { 89 if (!devices_enumerated_) {
82 BrowserThread::PostTask( 90 BrowserThread::PostTask(
83 BrowserThread::IO, FROM_HERE, 91 BrowserThread::IO, FROM_HERE,
84 base::Bind(&content::EnsureMonitorCaptureDevices)); 92 base::Bind(&content::EnsureMonitorCaptureDevices));
85 devices_enumerated_ = true; 93 devices_enumerated_ = true;
86 } 94 }
87 return video_devices_; 95 return video_devices_;
88 } 96 }
89 97
98 void MediaCaptureDevicesDispatcher::GetDefaultDevicesForProfile(
99 Profile* profile,
100 bool audio,
101 bool video,
102 content::MediaStreamDevices* devices) {
103 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
104 DCHECK(audio || video);
105
106 PrefService* prefs = profile->GetPrefs();
107 std::string default_device;
108 if (audio) {
109 default_device = prefs->GetString(prefs::kDefaultAudioCaptureDevice);
110 GetRequestedDevice(default_device, true, false, devices);
111 }
112
113 if (video) {
114 default_device = prefs->GetString(prefs::kDefaultVideoCaptureDevice);
115 GetRequestedDevice(default_device, false, true, devices);
116 }
117 }
118
119 void MediaCaptureDevicesDispatcher::GetRequestedDevice(
120 const std::string& requested_device_id,
121 bool audio,
122 bool video,
123 content::MediaStreamDevices* devices) {
124 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
125 DCHECK(audio || video);
126
127 if (audio) {
128 const content::MediaStreamDevices& audio_devices = GetAudioCaptureDevices();
129 const content::MediaStreamDevice* const device =
130 FindDefaultDeviceWithId(audio_devices, requested_device_id);
131 if (device)
132 devices->push_back(*device);
133 }
134 if (video) {
135 const content::MediaStreamDevices& video_devices = GetVideoCaptureDevices();
136 const content::MediaStreamDevice* const device =
137 FindDefaultDeviceWithId(video_devices, requested_device_id);
138 if (device)
139 devices->push_back(*device);
140 }
141 }
142
143 scoped_refptr<MediaStreamCaptureIndicator>
144 MediaCaptureDevicesDispatcher::GetMediaStreamCaptureIndicator() {
145 return media_stream_capture_indicator_;
146 }
147
148 void MediaCaptureDevicesDispatcher::OnCaptureDevicesOpened(
149 int render_process_id,
150 int render_view_id,
151 const content::MediaStreamDevices& devices) {
152 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
153 media_stream_capture_indicator_->CaptureDevicesOpened(render_process_id,
154 render_view_id,
155 devices);
156 }
157
158 void MediaCaptureDevicesDispatcher::OnCaptureDevicesClosed(
159 int render_process_id,
160 int render_view_id,
161 const content::MediaStreamDevices& devices) {
162 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
163 media_stream_capture_indicator_->CaptureDevicesClosed(render_process_id,
164 render_view_id,
165 devices);
166 }
167
168 void MediaCaptureDevicesDispatcher::OnAudioCaptureDevicesChanged(
169 const content::MediaStreamDevices& devices) {
170 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
171 BrowserThread::PostTask(
172 BrowserThread::UI, FROM_HERE,
173 base::Bind(&MediaCaptureDevicesDispatcher::UpdateAudioDevicesOnUIThread,
174 base::Unretained(this), devices));
175 }
176
177 void MediaCaptureDevicesDispatcher::OnVideoCaptureDevicesChanged(
178 const content::MediaStreamDevices& devices) {
179 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
180 BrowserThread::PostTask(
181 BrowserThread::UI, FROM_HERE,
182 base::Bind(&MediaCaptureDevicesDispatcher::UpdateVideoDevicesOnUIThread,
183 base::Unretained(this), devices));
184 }
185
186 void MediaCaptureDevicesDispatcher::OnMediaRequestStateChanged(
187 int render_process_id,
188 int render_view_id,
189 const content::MediaStreamDevice& device,
190 content::MediaRequestState state) {
191 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
192 BrowserThread::PostTask(
193 BrowserThread::UI, FROM_HERE,
194 base::Bind(
195 &MediaCaptureDevicesDispatcher::UpdateMediaRequestStateOnUIThread,
196 base::Unretained(this), render_process_id, render_view_id, device,
197 state));
198
199 }
200
90 void MediaCaptureDevicesDispatcher::UpdateAudioDevicesOnUIThread( 201 void MediaCaptureDevicesDispatcher::UpdateAudioDevicesOnUIThread(
91 const content::MediaStreamDevices& devices) { 202 const content::MediaStreamDevices& devices) {
92 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 203 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
93 devices_enumerated_ = true; 204 devices_enumerated_ = true;
94 audio_devices_ = devices; 205 audio_devices_ = devices;
95 FOR_EACH_OBSERVER(Observer, observers_, 206 FOR_EACH_OBSERVER(Observer, observers_,
96 OnUpdateAudioDevices(audio_devices_)); 207 OnUpdateAudioDevices(audio_devices_));
97 } 208 }
98 209
99 void MediaCaptureDevicesDispatcher::UpdateVideoDevicesOnUIThread( 210 void MediaCaptureDevicesDispatcher::UpdateVideoDevicesOnUIThread(
100 const content::MediaStreamDevices& devices){ 211 const content::MediaStreamDevices& devices){
101 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 212 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
102 devices_enumerated_ = true; 213 devices_enumerated_ = true;
103 video_devices_ = devices; 214 video_devices_ = devices;
104 FOR_EACH_OBSERVER(Observer, observers_, 215 FOR_EACH_OBSERVER(Observer, observers_,
105 OnUpdateVideoDevices(video_devices_)); 216 OnUpdateVideoDevices(video_devices_));
106 } 217 }
218
219 void MediaCaptureDevicesDispatcher::UpdateMediaRequestStateOnUIThread(
220 int render_process_id,
221 int render_view_id,
222 const content::MediaStreamDevice& device,
223 content::MediaRequestState state) {
224 FOR_EACH_OBSERVER(Observer, observers_,
225 OnRequestUpdate(render_process_id,
226 render_view_id,
227 device,
228 state));
229 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698