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