| 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 #include <string> | 7 #include <string> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 475 run_loop2.Run(); | 475 run_loop2.Run(); |
| 476 | 476 |
| 477 issue_observer1.UnregisterObserver(); | 477 issue_observer1.UnregisterObserver(); |
| 478 issue_observer2.UnregisterObserver(); | 478 issue_observer2.UnregisterObserver(); |
| 479 } | 479 } |
| 480 | 480 |
| 481 TEST_F(MediaRouterMojoImplTest, RegisterAndUnregisterMediaSinksObserver) { | 481 TEST_F(MediaRouterMojoImplTest, RegisterAndUnregisterMediaSinksObserver) { |
| 482 router()->OnSinkAvailabilityUpdated( | 482 router()->OnSinkAvailabilityUpdated( |
| 483 interfaces::MediaRouter::SinkAvailability::AVAILABLE); | 483 interfaces::MediaRouter::SinkAvailability::AVAILABLE); |
| 484 MediaSource media_source(kSource); | 484 MediaSource media_source(kSource); |
| 485 GURL origin("https://google.com"); |
| 485 | 486 |
| 486 // These should only be called once even if there is more than one observer | 487 // These should only be called once even if there is more than one observer |
| 487 // for a given source. | 488 // for a given source. |
| 488 EXPECT_CALL(mock_media_route_provider_, | 489 EXPECT_CALL(mock_media_route_provider_, |
| 489 StartObservingMediaSinks(mojo::String(kSource))); | 490 StartObservingMediaSinks(mojo::String(kSource))); |
| 490 EXPECT_CALL(mock_media_route_provider_, | 491 EXPECT_CALL(mock_media_route_provider_, |
| 491 StartObservingMediaSinks(mojo::String(kSource2))); | 492 StartObservingMediaSinks(mojo::String(kSource2))); |
| 492 | 493 |
| 493 scoped_ptr<MockMediaSinksObserver> sinks_observer( | 494 scoped_ptr<MockMediaSinksObserver> sinks_observer( |
| 494 new MockMediaSinksObserver(router(), media_source)); | 495 new MockMediaSinksObserver(router(), media_source, origin)); |
| 495 EXPECT_TRUE(sinks_observer->Init()); | 496 EXPECT_TRUE(sinks_observer->Init()); |
| 496 scoped_ptr<MockMediaSinksObserver> extra_sinks_observer( | 497 scoped_ptr<MockMediaSinksObserver> extra_sinks_observer( |
| 497 new MockMediaSinksObserver(router(), media_source)); | 498 new MockMediaSinksObserver(router(), media_source, origin)); |
| 498 EXPECT_TRUE(extra_sinks_observer->Init()); | 499 EXPECT_TRUE(extra_sinks_observer->Init()); |
| 499 scoped_ptr<MockMediaSinksObserver> unrelated_sinks_observer( | 500 scoped_ptr<MockMediaSinksObserver> unrelated_sinks_observer( |
| 500 new MockMediaSinksObserver(router(), MediaSource(kSource2))); | 501 new MockMediaSinksObserver(router(), MediaSource(kSource2), origin)); |
| 501 EXPECT_TRUE(unrelated_sinks_observer->Init()); | 502 EXPECT_TRUE(unrelated_sinks_observer->Init()); |
| 502 ProcessEventLoop(); | 503 ProcessEventLoop(); |
| 503 | 504 |
| 504 std::vector<MediaSink> expected_sinks; | 505 std::vector<MediaSink> expected_sinks; |
| 505 expected_sinks.push_back( | 506 expected_sinks.push_back( |
| 506 MediaSink(kSinkId, kSinkName, MediaSink::IconType::CAST)); | 507 MediaSink(kSinkId, kSinkName, MediaSink::IconType::CAST)); |
| 507 expected_sinks.push_back( | 508 expected_sinks.push_back( |
| 508 MediaSink(kSinkId2, kSinkName, MediaSink::IconType::CAST)); | 509 MediaSink(kSinkId2, kSinkName, MediaSink::IconType::CAST)); |
| 509 | 510 |
| 510 mojo::Array<interfaces::MediaSinkPtr> mojo_sinks(2); | 511 mojo::Array<interfaces::MediaSinkPtr> mojo_sinks(2); |
| 511 mojo_sinks[0] = interfaces::MediaSink::New(); | 512 mojo_sinks[0] = interfaces::MediaSink::New(); |
| 512 mojo_sinks[0]->sink_id = kSinkId; | 513 mojo_sinks[0]->sink_id = kSinkId; |
| 513 mojo_sinks[0]->name = kSinkName; | 514 mojo_sinks[0]->name = kSinkName; |
| 514 mojo_sinks[0]->icon_type = | 515 mojo_sinks[0]->icon_type = |
| 515 media_router::interfaces::MediaSink::IconType::CAST; | 516 media_router::interfaces::MediaSink::IconType::CAST; |
| 516 mojo_sinks[1] = interfaces::MediaSink::New(); | 517 mojo_sinks[1] = interfaces::MediaSink::New(); |
| 517 mojo_sinks[1]->sink_id = kSinkId2; | 518 mojo_sinks[1]->sink_id = kSinkId2; |
| 518 mojo_sinks[1]->name = kSinkName; | 519 mojo_sinks[1]->name = kSinkName; |
| 519 mojo_sinks[1]->icon_type = | 520 mojo_sinks[1]->icon_type = |
| 520 media_router::interfaces::MediaSink::IconType::CAST; | 521 media_router::interfaces::MediaSink::IconType::CAST; |
| 521 | 522 |
| 523 mojo::Array<mojo::String> mojo_origins(1); |
| 524 mojo_origins[0] = origin.spec(); |
| 525 |
| 522 base::RunLoop run_loop; | 526 base::RunLoop run_loop; |
| 523 EXPECT_CALL(*sinks_observer, OnSinksReceived(SequenceEquals(expected_sinks))); | 527 EXPECT_CALL(*sinks_observer, OnSinksReceived(SequenceEquals(expected_sinks))); |
| 524 EXPECT_CALL(*extra_sinks_observer, | 528 EXPECT_CALL(*extra_sinks_observer, |
| 525 OnSinksReceived(SequenceEquals(expected_sinks))) | 529 OnSinksReceived(SequenceEquals(expected_sinks))) |
| 526 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); | 530 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); |
| 527 media_router_proxy_->OnSinksReceived(media_source.id(), | 531 media_router_proxy_->OnSinksReceived(media_source.id(), std::move(mojo_sinks), |
| 528 std::move(mojo_sinks)); | 532 std::move(mojo_origins)); |
| 529 run_loop.Run(); | 533 run_loop.Run(); |
| 530 | 534 |
| 531 // Since the MediaRouterMojoImpl has already received results for | 535 // Since the MediaRouterMojoImpl has already received results for |
| 532 // |media_source|, return cached results to observers that are subsequently | 536 // |media_source|, return cached results to observers that are subsequently |
| 533 // registered. | 537 // registered. |
| 534 scoped_ptr<MockMediaSinksObserver> cached_sinks_observer( | 538 scoped_ptr<MockMediaSinksObserver> cached_sinks_observer( |
| 535 new MockMediaSinksObserver(router(), media_source)); | 539 new MockMediaSinksObserver(router(), media_source, origin)); |
| 536 EXPECT_CALL(*cached_sinks_observer, | 540 EXPECT_CALL(*cached_sinks_observer, |
| 537 OnSinksReceived(SequenceEquals(expected_sinks))); | 541 OnSinksReceived(SequenceEquals(expected_sinks))); |
| 538 EXPECT_TRUE(cached_sinks_observer->Init()); | 542 EXPECT_TRUE(cached_sinks_observer->Init()); |
| 539 | 543 |
| 544 // Different origin from cached result. Empty list will be returned. |
| 545 scoped_ptr<MockMediaSinksObserver> cached_sinks_observer2( |
| 546 new MockMediaSinksObserver(router(), media_source, |
| 547 GURL("https://youtube.com"))); |
| 548 EXPECT_CALL(*cached_sinks_observer2, OnSinksReceived(IsEmpty())); |
| 549 EXPECT_TRUE(cached_sinks_observer2->Init()); |
| 550 |
| 540 base::RunLoop run_loop2; | 551 base::RunLoop run_loop2; |
| 541 EXPECT_CALL(mock_media_route_provider_, | 552 EXPECT_CALL(mock_media_route_provider_, |
| 542 StopObservingMediaSinks(mojo::String(kSource))); | 553 StopObservingMediaSinks(mojo::String(kSource))); |
| 543 EXPECT_CALL(mock_media_route_provider_, | 554 EXPECT_CALL(mock_media_route_provider_, |
| 544 StopObservingMediaSinks(mojo::String(kSource2))) | 555 StopObservingMediaSinks(mojo::String(kSource2))) |
| 545 .WillOnce(InvokeWithoutArgs([&run_loop2]() { | 556 .WillOnce(InvokeWithoutArgs([&run_loop2]() { |
| 546 run_loop2.Quit(); | 557 run_loop2.Quit(); |
| 547 })); | 558 })); |
| 548 sinks_observer.reset(); | 559 sinks_observer.reset(); |
| 549 extra_sinks_observer.reset(); | 560 extra_sinks_observer.reset(); |
| 550 unrelated_sinks_observer.reset(); | 561 unrelated_sinks_observer.reset(); |
| 551 cached_sinks_observer.reset(); | 562 cached_sinks_observer.reset(); |
| 563 cached_sinks_observer2.reset(); |
| 552 run_loop2.Run(); | 564 run_loop2.Run(); |
| 553 } | 565 } |
| 554 | 566 |
| 555 TEST_F(MediaRouterMojoImplTest, | 567 TEST_F(MediaRouterMojoImplTest, |
| 556 RegisterMediaSinksObserverWithAvailabilityChange) { | 568 RegisterMediaSinksObserverWithAvailabilityChange) { |
| 569 GURL origin("https://google.com"); |
| 570 |
| 557 // When availability is UNAVAILABLE, no calls should be made to MRPM. | 571 // When availability is UNAVAILABLE, no calls should be made to MRPM. |
| 558 router()->OnSinkAvailabilityUpdated( | 572 router()->OnSinkAvailabilityUpdated( |
| 559 interfaces::MediaRouter::SinkAvailability::UNAVAILABLE); | 573 interfaces::MediaRouter::SinkAvailability::UNAVAILABLE); |
| 560 MediaSource media_source(kSource); | 574 MediaSource media_source(kSource); |
| 561 scoped_ptr<MockMediaSinksObserver> sinks_observer( | 575 scoped_ptr<MockMediaSinksObserver> sinks_observer( |
| 562 new MockMediaSinksObserver(router(), media_source)); | 576 new MockMediaSinksObserver(router(), media_source, origin)); |
| 563 EXPECT_CALL(*sinks_observer, OnSinksReceived(IsEmpty())); | 577 EXPECT_CALL(*sinks_observer, OnSinksReceived(IsEmpty())); |
| 564 EXPECT_TRUE(sinks_observer->Init()); | 578 EXPECT_TRUE(sinks_observer->Init()); |
| 565 MediaSource media_source2(kSource2); | 579 MediaSource media_source2(kSource2); |
| 566 scoped_ptr<MockMediaSinksObserver> sinks_observer2( | 580 scoped_ptr<MockMediaSinksObserver> sinks_observer2( |
| 567 new MockMediaSinksObserver(router(), media_source2)); | 581 new MockMediaSinksObserver(router(), media_source2, origin)); |
| 568 EXPECT_CALL(*sinks_observer2, OnSinksReceived(IsEmpty())); | 582 EXPECT_CALL(*sinks_observer2, OnSinksReceived(IsEmpty())); |
| 569 EXPECT_TRUE(sinks_observer2->Init()); | 583 EXPECT_TRUE(sinks_observer2->Init()); |
| 570 EXPECT_CALL(mock_media_route_provider_, | 584 EXPECT_CALL(mock_media_route_provider_, |
| 571 StartObservingMediaSinks(mojo::String(kSource))) | 585 StartObservingMediaSinks(mojo::String(kSource))) |
| 572 .Times(0); | 586 .Times(0); |
| 573 EXPECT_CALL(mock_media_route_provider_, | 587 EXPECT_CALL(mock_media_route_provider_, |
| 574 StartObservingMediaSinks(mojo::String(kSource2))) | 588 StartObservingMediaSinks(mojo::String(kSource2))) |
| 575 .Times(0); | 589 .Times(0); |
| 576 ProcessEventLoop(); | 590 ProcessEventLoop(); |
| 577 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_media_route_provider_)); | 591 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&mock_media_route_provider_)); |
| (...skipping 688 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1266 .WillRepeatedly(InvokeWithoutArgs([&run_loop2, &count]() { | 1280 .WillRepeatedly(InvokeWithoutArgs([&run_loop2, &count]() { |
| 1267 if (++count == MediaRouterMojoImpl::kMaxPendingRequests) | 1281 if (++count == MediaRouterMojoImpl::kMaxPendingRequests) |
| 1268 run_loop2.Quit(); | 1282 run_loop2.Quit(); |
| 1269 })); | 1283 })); |
| 1270 RegisterMediaRouteProvider(); | 1284 RegisterMediaRouteProvider(); |
| 1271 run_loop.Run(); | 1285 run_loop.Run(); |
| 1272 run_loop2.Run(); | 1286 run_loop2.Run(); |
| 1273 } | 1287 } |
| 1274 | 1288 |
| 1275 } // namespace media_router | 1289 } // namespace media_router |
| OLD | NEW |