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

Side by Side Diff: content/browser/renderer_host/media/media_stream_ui_proxy.cc

Issue 13989003: Replace MediaStreamUIController with MediaStreamUIProxy. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 8 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "content/browser/renderer_host/media/media_stream_ui_proxy.h"
6
7 #include "content/browser/renderer_host/render_view_host_delegate.h"
8 #include "content/browser/renderer_host/render_view_host_impl.h"
9 #include "content/public/browser/browser_thread.h"
10 #include "media/video/capture/fake_video_capture_device.h"
11
12 namespace content {
13
14 class MediaStreamUIProxy::Core {
15 public:
16 explicit Core(const base::WeakPtr<MediaStreamUIProxy>& proxy);
17 ~Core();
18
19 void RequestAccess(const MediaStreamRequest& request);
20 void OnStarted();
21
22 private:
23 void ProcessAccessRequestResponse(const MediaStreamDevices& devices,
24 scoped_ptr<MediaStreamUI> stream_ui);
25 void ProcessStopRequestFromUI();
26
27 base::WeakPtr<MediaStreamUIProxy> proxy_;
28 scoped_ptr<MediaStreamUI> ui_;
29
30 DISALLOW_COPY_AND_ASSIGN(Core);
31 };
32
33 MediaStreamUIProxy::Core::Core(const base::WeakPtr<MediaStreamUIProxy>& proxy)
34 : proxy_(proxy) {
35 }
36
37 MediaStreamUIProxy::Core::~Core() {
38 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
39 }
40
41 void MediaStreamUIProxy::Core::RequestAccess(
42 const MediaStreamRequest& request) {
43 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
44
45 RenderViewHostImpl* host = RenderViewHostImpl::FromID(
46 request.render_process_id, request.render_view_id);
47
48 // Tab may have gone away.
49 if (!host || !host->GetDelegate()) {
50 ProcessAccessRequestResponse(
51 MediaStreamDevices(), scoped_ptr<MediaStreamUI>());
52 return;
53 }
54
55 host->GetDelegate()->RequestMediaAccessPermission(
56 request, base::Bind(&Core::ProcessAccessRequestResponse,
57 base::Unretained(this)));
58 }
59
60 void MediaStreamUIProxy::Core::OnStarted() {
61 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
62 if (ui_) {
63 ui_->OnStarted(base::Bind(&Core::ProcessStopRequestFromUI,
64 base::Unretained(this)));
65 }
66 }
67
68 void MediaStreamUIProxy::Core::ProcessAccessRequestResponse(
69 const MediaStreamDevices& devices,
70 scoped_ptr<MediaStreamUI> stream_ui) {
71 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
72
73 ui_ = stream_ui.Pass();
74 BrowserThread::PostTask(
75 BrowserThread::IO, FROM_HERE,
76 base::Bind(&MediaStreamUIProxy::ProcessAccessRequestResponse,
77 proxy_, devices));
78 }
79
80 void MediaStreamUIProxy::Core::ProcessStopRequestFromUI() {
81 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
82
83 BrowserThread::PostTask(
84 BrowserThread::IO, FROM_HERE,
85 base::Bind(&MediaStreamUIProxy::ProcessStopRequestFromUI, proxy_));
86 }
87
88 MediaStreamUIProxy::MediaStreamUIProxy()
89 : ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)) {
90 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
91 core_.reset(new Core(weak_factory_.GetWeakPtr()));
92 }
93
94 MediaStreamUIProxy::~MediaStreamUIProxy() {
95 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
96 BrowserThread::DeleteSoon(BrowserThread::UI, FROM_HERE, core_.release());
97 }
98
99 void MediaStreamUIProxy::RequestAccess(
100 const MediaStreamRequest& request,
101 const ResponseCallback& response_callback) {
102 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
103
104 response_callback_ = response_callback;
105 BrowserThread::PostTask(
106 BrowserThread::UI, FROM_HERE,
107 base::Bind(&Core::RequestAccess, base::Unretained(core_.get()), request));
108 }
109
110 void MediaStreamUIProxy::OnStarted(const base::Closure& stop_callback) {
111 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
112
113 stop_callback_ = stop_callback;
114 BrowserThread::PostTask(
115 BrowserThread::UI, FROM_HERE,
116 base::Bind(&Core::OnStarted, base::Unretained(core_.get())));
117 }
118
119 void MediaStreamUIProxy::ProcessAccessRequestResponse(
120 const MediaStreamDevices& devices) {
121 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
122 DCHECK(!response_callback_.is_null());
123
124 ResponseCallback cb = response_callback_;
125 response_callback_.Reset();
126 cb.Run(devices);
127 }
128
129 void MediaStreamUIProxy::ProcessStopRequestFromUI() {
130 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
131 DCHECK(!stop_callback_.is_null());
132
133 base::Closure cb = stop_callback_;
134 stop_callback_.Reset();
135 cb.Run();
136 }
137
138 FakeMediaStreamUIProxy::FakeMediaStreamUIProxy() {}
139 FakeMediaStreamUIProxy::~FakeMediaStreamUIProxy() {}
140
141 void FakeMediaStreamUIProxy::RequestAccess(
142 const MediaStreamRequest& request,
143 const ResponseCallback& response_callback) {
144 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
145
146 MediaStreamDevices devices;
147
148 if (IsAudioMediaType(request.audio_type)) {
149 devices.push_back(MediaStreamDevice(request.audio_type, "Mic", "Mic"));
150 }
151
152 if (IsVideoMediaType(request.video_type)) {
153 media::VideoCaptureDevice::Names device_names;
154 media::FakeVideoCaptureDevice::GetDeviceNames(&device_names);
155 if (!device_names.empty()) {
156 devices.push_back(MediaStreamDevice(
157 request.video_type,
158 device_names.front().unique_id,
159 device_names.front().device_name));
160 }
161 }
162
163 response_callback_ = response_callback;
164
165 BrowserThread::PostTask(
166 BrowserThread::IO, FROM_HERE,
167 base::Bind(&MediaStreamUIProxy::ProcessAccessRequestResponse,
168 weak_factory_.GetWeakPtr(), devices));
169 }
170
171 void FakeMediaStreamUIProxy::OnStarted(const base::Closure& stop_callback) {
172 }
173
174 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698