Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(185)

Side by Side Diff: chrome/browser/media/router/mojo/media_router_mojo_impl_unittest.cc

Issue 1826403002: [Media Router] Moves mojo-specific code into mojo/ folder (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698