| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 <stddef.h> | 5 #include <stddef.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 | 7 |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 303 std::vector<MediaRouteResponseCallback> route_response_callbacks; | 303 std::vector<MediaRouteResponseCallback> route_response_callbacks; |
| 304 route_response_callbacks.push_back(base::Bind( | 304 route_response_callbacks.push_back(base::Bind( |
| 305 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); | 305 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); |
| 306 router()->CreateRoute( | 306 router()->CreateRoute( |
| 307 kSource, kSinkId, GURL(kOrigin), nullptr, route_response_callbacks, | 307 kSource, kSinkId, GURL(kOrigin), nullptr, route_response_callbacks, |
| 308 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true); | 308 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true); |
| 309 run_loop.Run(); | 309 run_loop.Run(); |
| 310 } | 310 } |
| 311 | 311 |
| 312 TEST_F(MediaRouterMojoImplTest, OffTheRecordRoutesTerminatedOnProfileShutdown) { | 312 TEST_F(MediaRouterMojoImplTest, OffTheRecordRoutesTerminatedOnProfileShutdown) { |
| 313 interfaces::MediaRoutePtr route = interfaces::MediaRoute::New(); |
| 314 route->media_source = kSource; |
| 315 route->media_sink_id = kSinkId; |
| 316 route->media_route_id = kRouteId; |
| 317 route->description = kDescription; |
| 318 route->is_local = true; |
| 319 route->for_display = true; |
| 320 route->off_the_record = true; |
| 321 |
| 313 EXPECT_CALL(mock_media_route_provider_, | 322 EXPECT_CALL(mock_media_route_provider_, |
| 314 CreateRoute(mojo::String(kSource), mojo::String(kSinkId), _, | 323 CreateRoute(mojo::String(kSource), mojo::String(kSinkId), _, |
| 315 mojo::String(kOrigin), kInvalidTabId, kTimeoutMillis, | 324 mojo::String(kOrigin), kInvalidTabId, kTimeoutMillis, |
| 316 true, _)) | 325 true, _)) |
| 317 .WillOnce(Invoke( | 326 .WillOnce(Invoke( |
| 318 [](const mojo::String& source, const mojo::String& sink, | 327 [](const mojo::String& source, const mojo::String& sink, |
| 319 const mojo::String& presentation_id, const mojo::String& origin, | 328 const mojo::String& presentation_id, const mojo::String& origin, |
| 320 int tab_id, int64_t timeout_millis, bool off_the_record, | 329 int tab_id, int64_t timeout_millis, bool off_the_record, |
| 321 const interfaces::MediaRouteProvider::CreateRouteCallback& cb) { | 330 const interfaces::MediaRouteProvider::CreateRouteCallback& cb) { |
| 322 interfaces::MediaRoutePtr route = interfaces::MediaRoute::New(); | 331 interfaces::MediaRoutePtr route = interfaces::MediaRoute::New(); |
| 323 route->media_source = kSource; | 332 route->media_source = kSource; |
| 324 route->media_sink_id = kSinkId; | 333 route->media_sink_id = kSinkId; |
| 325 route->media_route_id = kRouteId; | 334 route->media_route_id = kRouteId; |
| 326 route->description = kDescription; | 335 route->description = kDescription; |
| 327 route->is_local = true; | 336 route->is_local = true; |
| 328 route->for_display = true; | 337 route->for_display = true; |
| 329 route->off_the_record = true; | 338 route->off_the_record = true; |
| 330 cb.Run(std::move(route), mojo::String(), | 339 cb.Run(std::move(route), mojo::String(), |
| 331 interfaces::RouteRequestResultCode::OK); | 340 interfaces::RouteRequestResultCode::OK); |
| 332 })); | 341 })); |
| 333 base::RunLoop run_loop; | 342 base::RunLoop run_loop; |
| 334 router()->CreateRoute(kSource, kSinkId, GURL(kOrigin), nullptr, | 343 router()->CreateRoute(kSource, kSinkId, GURL(kOrigin), nullptr, |
| 335 std::vector<MediaRouteResponseCallback>(), | 344 std::vector<MediaRouteResponseCallback>(), |
| 336 base::TimeDelta::FromMilliseconds(kTimeoutMillis), | 345 base::TimeDelta::FromMilliseconds(kTimeoutMillis), |
| 337 true); | 346 true); |
| 347 mojo::Array<interfaces::MediaRoutePtr> mojo_routes(1); |
| 348 mojo_routes[0] = route->Clone(); |
| 349 router()->OnRoutesUpdated(std::move(mojo_routes), mojo::String(), |
| 350 mojo::Array<mojo::String>()); |
| 338 | 351 |
| 339 // TODO(mfoltz): Where possible, convert other tests to use RunUntilIdle | 352 // TODO(mfoltz): Where possible, convert other tests to use RunUntilIdle |
| 340 // instead of manually calling Run/Quit on the run loop. | 353 // instead of manually calling Run/Quit on the run loop. |
| 341 run_loop.RunUntilIdle(); | 354 run_loop.RunUntilIdle(); |
| 342 | 355 |
| 343 EXPECT_CALL(mock_media_route_provider_, | 356 EXPECT_CALL(mock_media_route_provider_, |
| 344 TerminateRoute(mojo::String(kRouteId))); | 357 TerminateRoute(mojo::String(kRouteId))); |
| 345 base::RunLoop run_loop2; | 358 base::RunLoop run_loop2; |
| 346 router()->OnOffTheRecordProfileShutdown(); | 359 router()->OnOffTheRecordProfileShutdown(); |
| 347 run_loop2.RunUntilIdle(); | 360 run_loop2.RunUntilIdle(); |
| 348 } | 361 } |
| 349 | 362 |
| 350 TEST_F(MediaRouterMojoImplTest, JoinRoute) { | 363 TEST_F(MediaRouterMojoImplTest, JoinRoute) { |
| 351 MediaSource media_source(kSource); | 364 MediaSource media_source(kSource); |
| 365 |
| 352 MediaRoute expected_route(kRouteId, media_source, kSinkId, "", false, "", | 366 MediaRoute expected_route(kRouteId, media_source, kSinkId, "", false, "", |
| 353 false); | 367 false); |
| 354 interfaces::MediaRoutePtr route = interfaces::MediaRoute::New(); | 368 interfaces::MediaRoutePtr route = interfaces::MediaRoute::New(); |
| 355 route->media_source = kSource; | 369 route->media_source = kSource; |
| 356 route->media_sink_id = kSinkId; | 370 route->media_sink_id = kSinkId; |
| 357 route->media_route_id = kRouteId; | 371 route->media_route_id = kRouteId; |
| 358 route->description = kDescription; | 372 route->description = kDescription; |
| 359 route->is_local = true; | 373 route->is_local = true; |
| 360 route->for_display = true; | 374 route->for_display = true; |
| 361 route->off_the_record = false; | 375 route->off_the_record = false; |
| 362 | 376 |
| 377 // Make sure the MR has received an update with the route, so it knows there |
| 378 // is a local route to join. |
| 379 mojo::Array<interfaces::MediaRoutePtr> mojo_routes(1); |
| 380 mojo_routes[0] = route->Clone(); |
| 381 router()->OnRoutesUpdated(std::move(mojo_routes), mojo::String(), |
| 382 mojo::Array<mojo::String>()); |
| 383 |
| 363 // Use a lambda function as an invocation target here to work around | 384 // Use a lambda function as an invocation target here to work around |
| 364 // a limitation with GMock::Invoke that prevents it from using move-only types | 385 // a limitation with GMock::Invoke that prevents it from using move-only types |
| 365 // in runnable parameter lists. | 386 // in runnable parameter lists. |
| 366 EXPECT_CALL( | 387 EXPECT_CALL( |
| 367 mock_media_route_provider_, | 388 mock_media_route_provider_, |
| 368 JoinRoute(mojo::String(kSource), mojo::String(kPresentationId), | 389 JoinRoute(mojo::String(kSource), mojo::String(kPresentationId), |
| 369 mojo::String(kOrigin), kInvalidTabId, kTimeoutMillis, _, _)) | 390 mojo::String(kOrigin), kInvalidTabId, kTimeoutMillis, _, _)) |
| 370 .WillOnce(Invoke([&route]( | 391 .WillOnce(Invoke([&route]( |
| 371 const mojo::String& source, const mojo::String& presentation_id, | 392 const mojo::String& source, const mojo::String& presentation_id, |
| 372 const mojo::String& origin, int tab_id, int64_t timeout_millis, | 393 const mojo::String& origin, int tab_id, int64_t timeout_millis, |
| (...skipping 10 matching lines...) Expand all Loading... |
| 383 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); | 404 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); |
| 384 std::vector<MediaRouteResponseCallback> route_response_callbacks; | 405 std::vector<MediaRouteResponseCallback> route_response_callbacks; |
| 385 route_response_callbacks.push_back(base::Bind( | 406 route_response_callbacks.push_back(base::Bind( |
| 386 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); | 407 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); |
| 387 router()->JoinRoute(kSource, kPresentationId, GURL(kOrigin), nullptr, | 408 router()->JoinRoute(kSource, kPresentationId, GURL(kOrigin), nullptr, |
| 388 route_response_callbacks, | 409 route_response_callbacks, |
| 389 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false); | 410 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false); |
| 390 run_loop.Run(); | 411 run_loop.Run(); |
| 391 } | 412 } |
| 392 | 413 |
| 393 TEST_F(MediaRouterMojoImplTest, JoinRouteFails) { | 414 TEST_F(MediaRouterMojoImplTest, JoinRouteNotFoundFails) { |
| 415 RouteResponseCallbackHandler handler; |
| 416 base::RunLoop run_loop; |
| 417 EXPECT_CALL(handler, DoInvoke(nullptr, "", "Route not found", |
| 418 RouteRequestResult::ROUTE_NOT_FOUND)) |
| 419 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); |
| 420 std::vector<MediaRouteResponseCallback> route_response_callbacks; |
| 421 route_response_callbacks.push_back(base::Bind( |
| 422 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); |
| 423 router()->JoinRoute(kSource, kPresentationId, GURL(kOrigin), nullptr, |
| 424 route_response_callbacks, |
| 425 base::TimeDelta::FromMilliseconds(kTimeoutMillis), false); |
| 426 run_loop.Run(); |
| 427 } |
| 428 |
| 429 TEST_F(MediaRouterMojoImplTest, JoinRouteTimedOutFails) { |
| 430 interfaces::MediaRoutePtr route = interfaces::MediaRoute::New(); |
| 431 route->media_source = kSource; |
| 432 route->media_sink_id = kSinkId; |
| 433 route->media_route_id = kRouteId; |
| 434 route->description = kDescription; |
| 435 route->is_local = true; |
| 436 route->for_display = true; |
| 437 route->off_the_record = false; |
| 438 |
| 439 // Make sure the MR has received an update with the route, so it knows there |
| 440 // is a local route to join. |
| 441 mojo::Array<interfaces::MediaRoutePtr> mojo_routes(1); |
| 442 mojo_routes[0] = route->Clone(); |
| 443 router()->OnRoutesUpdated(std::move(mojo_routes), mojo::String(), |
| 444 mojo::Array<mojo::String>()); |
| 445 |
| 394 EXPECT_CALL( | 446 EXPECT_CALL( |
| 395 mock_media_route_provider_, | 447 mock_media_route_provider_, |
| 396 JoinRoute(mojo::String(kSource), mojo::String(kPresentationId), | 448 JoinRoute(mojo::String(kSource), mojo::String(kPresentationId), |
| 397 mojo::String(kOrigin), kInvalidTabId, kTimeoutMillis, _, _)) | 449 mojo::String(kOrigin), kInvalidTabId, kTimeoutMillis, _, _)) |
| 398 .WillOnce(Invoke( | 450 .WillOnce(Invoke( |
| 399 [](const mojo::String& source, const mojo::String& presentation_id, | 451 [](const mojo::String& source, const mojo::String& presentation_id, |
| 400 const mojo::String& origin, int tab_id, int64_t timeout_millis, | 452 const mojo::String& origin, int tab_id, int64_t timeout_millis, |
| 401 bool off_the_record, | 453 bool off_the_record, |
| 402 const interfaces::MediaRouteProvider::JoinRouteCallback& cb) { | 454 const interfaces::MediaRouteProvider::JoinRouteCallback& cb) { |
| 403 cb.Run(interfaces::MediaRoutePtr(), mojo::String(kError), | 455 cb.Run(interfaces::MediaRoutePtr(), mojo::String(kError), |
| (...skipping 17 matching lines...) Expand all Loading... |
| 421 TEST_F(MediaRouterMojoImplTest, JoinRouteOffTheRecordMismatchFails) { | 473 TEST_F(MediaRouterMojoImplTest, JoinRouteOffTheRecordMismatchFails) { |
| 422 interfaces::MediaRoutePtr route = interfaces::MediaRoute::New(); | 474 interfaces::MediaRoutePtr route = interfaces::MediaRoute::New(); |
| 423 route->media_source = kSource; | 475 route->media_source = kSource; |
| 424 route->media_sink_id = kSinkId; | 476 route->media_sink_id = kSinkId; |
| 425 route->media_route_id = kRouteId; | 477 route->media_route_id = kRouteId; |
| 426 route->description = kDescription; | 478 route->description = kDescription; |
| 427 route->is_local = true; | 479 route->is_local = true; |
| 428 route->for_display = true; | 480 route->for_display = true; |
| 429 route->off_the_record = false; | 481 route->off_the_record = false; |
| 430 | 482 |
| 483 // Make sure the MR has received an update with the route, so it knows there |
| 484 // is a local route to join. |
| 485 mojo::Array<interfaces::MediaRoutePtr> mojo_routes(1); |
| 486 mojo_routes[0] = route->Clone(); |
| 487 router()->OnRoutesUpdated(std::move(mojo_routes), mojo::String(), |
| 488 mojo::Array<mojo::String>()); |
| 489 |
| 431 // Use a lambda function as an invocation target here to work around | 490 // Use a lambda function as an invocation target here to work around |
| 432 // a limitation with GMock::Invoke that prevents it from using move-only types | 491 // a limitation with GMock::Invoke that prevents it from using move-only types |
| 433 // in runnable parameter lists. | 492 // in runnable parameter lists. |
| 434 EXPECT_CALL( | 493 EXPECT_CALL( |
| 435 mock_media_route_provider_, | 494 mock_media_route_provider_, |
| 436 JoinRoute(mojo::String(kSource), mojo::String(kPresentationId), | 495 JoinRoute(mojo::String(kSource), mojo::String(kPresentationId), |
| 437 mojo::String(kOrigin), kInvalidTabId, kTimeoutMillis, true, _)) | 496 mojo::String(kOrigin), kInvalidTabId, kTimeoutMillis, true, _)) |
| 438 .WillOnce(Invoke([&route]( | 497 .WillOnce(Invoke([&route]( |
| 439 const mojo::String& source, const mojo::String& presentation_id, | 498 const mojo::String& source, const mojo::String& presentation_id, |
| 440 const mojo::String& origin, int tab_id, int64_t timeout_millis, | 499 const mojo::String& origin, int tab_id, int64_t timeout_millis, |
| (...skipping 737 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1178 .WillRepeatedly(Return(true)); | 1237 .WillRepeatedly(Return(true)); |
| 1179 EXPECT_CALL(mock_event_page_tracker_, WakeEventPage(extension_id(), _)) | 1238 EXPECT_CALL(mock_event_page_tracker_, WakeEventPage(extension_id(), _)) |
| 1180 .Times(2) | 1239 .Times(2) |
| 1181 .WillOnce(Return(true)) | 1240 .WillOnce(Return(true)) |
| 1182 .WillOnce(DoAll(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }), | 1241 .WillOnce(DoAll(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }), |
| 1183 Return(true))); | 1242 Return(true))); |
| 1184 router()->DetachRoute(kRouteId); | 1243 router()->DetachRoute(kRouteId); |
| 1185 router()->DetachRoute(kRouteId2); | 1244 router()->DetachRoute(kRouteId2); |
| 1186 run_loop.Run(); | 1245 run_loop.Run(); |
| 1187 EXPECT_CALL(mock_event_page_tracker_, IsEventPageSuspended(extension_id())) | 1246 EXPECT_CALL(mock_event_page_tracker_, IsEventPageSuspended(extension_id())) |
| 1188 .Times(1) | 1247 .Times(2) |
| 1189 .WillRepeatedly(Return(false)); | 1248 .WillRepeatedly(Return(false)); |
| 1190 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId))); | 1249 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId))); |
| 1191 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId2))); | 1250 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId2))); |
| 1192 ConnectProviderManagerService(); | 1251 ConnectProviderManagerService(); |
| 1193 ProcessEventLoop(); | 1252 ProcessEventLoop(); |
| 1194 } | 1253 } |
| 1195 | 1254 |
| 1196 TEST_F(MediaRouterMojoImplTest, SearchSinksAndCreateRoute) { | 1255 TEST_F(MediaRouterMojoImplTest, SearchSinksAndCreateRoute) { |
| 1197 std::string search_input("input"); | 1256 std::string search_input("input"); |
| 1198 std::string domain("google.com"); | 1257 std::string domain("google.com"); |
| (...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1628 EXPECT_CALL(mock_media_route_provider_, | 1687 EXPECT_CALL(mock_media_route_provider_, |
| 1629 UpdateMediaSinks(mojo::String(MediaSourceForDesktop().id()))) | 1688 UpdateMediaSinks(mojo::String(MediaSourceForDesktop().id()))) |
| 1630 .WillOnce(InvokeWithoutArgs([&run_loop2]() { | 1689 .WillOnce(InvokeWithoutArgs([&run_loop2]() { |
| 1631 run_loop2.Quit(); | 1690 run_loop2.Quit(); |
| 1632 })); | 1691 })); |
| 1633 | 1692 |
| 1634 run_loop2.Run(); | 1693 run_loop2.Run(); |
| 1635 } | 1694 } |
| 1636 | 1695 |
| 1637 } // namespace media_router | 1696 } // namespace media_router |
| OLD | NEW |