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

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

Issue 1419853003: [Media Router] Connection reattempt logic and bound pending request queue size. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 1 month 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
« no previous file with comments | « chrome/browser/media/router/media_router_mojo_impl.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 757 matching lines...) Expand 10 before | Expand all | Expand 10 after
768 process_manager_ = static_cast<TestProcessManager*>( 768 process_manager_ = static_cast<TestProcessManager*>(
769 extensions::ProcessManager::Get(profile_.get())); 769 extensions::ProcessManager::Get(profile_.get()));
770 DCHECK(process_manager_); 770 DCHECK(process_manager_);
771 771
772 // Create MR and its proxy, so that it can be accessed through Mojo. 772 // Create MR and its proxy, so that it can be accessed through Mojo.
773 media_router_.reset(new MediaRouterMojoImpl(process_manager_)); 773 media_router_.reset(new MediaRouterMojoImpl(process_manager_));
774 ProcessEventLoop(); 774 ProcessEventLoop();
775 } 775 }
776 776
777 void TearDown() override { 777 void TearDown() override {
778 media_router_.reset();
778 profile_.reset(); 779 profile_.reset();
779 // Explicitly delete the TestingBrowserProcess before |message_loop_|. 780 // Explicitly delete the TestingBrowserProcess before |message_loop_|.
780 // This allows it to do cleanup before |message_loop_| goes away. 781 // This allows it to do cleanup before |message_loop_| goes away.
781 TestingBrowserProcess::DeleteInstance(); 782 TestingBrowserProcess::DeleteInstance();
782 } 783 }
783 784
784 // Constructs bindings so that |media_router_| delegates calls to 785 // Constructs bindings so that |media_router_| delegates calls to
785 // |mojo_media_router_|, which are then handled by 786 // |mojo_media_router_|, which are then handled by
786 // |mock_media_route_provider_service_|. 787 // |mock_media_route_provider_service_|.
787 void BindMediaRouteProvider() { 788 void BindMediaRouteProvider() {
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
856 // The queued CloseRoute(kRouteId2) call should be executed. 857 // The queued CloseRoute(kRouteId2) call should be executed.
857 EXPECT_CALL(provide_handler_, Invoke(testing::Not(""))); 858 EXPECT_CALL(provide_handler_, Invoke(testing::Not("")));
858 EXPECT_CALL(*process_manager_, IsEventPageSuspended(kExtensionId)) 859 EXPECT_CALL(*process_manager_, IsEventPageSuspended(kExtensionId))
859 .WillOnce(Return(false)); 860 .WillOnce(Return(false));
860 EXPECT_CALL(mock_media_route_provider_, CloseRoute(mojo::String(kRouteId2))); 861 EXPECT_CALL(mock_media_route_provider_, CloseRoute(mojo::String(kRouteId2)));
861 BindMediaRouteProvider(); 862 BindMediaRouteProvider();
862 RegisterMediaRouteProvider(); 863 RegisterMediaRouteProvider();
863 ProcessEventLoop(); 864 ProcessEventLoop();
864 } 865 }
865 866
867 TEST_F(MediaRouterMojoExtensionTest, AttemptedWakeupTooManyTimes) {
868 BindMediaRouteProvider();
869
870 // CloseRoute is called while extension is suspended. It should be queued.
871 // Schedule a component extension wakeup.
872 EXPECT_CALL(*process_manager_, IsEventPageSuspended(kExtensionId))
873 .WillOnce(Return(true));
874 EXPECT_CALL(*process_manager_, WakeEventPage(kExtensionId, _))
875 .WillOnce(testing::DoAll(media::RunCallback<1>(true), Return(true)));
876 media_router_->CloseRoute(kRouteId);
877 EXPECT_EQ(1u, media_router_->pending_requests_.size());
878
879 // Media route provider fails to connect to media router before extension is
880 // suspended again, and |OnConnectionError| is invoked. Retry the wakeup.
881 EXPECT_CALL(*process_manager_, WakeEventPage(kExtensionId, _))
882 .Times(MediaRouterMojoImpl::kMaxWakeupAttemptCount - 1)
883 .WillRepeatedly(
884 testing::DoAll(media::RunCallback<1>(true), Return(true)));
885 for (int i = 0; i < MediaRouterMojoImpl::kMaxWakeupAttemptCount - 1; ++i)
886 media_router_->OnConnectionError();
887
888 // We have already tried |kMaxWakeupAttemptCount| times. If we get an error
889 // again, we will give up and the pending request queue will be drained.
890 media_router_->OnConnectionError();
891 EXPECT_TRUE(media_router_->pending_requests_.empty());
892
893 // Requests that comes in after queue is drained should be queued.
894 EXPECT_CALL(*process_manager_, IsEventPageSuspended(kExtensionId))
895 .WillOnce(Return(true));
896 EXPECT_CALL(*process_manager_, WakeEventPage(kExtensionId, _))
897 .WillOnce(testing::DoAll(media::RunCallback<1>(true), Return(true)));
898 media_router_->CloseRoute(kRouteId);
899 EXPECT_EQ(1u, media_router_->pending_requests_.size());
900 }
901
902 TEST_F(MediaRouterMojoExtensionTest, WakeupFailedDrainsQueue) {
903 BindMediaRouteProvider();
904
905 // CloseRoute is called while extension is suspended. It should be queued.
906 // Schedule a component extension wakeup.
907 EXPECT_CALL(*process_manager_, IsEventPageSuspended(kExtensionId))
908 .WillOnce(Return(true));
909 base::Callback<void(bool)> extension_wakeup_callback;
910 EXPECT_CALL(*process_manager_, WakeEventPage(kExtensionId, _))
911 .WillOnce(
912 testing::DoAll(SaveArg<1>(&extension_wakeup_callback), Return(true)));
913 media_router_->CloseRoute(kRouteId);
914 EXPECT_EQ(1u, media_router_->pending_requests_.size());
915
916 // Extension wakeup callback returning false is an non-retryable error.
917 // Queue should be drained.
918 extension_wakeup_callback.Run(false);
919 EXPECT_TRUE(media_router_->pending_requests_.empty());
920
921 // Requests that comes in after queue is drained should be queued.
922 EXPECT_CALL(*process_manager_, IsEventPageSuspended(kExtensionId))
923 .WillOnce(Return(true));
924 EXPECT_CALL(*process_manager_, WakeEventPage(kExtensionId, _))
925 .WillOnce(testing::DoAll(media::RunCallback<1>(true), Return(true)));
926 media_router_->CloseRoute(kRouteId);
927 EXPECT_EQ(1u, media_router_->pending_requests_.size());
928 }
929
930 TEST_F(MediaRouterMojoExtensionTest, DropOldestPendingRequest) {
931 const size_t kMaxPendingRequests = MediaRouterMojoImpl::kMaxPendingRequests;
932
933 // Request is queued.
934 media_router_->CloseRoute(kRouteId);
935 EXPECT_EQ(1u, media_router_->pending_requests_.size());
936
937 for (size_t i = 0; i < kMaxPendingRequests; ++i)
938 media_router_->CloseRoute(kRouteId2);
939
940 // The request queue size should not exceed |kMaxPendingRequests|.
941 EXPECT_EQ(kMaxPendingRequests, media_router_->pending_requests_.size());
942
943 // The oldest request should have been dropped, so we don't expect to see
944 // CloseRoute(kRouteId) here.
945 BindMediaRouteProvider();
946 EXPECT_CALL(provide_handler_, Invoke(testing::Not("")));
947 EXPECT_CALL(*process_manager_, IsEventPageSuspended(kExtensionId))
948 .WillOnce(Return(false));
949 EXPECT_CALL(mock_media_route_provider_, CloseRoute(mojo::String(kRouteId2)))
950 .Times(kMaxPendingRequests);
951 RegisterMediaRouteProvider();
952 ProcessEventLoop();
953 }
954
866 } // namespace media_router 955 } // namespace media_router
OLDNEW
« no previous file with comments | « chrome/browser/media/router/media_router_mojo_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698