| 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" |
| 11 #include "base/bind_helpers.h" | 11 #include "base/bind_helpers.h" |
| 12 #include "base/macros.h" | 12 #include "base/macros.h" |
| 13 #include "base/memory/ref_counted.h" | 13 #include "base/memory/ref_counted.h" |
| 14 #include "base/memory/scoped_ptr.h" | 14 #include "base/memory/scoped_ptr.h" |
| 15 #include "base/run_loop.h" | 15 #include "base/run_loop.h" |
| 16 #include "base/synchronization/waitable_event.h" | 16 #include "base/synchronization/waitable_event.h" |
| 17 #include "base/test/histogram_tester.h" | 17 #include "base/test/histogram_tester.h" |
| 18 #include "base/thread_task_runner_handle.h" | 18 #include "base/thread_task_runner_handle.h" |
| 19 #include "chrome/browser/media/router/issue.h" | 19 #include "chrome/browser/media/router/issue.h" |
| 20 #include "chrome/browser/media/router/media_route.h" | 20 #include "chrome/browser/media/router/media_route.h" |
| 21 #include "chrome/browser/media/router/media_router_metrics.h" | |
| 22 #include "chrome/browser/media/router/media_router_mojo_test.h" | |
| 23 #include "chrome/browser/media/router/media_router_type_converters.h" | |
| 24 #include "chrome/browser/media/router/mock_media_router.h" | 21 #include "chrome/browser/media/router/mock_media_router.h" |
| 22 #include "chrome/browser/media/router/mojo/media_router_mojo_metrics.h" |
| 23 #include "chrome/browser/media/router/mojo/media_router_mojo_test.h" |
| 24 #include "chrome/browser/media/router/mojo/media_router_type_converters.h" |
| 25 #include "chrome/browser/media/router/presentation_session_messages_observer.h" | 25 #include "chrome/browser/media/router/presentation_session_messages_observer.h" |
| 26 #include "chrome/browser/media/router/test_helper.h" | 26 #include "chrome/browser/media/router/test_helper.h" |
| 27 #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 27 #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
| 28 #include "chrome/test/base/testing_browser_process.h" | 28 #include "chrome/test/base/testing_browser_process.h" |
| 29 #include "chrome/test/base/testing_profile.h" | 29 #include "chrome/test/base/testing_profile.h" |
| 30 #include "components/version_info/version_info.h" | 30 #include "components/version_info/version_info.h" |
| 31 #include "extensions/browser/extension_registry.h" | 31 #include "extensions/browser/extension_registry.h" |
| 32 #include "extensions/browser/process_manager.h" | 32 #include "extensions/browser/process_manager.h" |
| 33 #include "extensions/browser/process_manager_factory.h" | 33 #include "extensions/browser/process_manager_factory.h" |
| 34 #include "extensions/common/extension.h" | 34 #include "extensions/common/extension.h" |
| (...skipping 528 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 563 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); | 563 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); |
| 564 router()->ConnectRouteByRouteId( | 564 router()->ConnectRouteByRouteId( |
| 565 kSource, kRouteId, GURL(kOrigin), nullptr, route_response_callbacks, | 565 kSource, kRouteId, GURL(kOrigin), nullptr, route_response_callbacks, |
| 566 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true); | 566 base::TimeDelta::FromMilliseconds(kTimeoutMillis), true); |
| 567 run_loop.Run(); | 567 run_loop.Run(); |
| 568 } | 568 } |
| 569 | 569 |
| 570 TEST_F(MediaRouterMojoImplTest, DetachRoute) { | 570 TEST_F(MediaRouterMojoImplTest, DetachRoute) { |
| 571 base::RunLoop run_loop; | 571 base::RunLoop run_loop; |
| 572 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId))) | 572 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId))) |
| 573 .WillOnce(InvokeWithoutArgs([&run_loop]() { | 573 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); |
| 574 run_loop.Quit(); | |
| 575 })); | |
| 576 router()->DetachRoute(kRouteId); | 574 router()->DetachRoute(kRouteId); |
| 577 run_loop.Run(); | 575 run_loop.Run(); |
| 578 } | 576 } |
| 579 | 577 |
| 580 TEST_F(MediaRouterMojoImplTest, TerminateRoute) { | 578 TEST_F(MediaRouterMojoImplTest, TerminateRoute) { |
| 581 base::RunLoop run_loop; | 579 base::RunLoop run_loop; |
| 582 EXPECT_CALL(mock_media_route_provider_, | 580 EXPECT_CALL(mock_media_route_provider_, |
| 583 TerminateRoute(mojo::String(kRouteId))) | 581 TerminateRoute(mojo::String(kRouteId))) |
| 584 .WillOnce(InvokeWithoutArgs([&run_loop]() { | 582 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); |
| 585 run_loop.Quit(); | |
| 586 })); | |
| 587 router()->TerminateRoute(kRouteId); | 583 router()->TerminateRoute(kRouteId); |
| 588 run_loop.Run(); | 584 run_loop.Run(); |
| 589 } | 585 } |
| 590 | 586 |
| 591 TEST_F(MediaRouterMojoImplTest, HandleIssue) { | 587 TEST_F(MediaRouterMojoImplTest, HandleIssue) { |
| 592 MockIssuesObserver issue_observer1(router()); | 588 MockIssuesObserver issue_observer1(router()); |
| 593 MockIssuesObserver issue_observer2(router()); | 589 MockIssuesObserver issue_observer2(router()); |
| 594 issue_observer1.RegisterObserver(); | 590 issue_observer1.RegisterObserver(); |
| 595 issue_observer2.RegisterObserver(); | 591 issue_observer2.RegisterObserver(); |
| 596 | 592 |
| 597 interfaces::IssuePtr mojo_issue1 = CreateMojoIssue("title 1"); | 593 interfaces::IssuePtr mojo_issue1 = CreateMojoIssue("title 1"); |
| 598 const Issue& expected_issue1 = mojo_issue1.To<Issue>(); | 594 const Issue& expected_issue1 = mojo_issue1.To<Issue>(); |
| 599 | 595 |
| 600 const Issue* issue; | 596 const Issue* issue; |
| 601 EXPECT_CALL(issue_observer1, | 597 EXPECT_CALL(issue_observer1, |
| 602 OnIssueUpdated(Pointee(EqualsIssue(expected_issue1)))) | 598 OnIssueUpdated(Pointee(EqualsIssue(expected_issue1)))) |
| 603 .WillOnce(SaveArg<0>(&issue)); | 599 .WillOnce(SaveArg<0>(&issue)); |
| 604 base::RunLoop run_loop; | 600 base::RunLoop run_loop; |
| 605 EXPECT_CALL(issue_observer2, | 601 EXPECT_CALL(issue_observer2, |
| 606 OnIssueUpdated(Pointee(EqualsIssue(expected_issue1)))) | 602 OnIssueUpdated(Pointee(EqualsIssue(expected_issue1)))) |
| 607 .WillOnce(InvokeWithoutArgs([&run_loop]() { | 603 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); |
| 608 run_loop.Quit(); | |
| 609 })); | |
| 610 media_router_proxy_->OnIssue(std::move(mojo_issue1)); | 604 media_router_proxy_->OnIssue(std::move(mojo_issue1)); |
| 611 run_loop.Run(); | 605 run_loop.Run(); |
| 612 | 606 |
| 613 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&issue_observer1)); | 607 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&issue_observer1)); |
| 614 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&issue_observer2)); | 608 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&issue_observer2)); |
| 615 | 609 |
| 616 EXPECT_CALL(issue_observer1, OnIssueUpdated(nullptr)); | 610 EXPECT_CALL(issue_observer1, OnIssueUpdated(nullptr)); |
| 617 EXPECT_CALL(issue_observer2, OnIssueUpdated(nullptr)); | 611 EXPECT_CALL(issue_observer2, OnIssueUpdated(nullptr)); |
| 618 | 612 |
| 619 router()->ClearIssue(issue->id()); | 613 router()->ClearIssue(issue->id()); |
| 620 | 614 |
| 621 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&issue_observer1)); | 615 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&issue_observer1)); |
| 622 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&issue_observer2)); | 616 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&issue_observer2)); |
| 623 router()->UnregisterIssuesObserver(&issue_observer1); | 617 router()->UnregisterIssuesObserver(&issue_observer1); |
| 624 interfaces::IssuePtr mojo_issue2 = CreateMojoIssue("title 2"); | 618 interfaces::IssuePtr mojo_issue2 = CreateMojoIssue("title 2"); |
| 625 const Issue& expected_issue2 = mojo_issue2.To<Issue>(); | 619 const Issue& expected_issue2 = mojo_issue2.To<Issue>(); |
| 626 | 620 |
| 627 EXPECT_CALL(issue_observer2, | 621 EXPECT_CALL(issue_observer2, |
| 628 OnIssueUpdated(Pointee(EqualsIssue(expected_issue2)))); | 622 OnIssueUpdated(Pointee(EqualsIssue(expected_issue2)))); |
| 629 router()->AddIssue(expected_issue2); | 623 router()->AddIssue(expected_issue2); |
| 630 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&issue_observer2)); | 624 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&issue_observer2)); |
| 631 | 625 |
| 632 EXPECT_CALL(issue_observer2, OnIssueUpdated(nullptr)); | 626 EXPECT_CALL(issue_observer2, OnIssueUpdated(nullptr)); |
| 633 router()->ClearIssue(issue->id()); | 627 router()->ClearIssue(issue->id()); |
| 634 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&issue_observer2)); | 628 EXPECT_TRUE(Mock::VerifyAndClearExpectations(&issue_observer2)); |
| 635 | 629 |
| 636 base::RunLoop run_loop2; | 630 base::RunLoop run_loop2; |
| 637 EXPECT_CALL(issue_observer2, | 631 EXPECT_CALL(issue_observer2, |
| 638 OnIssueUpdated(Pointee(EqualsIssue(expected_issue2)))) | 632 OnIssueUpdated(Pointee(EqualsIssue(expected_issue2)))) |
| 639 .WillOnce(InvokeWithoutArgs([&run_loop2]() { | 633 .WillOnce(InvokeWithoutArgs([&run_loop2]() { run_loop2.Quit(); })); |
| 640 run_loop2.Quit(); | |
| 641 })); | |
| 642 media_router_proxy_->OnIssue(std::move(mojo_issue2)); | 634 media_router_proxy_->OnIssue(std::move(mojo_issue2)); |
| 643 run_loop2.Run(); | 635 run_loop2.Run(); |
| 644 | 636 |
| 645 issue_observer1.UnregisterObserver(); | 637 issue_observer1.UnregisterObserver(); |
| 646 issue_observer2.UnregisterObserver(); | 638 issue_observer2.UnregisterObserver(); |
| 647 } | 639 } |
| 648 | 640 |
| 649 TEST_F(MediaRouterMojoImplTest, RegisterAndUnregisterMediaSinksObserver) { | 641 TEST_F(MediaRouterMojoImplTest, RegisterAndUnregisterMediaSinksObserver) { |
| 650 router()->OnSinkAvailabilityUpdated( | 642 router()->OnSinkAvailabilityUpdated( |
| 651 interfaces::MediaRouter::SinkAvailability::AVAILABLE); | 643 interfaces::MediaRouter::SinkAvailability::AVAILABLE); |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 714 new MockMediaSinksObserver(router(), media_source, | 706 new MockMediaSinksObserver(router(), media_source, |
| 715 GURL("https://youtube.com"))); | 707 GURL("https://youtube.com"))); |
| 716 EXPECT_CALL(*cached_sinks_observer2, OnSinksReceived(IsEmpty())); | 708 EXPECT_CALL(*cached_sinks_observer2, OnSinksReceived(IsEmpty())); |
| 717 EXPECT_TRUE(cached_sinks_observer2->Init()); | 709 EXPECT_TRUE(cached_sinks_observer2->Init()); |
| 718 | 710 |
| 719 base::RunLoop run_loop2; | 711 base::RunLoop run_loop2; |
| 720 EXPECT_CALL(mock_media_route_provider_, | 712 EXPECT_CALL(mock_media_route_provider_, |
| 721 StopObservingMediaSinks(mojo::String(kSource))); | 713 StopObservingMediaSinks(mojo::String(kSource))); |
| 722 EXPECT_CALL(mock_media_route_provider_, | 714 EXPECT_CALL(mock_media_route_provider_, |
| 723 StopObservingMediaSinks(mojo::String(kSource2))) | 715 StopObservingMediaSinks(mojo::String(kSource2))) |
| 724 .WillOnce(InvokeWithoutArgs([&run_loop2]() { | 716 .WillOnce(InvokeWithoutArgs([&run_loop2]() { run_loop2.Quit(); })); |
| 725 run_loop2.Quit(); | |
| 726 })); | |
| 727 sinks_observer.reset(); | 717 sinks_observer.reset(); |
| 728 extra_sinks_observer.reset(); | 718 extra_sinks_observer.reset(); |
| 729 unrelated_sinks_observer.reset(); | 719 unrelated_sinks_observer.reset(); |
| 730 cached_sinks_observer.reset(); | 720 cached_sinks_observer.reset(); |
| 731 cached_sinks_observer2.reset(); | 721 cached_sinks_observer2.reset(); |
| 732 run_loop2.Run(); | 722 run_loop2.Run(); |
| 733 } | 723 } |
| 734 | 724 |
| 735 TEST_F(MediaRouterMojoImplTest, | 725 TEST_F(MediaRouterMojoImplTest, |
| 736 RegisterMediaSinksObserverWithAvailabilityChange) { | 726 RegisterMediaSinksObserverWithAvailabilityChange) { |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 802 StopObservingMediaSinks(mojo::String(kSource2))); | 792 StopObservingMediaSinks(mojo::String(kSource2))); |
| 803 sinks_observer2.reset(); | 793 sinks_observer2.reset(); |
| 804 ProcessEventLoop(); | 794 ProcessEventLoop(); |
| 805 } | 795 } |
| 806 | 796 |
| 807 TEST_F(MediaRouterMojoImplTest, RegisterAndUnregisterMediaRoutesObserver) { | 797 TEST_F(MediaRouterMojoImplTest, RegisterAndUnregisterMediaRoutesObserver) { |
| 808 MockMediaRouter mock_router; | 798 MockMediaRouter mock_router; |
| 809 MediaSource media_source(kSource); | 799 MediaSource media_source(kSource); |
| 810 MediaSource different_media_source(kSource2); | 800 MediaSource different_media_source(kSource2); |
| 811 EXPECT_CALL(mock_media_route_provider_, | 801 EXPECT_CALL(mock_media_route_provider_, |
| 812 StartObservingMediaRoutes(mojo::String(media_source.id()))).Times(2); | 802 StartObservingMediaRoutes(mojo::String(media_source.id()))) |
| 813 EXPECT_CALL(mock_media_route_provider_, | 803 .Times(2); |
| 814 StartObservingMediaRoutes( | 804 EXPECT_CALL( |
| 815 mojo::String(different_media_source.id()))).Times(1); | 805 mock_media_route_provider_, |
| 806 StartObservingMediaRoutes(mojo::String(different_media_source.id()))) |
| 807 .Times(1); |
| 816 | 808 |
| 817 MediaRoutesObserver* observer_captured; | 809 MediaRoutesObserver* observer_captured; |
| 818 EXPECT_CALL(mock_router, RegisterMediaRoutesObserver(_)) | 810 EXPECT_CALL(mock_router, RegisterMediaRoutesObserver(_)) |
| 819 .Times(3) | 811 .Times(3) |
| 820 .WillRepeatedly(SaveArg<0>(&observer_captured)); | 812 .WillRepeatedly(SaveArg<0>(&observer_captured)); |
| 821 MockMediaRoutesObserver routes_observer(&mock_router, media_source.id()); | 813 MockMediaRoutesObserver routes_observer(&mock_router, media_source.id()); |
| 822 EXPECT_EQ(observer_captured, &routes_observer); | 814 EXPECT_EQ(observer_captured, &routes_observer); |
| 823 MockMediaRoutesObserver extra_routes_observer(&mock_router, | 815 MockMediaRoutesObserver extra_routes_observer(&mock_router, |
| 824 media_source.id()); | 816 media_source.id()); |
| 825 EXPECT_EQ(observer_captured, &extra_routes_observer); | 817 EXPECT_EQ(observer_captured, &extra_routes_observer); |
| 826 MockMediaRoutesObserver different_routes_observer(&mock_router, | 818 MockMediaRoutesObserver different_routes_observer( |
| 827 different_media_source.id()); | 819 &mock_router, different_media_source.id()); |
| 828 EXPECT_EQ(observer_captured, &different_routes_observer); | 820 EXPECT_EQ(observer_captured, &different_routes_observer); |
| 829 router()->RegisterMediaRoutesObserver(&routes_observer); | 821 router()->RegisterMediaRoutesObserver(&routes_observer); |
| 830 router()->RegisterMediaRoutesObserver(&extra_routes_observer); | 822 router()->RegisterMediaRoutesObserver(&extra_routes_observer); |
| 831 router()->RegisterMediaRoutesObserver(&different_routes_observer); | 823 router()->RegisterMediaRoutesObserver(&different_routes_observer); |
| 832 | 824 |
| 833 std::vector<MediaRoute> expected_routes; | 825 std::vector<MediaRoute> expected_routes; |
| 834 expected_routes.push_back(MediaRoute(kRouteId, media_source, kSinkId, | 826 expected_routes.push_back(MediaRoute(kRouteId, media_source, kSinkId, |
| 835 kDescription, false, "", false)); | 827 kDescription, false, "", false)); |
| 836 MediaRoute incognito_expected_route(kRouteId2, media_source, kSinkId, | 828 MediaRoute incognito_expected_route(kRouteId2, media_source, kSinkId, |
| 837 kDescription, false, "", false); | 829 kDescription, false, "", false); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 854 mojo_routes[0]->is_local = false; | 846 mojo_routes[0]->is_local = false; |
| 855 mojo_routes[0]->off_the_record = false; | 847 mojo_routes[0]->off_the_record = false; |
| 856 mojo_routes[1] = interfaces::MediaRoute::New(); | 848 mojo_routes[1] = interfaces::MediaRoute::New(); |
| 857 mojo_routes[1]->media_route_id = kRouteId2; | 849 mojo_routes[1]->media_route_id = kRouteId2; |
| 858 mojo_routes[1]->media_source = kSource; | 850 mojo_routes[1]->media_source = kSource; |
| 859 mojo_routes[1]->media_sink_id = kSinkId; | 851 mojo_routes[1]->media_sink_id = kSinkId; |
| 860 mojo_routes[1]->description = kDescription; | 852 mojo_routes[1]->description = kDescription; |
| 861 mojo_routes[1]->is_local = false; | 853 mojo_routes[1]->is_local = false; |
| 862 mojo_routes[1]->off_the_record = true; | 854 mojo_routes[1]->off_the_record = true; |
| 863 | 855 |
| 864 EXPECT_CALL(routes_observer, | 856 EXPECT_CALL(routes_observer, OnRoutesUpdated(SequenceEquals(expected_routes), |
| 865 OnRoutesUpdated(SequenceEquals(expected_routes), | 857 expected_joinable_route_ids)); |
| 866 expected_joinable_route_ids)); | |
| 867 EXPECT_CALL(extra_routes_observer, | 858 EXPECT_CALL(extra_routes_observer, |
| 868 OnRoutesUpdated(SequenceEquals(expected_routes), | 859 OnRoutesUpdated(SequenceEquals(expected_routes), |
| 869 expected_joinable_route_ids)); | 860 expected_joinable_route_ids)); |
| 870 EXPECT_CALL(different_routes_observer, | 861 EXPECT_CALL(different_routes_observer, |
| 871 OnRoutesUpdated(SequenceEquals(expected_routes), | 862 OnRoutesUpdated(SequenceEquals(expected_routes), |
| 872 expected_joinable_route_ids)).Times(0); | 863 expected_joinable_route_ids)) |
| 864 .Times(0); |
| 873 media_router_proxy_->OnRoutesUpdated(std::move(mojo_routes), | 865 media_router_proxy_->OnRoutesUpdated(std::move(mojo_routes), |
| 874 media_source.id(), | 866 media_source.id(), |
| 875 std::move(mojo_joinable_routes)); | 867 std::move(mojo_joinable_routes)); |
| 876 ProcessEventLoop(); | 868 ProcessEventLoop(); |
| 877 | 869 |
| 878 EXPECT_CALL(mock_router, UnregisterMediaRoutesObserver(&routes_observer)); | 870 EXPECT_CALL(mock_router, UnregisterMediaRoutesObserver(&routes_observer)); |
| 879 EXPECT_CALL(mock_router, | 871 EXPECT_CALL(mock_router, |
| 880 UnregisterMediaRoutesObserver(&extra_routes_observer)); | 872 UnregisterMediaRoutesObserver(&extra_routes_observer)); |
| 881 EXPECT_CALL(mock_router, | 873 EXPECT_CALL(mock_router, |
| 882 UnregisterMediaRoutesObserver(&different_routes_observer)); | 874 UnregisterMediaRoutesObserver(&different_routes_observer)); |
| 883 router()->UnregisterMediaRoutesObserver(&routes_observer); | 875 router()->UnregisterMediaRoutesObserver(&routes_observer); |
| 884 router()->UnregisterMediaRoutesObserver(&extra_routes_observer); | 876 router()->UnregisterMediaRoutesObserver(&extra_routes_observer); |
| 885 router()->UnregisterMediaRoutesObserver(&different_routes_observer); | 877 router()->UnregisterMediaRoutesObserver(&different_routes_observer); |
| 886 EXPECT_CALL(mock_media_route_provider_, | 878 EXPECT_CALL(mock_media_route_provider_, |
| 887 StopObservingMediaRoutes( | 879 StopObservingMediaRoutes(mojo::String(media_source.id()))) |
| 888 mojo::String(media_source.id()))).Times(1); | 880 .Times(1); |
| 889 EXPECT_CALL(mock_media_route_provider_, | 881 EXPECT_CALL( |
| 890 StopObservingMediaRoutes( | 882 mock_media_route_provider_, |
| 891 mojo::String(different_media_source.id()))); | 883 StopObservingMediaRoutes(mojo::String(different_media_source.id()))); |
| 892 ProcessEventLoop(); | 884 ProcessEventLoop(); |
| 893 } | 885 } |
| 894 | 886 |
| 895 TEST_F(MediaRouterMojoImplTest, SendRouteMessage) { | 887 TEST_F(MediaRouterMojoImplTest, SendRouteMessage) { |
| 896 EXPECT_CALL( | 888 EXPECT_CALL( |
| 897 mock_media_route_provider_, | 889 mock_media_route_provider_, |
| 898 SendRouteMessage(mojo::String(kRouteId), mojo::String(kMessage), _)) | 890 SendRouteMessage(mojo::String(kRouteId), mojo::String(kMessage), _)) |
| 899 .WillOnce(Invoke([]( | 891 .WillOnce(Invoke([]( |
| 900 const MediaRoute::Id& route_id, const std::string& message, | 892 const MediaRoute::Id& route_id, const std::string& message, |
| 901 const interfaces::MediaRouteProvider::SendRouteMessageCallback& cb) { | 893 const interfaces::MediaRouteProvider::SendRouteMessageCallback& cb) { |
| 902 cb.Run(true); | 894 cb.Run(true); |
| 903 })); | 895 })); |
| 904 | 896 |
| 905 base::RunLoop run_loop; | 897 base::RunLoop run_loop; |
| 906 SendMessageCallbackHandler handler; | 898 SendMessageCallbackHandler handler; |
| 907 EXPECT_CALL(handler, Invoke(true)) | 899 EXPECT_CALL(handler, Invoke(true)) |
| 908 .WillOnce(InvokeWithoutArgs([&run_loop]() { | 900 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); |
| 909 run_loop.Quit(); | |
| 910 })); | |
| 911 router()->SendRouteMessage(kRouteId, kMessage, | 901 router()->SendRouteMessage(kRouteId, kMessage, |
| 912 base::Bind(&SendMessageCallbackHandler::Invoke, | 902 base::Bind(&SendMessageCallbackHandler::Invoke, |
| 913 base::Unretained(&handler))); | 903 base::Unretained(&handler))); |
| 914 run_loop.Run(); | 904 run_loop.Run(); |
| 915 } | 905 } |
| 916 | 906 |
| 917 TEST_F(MediaRouterMojoImplTest, SendRouteBinaryMessage) { | 907 TEST_F(MediaRouterMojoImplTest, SendRouteBinaryMessage) { |
| 918 scoped_ptr<std::vector<uint8_t>> expected_binary_data( | 908 scoped_ptr<std::vector<uint8_t>> expected_binary_data( |
| 919 new std::vector<uint8_t>(kBinaryMessage, | 909 new std::vector<uint8_t>(kBinaryMessage, |
| 920 kBinaryMessage + arraysize(kBinaryMessage))); | 910 kBinaryMessage + arraysize(kBinaryMessage))); |
| 921 | 911 |
| 922 EXPECT_CALL(mock_media_route_provider_, | 912 EXPECT_CALL(mock_media_route_provider_, |
| 923 SendRouteBinaryMessageInternal(mojo::String(kRouteId), _, _)) | 913 SendRouteBinaryMessageInternal(mojo::String(kRouteId), _, _)) |
| 924 .WillOnce(Invoke([]( | 914 .WillOnce(Invoke([]( |
| 925 const MediaRoute::Id& route_id, const std::vector<uint8_t>& data, | 915 const MediaRoute::Id& route_id, const std::vector<uint8_t>& data, |
| 926 const interfaces::MediaRouteProvider::SendRouteMessageCallback& cb) { | 916 const interfaces::MediaRouteProvider::SendRouteMessageCallback& cb) { |
| 927 EXPECT_EQ( | 917 EXPECT_EQ( |
| 928 0, memcmp(kBinaryMessage, &(data[0]), arraysize(kBinaryMessage))); | 918 0, memcmp(kBinaryMessage, &(data[0]), arraysize(kBinaryMessage))); |
| 929 cb.Run(true); | 919 cb.Run(true); |
| 930 })); | 920 })); |
| 931 | 921 |
| 932 base::RunLoop run_loop; | 922 base::RunLoop run_loop; |
| 933 SendMessageCallbackHandler handler; | 923 SendMessageCallbackHandler handler; |
| 934 EXPECT_CALL(handler, Invoke(true)) | 924 EXPECT_CALL(handler, Invoke(true)) |
| 935 .WillOnce(InvokeWithoutArgs([&run_loop]() { | 925 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); |
| 936 run_loop.Quit(); | |
| 937 })); | |
| 938 router()->SendRouteBinaryMessage( | 926 router()->SendRouteBinaryMessage( |
| 939 kRouteId, std::move(expected_binary_data), | 927 kRouteId, std::move(expected_binary_data), |
| 940 base::Bind(&SendMessageCallbackHandler::Invoke, | 928 base::Bind(&SendMessageCallbackHandler::Invoke, |
| 941 base::Unretained(&handler))); | 929 base::Unretained(&handler))); |
| 942 run_loop.Run(); | 930 run_loop.Run(); |
| 943 } | 931 } |
| 944 | 932 |
| 945 TEST_F(MediaRouterMojoImplTest, PresentationSessionMessagesSingleObserver) { | 933 TEST_F(MediaRouterMojoImplTest, PresentationSessionMessagesSingleObserver) { |
| 946 mojo::Array<interfaces::RouteMessagePtr> mojo_messages(2); | 934 mojo::Array<interfaces::RouteMessagePtr> mojo_messages(2); |
| 947 mojo_messages[0] = interfaces::RouteMessage::New(); | 935 mojo_messages[0] = interfaces::RouteMessage::New(); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 962 content::PresentationMessageType::ARRAY_BUFFER)); | 950 content::PresentationMessageType::ARRAY_BUFFER)); |
| 963 message->data.reset(new std::vector<uint8_t>(1, 1)); | 951 message->data.reset(new std::vector<uint8_t>(1, 1)); |
| 964 expected_messages.push_back(std::move(message)); | 952 expected_messages.push_back(std::move(message)); |
| 965 | 953 |
| 966 base::RunLoop run_loop; | 954 base::RunLoop run_loop; |
| 967 MediaRoute::Id expected_route_id("foo"); | 955 MediaRoute::Id expected_route_id("foo"); |
| 968 interfaces::MediaRouteProvider::ListenForRouteMessagesCallback mojo_callback; | 956 interfaces::MediaRouteProvider::ListenForRouteMessagesCallback mojo_callback; |
| 969 EXPECT_CALL(mock_media_route_provider_, | 957 EXPECT_CALL(mock_media_route_provider_, |
| 970 ListenForRouteMessages(Eq(expected_route_id), _)) | 958 ListenForRouteMessages(Eq(expected_route_id), _)) |
| 971 .WillOnce(DoAll(SaveArg<1>(&mojo_callback), | 959 .WillOnce(DoAll(SaveArg<1>(&mojo_callback), |
| 972 InvokeWithoutArgs([&run_loop]() { | 960 InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }))); |
| 973 run_loop.Quit(); | |
| 974 }))); | |
| 975 | 961 |
| 976 // |pass_ownership| param is "true" here because there is only one observer. | 962 // |pass_ownership| param is "true" here because there is only one observer. |
| 977 ListenForMessagesCallbackHandler handler(std::move(expected_messages), true); | 963 ListenForMessagesCallbackHandler handler(std::move(expected_messages), true); |
| 978 | 964 |
| 979 EXPECT_CALL(handler, InvokeObserver()); | 965 EXPECT_CALL(handler, InvokeObserver()); |
| 980 // Creating PresentationSessionMessagesObserver will register itself to the | 966 // Creating PresentationSessionMessagesObserver will register itself to the |
| 981 // MediaRouter, which in turn will start listening for route messages. | 967 // MediaRouter, which in turn will start listening for route messages. |
| 982 scoped_ptr<PresentationSessionMessagesObserver> observer( | 968 scoped_ptr<PresentationSessionMessagesObserver> observer( |
| 983 new PresentationSessionMessagesObserver( | 969 new PresentationSessionMessagesObserver( |
| 984 base::Bind(&ListenForMessagesCallbackHandler::Invoke, | 970 base::Bind(&ListenForMessagesCallbackHandler::Invoke, |
| 985 base::Unretained(&handler)), | 971 base::Unretained(&handler)), |
| 986 expected_route_id, router())); | 972 expected_route_id, router())); |
| 987 run_loop.Run(); | 973 run_loop.Run(); |
| 988 | 974 |
| 989 base::RunLoop run_loop2; | 975 base::RunLoop run_loop2; |
| 990 // Simulate messages by invoking the saved mojo callback. | 976 // Simulate messages by invoking the saved mojo callback. |
| 991 // We expect one more ListenForRouteMessages call since |observer| was | 977 // We expect one more ListenForRouteMessages call since |observer| was |
| 992 // still registered when the first set of messages arrived. | 978 // still registered when the first set of messages arrived. |
| 993 mojo_callback.Run(std::move(mojo_messages), false); | 979 mojo_callback.Run(std::move(mojo_messages), false); |
| 994 interfaces::MediaRouteProvider::ListenForRouteMessagesCallback | 980 interfaces::MediaRouteProvider::ListenForRouteMessagesCallback |
| 995 mojo_callback_2; | 981 mojo_callback_2; |
| 996 EXPECT_CALL(mock_media_route_provider_, ListenForRouteMessages(_, _)) | 982 EXPECT_CALL(mock_media_route_provider_, ListenForRouteMessages(_, _)) |
| 997 .WillOnce(DoAll(SaveArg<1>(&mojo_callback_2), | 983 .WillOnce(DoAll(SaveArg<1>(&mojo_callback_2), |
| 998 InvokeWithoutArgs([&run_loop2]() { | 984 InvokeWithoutArgs([&run_loop2]() { run_loop2.Quit(); }))); |
| 999 run_loop2.Quit(); | |
| 1000 }))); | |
| 1001 run_loop2.Run(); | 985 run_loop2.Run(); |
| 1002 | 986 |
| 1003 base::RunLoop run_loop3; | 987 base::RunLoop run_loop3; |
| 1004 // Stop listening for messages. In particular, MediaRouterMojoImpl will not | 988 // Stop listening for messages. In particular, MediaRouterMojoImpl will not |
| 1005 // call ListenForRouteMessages again when it sees there are no more observers. | 989 // call ListenForRouteMessages again when it sees there are no more observers. |
| 1006 mojo::Array<interfaces::RouteMessagePtr> mojo_messages_2(1); | 990 mojo::Array<interfaces::RouteMessagePtr> mojo_messages_2(1); |
| 1007 mojo_messages_2[0] = interfaces::RouteMessage::New(); | 991 mojo_messages_2[0] = interfaces::RouteMessage::New(); |
| 1008 mojo_messages_2[0]->type = interfaces::RouteMessage::Type::TEXT; | 992 mojo_messages_2[0]->type = interfaces::RouteMessage::Type::TEXT; |
| 1009 mojo_messages_2[0]->message = "foo"; | 993 mojo_messages_2[0]->message = "foo"; |
| 1010 observer.reset(); | 994 observer.reset(); |
| 1011 mojo_callback_2.Run(std::move(mojo_messages_2), false); | 995 mojo_callback_2.Run(std::move(mojo_messages_2), false); |
| 1012 EXPECT_CALL(mock_media_route_provider_, StopListeningForRouteMessages(_)) | 996 EXPECT_CALL(mock_media_route_provider_, StopListeningForRouteMessages(_)) |
| 1013 .WillOnce(InvokeWithoutArgs([&run_loop3]() { | 997 .WillOnce(InvokeWithoutArgs([&run_loop3]() { run_loop3.Quit(); })); |
| 1014 run_loop3.Quit(); | |
| 1015 })); | |
| 1016 run_loop3.Run(); | 998 run_loop3.Run(); |
| 1017 } | 999 } |
| 1018 | 1000 |
| 1019 TEST_F(MediaRouterMojoImplTest, PresentationSessionMessagesMultipleObservers) { | 1001 TEST_F(MediaRouterMojoImplTest, PresentationSessionMessagesMultipleObservers) { |
| 1020 mojo::Array<interfaces::RouteMessagePtr> mojo_messages(2); | 1002 mojo::Array<interfaces::RouteMessagePtr> mojo_messages(2); |
| 1021 mojo_messages[0] = interfaces::RouteMessage::New(); | 1003 mojo_messages[0] = interfaces::RouteMessage::New(); |
| 1022 mojo_messages[0]->type = interfaces::RouteMessage::Type::TEXT; | 1004 mojo_messages[0]->type = interfaces::RouteMessage::Type::TEXT; |
| 1023 mojo_messages[0]->message = "text"; | 1005 mojo_messages[0]->message = "text"; |
| 1024 mojo_messages[1] = interfaces::RouteMessage::New(); | 1006 mojo_messages[1] = interfaces::RouteMessage::New(); |
| 1025 mojo_messages[1]->type = interfaces::RouteMessage::Type::BINARY; | 1007 mojo_messages[1]->type = interfaces::RouteMessage::Type::BINARY; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1036 content::PresentationMessageType::ARRAY_BUFFER)); | 1018 content::PresentationMessageType::ARRAY_BUFFER)); |
| 1037 message->data.reset(new std::vector<uint8_t>(1, 1)); | 1019 message->data.reset(new std::vector<uint8_t>(1, 1)); |
| 1038 expected_messages.push_back(std::move(message)); | 1020 expected_messages.push_back(std::move(message)); |
| 1039 | 1021 |
| 1040 base::RunLoop run_loop; | 1022 base::RunLoop run_loop; |
| 1041 MediaRoute::Id expected_route_id("foo"); | 1023 MediaRoute::Id expected_route_id("foo"); |
| 1042 interfaces::MediaRouteProvider::ListenForRouteMessagesCallback mojo_callback; | 1024 interfaces::MediaRouteProvider::ListenForRouteMessagesCallback mojo_callback; |
| 1043 EXPECT_CALL(mock_media_route_provider_, | 1025 EXPECT_CALL(mock_media_route_provider_, |
| 1044 ListenForRouteMessages(Eq(expected_route_id), _)) | 1026 ListenForRouteMessages(Eq(expected_route_id), _)) |
| 1045 .WillOnce(DoAll(SaveArg<1>(&mojo_callback), | 1027 .WillOnce(DoAll(SaveArg<1>(&mojo_callback), |
| 1046 InvokeWithoutArgs([&run_loop]() { | 1028 InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }))); |
| 1047 run_loop.Quit(); | |
| 1048 }))); | |
| 1049 | 1029 |
| 1050 // |pass_ownership| param is "false" here because there are more than one | 1030 // |pass_ownership| param is "false" here because there are more than one |
| 1051 // observers. | 1031 // observers. |
| 1052 ListenForMessagesCallbackHandler handler(std::move(expected_messages), false); | 1032 ListenForMessagesCallbackHandler handler(std::move(expected_messages), false); |
| 1053 | 1033 |
| 1054 EXPECT_CALL(handler, InvokeObserver()).Times(2); | 1034 EXPECT_CALL(handler, InvokeObserver()).Times(2); |
| 1055 // Creating PresentationSessionMessagesObserver will register itself to the | 1035 // Creating PresentationSessionMessagesObserver will register itself to the |
| 1056 // MediaRouter, which in turn will start listening for route messages. | 1036 // MediaRouter, which in turn will start listening for route messages. |
| 1057 scoped_ptr<PresentationSessionMessagesObserver> observer1( | 1037 scoped_ptr<PresentationSessionMessagesObserver> observer1( |
| 1058 new PresentationSessionMessagesObserver( | 1038 new PresentationSessionMessagesObserver( |
| 1059 base::Bind(&ListenForMessagesCallbackHandler::Invoke, | 1039 base::Bind(&ListenForMessagesCallbackHandler::Invoke, |
| 1060 base::Unretained(&handler)), | 1040 base::Unretained(&handler)), |
| 1061 expected_route_id, router())); | 1041 expected_route_id, router())); |
| 1062 scoped_ptr<PresentationSessionMessagesObserver> observer2( | 1042 scoped_ptr<PresentationSessionMessagesObserver> observer2( |
| 1063 new PresentationSessionMessagesObserver( | 1043 new PresentationSessionMessagesObserver( |
| 1064 base::Bind(&ListenForMessagesCallbackHandler::Invoke, | 1044 base::Bind(&ListenForMessagesCallbackHandler::Invoke, |
| 1065 base::Unretained(&handler)), | 1045 base::Unretained(&handler)), |
| 1066 expected_route_id, router())); | 1046 expected_route_id, router())); |
| 1067 run_loop.Run(); | 1047 run_loop.Run(); |
| 1068 | 1048 |
| 1069 base::RunLoop run_loop2; | 1049 base::RunLoop run_loop2; |
| 1070 // Simulate messages by invoking the saved mojo callback. | 1050 // Simulate messages by invoking the saved mojo callback. |
| 1071 // We expect one more ListenForRouteMessages call since |observer| was | 1051 // We expect one more ListenForRouteMessages call since |observer| was |
| 1072 // still registered when the first set of messages arrived. | 1052 // still registered when the first set of messages arrived. |
| 1073 mojo_callback.Run(std::move(mojo_messages), false); | 1053 mojo_callback.Run(std::move(mojo_messages), false); |
| 1074 interfaces::MediaRouteProvider::ListenForRouteMessagesCallback | 1054 interfaces::MediaRouteProvider::ListenForRouteMessagesCallback |
| 1075 mojo_callback_2; | 1055 mojo_callback_2; |
| 1076 EXPECT_CALL(mock_media_route_provider_, ListenForRouteMessages(_, _)) | 1056 EXPECT_CALL(mock_media_route_provider_, ListenForRouteMessages(_, _)) |
| 1077 .WillOnce(DoAll(SaveArg<1>(&mojo_callback_2), | 1057 .WillOnce(DoAll(SaveArg<1>(&mojo_callback_2), |
| 1078 InvokeWithoutArgs([&run_loop2]() { | 1058 InvokeWithoutArgs([&run_loop2]() { run_loop2.Quit(); }))); |
| 1079 run_loop2.Quit(); | |
| 1080 }))); | |
| 1081 run_loop2.Run(); | 1059 run_loop2.Run(); |
| 1082 | 1060 |
| 1083 base::RunLoop run_loop3; | 1061 base::RunLoop run_loop3; |
| 1084 // Stop listening for messages. In particular, MediaRouterMojoImpl will not | 1062 // Stop listening for messages. In particular, MediaRouterMojoImpl will not |
| 1085 // call ListenForRouteMessages again when it sees there are no more observers. | 1063 // call ListenForRouteMessages again when it sees there are no more observers. |
| 1086 mojo::Array<interfaces::RouteMessagePtr> mojo_messages_2(1); | 1064 mojo::Array<interfaces::RouteMessagePtr> mojo_messages_2(1); |
| 1087 mojo_messages_2[0] = interfaces::RouteMessage::New(); | 1065 mojo_messages_2[0] = interfaces::RouteMessage::New(); |
| 1088 mojo_messages_2[0]->type = interfaces::RouteMessage::Type::TEXT; | 1066 mojo_messages_2[0]->type = interfaces::RouteMessage::Type::TEXT; |
| 1089 mojo_messages_2[0]->message = "foo"; | 1067 mojo_messages_2[0]->message = "foo"; |
| 1090 observer1.reset(); | 1068 observer1.reset(); |
| 1091 observer2.reset(); | 1069 observer2.reset(); |
| 1092 mojo_callback_2.Run(std::move(mojo_messages_2), false); | 1070 mojo_callback_2.Run(std::move(mojo_messages_2), false); |
| 1093 EXPECT_CALL(mock_media_route_provider_, StopListeningForRouteMessages(_)) | 1071 EXPECT_CALL(mock_media_route_provider_, StopListeningForRouteMessages(_)) |
| 1094 .WillOnce(InvokeWithoutArgs([&run_loop3]() { | 1072 .WillOnce(InvokeWithoutArgs([&run_loop3]() { run_loop3.Quit(); })); |
| 1095 run_loop3.Quit(); | |
| 1096 })); | |
| 1097 run_loop3.Run(); | 1073 run_loop3.Run(); |
| 1098 } | 1074 } |
| 1099 | 1075 |
| 1100 TEST_F(MediaRouterMojoImplTest, PresentationSessionMessagesError) { | 1076 TEST_F(MediaRouterMojoImplTest, PresentationSessionMessagesError) { |
| 1101 MediaRoute::Id expected_route_id("foo"); | 1077 MediaRoute::Id expected_route_id("foo"); |
| 1102 interfaces::MediaRouteProvider::ListenForRouteMessagesCallback mojo_callback; | 1078 interfaces::MediaRouteProvider::ListenForRouteMessagesCallback mojo_callback; |
| 1103 base::RunLoop run_loop; | 1079 base::RunLoop run_loop; |
| 1104 EXPECT_CALL(mock_media_route_provider_, | 1080 EXPECT_CALL(mock_media_route_provider_, |
| 1105 ListenForRouteMessages(Eq(expected_route_id), _)) | 1081 ListenForRouteMessages(Eq(expected_route_id), _)) |
| 1106 .WillOnce(DoAll(SaveArg<1>(&mojo_callback), | 1082 .WillOnce(DoAll(SaveArg<1>(&mojo_callback), |
| 1107 InvokeWithoutArgs([&run_loop]() { | 1083 InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }))); |
| 1108 run_loop.Quit(); | |
| 1109 }))); | |
| 1110 | 1084 |
| 1111 ListenForMessagesCallbackHandler handler( | 1085 ListenForMessagesCallbackHandler handler( |
| 1112 ScopedVector<content::PresentationSessionMessage>(), true); | 1086 ScopedVector<content::PresentationSessionMessage>(), true); |
| 1113 | 1087 |
| 1114 // Creating PresentationSessionMessagesObserver will register itself to the | 1088 // Creating PresentationSessionMessagesObserver will register itself to the |
| 1115 // MediaRouter, which in turn will start listening for route messages. | 1089 // MediaRouter, which in turn will start listening for route messages. |
| 1116 scoped_ptr<PresentationSessionMessagesObserver> observer1( | 1090 scoped_ptr<PresentationSessionMessagesObserver> observer1( |
| 1117 new PresentationSessionMessagesObserver( | 1091 new PresentationSessionMessagesObserver( |
| 1118 base::Bind(&ListenForMessagesCallbackHandler::Invoke, | 1092 base::Bind(&ListenForMessagesCallbackHandler::Invoke, |
| 1119 base::Unretained(&handler)), | 1093 base::Unretained(&handler)), |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1188 } | 1162 } |
| 1189 | 1163 |
| 1190 TEST_F(MediaRouterMojoImplTest, QueuedWhileAsleep) { | 1164 TEST_F(MediaRouterMojoImplTest, QueuedWhileAsleep) { |
| 1191 base::RunLoop run_loop; | 1165 base::RunLoop run_loop; |
| 1192 EXPECT_CALL(mock_event_page_tracker_, IsEventPageSuspended(extension_id())) | 1166 EXPECT_CALL(mock_event_page_tracker_, IsEventPageSuspended(extension_id())) |
| 1193 .Times(2) | 1167 .Times(2) |
| 1194 .WillRepeatedly(Return(true)); | 1168 .WillRepeatedly(Return(true)); |
| 1195 EXPECT_CALL(mock_event_page_tracker_, WakeEventPage(extension_id(), _)) | 1169 EXPECT_CALL(mock_event_page_tracker_, WakeEventPage(extension_id(), _)) |
| 1196 .Times(2) | 1170 .Times(2) |
| 1197 .WillOnce(Return(true)) | 1171 .WillOnce(Return(true)) |
| 1198 .WillOnce(DoAll(InvokeWithoutArgs([&run_loop]() { | 1172 .WillOnce(DoAll(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); }), |
| 1199 run_loop.Quit(); | 1173 Return(true))); |
| 1200 }), Return(true))); | |
| 1201 router()->DetachRoute(kRouteId); | 1174 router()->DetachRoute(kRouteId); |
| 1202 router()->DetachRoute(kRouteId2); | 1175 router()->DetachRoute(kRouteId2); |
| 1203 run_loop.Run(); | 1176 run_loop.Run(); |
| 1204 EXPECT_CALL(mock_event_page_tracker_, IsEventPageSuspended(extension_id())) | 1177 EXPECT_CALL(mock_event_page_tracker_, IsEventPageSuspended(extension_id())) |
| 1205 .Times(1) | 1178 .Times(1) |
| 1206 .WillRepeatedly(Return(false)); | 1179 .WillRepeatedly(Return(false)); |
| 1207 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId))); | 1180 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId))); |
| 1208 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId2))); | 1181 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId2))); |
| 1209 ConnectProviderManagerService(); | 1182 ConnectProviderManagerService(); |
| 1210 ProcessEventLoop(); | 1183 ProcessEventLoop(); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1266 *extension_); | 1239 *extension_); |
| 1267 } | 1240 } |
| 1268 | 1241 |
| 1269 void RegisterMediaRouteProvider() { | 1242 void RegisterMediaRouteProvider() { |
| 1270 media_router_proxy_->RegisterMediaRouteProvider( | 1243 media_router_proxy_->RegisterMediaRouteProvider( |
| 1271 std::move(media_route_provider_proxy_), | 1244 std::move(media_route_provider_proxy_), |
| 1272 base::Bind(&RegisterMediaRouteProviderHandler::Invoke, | 1245 base::Bind(&RegisterMediaRouteProviderHandler::Invoke, |
| 1273 base::Unretained(&provide_handler_))); | 1246 base::Unretained(&provide_handler_))); |
| 1274 } | 1247 } |
| 1275 | 1248 |
| 1276 void ProcessEventLoop() { | 1249 void ProcessEventLoop() { message_loop_.RunUntilIdle(); } |
| 1277 message_loop_.RunUntilIdle(); | |
| 1278 } | |
| 1279 | 1250 |
| 1280 void ExpectWakeReasonBucketCount(MediaRouteProviderWakeReason reason, | 1251 void ExpectWakeReasonBucketCount(MediaRouteProviderWakeReason reason, |
| 1281 int expected_count) { | 1252 int expected_count) { |
| 1282 histogram_tester_.ExpectBucketCount("MediaRouter.Provider.WakeReason", | 1253 histogram_tester_.ExpectBucketCount("MediaRouter.Provider.WakeReason", |
| 1283 static_cast<int>(reason), | 1254 static_cast<int>(reason), |
| 1284 expected_count); | 1255 expected_count); |
| 1285 } | 1256 } |
| 1286 | 1257 |
| 1287 void ExpectVersionBucketCount(MediaRouteProviderVersion version, | 1258 void ExpectVersionBucketCount(MediaRouteProviderVersion version, |
| 1288 int expected_count) { | 1259 int expected_count) { |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1321 media_router_->DetachRoute(kRouteId); | 1292 media_router_->DetachRoute(kRouteId); |
| 1322 | 1293 |
| 1323 BindMediaRouteProvider(); | 1294 BindMediaRouteProvider(); |
| 1324 | 1295 |
| 1325 base::RunLoop run_loop, run_loop2; | 1296 base::RunLoop run_loop, run_loop2; |
| 1326 // |mojo_media_router| signals its readiness to the MR by registering | 1297 // |mojo_media_router| signals its readiness to the MR by registering |
| 1327 // itself via RegisterMediaRouteProvider(). | 1298 // itself via RegisterMediaRouteProvider(). |
| 1328 // Now that the |media_router| and |mojo_media_router| are fully initialized, | 1299 // Now that the |media_router| and |mojo_media_router| are fully initialized, |
| 1329 // the queued DetachRoute() call should be executed. | 1300 // the queued DetachRoute() call should be executed. |
| 1330 EXPECT_CALL(provide_handler_, Invoke(testing::Not(""))) | 1301 EXPECT_CALL(provide_handler_, Invoke(testing::Not(""))) |
| 1331 .WillOnce(InvokeWithoutArgs([&run_loop]() { | 1302 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); |
| 1332 run_loop.Quit(); | |
| 1333 })); | |
| 1334 EXPECT_CALL(*process_manager_, IsEventPageSuspended(extension_->id())) | 1303 EXPECT_CALL(*process_manager_, IsEventPageSuspended(extension_->id())) |
| 1335 .WillOnce(Return(false)); | 1304 .WillOnce(Return(false)); |
| 1336 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId))) | 1305 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId))) |
| 1337 .WillOnce(InvokeWithoutArgs([&run_loop2]() { | 1306 .WillOnce(InvokeWithoutArgs([&run_loop2]() { run_loop2.Quit(); })); |
| 1338 run_loop2.Quit(); | |
| 1339 })); | |
| 1340 RegisterMediaRouteProvider(); | 1307 RegisterMediaRouteProvider(); |
| 1341 run_loop.Run(); | 1308 run_loop.Run(); |
| 1342 run_loop2.Run(); | 1309 run_loop2.Run(); |
| 1343 | 1310 |
| 1344 base::RunLoop run_loop3; | 1311 base::RunLoop run_loop3; |
| 1345 // Extension is suspended and re-awoken. | 1312 // Extension is suspended and re-awoken. |
| 1346 ResetMediaRouteProvider(); | 1313 ResetMediaRouteProvider(); |
| 1347 EXPECT_CALL(*process_manager_, IsEventPageSuspended(extension_->id())) | 1314 EXPECT_CALL(*process_manager_, IsEventPageSuspended(extension_->id())) |
| 1348 .WillOnce(Return(true)); | 1315 .WillOnce(Return(true)); |
| 1349 EXPECT_CALL(*process_manager_, WakeEventPage(extension_->id(), _)) | 1316 EXPECT_CALL(*process_manager_, WakeEventPage(extension_->id(), _)) |
| 1350 .WillOnce(testing::DoAll( | 1317 .WillOnce(testing::DoAll( |
| 1351 media::RunCallback<1>(true), | 1318 media::RunCallback<1>(true), |
| 1352 InvokeWithoutArgs([&run_loop3]() { run_loop3.Quit(); }), | 1319 InvokeWithoutArgs([&run_loop3]() { run_loop3.Quit(); }), |
| 1353 Return(true))); | 1320 Return(true))); |
| 1354 media_router_->DetachRoute(kRouteId2); | 1321 media_router_->DetachRoute(kRouteId2); |
| 1355 run_loop3.Run(); | 1322 run_loop3.Run(); |
| 1356 | 1323 |
| 1357 base::RunLoop run_loop4, run_loop5; | 1324 base::RunLoop run_loop4, run_loop5; |
| 1358 // RegisterMediaRouteProvider() is called. | 1325 // RegisterMediaRouteProvider() is called. |
| 1359 // The queued DetachRoute(kRouteId2) call should be executed. | 1326 // The queued DetachRoute(kRouteId2) call should be executed. |
| 1360 EXPECT_CALL(provide_handler_, Invoke(testing::Not(""))) | 1327 EXPECT_CALL(provide_handler_, Invoke(testing::Not(""))) |
| 1361 .WillOnce(InvokeWithoutArgs([&run_loop4]() { | 1328 .WillOnce(InvokeWithoutArgs([&run_loop4]() { run_loop4.Quit(); })); |
| 1362 run_loop4.Quit(); | |
| 1363 })); | |
| 1364 EXPECT_CALL(*process_manager_, IsEventPageSuspended(extension_->id())) | 1329 EXPECT_CALL(*process_manager_, IsEventPageSuspended(extension_->id())) |
| 1365 .WillOnce(Return(false)); | 1330 .WillOnce(Return(false)); |
| 1366 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId2))) | 1331 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId2))) |
| 1367 .WillOnce(InvokeWithoutArgs([&run_loop5]() { | 1332 .WillOnce(InvokeWithoutArgs([&run_loop5]() { run_loop5.Quit(); })); |
| 1368 run_loop5.Quit(); | |
| 1369 })); | |
| 1370 BindMediaRouteProvider(); | 1333 BindMediaRouteProvider(); |
| 1371 RegisterMediaRouteProvider(); | 1334 RegisterMediaRouteProvider(); |
| 1372 run_loop4.Run(); | 1335 run_loop4.Run(); |
| 1373 run_loop5.Run(); | 1336 run_loop5.Run(); |
| 1374 ExpectWakeReasonBucketCount(MediaRouteProviderWakeReason::DETACH_ROUTE, 1); | 1337 ExpectWakeReasonBucketCount(MediaRouteProviderWakeReason::DETACH_ROUTE, 1); |
| 1375 ExpectWakeupBucketCount(MediaRouteProviderWakeup::SUCCESS, 1); | 1338 ExpectWakeupBucketCount(MediaRouteProviderWakeup::SUCCESS, 1); |
| 1376 ExpectVersionBucketCount(MediaRouteProviderVersion::SAME_VERSION_AS_CHROME, | 1339 ExpectVersionBucketCount(MediaRouteProviderVersion::SAME_VERSION_AS_CHROME, |
| 1377 1); | 1340 1); |
| 1378 } | 1341 } |
| 1379 | 1342 |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1463 | 1426 |
| 1464 // The request queue size should not exceed |kMaxPendingRequests|. | 1427 // The request queue size should not exceed |kMaxPendingRequests|. |
| 1465 EXPECT_EQ(kMaxPendingRequests, media_router_->pending_requests_.size()); | 1428 EXPECT_EQ(kMaxPendingRequests, media_router_->pending_requests_.size()); |
| 1466 | 1429 |
| 1467 base::RunLoop run_loop, run_loop2; | 1430 base::RunLoop run_loop, run_loop2; |
| 1468 size_t count = 0; | 1431 size_t count = 0; |
| 1469 // The oldest request should have been dropped, so we don't expect to see | 1432 // The oldest request should have been dropped, so we don't expect to see |
| 1470 // DetachRoute(kRouteId) here. | 1433 // DetachRoute(kRouteId) here. |
| 1471 BindMediaRouteProvider(); | 1434 BindMediaRouteProvider(); |
| 1472 EXPECT_CALL(provide_handler_, Invoke(testing::Not(""))) | 1435 EXPECT_CALL(provide_handler_, Invoke(testing::Not(""))) |
| 1473 .WillOnce(InvokeWithoutArgs([&run_loop]() { | 1436 .WillOnce(InvokeWithoutArgs([&run_loop]() { run_loop.Quit(); })); |
| 1474 run_loop.Quit(); | |
| 1475 })); | |
| 1476 EXPECT_CALL(*process_manager_, IsEventPageSuspended(extension_->id())); | 1437 EXPECT_CALL(*process_manager_, IsEventPageSuspended(extension_->id())); |
| 1477 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId2))) | 1438 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId2))) |
| 1478 .Times(kMaxPendingRequests) | 1439 .Times(kMaxPendingRequests) |
| 1479 .WillRepeatedly(InvokeWithoutArgs([&run_loop2, &count]() { | 1440 .WillRepeatedly(InvokeWithoutArgs([&run_loop2, &count]() { |
| 1480 if (++count == MediaRouterMojoImpl::kMaxPendingRequests) | 1441 if (++count == MediaRouterMojoImpl::kMaxPendingRequests) |
| 1481 run_loop2.Quit(); | 1442 run_loop2.Quit(); |
| 1482 })); | 1443 })); |
| 1483 RegisterMediaRouteProvider(); | 1444 RegisterMediaRouteProvider(); |
| 1484 run_loop.Run(); | 1445 run_loop.Run(); |
| 1485 run_loop2.Run(); | 1446 run_loop2.Run(); |
| 1486 ExpectVersionBucketCount(MediaRouteProviderVersion::SAME_VERSION_AS_CHROME, | 1447 ExpectVersionBucketCount(MediaRouteProviderVersion::SAME_VERSION_AS_CHROME, |
| 1487 1); | 1448 1); |
| 1488 } | 1449 } |
| 1489 | 1450 |
| 1490 } // namespace media_router | 1451 } // namespace media_router |
| OLD | NEW |