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

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

Issue 1939313003: Revert of Add support for device-change notifications to MediaStreamDispatcher (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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 "content/browser/renderer_host/media/media_stream_dispatcher_host.h" 5 #include "content/browser/renderer_host/media/media_stream_dispatcher_host.h"
6 6
7 #include <algorithm>
8
9 #include "base/command_line.h"
10 #include "base/memory/ptr_util.h"
11 #include "content/browser/browser_main_loop.h" 7 #include "content/browser/browser_main_loop.h"
12 #include "content/browser/renderer_host/media/media_stream_ui_proxy.h"
13 #include "content/common/media/media_stream_messages.h" 8 #include "content/common/media/media_stream_messages.h"
14 #include "content/common/media/media_stream_options.h" 9 #include "content/common/media/media_stream_options.h"
15 #include "content/public/browser/render_process_host.h" 10 #include "content/public/browser/render_process_host.h"
16 #include "content/public/common/content_switches.h"
17 #include "url/gurl.h" 11 #include "url/gurl.h"
18 12
19 namespace content { 13 namespace content {
20 14
21 MediaStreamDispatcherHost::MediaStreamDispatcherHost( 15 MediaStreamDispatcherHost::MediaStreamDispatcherHost(
22 int render_process_id, 16 int render_process_id,
23 const ResourceContext::SaltCallback& salt_callback, 17 const ResourceContext::SaltCallback& salt_callback,
24 MediaStreamManager* media_stream_manager, 18 MediaStreamManager* media_stream_manager)
25 bool use_fake_ui)
26 : BrowserMessageFilter(MediaStreamMsgStart), 19 : BrowserMessageFilter(MediaStreamMsgStart),
27 render_process_id_(render_process_id), 20 render_process_id_(render_process_id),
28 salt_callback_(salt_callback), 21 salt_callback_(salt_callback),
29 media_stream_manager_(media_stream_manager), 22 media_stream_manager_(media_stream_manager) {
30 use_fake_ui_(use_fake_ui), 23 }
31 weak_factory_(this) {}
32 24
33 void MediaStreamDispatcherHost::StreamGenerated( 25 void MediaStreamDispatcherHost::StreamGenerated(
34 int render_frame_id, 26 int render_frame_id,
35 int page_request_id, 27 int page_request_id,
36 const std::string& label, 28 const std::string& label,
37 const StreamDeviceInfoArray& audio_devices, 29 const StreamDeviceInfoArray& audio_devices,
38 const StreamDeviceInfoArray& video_devices) { 30 const StreamDeviceInfoArray& video_devices) {
39 DCHECK_CURRENTLY_ON(BrowserThread::IO); 31 DCHECK_CURRENTLY_ON(BrowserThread::IO);
40 DVLOG(1) << "MediaStreamDispatcherHost::StreamGenerated(" 32 DVLOG(1) << "MediaStreamDispatcherHost::StreamGenerated("
41 << ", {label = " << label << "})"; 33 << ", {label = " << label << "})";
42 34
43 Send(new MediaStreamMsg_StreamGenerated( 35 Send(new MediaStreamMsg_StreamGenerated(
44 render_frame_id, page_request_id, label, audio_devices, video_devices)); 36 render_frame_id, page_request_id, label, audio_devices, video_devices));
45 } 37 }
46 38
47 void MediaStreamDispatcherHost::StreamGenerationFailed( 39 void MediaStreamDispatcherHost::StreamGenerationFailed(
48 int render_frame_id, 40 int render_frame_id,
49 int page_request_id, 41 int page_request_id,
50 content::MediaStreamRequestResult result) { 42 content::MediaStreamRequestResult result) {
51 DCHECK_CURRENTLY_ON(BrowserThread::IO); 43 DCHECK_CURRENTLY_ON(BrowserThread::IO);
52 DVLOG(1) << "MediaStreamDispatcherHost::StreamGenerationFailed(" 44 DVLOG(1) << "MediaStreamDispatcherHost::StreamGenerationFailed("
53 << ", {page_request_id = " << page_request_id << "}" 45 << ", {page_request_id = " << page_request_id << "}"
54 << ", { result= " << result << "})"; 46 << ", { result= " << result << "})";
55 47
48
56 Send(new MediaStreamMsg_StreamGenerationFailed(render_frame_id, 49 Send(new MediaStreamMsg_StreamGenerationFailed(render_frame_id,
57 page_request_id, 50 page_request_id,
58 result)); 51 result));
59 } 52 }
60 53
61 void MediaStreamDispatcherHost::DeviceStopped(int render_frame_id, 54 void MediaStreamDispatcherHost::DeviceStopped(int render_frame_id,
62 const std::string& label, 55 const std::string& label,
63 const StreamDeviceInfo& device) { 56 const StreamDeviceInfo& device) {
64 DCHECK_CURRENTLY_ON(BrowserThread::IO); 57 DCHECK_CURRENTLY_ON(BrowserThread::IO);
65 DVLOG(1) << "MediaStreamDispatcherHost::DeviceStopped(" 58 DVLOG(1) << "MediaStreamDispatcherHost::DeviceStopped("
(...skipping 27 matching lines...) Expand all
93 << ", {page_request_id = " << page_request_id << "})"; 86 << ", {page_request_id = " << page_request_id << "})";
94 87
95 Send(new MediaStreamMsg_DeviceOpened( 88 Send(new MediaStreamMsg_DeviceOpened(
96 render_frame_id, page_request_id, label, video_device)); 89 render_frame_id, page_request_id, label, video_device));
97 } 90 }
98 91
99 void MediaStreamDispatcherHost::DevicesChanged(MediaStreamType type) { 92 void MediaStreamDispatcherHost::DevicesChanged(MediaStreamType type) {
100 DCHECK_CURRENTLY_ON(BrowserThread::IO); 93 DCHECK_CURRENTLY_ON(BrowserThread::IO);
101 DVLOG(1) << "MediaStreamDispatcherHost::DevicesChanged(" 94 DVLOG(1) << "MediaStreamDispatcherHost::DevicesChanged("
102 << "{type = " << type << "})"; 95 << "{type = " << type << "})";
103 for (const auto& subscriber : device_change_subscribers_) { 96 // TODO(guidou): check permissions and forward notifications to renderer.
104 std::unique_ptr<MediaStreamUIProxy> ui_proxy = CreateMediaStreamUIProxy(); 97 // crbug.com/388648
105 ui_proxy->CheckAccess(
106 subscriber.security_origin, type, render_process_id_,
107 subscriber.render_frame_id,
108 base::Bind(&MediaStreamDispatcherHost::HandleCheckAccessResponse,
109 weak_factory_.GetWeakPtr(),
110 base::Passed(std::move(ui_proxy)),
111 subscriber.render_frame_id));
112 }
113 } 98 }
114 99
115 bool MediaStreamDispatcherHost::OnMessageReceived(const IPC::Message& message) { 100 bool MediaStreamDispatcherHost::OnMessageReceived(const IPC::Message& message) {
116 bool handled = true; 101 bool handled = true;
117 IPC_BEGIN_MESSAGE_MAP(MediaStreamDispatcherHost, message) 102 IPC_BEGIN_MESSAGE_MAP(MediaStreamDispatcherHost, message)
118 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_GenerateStream, OnGenerateStream) 103 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_GenerateStream, OnGenerateStream)
119 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_CancelGenerateStream, 104 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_CancelGenerateStream,
120 OnCancelGenerateStream) 105 OnCancelGenerateStream)
121 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_StopStreamDevice, 106 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_StopStreamDevice,
122 OnStopStreamDevice) 107 OnStopStreamDevice)
123 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_EnumerateDevices, 108 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_EnumerateDevices,
124 OnEnumerateDevices) 109 OnEnumerateDevices)
125 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_CancelEnumerateDevices, 110 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_CancelEnumerateDevices,
126 OnCancelEnumerateDevices) 111 OnCancelEnumerateDevices)
127 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_OpenDevice, 112 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_OpenDevice,
128 OnOpenDevice) 113 OnOpenDevice)
129 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_CloseDevice, 114 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_CloseDevice,
130 OnCloseDevice) 115 OnCloseDevice)
131 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_SubscribeToDeviceChangeNotifications,
132 OnSubscribeToDeviceChangeNotifications)
133 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_CancelDeviceChangeNotifications,
134 OnCancelDeviceChangeNotifications)
135 IPC_MESSAGE_UNHANDLED(handled = false) 116 IPC_MESSAGE_UNHANDLED(handled = false)
136 IPC_END_MESSAGE_MAP() 117 IPC_END_MESSAGE_MAP()
137 return handled; 118 return handled;
138 } 119 }
139 120
140 void MediaStreamDispatcherHost::OnChannelClosing() { 121 void MediaStreamDispatcherHost::OnChannelClosing() {
141 DVLOG(1) << "MediaStreamDispatcherHost::OnChannelClosing"; 122 DVLOG(1) << "MediaStreamDispatcherHost::OnChannelClosing";
142 123
143 // Since the IPC sender is gone, close all requesting/requested streams. 124 // Since the IPC sender is gone, close all requesting/requested streams.
144 media_stream_manager_->CancelAllRequests(render_process_id_); 125 media_stream_manager_->CancelAllRequests(render_process_id_);
145 if (!device_change_subscribers_.empty())
146 media_stream_manager_->CancelDeviceChangeNotifications(this);
147 } 126 }
148 127
149 MediaStreamDispatcherHost::~MediaStreamDispatcherHost() { 128 MediaStreamDispatcherHost::~MediaStreamDispatcherHost() {
150 } 129 }
151 130
152 void MediaStreamDispatcherHost::OnGenerateStream( 131 void MediaStreamDispatcherHost::OnGenerateStream(
153 int render_frame_id, 132 int render_frame_id,
154 int page_request_id, 133 int page_request_id,
155 const StreamControls& controls, 134 const StreamControls& controls,
156 const url::Origin& security_origin, 135 const url::Origin& security_origin,
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 void MediaStreamDispatcherHost::OnCloseDevice( 215 void MediaStreamDispatcherHost::OnCloseDevice(
237 int render_frame_id, 216 int render_frame_id,
238 const std::string& label) { 217 const std::string& label) {
239 DVLOG(1) << "MediaStreamDispatcherHost::OnCloseDevice(" 218 DVLOG(1) << "MediaStreamDispatcherHost::OnCloseDevice("
240 << render_frame_id << ", " 219 << render_frame_id << ", "
241 << label << ")"; 220 << label << ")";
242 221
243 media_stream_manager_->CancelRequest(label); 222 media_stream_manager_->CancelRequest(label);
244 } 223 }
245 224
246 void MediaStreamDispatcherHost::OnSubscribeToDeviceChangeNotifications(
247 int render_frame_id,
248 const url::Origin& security_origin) {
249 DCHECK_CURRENTLY_ON(BrowserThread::IO);
250 DVLOG(1)
251 << "MediaStreamDispatcherHost::OnSubscribeToDeviceChangeNotifications("
252 << render_frame_id << ", " << security_origin << ")";
253 DCHECK(
254 std::find_if(
255 device_change_subscribers_.begin(), device_change_subscribers_.end(),
256 [render_frame_id](const DeviceChangeSubscriberInfo& subscriber_info) {
257 return subscriber_info.render_frame_id == render_frame_id;
258 }) == device_change_subscribers_.end());
259
260 if (device_change_subscribers_.empty())
261 media_stream_manager_->SubscribeToDeviceChangeNotifications(this);
262
263 device_change_subscribers_.push_back({render_frame_id, security_origin});
264 }
265
266 void MediaStreamDispatcherHost::OnCancelDeviceChangeNotifications(
267 int render_frame_id) {
268 DCHECK_CURRENTLY_ON(BrowserThread::IO);
269 DVLOG(1) << "MediaStreamDispatcherHost::CancelDeviceChangeNotifications("
270 << render_frame_id << ")";
271 auto it = std::find_if(
272 device_change_subscribers_.begin(), device_change_subscribers_.end(),
273 [render_frame_id](const DeviceChangeSubscriberInfo& subscriber_info) {
274 return subscriber_info.render_frame_id == render_frame_id;
275 });
276 CHECK(it != device_change_subscribers_.end());
277 device_change_subscribers_.erase(it);
278 if (device_change_subscribers_.empty())
279 media_stream_manager_->CancelDeviceChangeNotifications(this);
280 }
281
282 std::unique_ptr<MediaStreamUIProxy>
283 MediaStreamDispatcherHost::CreateMediaStreamUIProxy() {
284 DCHECK_CURRENTLY_ON(BrowserThread::IO);
285 if (use_fake_ui_ ||
286 base::CommandLine::ForCurrentProcess()->HasSwitch(
287 switches::kUseFakeUIForMediaStream)) {
288 return base::WrapUnique(new FakeMediaStreamUIProxy());
289 }
290
291 return MediaStreamUIProxy::Create();
292 }
293
294 void MediaStreamDispatcherHost::HandleCheckAccessResponse(
295 std::unique_ptr<MediaStreamUIProxy> ui_proxy,
296 int render_frame_id,
297 bool have_access) {
298 DCHECK_CURRENTLY_ON(BrowserThread::IO);
299 if (have_access)
300 Send(new MediaStreamMsg_DevicesChanged(render_frame_id));
301 }
302
303 } // namespace content 225 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698