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 |