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

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: Add back PostTask() to StopEnumerateDevices() to avoid reentrancy issue. 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 // Need to post task since this function might be called inside the callback
76 // of EnumerateDevices. 76 // of EnumerateDevices.
77 base::MessageLoop::current()->PostTask( 77 base::MessageLoop::current()->PostTask(
78 FROM_HERE, 78 FROM_HERE,
79 base::Bind(&MediaStreamDispatcher::StopEnumerateDevices, 79 base::Bind(&PepperMediaDeviceManager::StopEnumerateDevicesDelayed,
80 GetRenderViewImpl()->media_stream_dispatcher()->AsWeakPtr(), 80 AsWeakPtr(),
81 request_id, 81 request_id));
82 AsWeakPtr()));
83 #endif 82 #endif
84 } 83 }
85 84
85 void PepperMediaDeviceManager::StopEnumerateDevicesDelayed(int request_id) {
86 #if defined(ENABLE_WEBRTC)
87 if (render_frame())
miu 2014/07/14 19:41:28 FYI--Checking that render_frame() is not NULL to g
yzshen1 2014/07/14 21:15:33 It seems good to make this a comment? (This meth
miu 2014/07/15 00:09:14 Done.
88 GetMediaStreamDispatcher()->StopEnumerateDevices(request_id, AsWeakPtr());
89 #endif
90 }
91
86 int PepperMediaDeviceManager::OpenDevice(PP_DeviceType_Dev type, 92 int PepperMediaDeviceManager::OpenDevice(PP_DeviceType_Dev type,
87 const std::string& device_id, 93 const std::string& device_id,
88 const GURL& document_url, 94 const GURL& document_url,
89 const OpenDeviceCallback& callback) { 95 const OpenDeviceCallback& callback) {
90 open_callbacks_[next_id_] = callback; 96 open_callbacks_[next_id_] = callback;
91 int request_id = next_id_++; 97 int request_id = next_id_++;
92 98
93 #if defined(ENABLE_WEBRTC) 99 #if defined(ENABLE_WEBRTC)
94 GetRenderViewImpl()->media_stream_dispatcher()->OpenDevice( 100 GetMediaStreamDispatcher()->OpenDevice(
95 request_id, 101 request_id,
96 AsWeakPtr(), 102 AsWeakPtr(),
97 device_id, 103 device_id,
98 PepperMediaDeviceManager::FromPepperDeviceType(type), 104 PepperMediaDeviceManager::FromPepperDeviceType(type),
99 document_url.GetOrigin()); 105 document_url.GetOrigin());
100 #else 106 #else
101 base::MessageLoop::current()->PostTask( 107 base::MessageLoop::current()->PostTask(
102 FROM_HERE, 108 FROM_HERE,
103 base::Bind(&PepperMediaDeviceManager::OnDeviceOpenFailed, 109 base::Bind(&PepperMediaDeviceManager::OnDeviceOpenFailed,
104 AsWeakPtr(), 110 AsWeakPtr(),
105 request_id)); 111 request_id));
106 #endif 112 #endif
107 113
108 return request_id; 114 return request_id;
109 } 115 }
110 116
111 void PepperMediaDeviceManager::CancelOpenDevice(int request_id) { 117 void PepperMediaDeviceManager::CancelOpenDevice(int request_id) {
112 open_callbacks_.erase(request_id); 118 open_callbacks_.erase(request_id);
113 119
114 #if defined(ENABLE_WEBRTC) 120 #if defined(ENABLE_WEBRTC)
115 GetRenderViewImpl()->media_stream_dispatcher()->CancelOpenDevice(request_id, 121 GetMediaStreamDispatcher()->CancelOpenDevice(request_id, AsWeakPtr());
116 AsWeakPtr());
117 #endif 122 #endif
118 } 123 }
119 124
120 void PepperMediaDeviceManager::CloseDevice(const std::string& label) { 125 void PepperMediaDeviceManager::CloseDevice(const std::string& label) {
121 #if defined(ENABLE_WEBRTC) 126 #if defined(ENABLE_WEBRTC)
122 GetRenderViewImpl()->media_stream_dispatcher()->CloseDevice(label); 127 GetMediaStreamDispatcher()->CloseDevice(label);
123 #endif 128 #endif
124 } 129 }
125 130
126 int PepperMediaDeviceManager::GetSessionID(PP_DeviceType_Dev type, 131 int PepperMediaDeviceManager::GetSessionID(PP_DeviceType_Dev type,
127 const std::string& label) { 132 const std::string& label) {
128 #if defined(ENABLE_WEBRTC) 133 #if defined(ENABLE_WEBRTC)
129 switch (type) { 134 switch (type) {
130 case PP_DEVICETYPE_DEV_AUDIOCAPTURE: 135 case PP_DEVICETYPE_DEV_AUDIOCAPTURE:
131 return GetRenderViewImpl()->media_stream_dispatcher()->audio_session_id( 136 return GetMediaStreamDispatcher()->audio_session_id(label, 0);
132 label, 0);
133 case PP_DEVICETYPE_DEV_VIDEOCAPTURE: 137 case PP_DEVICETYPE_DEV_VIDEOCAPTURE:
134 return GetRenderViewImpl()->media_stream_dispatcher()->video_session_id( 138 return GetMediaStreamDispatcher()->video_session_id(label, 0);
135 label, 0);
136 default: 139 default:
137 NOTREACHED(); 140 NOTREACHED();
138 return 0; 141 return 0;
139 } 142 }
140 #else 143 #else
141 return 0; 144 return 0;
142 #endif 145 #endif
143 } 146 }
144 147
145 void PepperMediaDeviceManager::OnStreamGenerated( 148 void PepperMediaDeviceManager::OnStreamGenerated(
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 // The callback may have been unregistered. 232 // The callback may have been unregistered.
230 return; 233 return;
231 } 234 }
232 235
233 OpenDeviceCallback callback = iter->second; 236 OpenDeviceCallback callback = iter->second;
234 open_callbacks_.erase(iter); 237 open_callbacks_.erase(iter);
235 238
236 callback.Run(request_id, succeeded, label); 239 callback.Run(request_id, succeeded, label);
237 } 240 }
238 241
239 RenderViewImpl* PepperMediaDeviceManager::GetRenderViewImpl() { 242 MediaStreamDispatcher* PepperMediaDeviceManager::GetMediaStreamDispatcher()
240 return static_cast<RenderViewImpl*>(render_view()); 243 const {
244 DCHECK(render_frame());
245 MediaStreamDispatcher* const dispatcher =
246 static_cast<RenderFrameImpl*>(render_frame())->GetMediaStreamDispatcher();
247 DCHECK(dispatcher);
248 return dispatcher;
241 } 249 }
242 250
243 } // namespace content 251 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/pepper/pepper_media_device_manager.h ('k') | content/renderer/pepper/pepper_platform_audio_input.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698