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 <string> |
7 #include <utility> | 8 #include <utility> |
8 | 9 |
9 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
10 #include "base/run_loop.h" | 11 #include "base/run_loop.h" |
11 #include "content/browser/frame_host/render_frame_host_delegate.h" | 12 #include "content/browser/frame_host/render_frame_host_delegate.h" |
12 #include "content/public/test/test_browser_thread.h" | 13 #include "content/public/test/test_browser_thread.h" |
13 #include "testing/gmock/include/gmock/gmock.h" | 14 #include "testing/gmock/include/gmock/gmock.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
15 #include "ui/gfx/geometry/rect.h" | 16 #include "ui/gfx/geometry/rect.h" |
16 #include "url/gurl.h" | 17 #include "url/gurl.h" |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
91 } | 92 } |
92 | 93 |
93 TEST_F(MediaStreamUIProxyTest, Deny) { | 94 TEST_F(MediaStreamUIProxyTest, Deny) { |
94 std::unique_ptr<MediaStreamRequest> request(new MediaStreamRequest( | 95 std::unique_ptr<MediaStreamRequest> request(new MediaStreamRequest( |
95 0, 0, 0, GURL("http://origin/"), false, MEDIA_GENERATE_STREAM, | 96 0, 0, 0, GURL("http://origin/"), false, MEDIA_GENERATE_STREAM, |
96 std::string(), std::string(), MEDIA_DEVICE_AUDIO_CAPTURE, | 97 std::string(), std::string(), MEDIA_DEVICE_AUDIO_CAPTURE, |
97 MEDIA_DEVICE_VIDEO_CAPTURE, false)); | 98 MEDIA_DEVICE_VIDEO_CAPTURE, false)); |
98 MediaStreamRequest* request_ptr = request.get(); | 99 MediaStreamRequest* request_ptr = request.get(); |
99 proxy_->RequestAccess( | 100 proxy_->RequestAccess( |
100 std::move(request), | 101 std::move(request), |
101 base::Bind(&MockResponseCallback::OnAccessRequestResponse, | 102 base::BindOnce(&MockResponseCallback::OnAccessRequestResponse, |
102 base::Unretained(&response_callback_))); | 103 base::Unretained(&response_callback_))); |
103 MediaResponseCallback callback; | 104 MediaResponseCallback callback; |
104 EXPECT_CALL(delegate_, RequestMediaAccessPermission(SameRequest(request_ptr), | 105 EXPECT_CALL(delegate_, RequestMediaAccessPermission(SameRequest(request_ptr), |
105 _)) | 106 _)) |
106 .WillOnce(SaveArg<1>(&callback)); | 107 .WillOnce(SaveArg<1>(&callback)); |
107 base::RunLoop().RunUntilIdle(); | 108 base::RunLoop().RunUntilIdle(); |
108 ASSERT_FALSE(callback.is_null()); | 109 ASSERT_FALSE(callback.is_null()); |
109 | 110 |
110 MediaStreamDevices devices; | 111 MediaStreamDevices devices; |
111 callback.Run(devices, MEDIA_DEVICE_OK, std::unique_ptr<MediaStreamUI>()); | 112 callback.Run(devices, MEDIA_DEVICE_OK, std::unique_ptr<MediaStreamUI>()); |
112 | 113 |
113 MediaStreamDevices response; | 114 MediaStreamDevices response; |
114 EXPECT_CALL(response_callback_, OnAccessRequestResponse(_, _)) | 115 EXPECT_CALL(response_callback_, OnAccessRequestResponse(_, _)) |
115 .WillOnce(SaveArg<0>(&response)); | 116 .WillOnce(SaveArg<0>(&response)); |
116 base::RunLoop().RunUntilIdle(); | 117 base::RunLoop().RunUntilIdle(); |
117 | 118 |
118 EXPECT_TRUE(response.empty()); | 119 EXPECT_TRUE(response.empty()); |
119 } | 120 } |
120 | 121 |
121 TEST_F(MediaStreamUIProxyTest, AcceptAndStart) { | 122 TEST_F(MediaStreamUIProxyTest, AcceptAndStart) { |
122 std::unique_ptr<MediaStreamRequest> request(new MediaStreamRequest( | 123 std::unique_ptr<MediaStreamRequest> request(new MediaStreamRequest( |
123 0, 0, 0, GURL("http://origin/"), false, MEDIA_GENERATE_STREAM, | 124 0, 0, 0, GURL("http://origin/"), false, MEDIA_GENERATE_STREAM, |
124 std::string(), std::string(), MEDIA_DEVICE_AUDIO_CAPTURE, | 125 std::string(), std::string(), MEDIA_DEVICE_AUDIO_CAPTURE, |
125 MEDIA_DEVICE_VIDEO_CAPTURE, false)); | 126 MEDIA_DEVICE_VIDEO_CAPTURE, false)); |
126 MediaStreamRequest* request_ptr = request.get(); | 127 MediaStreamRequest* request_ptr = request.get(); |
127 proxy_->RequestAccess( | 128 proxy_->RequestAccess( |
128 std::move(request), | 129 std::move(request), |
129 base::Bind(&MockResponseCallback::OnAccessRequestResponse, | 130 base::BindOnce(&MockResponseCallback::OnAccessRequestResponse, |
130 base::Unretained(&response_callback_))); | 131 base::Unretained(&response_callback_))); |
131 MediaResponseCallback callback; | 132 MediaResponseCallback callback; |
132 EXPECT_CALL(delegate_, RequestMediaAccessPermission(SameRequest(request_ptr), | 133 EXPECT_CALL(delegate_, RequestMediaAccessPermission(SameRequest(request_ptr), |
133 _)) | 134 _)) |
134 .WillOnce(SaveArg<1>(&callback)); | 135 .WillOnce(SaveArg<1>(&callback)); |
135 base::RunLoop().RunUntilIdle(); | 136 base::RunLoop().RunUntilIdle(); |
136 ASSERT_FALSE(callback.is_null()); | 137 ASSERT_FALSE(callback.is_null()); |
137 | 138 |
138 MediaStreamDevices devices; | 139 MediaStreamDevices devices; |
139 devices.push_back( | 140 devices.push_back( |
140 MediaStreamDevice(MEDIA_DEVICE_AUDIO_CAPTURE, "Mic", "Mic")); | 141 MediaStreamDevice(MEDIA_DEVICE_AUDIO_CAPTURE, "Mic", "Mic")); |
(...skipping 14 matching lines...) Expand all Loading... |
155 | 156 |
156 // Verify that the proxy can be deleted before the request is processed. | 157 // Verify that the proxy can be deleted before the request is processed. |
157 TEST_F(MediaStreamUIProxyTest, DeleteBeforeAccepted) { | 158 TEST_F(MediaStreamUIProxyTest, DeleteBeforeAccepted) { |
158 std::unique_ptr<MediaStreamRequest> request(new MediaStreamRequest( | 159 std::unique_ptr<MediaStreamRequest> request(new MediaStreamRequest( |
159 0, 0, 0, GURL("http://origin/"), false, MEDIA_GENERATE_STREAM, | 160 0, 0, 0, GURL("http://origin/"), false, MEDIA_GENERATE_STREAM, |
160 std::string(), std::string(), MEDIA_DEVICE_AUDIO_CAPTURE, | 161 std::string(), std::string(), MEDIA_DEVICE_AUDIO_CAPTURE, |
161 MEDIA_DEVICE_VIDEO_CAPTURE, false)); | 162 MEDIA_DEVICE_VIDEO_CAPTURE, false)); |
162 MediaStreamRequest* request_ptr = request.get(); | 163 MediaStreamRequest* request_ptr = request.get(); |
163 proxy_->RequestAccess( | 164 proxy_->RequestAccess( |
164 std::move(request), | 165 std::move(request), |
165 base::Bind(&MockResponseCallback::OnAccessRequestResponse, | 166 base::BindOnce(&MockResponseCallback::OnAccessRequestResponse, |
166 base::Unretained(&response_callback_))); | 167 base::Unretained(&response_callback_))); |
167 MediaResponseCallback callback; | 168 MediaResponseCallback callback; |
168 EXPECT_CALL(delegate_, RequestMediaAccessPermission(SameRequest(request_ptr) | 169 EXPECT_CALL(delegate_, RequestMediaAccessPermission(SameRequest(request_ptr) |
169 , _)) | 170 , _)) |
170 .WillOnce(SaveArg<1>(&callback)); | 171 .WillOnce(SaveArg<1>(&callback)); |
171 base::RunLoop().RunUntilIdle(); | 172 base::RunLoop().RunUntilIdle(); |
172 ASSERT_FALSE(callback.is_null()); | 173 ASSERT_FALSE(callback.is_null()); |
173 | 174 |
174 proxy_.reset(); | 175 proxy_.reset(); |
175 | 176 |
176 MediaStreamDevices devices; | 177 MediaStreamDevices devices; |
177 std::unique_ptr<MediaStreamUI> ui; | 178 std::unique_ptr<MediaStreamUI> ui; |
178 callback.Run(devices, MEDIA_DEVICE_OK, std::move(ui)); | 179 callback.Run(devices, MEDIA_DEVICE_OK, std::move(ui)); |
179 } | 180 } |
180 | 181 |
181 TEST_F(MediaStreamUIProxyTest, StopFromUI) { | 182 TEST_F(MediaStreamUIProxyTest, StopFromUI) { |
182 std::unique_ptr<MediaStreamRequest> request(new MediaStreamRequest( | 183 std::unique_ptr<MediaStreamRequest> request(new MediaStreamRequest( |
183 0, 0, 0, GURL("http://origin/"), false, MEDIA_GENERATE_STREAM, | 184 0, 0, 0, GURL("http://origin/"), false, MEDIA_GENERATE_STREAM, |
184 std::string(), std::string(), MEDIA_DEVICE_AUDIO_CAPTURE, | 185 std::string(), std::string(), MEDIA_DEVICE_AUDIO_CAPTURE, |
185 MEDIA_DEVICE_VIDEO_CAPTURE, false)); | 186 MEDIA_DEVICE_VIDEO_CAPTURE, false)); |
186 MediaStreamRequest* request_ptr = request.get(); | 187 MediaStreamRequest* request_ptr = request.get(); |
187 proxy_->RequestAccess( | 188 proxy_->RequestAccess( |
188 std::move(request), | 189 std::move(request), |
189 base::Bind(&MockResponseCallback::OnAccessRequestResponse, | 190 base::BindOnce(&MockResponseCallback::OnAccessRequestResponse, |
190 base::Unretained(&response_callback_))); | 191 base::Unretained(&response_callback_))); |
191 MediaResponseCallback callback; | 192 MediaResponseCallback callback; |
192 EXPECT_CALL(delegate_, RequestMediaAccessPermission(SameRequest(request_ptr) | 193 EXPECT_CALL(delegate_, RequestMediaAccessPermission(SameRequest(request_ptr) |
193 , _)) | 194 , _)) |
194 .WillOnce(SaveArg<1>(&callback)); | 195 .WillOnce(SaveArg<1>(&callback)); |
195 base::RunLoop().RunUntilIdle(); | 196 base::RunLoop().RunUntilIdle(); |
196 ASSERT_FALSE(callback.is_null()); | 197 ASSERT_FALSE(callback.is_null()); |
197 | 198 |
198 base::Closure stop_callback; | 199 base::Closure stop_callback; |
199 | 200 |
200 MediaStreamDevices devices; | 201 MediaStreamDevices devices; |
201 devices.push_back( | 202 devices.push_back( |
202 MediaStreamDevice(MEDIA_DEVICE_AUDIO_CAPTURE, "Mic", "Mic")); | 203 MediaStreamDevice(MEDIA_DEVICE_AUDIO_CAPTURE, "Mic", "Mic")); |
203 std::unique_ptr<MockMediaStreamUI> ui(new MockMediaStreamUI()); | 204 std::unique_ptr<MockMediaStreamUI> ui(new MockMediaStreamUI()); |
204 EXPECT_CALL(*ui, OnStarted(_)) | 205 EXPECT_CALL(*ui, OnStarted(_)) |
205 .WillOnce(testing::DoAll(SaveArg<0>(&stop_callback), Return(0))); | 206 .WillOnce(testing::DoAll(SaveArg<0>(&stop_callback), Return(0))); |
206 callback.Run(devices, MEDIA_DEVICE_OK, std::move(ui)); | 207 callback.Run(devices, MEDIA_DEVICE_OK, std::move(ui)); |
207 | 208 |
208 MediaStreamDevices response; | 209 MediaStreamDevices response; |
209 EXPECT_CALL(response_callback_, OnAccessRequestResponse(_, _)) | 210 EXPECT_CALL(response_callback_, OnAccessRequestResponse(_, _)) |
210 .WillOnce(SaveArg<0>(&response)); | 211 .WillOnce(SaveArg<0>(&response)); |
211 base::RunLoop().RunUntilIdle(); | 212 base::RunLoop().RunUntilIdle(); |
212 | 213 |
213 EXPECT_FALSE(response.empty()); | 214 EXPECT_FALSE(response.empty()); |
214 | 215 |
215 MockStopStreamHandler stop_handler; | 216 MockStopStreamHandler stop_handler; |
216 proxy_->OnStarted(base::Bind(&MockStopStreamHandler::OnStop, | 217 proxy_->OnStarted(base::BindOnce(&MockStopStreamHandler::OnStop, |
217 base::Unretained(&stop_handler)), | 218 base::Unretained(&stop_handler)), |
218 MediaStreamUIProxy::WindowIdCallback()); | 219 MediaStreamUIProxy::WindowIdCallback()); |
219 base::RunLoop().RunUntilIdle(); | 220 base::RunLoop().RunUntilIdle(); |
220 | 221 |
221 ASSERT_FALSE(stop_callback.is_null()); | 222 ASSERT_FALSE(stop_callback.is_null()); |
222 EXPECT_CALL(stop_handler, OnStop()); | 223 EXPECT_CALL(stop_handler, OnStop()); |
223 stop_callback.Run(); | 224 stop_callback.Run(); |
224 base::RunLoop().RunUntilIdle(); | 225 base::RunLoop().RunUntilIdle(); |
225 } | 226 } |
226 | 227 |
227 TEST_F(MediaStreamUIProxyTest, WindowIdCallbackCalled) { | 228 TEST_F(MediaStreamUIProxyTest, WindowIdCallbackCalled) { |
228 std::unique_ptr<MediaStreamRequest> request(new MediaStreamRequest( | 229 std::unique_ptr<MediaStreamRequest> request(new MediaStreamRequest( |
229 0, 0, 0, GURL("http://origin/"), false, MEDIA_GENERATE_STREAM, | 230 0, 0, 0, GURL("http://origin/"), false, MEDIA_GENERATE_STREAM, |
230 std::string(), std::string(), MEDIA_NO_SERVICE, | 231 std::string(), std::string(), MEDIA_NO_SERVICE, |
231 MEDIA_DESKTOP_VIDEO_CAPTURE, false)); | 232 MEDIA_DESKTOP_VIDEO_CAPTURE, false)); |
232 MediaStreamRequest* request_ptr = request.get(); | 233 MediaStreamRequest* request_ptr = request.get(); |
233 | 234 |
234 proxy_->RequestAccess( | 235 proxy_->RequestAccess( |
235 std::move(request), | 236 std::move(request), |
236 base::Bind(&MockResponseCallback::OnAccessRequestResponse, | 237 base::BindOnce(&MockResponseCallback::OnAccessRequestResponse, |
237 base::Unretained(&response_callback_))); | 238 base::Unretained(&response_callback_))); |
238 MediaResponseCallback callback; | 239 MediaResponseCallback callback; |
239 EXPECT_CALL(delegate_, RequestMediaAccessPermission(SameRequest(request_ptr), | 240 EXPECT_CALL(delegate_, RequestMediaAccessPermission(SameRequest(request_ptr), |
240 _)) | 241 _)) |
241 .WillOnce(SaveArg<1>(&callback)); | 242 .WillOnce(SaveArg<1>(&callback)); |
242 base::RunLoop().RunUntilIdle(); | 243 base::RunLoop().RunUntilIdle(); |
243 | 244 |
244 const int kWindowId = 1; | 245 const int kWindowId = 1; |
245 std::unique_ptr<MockMediaStreamUI> ui(new MockMediaStreamUI()); | 246 std::unique_ptr<MockMediaStreamUI> ui(new MockMediaStreamUI()); |
246 EXPECT_CALL(*ui, OnStarted(_)).WillOnce(Return(kWindowId)); | 247 EXPECT_CALL(*ui, OnStarted(_)).WillOnce(Return(kWindowId)); |
247 | 248 |
248 callback.Run(MediaStreamDevices(), MEDIA_DEVICE_OK, std::move(ui)); | 249 callback.Run(MediaStreamDevices(), MEDIA_DEVICE_OK, std::move(ui)); |
249 EXPECT_CALL(response_callback_, OnAccessRequestResponse(_, _)); | 250 EXPECT_CALL(response_callback_, OnAccessRequestResponse(_, _)); |
250 | 251 |
251 MockStopStreamHandler handler; | 252 MockStopStreamHandler handler; |
252 EXPECT_CALL(handler, OnWindowId(kWindowId)); | 253 EXPECT_CALL(handler, OnWindowId(kWindowId)); |
253 | 254 |
254 proxy_->OnStarted( | 255 proxy_->OnStarted(base::BindOnce(&MockStopStreamHandler::OnStop, |
255 base::Bind(&MockStopStreamHandler::OnStop, base::Unretained(&handler)), | 256 base::Unretained(&handler)), |
256 base::Bind(&MockStopStreamHandler::OnWindowId, | 257 base::BindOnce(&MockStopStreamHandler::OnWindowId, |
257 base::Unretained(&handler))); | 258 base::Unretained(&handler))); |
258 base::RunLoop().RunUntilIdle(); | 259 base::RunLoop().RunUntilIdle(); |
259 } | 260 } |
260 | 261 |
261 } // namespace content | 262 } // namespace content |
OLD | NEW |