| 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 |