Chromium Code Reviews| 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/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 Loading... | |
| 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 |
| OLD | NEW |