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

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: 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/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 // This method is being invoked by the message loop at some unknown
88 // point-in-time after StopEnumerateDevices(). Therefore, check that
89 // render_frame() is not NULL, in order to guarantee
90 // GetMediaStreamDispatcher() won't return NULL.
91 if (render_frame())
92 GetMediaStreamDispatcher()->StopEnumerateDevices(request_id, AsWeakPtr());
93 #endif
94 }
95
86 int PepperMediaDeviceManager::OpenDevice(PP_DeviceType_Dev type, 96 int PepperMediaDeviceManager::OpenDevice(PP_DeviceType_Dev type,
87 const std::string& device_id, 97 const std::string& device_id,
88 const GURL& document_url, 98 const GURL& document_url,
89 const OpenDeviceCallback& callback) { 99 const OpenDeviceCallback& callback) {
90 open_callbacks_[next_id_] = callback; 100 open_callbacks_[next_id_] = callback;
91 int request_id = next_id_++; 101 int request_id = next_id_++;
92 102
93 #if defined(ENABLE_WEBRTC) 103 #if defined(ENABLE_WEBRTC)
94 GetRenderViewImpl()->media_stream_dispatcher()->OpenDevice( 104 GetMediaStreamDispatcher()->OpenDevice(
95 request_id, 105 request_id,
96 AsWeakPtr(), 106 AsWeakPtr(),
97 device_id, 107 device_id,
98 PepperMediaDeviceManager::FromPepperDeviceType(type), 108 PepperMediaDeviceManager::FromPepperDeviceType(type),
99 document_url.GetOrigin()); 109 document_url.GetOrigin());
100 #else 110 #else
101 base::MessageLoop::current()->PostTask( 111 base::MessageLoop::current()->PostTask(
102 FROM_HERE, 112 FROM_HERE,
103 base::Bind(&PepperMediaDeviceManager::OnDeviceOpenFailed, 113 base::Bind(&PepperMediaDeviceManager::OnDeviceOpenFailed,
104 AsWeakPtr(), 114 AsWeakPtr(),
105 request_id)); 115 request_id));
106 #endif 116 #endif
107 117
108 return request_id; 118 return request_id;
109 } 119 }
110 120
111 void PepperMediaDeviceManager::CancelOpenDevice(int request_id) { 121 void PepperMediaDeviceManager::CancelOpenDevice(int request_id) {
112 open_callbacks_.erase(request_id); 122 open_callbacks_.erase(request_id);
113 123
114 #if defined(ENABLE_WEBRTC) 124 #if defined(ENABLE_WEBRTC)
115 GetRenderViewImpl()->media_stream_dispatcher()->CancelOpenDevice(request_id, 125 GetMediaStreamDispatcher()->CancelOpenDevice(request_id, AsWeakPtr());
116 AsWeakPtr());
117 #endif 126 #endif
118 } 127 }
119 128
120 void PepperMediaDeviceManager::CloseDevice(const std::string& label) { 129 void PepperMediaDeviceManager::CloseDevice(const std::string& label) {
121 #if defined(ENABLE_WEBRTC) 130 #if defined(ENABLE_WEBRTC)
122 GetRenderViewImpl()->media_stream_dispatcher()->CloseDevice(label); 131 GetMediaStreamDispatcher()->CloseDevice(label);
123 #endif 132 #endif
124 } 133 }
125 134
126 int PepperMediaDeviceManager::GetSessionID(PP_DeviceType_Dev type, 135 int PepperMediaDeviceManager::GetSessionID(PP_DeviceType_Dev type,
127 const std::string& label) { 136 const std::string& label) {
128 #if defined(ENABLE_WEBRTC) 137 #if defined(ENABLE_WEBRTC)
129 switch (type) { 138 switch (type) {
130 case PP_DEVICETYPE_DEV_AUDIOCAPTURE: 139 case PP_DEVICETYPE_DEV_AUDIOCAPTURE:
131 return GetRenderViewImpl()->media_stream_dispatcher()->audio_session_id( 140 return GetMediaStreamDispatcher()->audio_session_id(label, 0);
132 label, 0);
133 case PP_DEVICETYPE_DEV_VIDEOCAPTURE: 141 case PP_DEVICETYPE_DEV_VIDEOCAPTURE:
134 return GetRenderViewImpl()->media_stream_dispatcher()->video_session_id( 142 return GetMediaStreamDispatcher()->video_session_id(label, 0);
135 label, 0);
136 default: 143 default:
137 NOTREACHED(); 144 NOTREACHED();
138 return 0; 145 return 0;
139 } 146 }
140 #else 147 #else
141 return 0; 148 return 0;
142 #endif 149 #endif
143 } 150 }
144 151
145 void PepperMediaDeviceManager::OnStreamGenerated( 152 void PepperMediaDeviceManager::OnStreamGenerated(
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 // The callback may have been unregistered. 236 // The callback may have been unregistered.
230 return; 237 return;
231 } 238 }
232 239
233 OpenDeviceCallback callback = iter->second; 240 OpenDeviceCallback callback = iter->second;
234 open_callbacks_.erase(iter); 241 open_callbacks_.erase(iter);
235 242
236 callback.Run(request_id, succeeded, label); 243 callback.Run(request_id, succeeded, label);
237 } 244 }
238 245
239 RenderViewImpl* PepperMediaDeviceManager::GetRenderViewImpl() { 246 MediaStreamDispatcher* PepperMediaDeviceManager::GetMediaStreamDispatcher()
240 return static_cast<RenderViewImpl*>(render_view()); 247 const {
248 DCHECK(render_frame());
249 MediaStreamDispatcher* const dispatcher =
250 static_cast<RenderFrameImpl*>(render_frame())->GetMediaStreamDispatcher();
251 DCHECK(dispatcher);
252 return dispatcher;
241 } 253 }
242 254
243 } // namespace content 255 } // 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