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