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

Side by Side Diff: content/renderer/pepper/pepper_media_device_manager.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: TabCaptureRegistry: Keep track of original target RenderFrameHost, for OnRequestUpdate(). 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/renderer/pepper/pepper_media_device_manager.h" 5 #include "content/renderer/pepper/pepper_media_device_manager.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "content/renderer/media/media_stream_dispatcher.h" 8 #include "content/renderer/media/media_stream_dispatcher.h"
9 #include "content/renderer/render_view_impl.h" 9 #include "content/renderer/render_frame_impl.h"
10 #include "ppapi/shared_impl/ppb_device_ref_shared.h" 10 #include "ppapi/shared_impl/ppb_device_ref_shared.h"
11 11
12 namespace content { 12 namespace content {
13 13
14 namespace { 14 namespace {
15 15
16 ppapi::DeviceRefData FromStreamDeviceInfo(const StreamDeviceInfo& info) { 16 ppapi::DeviceRefData FromStreamDeviceInfo(const StreamDeviceInfo& info) {
17 ppapi::DeviceRefData data; 17 ppapi::DeviceRefData data;
18 data.id = info.device.id; 18 data.id = info.device.id;
19 data.name = info.device.name; 19 data.name = info.device.name;
20 data.type = PepperMediaDeviceManager::FromMediaStreamType(info.device.type); 20 data.type = PepperMediaDeviceManager::FromMediaStreamType(info.device.type);
21 return data; 21 return data;
22 } 22 }
23 23
24 } // namespace 24 } // namespace
25 25
26 PepperMediaDeviceManager* PepperMediaDeviceManager::GetForRenderView( 26 PepperMediaDeviceManager* PepperMediaDeviceManager::GetForRenderFrame(
27 RenderView* render_view) { 27 RenderFrame* render_frame) {
28 PepperMediaDeviceManager* handler = 28 PepperMediaDeviceManager* handler =
29 PepperMediaDeviceManager::Get(render_view); 29 PepperMediaDeviceManager::Get(render_frame);
30 if (!handler) 30 if (!handler)
31 handler = new PepperMediaDeviceManager(render_view); 31 handler = new PepperMediaDeviceManager(render_frame);
32 return handler; 32 return handler;
33 } 33 }
34 34
35 PepperMediaDeviceManager::PepperMediaDeviceManager(RenderView* render_view) 35 PepperMediaDeviceManager::PepperMediaDeviceManager(RenderFrame* render_frame)
36 : RenderViewObserver(render_view), 36 : RenderFrameObserver(render_frame),
37 RenderViewObserverTracker<PepperMediaDeviceManager>(render_view), 37 RenderFrameObserverTracker<PepperMediaDeviceManager>(render_frame),
38 next_id_(1) {} 38 next_id_(1) {}
39 39
40 PepperMediaDeviceManager::~PepperMediaDeviceManager() { 40 PepperMediaDeviceManager::~PepperMediaDeviceManager() {
41 DCHECK(enumerate_callbacks_.empty()); 41 DCHECK(enumerate_callbacks_.empty());
42 DCHECK(open_callbacks_.empty()); 42 DCHECK(open_callbacks_.empty());
43 } 43 }
44 44
45 int PepperMediaDeviceManager::EnumerateDevices( 45 int PepperMediaDeviceManager::EnumerateDevices(
46 PP_DeviceType_Dev type, 46 PP_DeviceType_Dev type,
47 const GURL& document_url, 47 const GURL& document_url,
48 const EnumerateDevicesCallback& callback) { 48 const EnumerateDevicesCallback& callback) {
49 enumerate_callbacks_[next_id_] = callback; 49 enumerate_callbacks_[next_id_] = callback;
50 int request_id = next_id_++; 50 int request_id = next_id_++;
51 51
52 #if defined(ENABLE_WEBRTC) 52 #if defined(ENABLE_WEBRTC)
53 GetRenderViewImpl()->media_stream_dispatcher()->EnumerateDevices( 53 GetMediaStreamDispatcher()->EnumerateDevices(
54 request_id, 54 request_id,
55 AsWeakPtr(), 55 AsWeakPtr(),
56 PepperMediaDeviceManager::FromPepperDeviceType(type), 56 PepperMediaDeviceManager::FromPepperDeviceType(type),
57 document_url.GetOrigin(), 57 document_url.GetOrigin(),
58 false); 58 false);
59 #else 59 #else
60 base::MessageLoop::current()->PostTask( 60 base::MessageLoop::current()->PostTask(
61 FROM_HERE, 61 FROM_HERE,
62 base::Bind(&PepperMediaDeviceManager::OnDevicesEnumerated, 62 base::Bind(&PepperMediaDeviceManager::OnDevicesEnumerated,
63 AsWeakPtr(), 63 AsWeakPtr(),
64 request_id, 64 request_id,
65 StreamDeviceInfoArray())); 65 StreamDeviceInfoArray()));
66 #endif 66 #endif
67 67
68 return request_id; 68 return request_id;
69 } 69 }
70 70
71 void PepperMediaDeviceManager::StopEnumerateDevices(int request_id) { 71 void PepperMediaDeviceManager::StopEnumerateDevices(int request_id) {
72 enumerate_callbacks_.erase(request_id); 72 enumerate_callbacks_.erase(request_id);
73 73
74 #if defined(ENABLE_WEBRTC) 74 #if defined(ENABLE_WEBRTC)
75 // Need to post task since this function might be called inside the callback 75 GetMediaStreamDispatcher()->StopEnumerateDevices(request_id, AsWeakPtr());
yzshen1 2014/07/14 17:19:55 Is it safe to remove this PostTask()? If I unders
miu 2014/07/14 19:41:28 Done. I removed it because, at one point, I manag
yzshen1 2014/07/14 21:15:32 I don't think the mechanism can avoid the re-entra
76 // of EnumerateDevices.
77 base::MessageLoop::current()->PostTask(
78 FROM_HERE,
79 base::Bind(&MediaStreamDispatcher::StopEnumerateDevices,
80 GetRenderViewImpl()->media_stream_dispatcher()->AsWeakPtr(),
81 request_id,
82 AsWeakPtr()));
83 #endif 76 #endif
84 } 77 }
85 78
86 int PepperMediaDeviceManager::OpenDevice(PP_DeviceType_Dev type, 79 int PepperMediaDeviceManager::OpenDevice(PP_DeviceType_Dev type,
87 const std::string& device_id, 80 const std::string& device_id,
88 const GURL& document_url, 81 const GURL& document_url,
89 const OpenDeviceCallback& callback) { 82 const OpenDeviceCallback& callback) {
90 open_callbacks_[next_id_] = callback; 83 open_callbacks_[next_id_] = callback;
91 int request_id = next_id_++; 84 int request_id = next_id_++;
92 85
93 #if defined(ENABLE_WEBRTC) 86 #if defined(ENABLE_WEBRTC)
94 GetRenderViewImpl()->media_stream_dispatcher()->OpenDevice( 87 GetMediaStreamDispatcher()->OpenDevice(
95 request_id, 88 request_id,
96 AsWeakPtr(), 89 AsWeakPtr(),
97 device_id, 90 device_id,
98 PepperMediaDeviceManager::FromPepperDeviceType(type), 91 PepperMediaDeviceManager::FromPepperDeviceType(type),
99 document_url.GetOrigin()); 92 document_url.GetOrigin());
100 #else 93 #else
101 base::MessageLoop::current()->PostTask( 94 base::MessageLoop::current()->PostTask(
102 FROM_HERE, 95 FROM_HERE,
103 base::Bind(&PepperMediaDeviceManager::OnDeviceOpenFailed, 96 base::Bind(&PepperMediaDeviceManager::OnDeviceOpenFailed,
104 AsWeakPtr(), 97 AsWeakPtr(),
105 request_id)); 98 request_id));
106 #endif 99 #endif
107 100
108 return request_id; 101 return request_id;
109 } 102 }
110 103
111 void PepperMediaDeviceManager::CancelOpenDevice(int request_id) { 104 void PepperMediaDeviceManager::CancelOpenDevice(int request_id) {
112 open_callbacks_.erase(request_id); 105 open_callbacks_.erase(request_id);
113 106
114 #if defined(ENABLE_WEBRTC) 107 #if defined(ENABLE_WEBRTC)
115 GetRenderViewImpl()->media_stream_dispatcher()->CancelOpenDevice(request_id, 108 GetMediaStreamDispatcher()->CancelOpenDevice(request_id, AsWeakPtr());
116 AsWeakPtr());
117 #endif 109 #endif
118 } 110 }
119 111
120 void PepperMediaDeviceManager::CloseDevice(const std::string& label) { 112 void PepperMediaDeviceManager::CloseDevice(const std::string& label) {
121 #if defined(ENABLE_WEBRTC) 113 #if defined(ENABLE_WEBRTC)
122 GetRenderViewImpl()->media_stream_dispatcher()->CloseDevice(label); 114 GetMediaStreamDispatcher()->CloseDevice(label);
123 #endif 115 #endif
124 } 116 }
125 117
126 int PepperMediaDeviceManager::GetSessionID(PP_DeviceType_Dev type, 118 int PepperMediaDeviceManager::GetSessionID(PP_DeviceType_Dev type,
127 const std::string& label) { 119 const std::string& label) {
128 #if defined(ENABLE_WEBRTC) 120 #if defined(ENABLE_WEBRTC)
129 switch (type) { 121 switch (type) {
130 case PP_DEVICETYPE_DEV_AUDIOCAPTURE: 122 case PP_DEVICETYPE_DEV_AUDIOCAPTURE:
131 return GetRenderViewImpl()->media_stream_dispatcher()->audio_session_id( 123 return GetMediaStreamDispatcher()->audio_session_id(label, 0);
132 label, 0);
133 case PP_DEVICETYPE_DEV_VIDEOCAPTURE: 124 case PP_DEVICETYPE_DEV_VIDEOCAPTURE:
134 return GetRenderViewImpl()->media_stream_dispatcher()->video_session_id( 125 return GetMediaStreamDispatcher()->video_session_id(label, 0);
135 label, 0);
136 default: 126 default:
137 NOTREACHED(); 127 NOTREACHED();
138 return 0; 128 return 0;
139 } 129 }
140 #else 130 #else
141 return 0; 131 return 0;
142 #endif 132 #endif
143 } 133 }
144 134
145 void PepperMediaDeviceManager::OnStreamGenerated( 135 void PepperMediaDeviceManager::OnStreamGenerated(
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 // The callback may have been unregistered. 219 // The callback may have been unregistered.
230 return; 220 return;
231 } 221 }
232 222
233 OpenDeviceCallback callback = iter->second; 223 OpenDeviceCallback callback = iter->second;
234 open_callbacks_.erase(iter); 224 open_callbacks_.erase(iter);
235 225
236 callback.Run(request_id, succeeded, label); 226 callback.Run(request_id, succeeded, label);
237 } 227 }
238 228
239 RenderViewImpl* PepperMediaDeviceManager::GetRenderViewImpl() { 229 MediaStreamDispatcher* PepperMediaDeviceManager::GetMediaStreamDispatcher()
240 return static_cast<RenderViewImpl*>(render_view()); 230 const {
231 DCHECK(render_frame());
232 MediaStreamDispatcher* const dispatcher =
233 static_cast<RenderFrameImpl*>(render_frame())->GetMediaStreamDispatcher();
234 DCHECK(dispatcher);
235 return dispatcher;
241 } 236 }
242 237
243 } // namespace content 238 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698