OLD | NEW |
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_manager.h" | 5 #include "content/browser/renderer_host/media/media_stream_manager.h" |
6 | 6 |
7 #include <list> | 7 #include <list> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 #include "content/public/common/media_stream_request.h" | 25 #include "content/public/common/media_stream_request.h" |
26 #include "googleurl/src/gurl.h" | 26 #include "googleurl/src/gurl.h" |
27 #include "media/audio/audio_manager_base.h" | 27 #include "media/audio/audio_manager_base.h" |
28 #include "media/audio/audio_util.h" | 28 #include "media/audio/audio_util.h" |
29 #include "media/base/channel_layout.h" | 29 #include "media/base/channel_layout.h" |
30 | 30 |
31 #if defined(OS_WIN) | 31 #if defined(OS_WIN) |
32 #include "base/win/scoped_com_initializer.h" | 32 #include "base/win/scoped_com_initializer.h" |
33 #endif | 33 #endif |
34 | 34 |
| 35 namespace { |
| 36 const char kExtensionScheme[] = "chrome-extension"; |
| 37 } // namespace |
| 38 |
35 namespace content { | 39 namespace content { |
36 | 40 |
37 // Creates a random label used to identify requests. | 41 // Creates a random label used to identify requests. |
38 static std::string RandomLabel() { | 42 static std::string RandomLabel() { |
39 // An earlier PeerConnection spec, | 43 // An earlier PeerConnection spec, |
40 // http://dev.w3.org/2011/webrtc/editor/webrtc.html, specified the | 44 // http://dev.w3.org/2011/webrtc/editor/webrtc.html, specified the |
41 // MediaStream::label alphabet as containing 36 characters from | 45 // MediaStream::label alphabet as containing 36 characters from |
42 // range: U+0021, U+0023 to U+0027, U+002A to U+002B, U+002D to U+002E, | 46 // range: U+0021, U+0023 to U+0027, U+002A to U+002B, U+002D to U+002E, |
43 // U+0030 to U+0039, U+0041 to U+005A, U+005E to U+007E. | 47 // U+0030 to U+0039, U+0041 to U+005A, U+005E to U+007E. |
44 // Here we use a safe subset. | 48 // Here we use a safe subset. |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
234 | 238 |
235 std::string MediaStreamManager::GenerateStreamForDevice( | 239 std::string MediaStreamManager::GenerateStreamForDevice( |
236 MediaStreamRequester* requester, int render_process_id, int render_view_id, | 240 MediaStreamRequester* requester, int render_process_id, int render_view_id, |
237 const StreamOptions& options, const std::string& device_id, | 241 const StreamOptions& options, const std::string& device_id, |
238 const GURL& security_origin) { | 242 const GURL& security_origin) { |
239 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 243 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
240 | 244 |
241 int target_render_process_id = -1; | 245 int target_render_process_id = -1; |
242 int target_render_view_id = -1; | 246 int target_render_view_id = -1; |
243 | 247 |
244 // We will post the request to the render view that is the target of the | 248 // We will post the request to the target render view, not the source (i.e. |
245 // capture. | 249 // source is an extension, and target is the tab we want to capture). |
246 bool has_valid_device_id = WebContentsCaptureUtil::ExtractTabCaptureTarget( | 250 bool has_valid_device_id = WebContentsCaptureUtil::ExtractTabCaptureTarget( |
247 device_id, &target_render_process_id, &target_render_view_id); | 251 device_id, &target_render_process_id, &target_render_view_id); |
248 | 252 |
249 if (!has_valid_device_id || | 253 if (!has_valid_device_id || |
| 254 !security_origin.SchemeIs(kExtensionScheme) || |
250 (options.audio_type != MEDIA_TAB_AUDIO_CAPTURE && | 255 (options.audio_type != MEDIA_TAB_AUDIO_CAPTURE && |
251 options.audio_type != MEDIA_NO_SERVICE) || | 256 options.audio_type != MEDIA_NO_SERVICE) || |
252 (options.video_type != MEDIA_TAB_VIDEO_CAPTURE && | 257 (options.video_type != MEDIA_TAB_VIDEO_CAPTURE && |
253 options.video_type != MEDIA_NO_SERVICE)) { | 258 options.video_type != MEDIA_NO_SERVICE)) { |
254 LOG(ERROR) << "Invalid request."; | 259 LOG(ERROR) << "Invalid request or used tab capture outside extension API."; |
255 return std::string(); | 260 return std::string(); |
256 } | 261 } |
257 | 262 |
258 // Create a new request based on options. | 263 // Create a new request based on options. |
259 DeviceRequest* request = new DeviceRequest(requester, options, | 264 DeviceRequest* request = new DeviceRequest(requester, options, |
260 MEDIA_GENERATE_STREAM, | 265 MEDIA_GENERATE_STREAM, |
261 target_render_process_id, | 266 target_render_process_id, |
262 target_render_view_id, | 267 target_render_view_id, |
263 security_origin); | 268 security_origin); |
264 const std::string& label = AddRequest(request); | 269 const std::string& label = AddRequest(request); |
(...skipping 848 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1113 } | 1118 } |
1114 | 1119 |
1115 // Always do enumeration even though some enumeration is in progress, | 1120 // Always do enumeration even though some enumeration is in progress, |
1116 // because those enumeration commands could be sent before these devices | 1121 // because those enumeration commands could be sent before these devices |
1117 // change. | 1122 // change. |
1118 ++active_enumeration_ref_count_[stream_type]; | 1123 ++active_enumeration_ref_count_[stream_type]; |
1119 GetDeviceManager(stream_type)->EnumerateDevices(stream_type); | 1124 GetDeviceManager(stream_type)->EnumerateDevices(stream_type); |
1120 } | 1125 } |
1121 | 1126 |
1122 } // namespace content | 1127 } // namespace content |
OLD | NEW |