| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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_ui_proxy.h" | 5 #include "content/browser/renderer_host/media/media_stream_ui_proxy.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "content/browser/renderer_host/render_view_host_delegate.h" | 8 #include "content/browser/frame_host/render_frame_host_delegate.h" |
| 9 #include "content/browser/renderer_host/render_view_host_impl.h" | 9 #include "content/browser/frame_host/render_frame_host_impl.h" |
| 10 #include "content/public/browser/browser_thread.h" | 10 #include "content/public/browser/browser_thread.h" |
| 11 #include "content/public/common/content_switches.h" | 11 #include "content/public/common/content_switches.h" |
| 12 #include "media/video/capture/fake_video_capture_device.h" | 12 #include "media/video/capture/fake_video_capture_device.h" |
| 13 | 13 |
| 14 namespace content { | 14 namespace content { |
| 15 | 15 |
| 16 class MediaStreamUIProxy::Core { | 16 class MediaStreamUIProxy::Core { |
| 17 public: | 17 public: |
| 18 explicit Core(const base::WeakPtr<MediaStreamUIProxy>& proxy, | 18 explicit Core(const base::WeakPtr<MediaStreamUIProxy>& proxy, |
| 19 RenderViewHostDelegate* test_render_delegate); | 19 RenderFrameHostDelegate* test_render_delegate); |
| 20 ~Core(); | 20 ~Core(); |
| 21 | 21 |
| 22 void RequestAccess(const MediaStreamRequest& request); | 22 void RequestAccess(const MediaStreamRequest& request); |
| 23 void OnStarted(gfx::NativeViewId* window_id); | 23 void OnStarted(gfx::NativeViewId* window_id); |
| 24 | 24 |
| 25 private: | 25 private: |
| 26 void ProcessAccessRequestResponse(const MediaStreamDevices& devices, | 26 void ProcessAccessRequestResponse(const MediaStreamDevices& devices, |
| 27 content::MediaStreamRequestResult result, | 27 content::MediaStreamRequestResult result, |
| 28 scoped_ptr<MediaStreamUI> stream_ui); | 28 scoped_ptr<MediaStreamUI> stream_ui); |
| 29 void ProcessStopRequestFromUI(); | 29 void ProcessStopRequestFromUI(); |
| 30 | 30 |
| 31 base::WeakPtr<MediaStreamUIProxy> proxy_; | 31 base::WeakPtr<MediaStreamUIProxy> proxy_; |
| 32 scoped_ptr<MediaStreamUI> ui_; | 32 scoped_ptr<MediaStreamUI> ui_; |
| 33 | 33 |
| 34 RenderViewHostDelegate* const test_render_delegate_; | 34 RenderFrameHostDelegate* const test_render_delegate_; |
| 35 | 35 |
| 36 // WeakPtr<> is used to RequestMediaAccessPermission() because there is no way | 36 // WeakPtr<> is used to RequestMediaAccessPermission() because there is no way |
| 37 // cancel media requests. | 37 // cancel media requests. |
| 38 base::WeakPtrFactory<Core> weak_factory_; | 38 base::WeakPtrFactory<Core> weak_factory_; |
| 39 | 39 |
| 40 DISALLOW_COPY_AND_ASSIGN(Core); | 40 DISALLOW_COPY_AND_ASSIGN(Core); |
| 41 }; | 41 }; |
| 42 | 42 |
| 43 MediaStreamUIProxy::Core::Core(const base::WeakPtr<MediaStreamUIProxy>& proxy, | 43 MediaStreamUIProxy::Core::Core(const base::WeakPtr<MediaStreamUIProxy>& proxy, |
| 44 RenderViewHostDelegate* test_render_delegate) | 44 RenderFrameHostDelegate* test_render_delegate) |
| 45 : proxy_(proxy), | 45 : proxy_(proxy), |
| 46 test_render_delegate_(test_render_delegate), | 46 test_render_delegate_(test_render_delegate), |
| 47 weak_factory_(this) { | 47 weak_factory_(this) { |
| 48 } | 48 } |
| 49 | 49 |
| 50 MediaStreamUIProxy::Core::~Core() { | 50 MediaStreamUIProxy::Core::~Core() { |
| 51 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 51 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 52 } | 52 } |
| 53 | 53 |
| 54 void MediaStreamUIProxy::Core::RequestAccess( | 54 void MediaStreamUIProxy::Core::RequestAccess( |
| 55 const MediaStreamRequest& request) { | 55 const MediaStreamRequest& request) { |
| 56 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 56 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 57 | 57 |
| 58 RenderViewHostDelegate* render_delegate; | 58 RenderFrameHostDelegate* render_delegate; |
| 59 | |
| 60 if (test_render_delegate_) { | 59 if (test_render_delegate_) { |
| 61 render_delegate = test_render_delegate_; | 60 render_delegate = test_render_delegate_; |
| 62 } else { | 61 } else { |
| 63 RenderViewHostImpl* host = RenderViewHostImpl::FromID( | 62 RenderFrameHostImpl* const host = RenderFrameHostImpl::FromID( |
| 64 request.render_process_id, request.render_view_id); | 63 request.render_process_id, request.render_frame_id); |
| 64 render_delegate = host ? host->delegate() : NULL; |
| 65 } |
| 65 | 66 |
| 66 // Tab may have gone away. | 67 // Tab may have gone away, or has no delegate from which to request access. |
| 67 if (!host || !host->GetDelegate()) { | 68 if (!render_delegate) { |
| 68 ProcessAccessRequestResponse( | 69 ProcessAccessRequestResponse( |
| 69 MediaStreamDevices(), | 70 MediaStreamDevices(), |
| 70 MEDIA_DEVICE_INVALID_STATE, | 71 MEDIA_DEVICE_INVALID_STATE, |
| 71 scoped_ptr<MediaStreamUI>()); | 72 scoped_ptr<MediaStreamUI>()); |
| 72 return; | 73 return; |
| 73 } | |
| 74 | |
| 75 render_delegate = host->GetDelegate(); | |
| 76 } | 74 } |
| 77 | 75 |
| 78 render_delegate->RequestMediaAccessPermission( | 76 render_delegate->RequestMediaAccessPermission( |
| 79 request, base::Bind(&Core::ProcessAccessRequestResponse, | 77 request, base::Bind(&Core::ProcessAccessRequestResponse, |
| 80 weak_factory_.GetWeakPtr())); | 78 weak_factory_.GetWeakPtr())); |
| 81 } | 79 } |
| 82 | 80 |
| 83 void MediaStreamUIProxy::Core::OnStarted(gfx::NativeViewId* window_id) { | 81 void MediaStreamUIProxy::Core::OnStarted(gfx::NativeViewId* window_id) { |
| 84 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 82 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 85 if (ui_) { | 83 if (ui_) { |
| (...skipping 23 matching lines...) Expand all Loading... |
| 109 base::Bind(&MediaStreamUIProxy::ProcessStopRequestFromUI, proxy_)); | 107 base::Bind(&MediaStreamUIProxy::ProcessStopRequestFromUI, proxy_)); |
| 110 } | 108 } |
| 111 | 109 |
| 112 // static | 110 // static |
| 113 scoped_ptr<MediaStreamUIProxy> MediaStreamUIProxy::Create() { | 111 scoped_ptr<MediaStreamUIProxy> MediaStreamUIProxy::Create() { |
| 114 return scoped_ptr<MediaStreamUIProxy>(new MediaStreamUIProxy(NULL)); | 112 return scoped_ptr<MediaStreamUIProxy>(new MediaStreamUIProxy(NULL)); |
| 115 } | 113 } |
| 116 | 114 |
| 117 // static | 115 // static |
| 118 scoped_ptr<MediaStreamUIProxy> MediaStreamUIProxy::CreateForTests( | 116 scoped_ptr<MediaStreamUIProxy> MediaStreamUIProxy::CreateForTests( |
| 119 RenderViewHostDelegate* render_delegate) { | 117 RenderFrameHostDelegate* render_delegate) { |
| 120 return scoped_ptr<MediaStreamUIProxy>( | 118 return scoped_ptr<MediaStreamUIProxy>( |
| 121 new MediaStreamUIProxy(render_delegate)); | 119 new MediaStreamUIProxy(render_delegate)); |
| 122 } | 120 } |
| 123 | 121 |
| 124 MediaStreamUIProxy::MediaStreamUIProxy( | 122 MediaStreamUIProxy::MediaStreamUIProxy( |
| 125 RenderViewHostDelegate* test_render_delegate) | 123 RenderFrameHostDelegate* test_render_delegate) |
| 126 : weak_factory_(this) { | 124 : weak_factory_(this) { |
| 127 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 125 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 128 core_.reset(new Core(weak_factory_.GetWeakPtr(), test_render_delegate)); | 126 core_.reset(new Core(weak_factory_.GetWeakPtr(), test_render_delegate)); |
| 129 } | 127 } |
| 130 | 128 |
| 131 MediaStreamUIProxy::~MediaStreamUIProxy() { | 129 MediaStreamUIProxy::~MediaStreamUIProxy() { |
| 132 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 130 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 133 BrowserThread::DeleteSoon(BrowserThread::UI, FROM_HERE, core_.release()); | 131 BrowserThread::DeleteSoon(BrowserThread::UI, FROM_HERE, core_.release()); |
| 134 } | 132 } |
| 135 | 133 |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 259 devices_to_use.empty() ? | 257 devices_to_use.empty() ? |
| 260 MEDIA_DEVICE_NO_HARDWARE : | 258 MEDIA_DEVICE_NO_HARDWARE : |
| 261 MEDIA_DEVICE_OK)); | 259 MEDIA_DEVICE_OK)); |
| 262 } | 260 } |
| 263 | 261 |
| 264 void FakeMediaStreamUIProxy::OnStarted( | 262 void FakeMediaStreamUIProxy::OnStarted( |
| 265 const base::Closure& stop_callback, | 263 const base::Closure& stop_callback, |
| 266 const WindowIdCallback& window_id_callback) {} | 264 const WindowIdCallback& window_id_callback) {} |
| 267 | 265 |
| 268 } // namespace content | 266 } // namespace content |
| OLD | NEW |