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

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

Issue 1507743005: [MediaRouter] Renames CloseRoute() to Terminate() and creates DetachRoute() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix android build Created 5 years 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 <string> 5 #include <string>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 RouteResponseCallbackHandler handler; 282 RouteResponseCallbackHandler handler;
283 EXPECT_CALL(handler, Invoke(nullptr, "", kError)); 283 EXPECT_CALL(handler, Invoke(nullptr, "", kError));
284 std::vector<MediaRouteResponseCallback> route_response_callbacks; 284 std::vector<MediaRouteResponseCallback> route_response_callbacks;
285 route_response_callbacks.push_back(base::Bind( 285 route_response_callbacks.push_back(base::Bind(
286 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler))); 286 &RouteResponseCallbackHandler::Invoke, base::Unretained(&handler)));
287 router()->JoinRoute(kSource, kPresentationId, GURL(kOrigin), nullptr, 287 router()->JoinRoute(kSource, kPresentationId, GURL(kOrigin), nullptr,
288 route_response_callbacks); 288 route_response_callbacks);
289 ProcessEventLoop(); 289 ProcessEventLoop();
290 } 290 }
291 291
292 TEST_F(MediaRouterMojoImplTest, CloseRoute) { 292 TEST_F(MediaRouterMojoImplTest, DetachRoute) {
293 EXPECT_CALL(mock_media_route_provider_, CloseRoute(mojo::String(kRouteId))); 293 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId)));
294 router()->CloseRoute(kRouteId); 294 router()->DetachRoute(kRouteId);
295 ProcessEventLoop(); 295 ProcessEventLoop();
296 } 296 }
297 297
298 TEST_F(MediaRouterMojoImplTest, TerminateRoute) {
299 EXPECT_CALL(mock_media_route_provider_,
300 TerminateRoute(mojo::String(kRouteId)));
301 router()->TerminateRoute(kRouteId);
302 ProcessEventLoop();
303 }
304
298 TEST_F(MediaRouterMojoImplTest, HandleIssue) { 305 TEST_F(MediaRouterMojoImplTest, HandleIssue) {
299 MockIssuesObserver issue_observer1(router()); 306 MockIssuesObserver issue_observer1(router());
300 MockIssuesObserver issue_observer2(router()); 307 MockIssuesObserver issue_observer2(router());
301 issue_observer1.RegisterObserver(); 308 issue_observer1.RegisterObserver();
302 issue_observer2.RegisterObserver(); 309 issue_observer2.RegisterObserver();
303 310
304 interfaces::IssuePtr mojo_issue1 = CreateMojoIssue("title 1"); 311 interfaces::IssuePtr mojo_issue1 = CreateMojoIssue("title 1");
305 const Issue& expected_issue1 = mojo_issue1.To<Issue>(); 312 const Issue& expected_issue1 = mojo_issue1.To<Issue>();
306 313
307 const Issue* issue; 314 const Issue* issue;
(...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after
832 EXPECT_TRUE(router()->HasLocalDisplayRoute()); 839 EXPECT_TRUE(router()->HasLocalDisplayRoute());
833 } 840 }
834 841
835 TEST_F(MediaRouterMojoImplTest, QueuedWhileAsleep) { 842 TEST_F(MediaRouterMojoImplTest, QueuedWhileAsleep) {
836 EXPECT_CALL(mock_event_page_tracker_, IsEventPageSuspended(extension_id())) 843 EXPECT_CALL(mock_event_page_tracker_, IsEventPageSuspended(extension_id()))
837 .Times(2) 844 .Times(2)
838 .WillRepeatedly(Return(true)); 845 .WillRepeatedly(Return(true));
839 EXPECT_CALL(mock_event_page_tracker_, WakeEventPage(extension_id(), _)) 846 EXPECT_CALL(mock_event_page_tracker_, WakeEventPage(extension_id(), _))
840 .Times(2) 847 .Times(2)
841 .WillRepeatedly(Return(true)); 848 .WillRepeatedly(Return(true));
842 router()->CloseRoute(kRouteId); 849 router()->DetachRoute(kRouteId);
843 router()->CloseRoute(kRouteId2); 850 router()->DetachRoute(kRouteId2);
844 ProcessEventLoop(); 851 ProcessEventLoop();
845 EXPECT_CALL(mock_event_page_tracker_, IsEventPageSuspended(extension_id())) 852 EXPECT_CALL(mock_event_page_tracker_, IsEventPageSuspended(extension_id()))
846 .Times(1) 853 .Times(1)
847 .WillRepeatedly(Return(false)); 854 .WillRepeatedly(Return(false));
848 EXPECT_CALL(mock_media_route_provider_, CloseRoute(mojo::String(kRouteId))); 855 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId)));
849 EXPECT_CALL(mock_media_route_provider_, CloseRoute(mojo::String(kRouteId2))); 856 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId2)));
850 ConnectProviderManagerService(); 857 ConnectProviderManagerService();
851 ProcessEventLoop(); 858 ProcessEventLoop();
852 } 859 }
853 860
854 class MediaRouterMojoExtensionTest : public ::testing::Test { 861 class MediaRouterMojoExtensionTest : public ::testing::Test {
855 public: 862 public:
856 MediaRouterMojoExtensionTest() 863 MediaRouterMojoExtensionTest()
857 : process_manager_(nullptr), 864 : process_manager_(nullptr),
858 message_loop_(mojo::common::MessagePumpMojo::Create()) 865 message_loop_(mojo::common::MessagePumpMojo::Create())
859 {} 866 {}
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
928 scoped_ptr<TestingProfile> profile_; 935 scoped_ptr<TestingProfile> profile_;
929 base::MessageLoop message_loop_; 936 base::MessageLoop message_loop_;
930 interfaces::MediaRouteProviderPtr media_route_provider_proxy_; 937 interfaces::MediaRouteProviderPtr media_route_provider_proxy_;
931 scoped_ptr<mojo::Binding<interfaces::MediaRouteProvider>> binding_; 938 scoped_ptr<mojo::Binding<interfaces::MediaRouteProvider>> binding_;
932 base::HistogramTester histogram_tester_; 939 base::HistogramTester histogram_tester_;
933 940
934 DISALLOW_COPY_AND_ASSIGN(MediaRouterMojoExtensionTest); 941 DISALLOW_COPY_AND_ASSIGN(MediaRouterMojoExtensionTest);
935 }; 942 };
936 943
937 TEST_F(MediaRouterMojoExtensionTest, DeferredBindingAndSuspension) { 944 TEST_F(MediaRouterMojoExtensionTest, DeferredBindingAndSuspension) {
938 // CloseRoute is called before *any* extension has connected. 945 // DetachRoute is called before *any* extension has connected.
939 // It should be queued. 946 // It should be queued.
940 media_router_->CloseRoute(kRouteId); 947 media_router_->DetachRoute(kRouteId);
941 948
942 BindMediaRouteProvider(); 949 BindMediaRouteProvider();
943 950
944 // |mojo_media_router| signals its readiness to the MR by registering 951 // |mojo_media_router| signals its readiness to the MR by registering
945 // itself via RegisterMediaRouteProvider(). 952 // itself via RegisterMediaRouteProvider().
946 // Now that the |media_router| and |mojo_media_router| are fully initialized, 953 // Now that the |media_router| and |mojo_media_router| are fully initialized,
947 // the queued CloseRoute() call should be executed. 954 // the queued DetachRoute() call should be executed.
948 EXPECT_CALL(provide_handler_, Invoke(testing::Not(""))); 955 EXPECT_CALL(provide_handler_, Invoke(testing::Not("")));
949 EXPECT_CALL(*process_manager_, IsEventPageSuspended(kExtensionId)) 956 EXPECT_CALL(*process_manager_, IsEventPageSuspended(kExtensionId))
950 .WillOnce(Return(false)); 957 .WillOnce(Return(false));
951 EXPECT_CALL(mock_media_route_provider_, CloseRoute(mojo::String(kRouteId))); 958 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId)));
952 RegisterMediaRouteProvider(); 959 RegisterMediaRouteProvider();
953 ProcessEventLoop(); 960 ProcessEventLoop();
954 961
955 // Extension is suspended and re-awoken. 962 // Extension is suspended and re-awoken.
956 ResetMediaRouteProvider(); 963 ResetMediaRouteProvider();
957 EXPECT_CALL(*process_manager_, IsEventPageSuspended(kExtensionId)) 964 EXPECT_CALL(*process_manager_, IsEventPageSuspended(kExtensionId))
958 .WillOnce(Return(true)); 965 .WillOnce(Return(true));
959 EXPECT_CALL(*process_manager_, WakeEventPage(kExtensionId, _)) 966 EXPECT_CALL(*process_manager_, WakeEventPage(kExtensionId, _))
960 .WillOnce(testing::DoAll(media::RunCallback<1>(true), Return(true))); 967 .WillOnce(testing::DoAll(media::RunCallback<1>(true), Return(true)));
961 media_router_->CloseRoute(kRouteId2); 968 media_router_->DetachRoute(kRouteId2);
962 ProcessEventLoop(); 969 ProcessEventLoop();
963 970
964 // RegisterMediaRouteProvider() is called. 971 // RegisterMediaRouteProvider() is called.
965 // The queued CloseRoute(kRouteId2) call should be executed. 972 // The queued DetachRoute(kRouteId2) call should be executed.
966 EXPECT_CALL(provide_handler_, Invoke(testing::Not(""))); 973 EXPECT_CALL(provide_handler_, Invoke(testing::Not("")));
967 EXPECT_CALL(*process_manager_, IsEventPageSuspended(kExtensionId)) 974 EXPECT_CALL(*process_manager_, IsEventPageSuspended(kExtensionId))
968 .WillOnce(Return(false)); 975 .WillOnce(Return(false));
969 EXPECT_CALL(mock_media_route_provider_, CloseRoute(mojo::String(kRouteId2))); 976 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId2)));
970 BindMediaRouteProvider(); 977 BindMediaRouteProvider();
971 RegisterMediaRouteProvider(); 978 RegisterMediaRouteProvider();
972 ProcessEventLoop(); 979 ProcessEventLoop();
973 ExpectWakeReasonBucketCount(MediaRouteProviderWakeReason::CLOSE_ROUTE, 1); 980 ExpectWakeReasonBucketCount(MediaRouteProviderWakeReason::DETACH_ROUTE, 1);
974 } 981 }
975 982
976 TEST_F(MediaRouterMojoExtensionTest, AttemptedWakeupTooManyTimes) { 983 TEST_F(MediaRouterMojoExtensionTest, AttemptedWakeupTooManyTimes) {
977 BindMediaRouteProvider(); 984 BindMediaRouteProvider();
978 985
979 // CloseRoute is called while extension is suspended. It should be queued. 986 // DetachRoute is called while extension is suspended. It should be queued.
980 // Schedule a component extension wakeup. 987 // Schedule a component extension wakeup.
981 EXPECT_CALL(*process_manager_, IsEventPageSuspended(kExtensionId)) 988 EXPECT_CALL(*process_manager_, IsEventPageSuspended(kExtensionId))
982 .WillOnce(Return(true)); 989 .WillOnce(Return(true));
983 EXPECT_CALL(*process_manager_, WakeEventPage(kExtensionId, _)) 990 EXPECT_CALL(*process_manager_, WakeEventPage(kExtensionId, _))
984 .WillOnce(testing::DoAll(media::RunCallback<1>(true), Return(true))); 991 .WillOnce(testing::DoAll(media::RunCallback<1>(true), Return(true)));
985 media_router_->CloseRoute(kRouteId); 992 media_router_->DetachRoute(kRouteId);
986 EXPECT_EQ(1u, media_router_->pending_requests_.size()); 993 EXPECT_EQ(1u, media_router_->pending_requests_.size());
987 ExpectWakeReasonBucketCount(MediaRouteProviderWakeReason::CLOSE_ROUTE, 1); 994 ExpectWakeReasonBucketCount(MediaRouteProviderWakeReason::DETACH_ROUTE, 1);
988 995
989 // Media route provider fails to connect to media router before extension is 996 // Media route provider fails to connect to media router before extension is
990 // suspended again, and |OnConnectionError| is invoked. Retry the wakeup. 997 // suspended again, and |OnConnectionError| is invoked. Retry the wakeup.
991 EXPECT_CALL(*process_manager_, WakeEventPage(kExtensionId, _)) 998 EXPECT_CALL(*process_manager_, WakeEventPage(kExtensionId, _))
992 .Times(MediaRouterMojoImpl::kMaxWakeupAttemptCount - 1) 999 .Times(MediaRouterMojoImpl::kMaxWakeupAttemptCount - 1)
993 .WillRepeatedly( 1000 .WillRepeatedly(
994 testing::DoAll(media::RunCallback<1>(true), Return(true))); 1001 testing::DoAll(media::RunCallback<1>(true), Return(true)));
995 for (int i = 0; i < MediaRouterMojoImpl::kMaxWakeupAttemptCount - 1; ++i) 1002 for (int i = 0; i < MediaRouterMojoImpl::kMaxWakeupAttemptCount - 1; ++i)
996 media_router_->OnConnectionError(); 1003 media_router_->OnConnectionError();
997 1004
998 // We have already tried |kMaxWakeupAttemptCount| times. If we get an error 1005 // We have already tried |kMaxWakeupAttemptCount| times. If we get an error
999 // again, we will give up and the pending request queue will be drained. 1006 // again, we will give up and the pending request queue will be drained.
1000 media_router_->OnConnectionError(); 1007 media_router_->OnConnectionError();
1001 EXPECT_TRUE(media_router_->pending_requests_.empty()); 1008 EXPECT_TRUE(media_router_->pending_requests_.empty());
1002 ExpectWakeReasonBucketCount(MediaRouteProviderWakeReason::CONNECTION_ERROR, 1009 ExpectWakeReasonBucketCount(MediaRouteProviderWakeReason::CONNECTION_ERROR,
1003 MediaRouterMojoImpl::kMaxWakeupAttemptCount - 1); 1010 MediaRouterMojoImpl::kMaxWakeupAttemptCount - 1);
1004 1011
1005 // Requests that comes in after queue is drained should be queued. 1012 // Requests that comes in after queue is drained should be queued.
1006 EXPECT_CALL(*process_manager_, IsEventPageSuspended(kExtensionId)) 1013 EXPECT_CALL(*process_manager_, IsEventPageSuspended(kExtensionId))
1007 .WillOnce(Return(true)); 1014 .WillOnce(Return(true));
1008 EXPECT_CALL(*process_manager_, WakeEventPage(kExtensionId, _)) 1015 EXPECT_CALL(*process_manager_, WakeEventPage(kExtensionId, _))
1009 .WillOnce(testing::DoAll(media::RunCallback<1>(true), Return(true))); 1016 .WillOnce(testing::DoAll(media::RunCallback<1>(true), Return(true)));
1010 media_router_->CloseRoute(kRouteId); 1017 media_router_->DetachRoute(kRouteId);
1011 EXPECT_EQ(1u, media_router_->pending_requests_.size()); 1018 EXPECT_EQ(1u, media_router_->pending_requests_.size());
1012 } 1019 }
1013 1020
1014 TEST_F(MediaRouterMojoExtensionTest, WakeupFailedDrainsQueue) { 1021 TEST_F(MediaRouterMojoExtensionTest, WakeupFailedDrainsQueue) {
1015 BindMediaRouteProvider(); 1022 BindMediaRouteProvider();
1016 1023
1017 // CloseRoute is called while extension is suspended. It should be queued. 1024 // DetachRoute is called while extension is suspended. It should be queued.
1018 // Schedule a component extension wakeup. 1025 // Schedule a component extension wakeup.
1019 EXPECT_CALL(*process_manager_, IsEventPageSuspended(kExtensionId)) 1026 EXPECT_CALL(*process_manager_, IsEventPageSuspended(kExtensionId))
1020 .WillOnce(Return(true)); 1027 .WillOnce(Return(true));
1021 base::Callback<void(bool)> extension_wakeup_callback; 1028 base::Callback<void(bool)> extension_wakeup_callback;
1022 EXPECT_CALL(*process_manager_, WakeEventPage(kExtensionId, _)) 1029 EXPECT_CALL(*process_manager_, WakeEventPage(kExtensionId, _))
1023 .WillOnce( 1030 .WillOnce(
1024 testing::DoAll(SaveArg<1>(&extension_wakeup_callback), Return(true))); 1031 testing::DoAll(SaveArg<1>(&extension_wakeup_callback), Return(true)));
1025 media_router_->CloseRoute(kRouteId); 1032 media_router_->DetachRoute(kRouteId);
1026 EXPECT_EQ(1u, media_router_->pending_requests_.size()); 1033 EXPECT_EQ(1u, media_router_->pending_requests_.size());
1027 1034
1028 // Extension wakeup callback returning false is an non-retryable error. 1035 // Extension wakeup callback returning false is an non-retryable error.
1029 // Queue should be drained. 1036 // Queue should be drained.
1030 extension_wakeup_callback.Run(false); 1037 extension_wakeup_callback.Run(false);
1031 EXPECT_TRUE(media_router_->pending_requests_.empty()); 1038 EXPECT_TRUE(media_router_->pending_requests_.empty());
1032 1039
1033 // Requests that comes in after queue is drained should be queued. 1040 // Requests that comes in after queue is drained should be queued.
1034 EXPECT_CALL(*process_manager_, IsEventPageSuspended(kExtensionId)) 1041 EXPECT_CALL(*process_manager_, IsEventPageSuspended(kExtensionId))
1035 .WillOnce(Return(true)); 1042 .WillOnce(Return(true));
1036 EXPECT_CALL(*process_manager_, WakeEventPage(kExtensionId, _)) 1043 EXPECT_CALL(*process_manager_, WakeEventPage(kExtensionId, _))
1037 .WillOnce(testing::DoAll(media::RunCallback<1>(true), Return(true))); 1044 .WillOnce(testing::DoAll(media::RunCallback<1>(true), Return(true)));
1038 media_router_->CloseRoute(kRouteId); 1045 media_router_->DetachRoute(kRouteId);
1039 EXPECT_EQ(1u, media_router_->pending_requests_.size()); 1046 EXPECT_EQ(1u, media_router_->pending_requests_.size());
1040 ExpectWakeReasonBucketCount(MediaRouteProviderWakeReason::CLOSE_ROUTE, 1); 1047 ExpectWakeReasonBucketCount(MediaRouteProviderWakeReason::DETACH_ROUTE, 1);
1041 } 1048 }
1042 1049
1043 TEST_F(MediaRouterMojoExtensionTest, DropOldestPendingRequest) { 1050 TEST_F(MediaRouterMojoExtensionTest, DropOldestPendingRequest) {
1044 const size_t kMaxPendingRequests = MediaRouterMojoImpl::kMaxPendingRequests; 1051 const size_t kMaxPendingRequests = MediaRouterMojoImpl::kMaxPendingRequests;
1045 1052
1046 // Request is queued. 1053 // Request is queued.
1047 media_router_->CloseRoute(kRouteId); 1054 media_router_->DetachRoute(kRouteId);
1048 EXPECT_EQ(1u, media_router_->pending_requests_.size()); 1055 EXPECT_EQ(1u, media_router_->pending_requests_.size());
1049 1056
1050 for (size_t i = 0; i < kMaxPendingRequests; ++i) 1057 for (size_t i = 0; i < kMaxPendingRequests; ++i)
1051 media_router_->CloseRoute(kRouteId2); 1058 media_router_->DetachRoute(kRouteId2);
1052 1059
1053 // The request queue size should not exceed |kMaxPendingRequests|. 1060 // The request queue size should not exceed |kMaxPendingRequests|.
1054 EXPECT_EQ(kMaxPendingRequests, media_router_->pending_requests_.size()); 1061 EXPECT_EQ(kMaxPendingRequests, media_router_->pending_requests_.size());
1055 1062
1056 // The oldest request should have been dropped, so we don't expect to see 1063 // The oldest request should have been dropped, so we don't expect to see
1057 // CloseRoute(kRouteId) here. 1064 // DetachRoute(kRouteId) here.
1058 BindMediaRouteProvider(); 1065 BindMediaRouteProvider();
1059 EXPECT_CALL(provide_handler_, Invoke(testing::Not(""))); 1066 EXPECT_CALL(provide_handler_, Invoke(testing::Not("")));
1060 EXPECT_CALL(*process_manager_, IsEventPageSuspended(kExtensionId)) 1067 EXPECT_CALL(*process_manager_, IsEventPageSuspended(kExtensionId))
1061 .WillOnce(Return(false)); 1068 .WillOnce(Return(false));
1062 EXPECT_CALL(mock_media_route_provider_, CloseRoute(mojo::String(kRouteId2))) 1069 EXPECT_CALL(mock_media_route_provider_, DetachRoute(mojo::String(kRouteId2)))
1063 .Times(kMaxPendingRequests); 1070 .Times(kMaxPendingRequests);
1064 RegisterMediaRouteProvider(); 1071 RegisterMediaRouteProvider();
1065 ProcessEventLoop(); 1072 ProcessEventLoop();
1066 } 1073 }
1067 1074
1068 } // namespace media_router 1075 } // namespace media_router
OLDNEW
« no previous file with comments | « chrome/browser/media/router/media_router_mojo_impl.cc ('k') | chrome/browser/media/router/mock_media_router.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698