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

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

Issue 364123002: [Cross-Site Isolation] Migrate entire MediaStream verticals to be per-RenderFrame. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: It's random enough. + REBASE Created 6 years, 5 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 "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 "content/browser/browser_main_loop.h" 7 #include "content/browser/browser_main_loop.h"
8 #include "content/browser/child_process_security_policy_impl.h" 8 #include "content/browser/child_process_security_policy_impl.h"
9 #include "content/common/media/media_stream_messages.h" 9 #include "content/common/media/media_stream_messages.h"
10 #include "content/common/media/media_stream_options.h" 10 #include "content/common/media/media_stream_options.h"
11 #include "content/public/browser/render_process_host.h" 11 #include "content/public/browser/render_process_host.h"
12 #include "url/gurl.h" 12 #include "url/gurl.h"
13 13
14 namespace content { 14 namespace content {
15 15
16 MediaStreamDispatcherHost::MediaStreamDispatcherHost( 16 MediaStreamDispatcherHost::MediaStreamDispatcherHost(
17 int render_process_id, 17 int render_process_id,
18 const ResourceContext::SaltCallback& salt_callback, 18 const ResourceContext::SaltCallback& salt_callback,
19 MediaStreamManager* media_stream_manager, 19 MediaStreamManager* media_stream_manager,
20 ResourceContext* resource_context) 20 ResourceContext* resource_context)
21 : BrowserMessageFilter(MediaStreamMsgStart), 21 : BrowserMessageFilter(MediaStreamMsgStart),
22 render_process_id_(render_process_id), 22 render_process_id_(render_process_id),
23 salt_callback_(salt_callback), 23 salt_callback_(salt_callback),
24 media_stream_manager_(media_stream_manager), 24 media_stream_manager_(media_stream_manager),
25 resource_context_(resource_context) { 25 resource_context_(resource_context) {
26 } 26 }
27 27
28 void MediaStreamDispatcherHost::StreamGenerated( 28 void MediaStreamDispatcherHost::StreamGenerated(
29 int render_view_id, 29 int render_frame_id,
30 int page_request_id, 30 int page_request_id,
31 const std::string& label, 31 const std::string& label,
32 const StreamDeviceInfoArray& audio_devices, 32 const StreamDeviceInfoArray& audio_devices,
33 const StreamDeviceInfoArray& video_devices) { 33 const StreamDeviceInfoArray& video_devices) {
34 DCHECK_CURRENTLY_ON(BrowserThread::IO); 34 DCHECK_CURRENTLY_ON(BrowserThread::IO);
35 DVLOG(1) << "MediaStreamDispatcherHost::StreamGenerated(" 35 DVLOG(1) << "MediaStreamDispatcherHost::StreamGenerated("
36 << ", {label = " << label << "})"; 36 << ", {label = " << label << "})";
37 37
38 Send(new MediaStreamMsg_StreamGenerated( 38 Send(new MediaStreamMsg_StreamGenerated(
39 render_view_id, page_request_id, label, audio_devices, 39 render_frame_id, page_request_id, label, audio_devices, video_devices));
40 video_devices));
41 } 40 }
42 41
43 void MediaStreamDispatcherHost::StreamGenerationFailed( 42 void MediaStreamDispatcherHost::StreamGenerationFailed(
44 int render_view_id, 43 int render_frame_id,
45 int page_request_id, 44 int page_request_id,
46 content::MediaStreamRequestResult result) { 45 content::MediaStreamRequestResult result) {
47 DCHECK_CURRENTLY_ON(BrowserThread::IO); 46 DCHECK_CURRENTLY_ON(BrowserThread::IO);
48 DVLOG(1) << "MediaStreamDispatcherHost::StreamGenerationFailed(" 47 DVLOG(1) << "MediaStreamDispatcherHost::StreamGenerationFailed("
49 << ", {page_request_id = " << page_request_id << "}" 48 << ", {page_request_id = " << page_request_id << "}"
50 << ", { result= " << result << "})"; 49 << ", { result= " << result << "})";
51 50
52 51
53 Send(new MediaStreamMsg_StreamGenerationFailed(render_view_id, 52 Send(new MediaStreamMsg_StreamGenerationFailed(render_frame_id,
54 page_request_id, 53 page_request_id,
55 result)); 54 result));
56 } 55 }
57 56
58 void MediaStreamDispatcherHost::DeviceStopped(int render_view_id, 57 void MediaStreamDispatcherHost::DeviceStopped(int render_frame_id,
59 const std::string& label, 58 const std::string& label,
60 const StreamDeviceInfo& device) { 59 const StreamDeviceInfo& device) {
61 DCHECK_CURRENTLY_ON(BrowserThread::IO); 60 DCHECK_CURRENTLY_ON(BrowserThread::IO);
62 DVLOG(1) << "MediaStreamDispatcherHost::DeviceStopped(" 61 DVLOG(1) << "MediaStreamDispatcherHost::DeviceStopped("
63 << "{label = " << label << "}, " 62 << "{label = " << label << "}, "
64 << "{type = " << device.device.type << "}, " 63 << "{type = " << device.device.type << "}, "
65 << "{device_id = " << device.device.id << "})"; 64 << "{device_id = " << device.device.id << "})";
66 65
67 Send(new MediaStreamMsg_DeviceStopped(render_view_id, label, device)); 66 Send(new MediaStreamMsg_DeviceStopped(render_frame_id, label, device));
68 } 67 }
69 68
70 void MediaStreamDispatcherHost::DevicesEnumerated( 69 void MediaStreamDispatcherHost::DevicesEnumerated(
71 int render_view_id, 70 int render_frame_id,
72 int page_request_id, 71 int page_request_id,
73 const std::string& label, 72 const std::string& label,
74 const StreamDeviceInfoArray& devices) { 73 const StreamDeviceInfoArray& devices) {
75 DCHECK_CURRENTLY_ON(BrowserThread::IO); 74 DCHECK_CURRENTLY_ON(BrowserThread::IO);
76 DVLOG(1) << "MediaStreamDispatcherHost::DevicesEnumerated(" 75 DVLOG(1) << "MediaStreamDispatcherHost::DevicesEnumerated("
77 << ", {page_request_id = " << page_request_id << "})"; 76 << ", {page_request_id = " << page_request_id << "})";
78 77
79 Send(new MediaStreamMsg_DevicesEnumerated(render_view_id, page_request_id, 78 Send(new MediaStreamMsg_DevicesEnumerated(render_frame_id, page_request_id,
80 devices)); 79 devices));
81 } 80 }
82 81
83 void MediaStreamDispatcherHost::DeviceOpened( 82 void MediaStreamDispatcherHost::DeviceOpened(
84 int render_view_id, 83 int render_frame_id,
85 int page_request_id, 84 int page_request_id,
86 const std::string& label, 85 const std::string& label,
87 const StreamDeviceInfo& video_device) { 86 const StreamDeviceInfo& video_device) {
88 DCHECK_CURRENTLY_ON(BrowserThread::IO); 87 DCHECK_CURRENTLY_ON(BrowserThread::IO);
89 DVLOG(1) << "MediaStreamDispatcherHost::DeviceOpened(" 88 DVLOG(1) << "MediaStreamDispatcherHost::DeviceOpened("
90 << ", {page_request_id = " << page_request_id << "})"; 89 << ", {page_request_id = " << page_request_id << "})";
91 90
92 Send(new MediaStreamMsg_DeviceOpened( 91 Send(new MediaStreamMsg_DeviceOpened(
93 render_view_id, page_request_id, label, video_device)); 92 render_frame_id, page_request_id, label, video_device));
94 } 93 }
95 94
96 bool MediaStreamDispatcherHost::OnMessageReceived(const IPC::Message& message) { 95 bool MediaStreamDispatcherHost::OnMessageReceived(const IPC::Message& message) {
97 bool handled = true; 96 bool handled = true;
98 IPC_BEGIN_MESSAGE_MAP(MediaStreamDispatcherHost, message) 97 IPC_BEGIN_MESSAGE_MAP(MediaStreamDispatcherHost, message)
99 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_GenerateStream, OnGenerateStream) 98 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_GenerateStream, OnGenerateStream)
100 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_CancelGenerateStream, 99 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_CancelGenerateStream,
101 OnCancelGenerateStream) 100 OnCancelGenerateStream)
102 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_StopStreamDevice, 101 IPC_MESSAGE_HANDLER(MediaStreamHostMsg_StopStreamDevice,
103 OnStopStreamDevice) 102 OnStopStreamDevice)
(...skipping 14 matching lines...) Expand all
118 DVLOG(1) << "MediaStreamDispatcherHost::OnChannelClosing"; 117 DVLOG(1) << "MediaStreamDispatcherHost::OnChannelClosing";
119 118
120 // Since the IPC sender is gone, close all requesting/requested streams. 119 // Since the IPC sender is gone, close all requesting/requested streams.
121 media_stream_manager_->CancelAllRequests(render_process_id_); 120 media_stream_manager_->CancelAllRequests(render_process_id_);
122 } 121 }
123 122
124 MediaStreamDispatcherHost::~MediaStreamDispatcherHost() { 123 MediaStreamDispatcherHost::~MediaStreamDispatcherHost() {
125 } 124 }
126 125
127 void MediaStreamDispatcherHost::OnGenerateStream( 126 void MediaStreamDispatcherHost::OnGenerateStream(
128 int render_view_id, 127 int render_frame_id,
129 int page_request_id, 128 int page_request_id,
130 const StreamOptions& components, 129 const StreamOptions& components,
131 const GURL& security_origin, 130 const GURL& security_origin,
132 bool user_gesture) { 131 bool user_gesture) {
133 DVLOG(1) << "MediaStreamDispatcherHost::OnGenerateStream(" 132 DVLOG(1) << "MediaStreamDispatcherHost::OnGenerateStream("
134 << render_view_id << ", " 133 << render_frame_id << ", "
135 << page_request_id << ", [" 134 << page_request_id << ", ["
136 << " audio:" << components.audio_requested 135 << " audio:" << components.audio_requested
137 << " video:" << components.video_requested 136 << " video:" << components.video_requested
138 << " ], " 137 << " ], "
139 << security_origin.spec() 138 << security_origin.spec()
140 << ", " << user_gesture << ")"; 139 << ", " << user_gesture << ")";
141 140
142 if (!IsURLAllowed(security_origin)) 141 if (!IsURLAllowed(security_origin))
143 return; 142 return;
144 143
145 media_stream_manager_->GenerateStream( 144 media_stream_manager_->GenerateStream(
146 this, render_process_id_, render_view_id, salt_callback_, 145 this, render_process_id_, render_frame_id, salt_callback_,
147 page_request_id, components, security_origin, user_gesture); 146 page_request_id, components, security_origin, user_gesture);
148 } 147 }
149 148
150 void MediaStreamDispatcherHost::OnCancelGenerateStream(int render_view_id, 149 void MediaStreamDispatcherHost::OnCancelGenerateStream(int render_frame_id,
151 int page_request_id) { 150 int page_request_id) {
152 DVLOG(1) << "MediaStreamDispatcherHost::OnCancelGenerateStream(" 151 DVLOG(1) << "MediaStreamDispatcherHost::OnCancelGenerateStream("
153 << render_view_id << ", " 152 << render_frame_id << ", "
154 << page_request_id << ")"; 153 << page_request_id << ")";
155 media_stream_manager_->CancelRequest(render_process_id_, render_view_id, 154 media_stream_manager_->CancelRequest(render_process_id_, render_frame_id,
156 page_request_id); 155 page_request_id);
157 } 156 }
158 157
159 void MediaStreamDispatcherHost::OnStopStreamDevice( 158 void MediaStreamDispatcherHost::OnStopStreamDevice(
160 int render_view_id, 159 int render_frame_id,
161 const std::string& device_id) { 160 const std::string& device_id) {
162 DVLOG(1) << "MediaStreamDispatcherHost::OnStopStreamDevice(" 161 DVLOG(1) << "MediaStreamDispatcherHost::OnStopStreamDevice("
163 << render_view_id << ", " 162 << render_frame_id << ", "
164 << device_id << ")"; 163 << device_id << ")";
165 media_stream_manager_->StopStreamDevice(render_process_id_, render_view_id, 164 media_stream_manager_->StopStreamDevice(render_process_id_, render_frame_id,
166 device_id); 165 device_id);
167 } 166 }
168 167
169 void MediaStreamDispatcherHost::OnEnumerateDevices( 168 void MediaStreamDispatcherHost::OnEnumerateDevices(
170 int render_view_id, 169 int render_frame_id,
171 int page_request_id, 170 int page_request_id,
172 MediaStreamType type, 171 MediaStreamType type,
173 const GURL& security_origin, 172 const GURL& security_origin,
174 bool hide_labels_if_no_access) { 173 bool hide_labels_if_no_access) {
175 DVLOG(1) << "MediaStreamDispatcherHost::OnEnumerateDevices(" 174 DVLOG(1) << "MediaStreamDispatcherHost::OnEnumerateDevices("
176 << render_view_id << ", " 175 << render_frame_id << ", "
177 << page_request_id << ", " 176 << page_request_id << ", "
178 << type << ", " 177 << type << ", "
179 << security_origin.spec() << ")"; 178 << security_origin.spec() << ")";
180 179
181 if (!IsURLAllowed(security_origin)) 180 if (!IsURLAllowed(security_origin))
182 return; 181 return;
183 182
184 DCHECK(type == MEDIA_DEVICE_AUDIO_CAPTURE || 183 DCHECK(type == MEDIA_DEVICE_AUDIO_CAPTURE ||
185 type == MEDIA_DEVICE_VIDEO_CAPTURE || 184 type == MEDIA_DEVICE_VIDEO_CAPTURE ||
186 type == MEDIA_DEVICE_AUDIO_OUTPUT); 185 type == MEDIA_DEVICE_AUDIO_OUTPUT);
187 bool have_permission = true; 186 bool have_permission = true;
188 if (hide_labels_if_no_access) { 187 if (hide_labels_if_no_access) {
189 bool audio_type = type == MEDIA_DEVICE_AUDIO_CAPTURE || 188 bool audio_type = type == MEDIA_DEVICE_AUDIO_CAPTURE ||
190 type == MEDIA_DEVICE_AUDIO_OUTPUT; 189 type == MEDIA_DEVICE_AUDIO_OUTPUT;
191 have_permission = audio_type ? 190 have_permission = audio_type ?
192 resource_context_->AllowMicAccess(security_origin) : 191 resource_context_->AllowMicAccess(security_origin) :
193 resource_context_->AllowCameraAccess(security_origin); 192 resource_context_->AllowCameraAccess(security_origin);
194 } 193 }
195 194
196 media_stream_manager_->EnumerateDevices( 195 media_stream_manager_->EnumerateDevices(
197 this, render_process_id_, render_view_id, salt_callback_, 196 this, render_process_id_, render_frame_id, salt_callback_,
198 page_request_id, type, security_origin, have_permission); 197 page_request_id, type, security_origin, have_permission);
199 } 198 }
200 199
201 void MediaStreamDispatcherHost::OnCancelEnumerateDevices( 200 void MediaStreamDispatcherHost::OnCancelEnumerateDevices(
202 int render_view_id, 201 int render_frame_id,
203 int page_request_id) { 202 int page_request_id) {
204 DVLOG(1) << "MediaStreamDispatcherHost::OnCancelEnumerateDevices(" 203 DVLOG(1) << "MediaStreamDispatcherHost::OnCancelEnumerateDevices("
205 << render_view_id << ", " 204 << render_frame_id << ", "
206 << page_request_id << ")"; 205 << page_request_id << ")";
207 media_stream_manager_->CancelRequest(render_process_id_, render_view_id, 206 media_stream_manager_->CancelRequest(render_process_id_, render_frame_id,
208 page_request_id); 207 page_request_id);
209 } 208 }
210 209
211 void MediaStreamDispatcherHost::OnOpenDevice( 210 void MediaStreamDispatcherHost::OnOpenDevice(
212 int render_view_id, 211 int render_frame_id,
213 int page_request_id, 212 int page_request_id,
214 const std::string& device_id, 213 const std::string& device_id,
215 MediaStreamType type, 214 MediaStreamType type,
216 const GURL& security_origin) { 215 const GURL& security_origin) {
217 DVLOG(1) << "MediaStreamDispatcherHost::OnOpenDevice(" 216 DVLOG(1) << "MediaStreamDispatcherHost::OnOpenDevice("
218 << render_view_id << ", " 217 << render_frame_id << ", "
219 << page_request_id << ", device_id: " 218 << page_request_id << ", device_id: "
220 << device_id.c_str() << ", type: " 219 << device_id.c_str() << ", type: "
221 << type << ", " 220 << type << ", "
222 << security_origin.spec() << ")"; 221 << security_origin.spec() << ")";
223 222
224 if (!IsURLAllowed(security_origin)) 223 if (!IsURLAllowed(security_origin))
225 return; 224 return;
226 225
227 media_stream_manager_->OpenDevice( 226 media_stream_manager_->OpenDevice(
228 this, render_process_id_, render_view_id, salt_callback_, 227 this, render_process_id_, render_frame_id, salt_callback_,
229 page_request_id, device_id, type, security_origin); 228 page_request_id, device_id, type, security_origin);
230 } 229 }
231 230
232 void MediaStreamDispatcherHost::OnCloseDevice( 231 void MediaStreamDispatcherHost::OnCloseDevice(
233 int render_view_id, 232 int render_frame_id,
234 const std::string& label) { 233 const std::string& label) {
235 DVLOG(1) << "MediaStreamDispatcherHost::OnCloseDevice(" 234 DVLOG(1) << "MediaStreamDispatcherHost::OnCloseDevice("
236 << render_view_id << ", " 235 << render_frame_id << ", "
237 << label << ")"; 236 << label << ")";
238 237
239 media_stream_manager_->CancelRequest(label); 238 media_stream_manager_->CancelRequest(label);
240 } 239 }
241 240
242 bool MediaStreamDispatcherHost::IsURLAllowed(const GURL& url) { 241 bool MediaStreamDispatcherHost::IsURLAllowed(const GURL& url) {
243 if (!ChildProcessSecurityPolicyImpl::GetInstance()->CanRequestURL( 242 if (!ChildProcessSecurityPolicyImpl::GetInstance()->CanRequestURL(
244 render_process_id_, url)) { 243 render_process_id_, url)) {
245 LOG(ERROR) << "MSDH: Renderer requested a URL it's not allowed to use."; 244 LOG(ERROR) << "MSDH: Renderer requested a URL it's not allowed to use.";
246 return false; 245 return false;
247 } 246 }
248 247
249 return true; 248 return true;
250 } 249 }
251 250
252 } // namespace content 251 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698