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

Side by Side Diff: content/browser/loader/resource_scheduler_unittest.cc

Issue 465363003: ResourceScheduler get visual signal from RenderViewHostImpl (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: nit fix Created 6 years, 4 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/browser/loader/resource_scheduler.h" 5 #include "content/browser/loader/resource_scheduler.h"
6 6
7 #include "base/memory/scoped_vector.h" 7 #include "base/memory/scoped_vector.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/strings/string_number_conversions.h" 9 #include "base/strings/string_number_conversions.h"
10 #include "base/timer/mock_timer.h" 10 #include "base/timer/mock_timer.h"
11 #include "base/timer/timer.h" 11 #include "base/timer/timer.h"
12 #include "content/browser/browser_thread_impl.h" 12 #include "content/browser/browser_thread_impl.h"
13 #include "content/browser/loader/resource_dispatcher_host_impl.h" 13 #include "content/browser/loader/resource_dispatcher_host_impl.h"
14 #include "content/browser/loader/resource_message_filter.h" 14 #include "content/browser/loader/resource_message_filter.h"
15 #include "content/browser/loader/resource_request_info_impl.h" 15 #include "content/browser/loader/resource_request_info_impl.h"
16 #include "content/common/resource_messages.h" 16 #include "content/common/resource_messages.h"
17 #include "content/public/browser/resource_context.h" 17 #include "content/public/browser/resource_context.h"
18 #include "content/public/browser/resource_controller.h" 18 #include "content/public/browser/resource_controller.h"
19 #include "content/public/browser/resource_throttle.h" 19 #include "content/public/browser/resource_throttle.h"
20 #include "content/public/common/process_type.h" 20 #include "content/public/common/process_type.h"
21 #include "content/public/common/resource_type.h" 21 #include "content/public/common/resource_type.h"
22 #include "content/public/test/mock_render_process_host.h"
23 #include "content/public/test/test_browser_context.h"
24 #include "content/test/test_web_contents.h"
22 #include "net/base/host_port_pair.h" 25 #include "net/base/host_port_pair.h"
23 #include "net/base/request_priority.h" 26 #include "net/base/request_priority.h"
24 #include "net/http/http_server_properties_impl.h" 27 #include "net/http/http_server_properties_impl.h"
25 #include "net/url_request/url_request.h" 28 #include "net/url_request/url_request.h"
26 #include "net/url_request/url_request_test_util.h" 29 #include "net/url_request/url_request_test_util.h"
27 #include "testing/gtest/include/gtest/gtest.h" 30 #include "testing/gtest/include/gtest/gtest.h"
28 31
29 namespace content { 32 namespace content {
30 33
31 namespace { 34 namespace {
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 FakeResourceContext context_; 136 FakeResourceContext context_;
134 }; 137 };
135 138
136 class ResourceSchedulerTest : public testing::Test { 139 class ResourceSchedulerTest : public testing::Test {
137 protected: 140 protected:
138 ResourceSchedulerTest() 141 ResourceSchedulerTest()
139 : next_request_id_(0), 142 : next_request_id_(0),
140 ui_thread_(BrowserThread::UI, &message_loop_), 143 ui_thread_(BrowserThread::UI, &message_loop_),
141 io_thread_(BrowserThread::IO, &message_loop_), 144 io_thread_(BrowserThread::IO, &message_loop_),
142 mock_timer_(new base::MockTimer(true, true)) { 145 mock_timer_(new base::MockTimer(true, true)) {
146 // Set up web contents.
147 render_process_host_factory_.reset(new MockRenderProcessHostFactory());
148 browser_context_.reset(new TestBrowserContext());
149 scoped_refptr<SiteInstance> site_instance =
150 SiteInstance::Create(browser_context_.get());
151 scoped_refptr<SiteInstance> site_instance_background =
152 SiteInstance::Create(browser_context_.get());
153 scoped_refptr<SiteInstance> site_instance_2 =
154 SiteInstance::Create(browser_context_.get());
155 scoped_refptr<SiteInstance> site_instance_background_2 =
156 SiteInstance::Create(browser_context_.get());
157 SiteInstanceImpl::set_render_process_host_factory(
158 render_process_host_factory_.get());
159
160 web_contents_.reset(
161 TestWebContents::Create(browser_context_.get(), site_instance.get()));
162 web_contents_background_.reset(
163 TestWebContents::Create(browser_context_.get(),
164 site_instance_background.get()));
165 web_contents_2_.reset(
166 TestWebContents::Create(browser_context_.get(), site_instance_2.get()));
167 web_contents_background_2_.reset(
168 TestWebContents::Create(browser_context_.get(),
169 site_instance_background_2.get()));
170
171 // set up resource scheduler
143 scheduler_.set_timer_for_testing(scoped_ptr<base::Timer>(mock_timer_)); 172 scheduler_.set_timer_for_testing(scoped_ptr<base::Timer>(mock_timer_));
144 173
145 // TODO(aiolos): Remove when throttling and coalescing have both landed. 174 // TODO(aiolos): Remove when throttling and coalescing have both landed.
146 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, 175 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */,
147 false /* should_coalesce */); 176 false /* should_coalesce */);
148 177
149 scheduler_.OnClientCreated(kChildId, kRouteId); 178 scheduler_.OnClientCreated(kChildId, kRouteId, web_contents_.get());
150 scheduler_.OnVisibilityChanged(kChildId, kRouteId, true); 179 scheduler_.OnClientCreated(kBackgroundChildId,
151 scheduler_.OnClientCreated(kBackgroundChildId, kBackgroundRouteId); 180 kBackgroundRouteId,
181 web_contents_background_.get());
182
183 // Set up initial visibility.
184 web_contents_->WasShown();
185 web_contents_background_->WasHidden();
186 web_contents_2_->WasHidden();
187 web_contents_background_2_->WasHidden();
188
152 context_.set_http_server_properties(http_server_properties_.GetWeakPtr()); 189 context_.set_http_server_properties(http_server_properties_.GetWeakPtr());
153 } 190 }
154 191
155 virtual ~ResourceSchedulerTest() { 192 virtual ~ResourceSchedulerTest() {
156 scheduler_.OnClientDeleted(kChildId, kRouteId); 193 scheduler_.OnClientDeleted(kChildId, kRouteId);
157 scheduler_.OnClientDeleted(kBackgroundChildId, kBackgroundRouteId); 194 scheduler_.OnClientDeleted(kBackgroundChildId, kBackgroundRouteId);
195
196 web_contents_.reset();
197 web_contents_background_.reset();
198 web_contents_2_.reset();
199 web_contents_background_2_.reset();
200 browser_context_.reset();
201 render_process_host_factory_.reset();
158 } 202 }
159 203
160 scoped_ptr<net::URLRequest> NewURLRequestWithChildAndRoute( 204 scoped_ptr<net::URLRequest> NewURLRequestWithChildAndRoute(
161 const char* url, 205 const char* url,
162 net::RequestPriority priority, 206 net::RequestPriority priority,
163 int child_id, 207 int child_id,
164 int route_id, 208 int route_id,
165 bool is_async) { 209 bool is_async) {
166 scoped_ptr<net::URLRequest> url_request( 210 scoped_ptr<net::URLRequest> url_request(
167 context_.CreateRequest(GURL(url), priority, NULL, NULL)); 211 context_.CreateRequest(GURL(url), priority, NULL, NULL));
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
272 316
273 int next_request_id_; 317 int next_request_id_;
274 base::MessageLoopForIO message_loop_; 318 base::MessageLoopForIO message_loop_;
275 BrowserThreadImpl ui_thread_; 319 BrowserThreadImpl ui_thread_;
276 BrowserThreadImpl io_thread_; 320 BrowserThreadImpl io_thread_;
277 ResourceDispatcherHostImpl rdh_; 321 ResourceDispatcherHostImpl rdh_;
278 ResourceScheduler scheduler_; 322 ResourceScheduler scheduler_;
279 base::MockTimer* mock_timer_; 323 base::MockTimer* mock_timer_;
280 net::HttpServerPropertiesImpl http_server_properties_; 324 net::HttpServerPropertiesImpl http_server_properties_;
281 net::TestURLRequestContext context_; 325 net::TestURLRequestContext context_;
326 scoped_ptr<MockRenderProcessHostFactory> render_process_host_factory_;
327 scoped_ptr<TestBrowserContext> browser_context_;
328 scoped_ptr<TestWebContents> web_contents_;
329 scoped_ptr<TestWebContents> web_contents_background_;
330 scoped_ptr<TestWebContents> web_contents_2_;
331 scoped_ptr<TestWebContents> web_contents_background_2_;
282 }; 332 };
283 333
284 TEST_F(ResourceSchedulerTest, OneIsolatedLowRequest) { 334 TEST_F(ResourceSchedulerTest, OneIsolatedLowRequest) {
285 scoped_ptr<TestRequest> request(NewRequest("http://host/1", net::LOWEST)); 335 scoped_ptr<TestRequest> request(NewRequest("http://host/1", net::LOWEST));
286 EXPECT_TRUE(request->started()); 336 EXPECT_TRUE(request->started());
287 } 337 }
288 338
289 TEST_F(ResourceSchedulerTest, OneLowLoadsUntilIdle) { 339 TEST_F(ResourceSchedulerTest, OneLowLoadsUntilIdle) {
290 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST)); 340 scoped_ptr<TestRequest> high(NewRequest("http://host/high", net::HIGHEST));
291 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST)); 341 scoped_ptr<TestRequest> low(NewRequest("http://host/low", net::LOWEST));
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after
631 ChangeRequestPriority(low2_spdy.get(), net::LOWEST); 681 ChangeRequestPriority(low2_spdy.get(), net::LOWEST);
632 scoped_ptr<TestRequest> low2(NewRequest("http://host/low", net::LOWEST)); 682 scoped_ptr<TestRequest> low2(NewRequest("http://host/low", net::LOWEST));
633 EXPECT_TRUE(low2->started()); 683 EXPECT_TRUE(low2->started());
634 } 684 }
635 685
636 TEST_F(ResourceSchedulerTest, ThrottledClientCreation) { 686 TEST_F(ResourceSchedulerTest, ThrottledClientCreation) {
637 // TODO(aiolos): remove when throttling and coalescing have both landed 687 // TODO(aiolos): remove when throttling and coalescing have both landed
638 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, 688 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */,
639 false /* should_coalesce */); 689 false /* should_coalesce */);
640 EXPECT_TRUE(scheduler_.should_throttle()); 690 EXPECT_TRUE(scheduler_.should_throttle());
641 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); 691 scheduler_.OnClientCreated(kBackgroundChildId2,
692 kBackgroundRouteId2,
693 web_contents_background_2_.get());
642 694
643 EXPECT_EQ(ResourceScheduler::THROTTLED, 695 EXPECT_EQ(ResourceScheduler::THROTTLED,
644 scheduler_.GetClientStateForTesting(kBackgroundChildId2, 696 scheduler_.GetClientStateForTesting(kBackgroundChildId2,
645 kBackgroundRouteId2)); 697 kBackgroundRouteId2));
646 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); 698 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2);
647 } 699 }
648 700
649 TEST_F(ResourceSchedulerTest, ActiveClientThrottleUpdateOnLoadingChange) { 701 TEST_F(ResourceSchedulerTest, ActiveClientThrottleUpdateOnLoadingChange) {
650 // TODO(aiolos): remove when throttling and coalescing have both landed 702 // TODO(aiolos): remove when throttling and coalescing have both landed
651 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, 703 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */,
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
718 false /* should_coalesce */); 770 false /* should_coalesce */);
719 EXPECT_EQ(ResourceScheduler::THROTTLED, 771 EXPECT_EQ(ResourceScheduler::THROTTLED,
720 scheduler_.GetClientStateForTesting(kBackgroundChildId, 772 scheduler_.GetClientStateForTesting(kBackgroundChildId,
721 kBackgroundRouteId)); 773 kBackgroundRouteId));
722 scoped_ptr<TestRequest> high( 774 scoped_ptr<TestRequest> high(
723 NewBackgroundRequest("http://host/high", net::HIGHEST)); 775 NewBackgroundRequest("http://host/high", net::HIGHEST));
724 scoped_ptr<TestRequest> request( 776 scoped_ptr<TestRequest> request(
725 NewBackgroundRequest("http://host/req", net::IDLE)); 777 NewBackgroundRequest("http://host/req", net::IDLE));
726 EXPECT_FALSE(request->started()); 778 EXPECT_FALSE(request->started());
727 779
728 scheduler_.OnVisibilityChanged(kBackgroundChildId, kBackgroundRouteId, true); 780 web_contents_background_->WasShown();
729 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, 781 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING,
730 scheduler_.GetClientStateForTesting(kBackgroundChildId, 782 scheduler_.GetClientStateForTesting(kBackgroundChildId,
731 kBackgroundRouteId)); 783 kBackgroundRouteId));
732 EXPECT_TRUE(request->started()); 784 EXPECT_TRUE(request->started());
733 } 785 }
734 786
735 TEST_F(ResourceSchedulerTest, UnthrottleNewlyAudibleClient) { 787 TEST_F(ResourceSchedulerTest, UnthrottleNewlyAudibleClient) {
736 // TODO(aiolos): remove when throttling and coalescing have both landed 788 // TODO(aiolos): remove when throttling and coalescing have both landed
737 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, 789 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */,
738 false /* should_coalesce */); 790 false /* should_coalesce */);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
774 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 826 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
775 EXPECT_EQ(ResourceScheduler::THROTTLED, 827 EXPECT_EQ(ResourceScheduler::THROTTLED,
776 scheduler_.GetClientStateForTesting(kBackgroundChildId, 828 scheduler_.GetClientStateForTesting(kBackgroundChildId,
777 kBackgroundRouteId)); 829 kBackgroundRouteId));
778 } 830 }
779 831
780 TEST_F(ResourceSchedulerTest, AudibleClientStillUnthrottledOnVisabilityChange) { 832 TEST_F(ResourceSchedulerTest, AudibleClientStillUnthrottledOnVisabilityChange) {
781 // TODO(aiolos): remove when throttling and coalescing have both landed 833 // TODO(aiolos): remove when throttling and coalescing have both landed
782 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, 834 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */,
783 false /* should_coalesce */); 835 false /* should_coalesce */);
784 scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); 836 web_contents_->WasHidden();
785 scheduler_.OnAudibilityChanged(kChildId, kRouteId, true); 837 scheduler_.OnAudibilityChanged(kChildId, kRouteId, true);
786 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, 838 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING,
787 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 839 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
788 EXPECT_EQ(ResourceScheduler::THROTTLED, 840 EXPECT_EQ(ResourceScheduler::THROTTLED,
789 scheduler_.GetClientStateForTesting(kBackgroundChildId, 841 scheduler_.GetClientStateForTesting(kBackgroundChildId,
790 kBackgroundRouteId)); 842 kBackgroundRouteId));
791 843
792 scheduler_.OnVisibilityChanged(kChildId, kRouteId, true); 844 web_contents_->WasShown();
793 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, 845 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING,
794 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 846 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
795 EXPECT_EQ(ResourceScheduler::THROTTLED, 847 EXPECT_EQ(ResourceScheduler::THROTTLED,
796 scheduler_.GetClientStateForTesting(kBackgroundChildId, 848 scheduler_.GetClientStateForTesting(kBackgroundChildId,
797 kBackgroundRouteId)); 849 kBackgroundRouteId));
798 850
799 scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); 851 web_contents_->WasHidden();
800 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, 852 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING,
801 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 853 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
802 EXPECT_EQ(ResourceScheduler::THROTTLED, 854 EXPECT_EQ(ResourceScheduler::THROTTLED,
803 scheduler_.GetClientStateForTesting(kBackgroundChildId, 855 scheduler_.GetClientStateForTesting(kBackgroundChildId,
804 kBackgroundRouteId)); 856 kBackgroundRouteId));
805 } 857 }
806 858
807 TEST_F(ResourceSchedulerTest, ThrottledClientStartsNextHighestPriorityRequest) { 859 TEST_F(ResourceSchedulerTest, ThrottledClientStartsNextHighestPriorityRequest) {
808 // TODO(aiolos): remove when throttling and coalescing have both landed 860 // TODO(aiolos): remove when throttling and coalescing have both landed
809 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, 861 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */,
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
978 // TODO(aiolos): remove when throttling and coalescing have both landed 1030 // TODO(aiolos): remove when throttling and coalescing have both landed
979 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, 1031 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */,
980 false /* should_coalesce */); 1032 false /* should_coalesce */);
981 EXPECT_EQ(ResourceScheduler::THROTTLED, 1033 EXPECT_EQ(ResourceScheduler::THROTTLED,
982 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1034 scheduler_.GetClientStateForTesting(kBackgroundChildId,
983 kBackgroundRouteId)); 1035 kBackgroundRouteId));
984 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, 1036 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING,
985 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 1037 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
986 EXPECT_FALSE(scheduler_.active_clients_loaded()); 1038 EXPECT_FALSE(scheduler_.active_clients_loaded());
987 1039
988 scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); 1040 web_contents_->WasHidden();
989 EXPECT_TRUE(scheduler_.active_clients_loaded()); 1041 EXPECT_TRUE(scheduler_.active_clients_loaded());
990 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, 1042 EXPECT_EQ(ResourceScheduler::UNTHROTTLED,
991 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 1043 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
992 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, 1044 EXPECT_EQ(ResourceScheduler::UNTHROTTLED,
993 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1045 scheduler_.GetClientStateForTesting(kBackgroundChildId,
994 kBackgroundRouteId)); 1046 kBackgroundRouteId));
995 1047
996 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); 1048 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true);
997 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, 1049 EXPECT_EQ(ResourceScheduler::UNTHROTTLED,
998 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 1050 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
(...skipping 16 matching lines...) Expand all
1015 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, 1067 EXPECT_EQ(ResourceScheduler::UNTHROTTLED,
1016 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1068 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1017 kBackgroundRouteId)); 1069 kBackgroundRouteId));
1018 } 1070 }
1019 1071
1020 TEST_F(ResourceSchedulerTest, 1072 TEST_F(ResourceSchedulerTest,
1021 UnloadedClientVisibilityChangedCorrectlyUnthrottles) { 1073 UnloadedClientVisibilityChangedCorrectlyUnthrottles) {
1022 // TODO(aiolos): remove when throttling and coalescing have both landed 1074 // TODO(aiolos): remove when throttling and coalescing have both landed
1023 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, 1075 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */,
1024 false /* should_coalesce */); 1076 false /* should_coalesce */);
1025 scheduler_.OnClientCreated(kChildId2, kRouteId2); 1077 scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get());
1026 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); 1078 scheduler_.OnClientCreated(kBackgroundChildId2,
1079 kBackgroundRouteId2,
1080 web_contents_background_2_.get());
1027 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); 1081 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true);
1028 scheduler_.OnLoadingStateChanged( 1082 scheduler_.OnLoadingStateChanged(
1029 kBackgroundChildId2, kBackgroundRouteId2, true); 1083 kBackgroundChildId2, kBackgroundRouteId2, true);
1030 1084
1031 // 1 visible, 3 hidden 1085 // 1 visible, 3 hidden
1032 EXPECT_FALSE(scheduler_.active_clients_loaded()); 1086 EXPECT_FALSE(scheduler_.active_clients_loaded());
1033 EXPECT_EQ(ResourceScheduler::THROTTLED, 1087 EXPECT_EQ(ResourceScheduler::THROTTLED,
1034 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1088 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1035 kBackgroundRouteId)); 1089 kBackgroundRouteId));
1036 EXPECT_EQ(ResourceScheduler::THROTTLED, 1090 EXPECT_EQ(ResourceScheduler::THROTTLED,
1037 scheduler_.GetClientStateForTesting(kBackgroundChildId2, 1091 scheduler_.GetClientStateForTesting(kBackgroundChildId2,
1038 kBackgroundRouteId2)); 1092 kBackgroundRouteId2));
1039 EXPECT_EQ(ResourceScheduler::THROTTLED, 1093 EXPECT_EQ(ResourceScheduler::THROTTLED,
1040 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2)); 1094 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2));
1041 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, 1095 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING,
1042 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 1096 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
1043 1097
1044 // 2 visible, 2 hidden 1098 // 2 visible, 2 hidden
1045 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); 1099 web_contents_2_->WasShown();
1046 EXPECT_FALSE(scheduler_.active_clients_loaded()); 1100 EXPECT_FALSE(scheduler_.active_clients_loaded());
1047 EXPECT_EQ(ResourceScheduler::THROTTLED, 1101 EXPECT_EQ(ResourceScheduler::THROTTLED,
1048 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1102 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1049 kBackgroundRouteId)); 1103 kBackgroundRouteId));
1050 EXPECT_EQ(ResourceScheduler::THROTTLED, 1104 EXPECT_EQ(ResourceScheduler::THROTTLED,
1051 scheduler_.GetClientStateForTesting(kBackgroundChildId2, 1105 scheduler_.GetClientStateForTesting(kBackgroundChildId2,
1052 kBackgroundRouteId2)); 1106 kBackgroundRouteId2));
1053 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, 1107 EXPECT_EQ(ResourceScheduler::UNTHROTTLED,
1054 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2)); 1108 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2));
1055 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, 1109 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING,
1056 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 1110 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
1057 1111
1058 // 1 visible, 3 hidden 1112 // 1 visible, 3 hidden
1059 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, false); 1113 web_contents_2_->WasHidden();
1060 EXPECT_FALSE(scheduler_.active_clients_loaded()); 1114 EXPECT_FALSE(scheduler_.active_clients_loaded());
1061 EXPECT_EQ(ResourceScheduler::THROTTLED, 1115 EXPECT_EQ(ResourceScheduler::THROTTLED,
1062 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1116 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1063 kBackgroundRouteId)); 1117 kBackgroundRouteId));
1064 EXPECT_EQ(ResourceScheduler::THROTTLED, 1118 EXPECT_EQ(ResourceScheduler::THROTTLED,
1065 scheduler_.GetClientStateForTesting(kBackgroundChildId2, 1119 scheduler_.GetClientStateForTesting(kBackgroundChildId2,
1066 kBackgroundRouteId2)); 1120 kBackgroundRouteId2));
1067 EXPECT_EQ(ResourceScheduler::THROTTLED, 1121 EXPECT_EQ(ResourceScheduler::THROTTLED,
1068 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2)); 1122 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2));
1069 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, 1123 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING,
1070 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 1124 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
1071 1125
1072 scheduler_.OnClientDeleted(kChildId2, kRouteId2); 1126 scheduler_.OnClientDeleted(kChildId2, kRouteId2);
1073 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); 1127 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2);
1074 } 1128 }
1075 1129
1076 TEST_F(ResourceSchedulerTest, 1130 TEST_F(ResourceSchedulerTest,
1077 UnloadedClientAudibilityChangedCorrectlyUnthrottles) { 1131 UnloadedClientAudibilityChangedCorrectlyUnthrottles) {
1078 // TODO(aiolos): remove when throttling and coalescing have both landed 1132 // TODO(aiolos): remove when throttling and coalescing have both landed
1079 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, 1133 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */,
1080 false /* should_coalesce */); 1134 false /* should_coalesce */);
1081 scheduler_.OnClientCreated(kChildId2, kRouteId2); 1135 scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get());
1082 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); 1136 scheduler_.OnClientCreated(kBackgroundChildId2,
1137 kBackgroundRouteId2,
1138 web_contents_background_2_.get());
1083 scheduler_.OnLoadingStateChanged( 1139 scheduler_.OnLoadingStateChanged(
1084 kBackgroundChildId2, kBackgroundRouteId2, true); 1140 kBackgroundChildId2, kBackgroundRouteId2, true);
1085 scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); 1141 web_contents_->WasHidden();
1086 scheduler_.OnAudibilityChanged(kChildId, kRouteId, true); 1142 scheduler_.OnAudibilityChanged(kChildId, kRouteId, true);
1087 1143
1088 // 1 audible, 3 hidden 1144 // 1 audible, 3 hidden
1089 EXPECT_FALSE(scheduler_.active_clients_loaded()); 1145 EXPECT_FALSE(scheduler_.active_clients_loaded());
1090 EXPECT_EQ(ResourceScheduler::THROTTLED, 1146 EXPECT_EQ(ResourceScheduler::THROTTLED,
1091 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1147 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1092 kBackgroundRouteId)); 1148 kBackgroundRouteId));
1093 EXPECT_EQ(ResourceScheduler::THROTTLED, 1149 EXPECT_EQ(ResourceScheduler::THROTTLED,
1094 scheduler_.GetClientStateForTesting(kBackgroundChildId2, 1150 scheduler_.GetClientStateForTesting(kBackgroundChildId2,
1095 kBackgroundRouteId2)); 1151 kBackgroundRouteId2));
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1128 1184
1129 scheduler_.OnClientDeleted(kChildId2, kRouteId2); 1185 scheduler_.OnClientDeleted(kChildId2, kRouteId2);
1130 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); 1186 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2);
1131 } 1187 }
1132 1188
1133 TEST_F(ResourceSchedulerTest, 1189 TEST_F(ResourceSchedulerTest,
1134 LoadedClientVisibilityChangedCorrectlyUnthrottles) { 1190 LoadedClientVisibilityChangedCorrectlyUnthrottles) {
1135 // TODO(aiolos): remove when throttling and coalescing have both landed 1191 // TODO(aiolos): remove when throttling and coalescing have both landed
1136 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, 1192 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */,
1137 false /* should_coalesce */); 1193 false /* should_coalesce */);
1138 scheduler_.OnClientCreated(kChildId2, kRouteId2); 1194 scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get());
1139 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); 1195 scheduler_.OnClientCreated(kBackgroundChildId2,
1196 kBackgroundRouteId2,
1197 web_contents_background_2_.get());
1140 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); 1198 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true);
1141 scheduler_.OnLoadingStateChanged( 1199 scheduler_.OnLoadingStateChanged(
1142 kBackgroundChildId2, kBackgroundRouteId2, true); 1200 kBackgroundChildId2, kBackgroundRouteId2, true);
1143 // 1 visible, 3 hidden 1201 // 1 visible, 3 hidden
1144 EXPECT_FALSE(scheduler_.active_clients_loaded()); 1202 EXPECT_FALSE(scheduler_.active_clients_loaded());
1145 EXPECT_EQ(ResourceScheduler::THROTTLED, 1203 EXPECT_EQ(ResourceScheduler::THROTTLED,
1146 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1204 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1147 kBackgroundRouteId)); 1205 kBackgroundRouteId));
1148 EXPECT_EQ(ResourceScheduler::THROTTLED, 1206 EXPECT_EQ(ResourceScheduler::THROTTLED,
1149 scheduler_.GetClientStateForTesting(kBackgroundChildId2, 1207 scheduler_.GetClientStateForTesting(kBackgroundChildId2,
1150 kBackgroundRouteId2)); 1208 kBackgroundRouteId2));
1151 EXPECT_EQ(ResourceScheduler::THROTTLED, 1209 EXPECT_EQ(ResourceScheduler::THROTTLED,
1152 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2)); 1210 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2));
1153 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, 1211 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING,
1154 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 1212 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
1155 1213
1156 // 2 visible, 2 hidden 1214 // 2 visible, 2 hidden
1157 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); 1215 web_contents_2_->WasShown();
1158 EXPECT_FALSE(scheduler_.active_clients_loaded()); 1216 EXPECT_FALSE(scheduler_.active_clients_loaded());
1159 EXPECT_EQ(ResourceScheduler::THROTTLED, 1217 EXPECT_EQ(ResourceScheduler::THROTTLED,
1160 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1218 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1161 kBackgroundRouteId)); 1219 kBackgroundRouteId));
1162 EXPECT_EQ(ResourceScheduler::THROTTLED, 1220 EXPECT_EQ(ResourceScheduler::THROTTLED,
1163 scheduler_.GetClientStateForTesting(kBackgroundChildId2, 1221 scheduler_.GetClientStateForTesting(kBackgroundChildId2,
1164 kBackgroundRouteId2)); 1222 kBackgroundRouteId2));
1165 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, 1223 EXPECT_EQ(ResourceScheduler::UNTHROTTLED,
1166 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2)); 1224 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2));
1167 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, 1225 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING,
1168 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 1226 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
1169 1227
1170 // 1 visible, 3 hidden 1228 // 1 visible, 3 hidden
1171 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, false); 1229 web_contents_2_->WasHidden();
1172 EXPECT_FALSE(scheduler_.active_clients_loaded()); 1230 EXPECT_FALSE(scheduler_.active_clients_loaded());
1173 EXPECT_EQ(ResourceScheduler::THROTTLED, 1231 EXPECT_EQ(ResourceScheduler::THROTTLED,
1174 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1232 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1175 kBackgroundRouteId)); 1233 kBackgroundRouteId));
1176 EXPECT_EQ(ResourceScheduler::THROTTLED, 1234 EXPECT_EQ(ResourceScheduler::THROTTLED,
1177 scheduler_.GetClientStateForTesting(kBackgroundChildId2, 1235 scheduler_.GetClientStateForTesting(kBackgroundChildId2,
1178 kBackgroundRouteId2)); 1236 kBackgroundRouteId2));
1179 EXPECT_EQ(ResourceScheduler::THROTTLED, 1237 EXPECT_EQ(ResourceScheduler::THROTTLED,
1180 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2)); 1238 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2));
1181 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, 1239 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING,
1182 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 1240 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
1183 1241
1184 scheduler_.OnClientDeleted(kChildId2, kRouteId2); 1242 scheduler_.OnClientDeleted(kChildId2, kRouteId2);
1185 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); 1243 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2);
1186 } 1244 }
1187 1245
1188 TEST_F(ResourceSchedulerTest, 1246 TEST_F(ResourceSchedulerTest,
1189 LoadedClientAudibilityChangedCorrectlyUnthrottles) { 1247 LoadedClientAudibilityChangedCorrectlyUnthrottles) {
1190 // TODO(aiolos): remove when throttling and coalescing have both landed 1248 // TODO(aiolos): remove when throttling and coalescing have both landed
1191 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, 1249 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */,
1192 false /* should_coalesce */); 1250 false /* should_coalesce */);
1193 scheduler_.OnClientCreated(kChildId2, kRouteId2); 1251 scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get());
1194 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); 1252 scheduler_.OnClientCreated(kBackgroundChildId2,
1253 kBackgroundRouteId2,
1254 web_contents_background_2_.get());
1195 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); 1255 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true);
1196 scheduler_.OnLoadingStateChanged( 1256 scheduler_.OnLoadingStateChanged(
1197 kBackgroundChildId2, kBackgroundRouteId2, true); 1257 kBackgroundChildId2, kBackgroundRouteId2, true);
1198 scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); 1258 web_contents_->WasHidden();
1199 scheduler_.OnAudibilityChanged(kChildId, kRouteId, true); 1259 scheduler_.OnAudibilityChanged(kChildId, kRouteId, true);
1200 // 1 audible, 3 hidden 1260 // 1 audible, 3 hidden
1201 EXPECT_FALSE(scheduler_.active_clients_loaded()); 1261 EXPECT_FALSE(scheduler_.active_clients_loaded());
1202 EXPECT_EQ(ResourceScheduler::THROTTLED, 1262 EXPECT_EQ(ResourceScheduler::THROTTLED,
1203 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1263 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1204 kBackgroundRouteId)); 1264 kBackgroundRouteId));
1205 EXPECT_EQ(ResourceScheduler::THROTTLED, 1265 EXPECT_EQ(ResourceScheduler::THROTTLED,
1206 scheduler_.GetClientStateForTesting(kBackgroundChildId2, 1266 scheduler_.GetClientStateForTesting(kBackgroundChildId2,
1207 kBackgroundRouteId2)); 1267 kBackgroundRouteId2));
1208 EXPECT_EQ(ResourceScheduler::THROTTLED, 1268 EXPECT_EQ(ResourceScheduler::THROTTLED,
(...skipping 30 matching lines...) Expand all
1239 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 1299 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
1240 1300
1241 scheduler_.OnClientDeleted(kChildId2, kRouteId2); 1301 scheduler_.OnClientDeleted(kChildId2, kRouteId2);
1242 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); 1302 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2);
1243 } 1303 }
1244 1304
1245 TEST_F(ResourceSchedulerTest, UnloadedClientBecomesHiddenCorrectlyUnthrottles) { 1305 TEST_F(ResourceSchedulerTest, UnloadedClientBecomesHiddenCorrectlyUnthrottles) {
1246 // TODO(aiolos): remove when throttling and coalescing have both landed 1306 // TODO(aiolos): remove when throttling and coalescing have both landed
1247 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, 1307 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */,
1248 false /* should_coalesce */); 1308 false /* should_coalesce */);
1249 scheduler_.OnClientCreated(kChildId2, kRouteId2); 1309 scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get());
1250 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); 1310 scheduler_.OnClientCreated(kBackgroundChildId2,
1311 kBackgroundRouteId2,
1312 web_contents_background_2_.get());
1251 scheduler_.OnLoadingStateChanged( 1313 scheduler_.OnLoadingStateChanged(
1252 kBackgroundChildId2, kBackgroundRouteId2, true); 1314 kBackgroundChildId2, kBackgroundRouteId2, true);
1253 1315
1254 // 2 visible, 2 hidden 1316 // 2 visible, 2 hidden
1255 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); 1317 web_contents_2_->WasShown();
1256 EXPECT_FALSE(scheduler_.active_clients_loaded()); 1318 EXPECT_FALSE(scheduler_.active_clients_loaded());
1257 EXPECT_EQ(ResourceScheduler::THROTTLED, 1319 EXPECT_EQ(ResourceScheduler::THROTTLED,
1258 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1320 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1259 kBackgroundRouteId)); 1321 kBackgroundRouteId));
1260 EXPECT_EQ(ResourceScheduler::THROTTLED, 1322 EXPECT_EQ(ResourceScheduler::THROTTLED,
1261 scheduler_.GetClientStateForTesting(kBackgroundChildId2, 1323 scheduler_.GetClientStateForTesting(kBackgroundChildId2,
1262 kBackgroundRouteId2)); 1324 kBackgroundRouteId2));
1263 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, 1325 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING,
1264 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2)); 1326 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2));
1265 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, 1327 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING,
1266 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 1328 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
1267 1329
1268 // 1 visible, 3 hidden 1330 // 1 visible, 3 hidden
1269 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, false); 1331 web_contents_2_->WasHidden();
1270 EXPECT_FALSE(scheduler_.active_clients_loaded()); 1332 EXPECT_FALSE(scheduler_.active_clients_loaded());
1271 EXPECT_EQ(ResourceScheduler::THROTTLED, 1333 EXPECT_EQ(ResourceScheduler::THROTTLED,
1272 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1334 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1273 kBackgroundRouteId)); 1335 kBackgroundRouteId));
1274 EXPECT_EQ(ResourceScheduler::THROTTLED, 1336 EXPECT_EQ(ResourceScheduler::THROTTLED,
1275 scheduler_.GetClientStateForTesting(kBackgroundChildId2, 1337 scheduler_.GetClientStateForTesting(kBackgroundChildId2,
1276 kBackgroundRouteId2)); 1338 kBackgroundRouteId2));
1277 EXPECT_EQ(ResourceScheduler::THROTTLED, 1339 EXPECT_EQ(ResourceScheduler::THROTTLED,
1278 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2)); 1340 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2));
1279 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, 1341 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING,
1280 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 1342 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
1281 1343
1282 // 0 visible, 4 hidden 1344 // 0 visible, 4 hidden
1283 scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); 1345 web_contents_->WasHidden();
1284 EXPECT_TRUE(scheduler_.active_clients_loaded()); 1346 EXPECT_TRUE(scheduler_.active_clients_loaded());
1285 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, 1347 EXPECT_EQ(ResourceScheduler::UNTHROTTLED,
1286 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1348 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1287 kBackgroundRouteId)); 1349 kBackgroundRouteId));
1288 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, 1350 EXPECT_EQ(ResourceScheduler::UNTHROTTLED,
1289 scheduler_.GetClientStateForTesting(kBackgroundChildId2, 1351 scheduler_.GetClientStateForTesting(kBackgroundChildId2,
1290 kBackgroundRouteId2)); 1352 kBackgroundRouteId2));
1291 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, 1353 EXPECT_EQ(ResourceScheduler::UNTHROTTLED,
1292 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2)); 1354 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2));
1293 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, 1355 EXPECT_EQ(ResourceScheduler::UNTHROTTLED,
1294 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 1356 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
1295 1357
1296 // 1 visible, 3 hidden 1358 // 1 visible, 3 hidden
1297 scheduler_.OnVisibilityChanged(kChildId, kRouteId, true); 1359 web_contents_->WasShown();
1298 EXPECT_FALSE(scheduler_.active_clients_loaded()); 1360 EXPECT_FALSE(scheduler_.active_clients_loaded());
1299 EXPECT_EQ(ResourceScheduler::THROTTLED, 1361 EXPECT_EQ(ResourceScheduler::THROTTLED,
1300 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1362 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1301 kBackgroundRouteId)); 1363 kBackgroundRouteId));
1302 EXPECT_EQ(ResourceScheduler::THROTTLED, 1364 EXPECT_EQ(ResourceScheduler::THROTTLED,
1303 scheduler_.GetClientStateForTesting(kBackgroundChildId2, 1365 scheduler_.GetClientStateForTesting(kBackgroundChildId2,
1304 kBackgroundRouteId2)); 1366 kBackgroundRouteId2));
1305 EXPECT_EQ(ResourceScheduler::THROTTLED, 1367 EXPECT_EQ(ResourceScheduler::THROTTLED,
1306 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2)); 1368 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2));
1307 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, 1369 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING,
1308 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 1370 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
1309 1371
1310 scheduler_.OnClientDeleted(kChildId2, kRouteId2); 1372 scheduler_.OnClientDeleted(kChildId2, kRouteId2);
1311 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); 1373 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2);
1312 } 1374 }
1313 1375
1314 TEST_F(ResourceSchedulerTest, UnloadedClientBecomesSilentCorrectlyUnthrottles) { 1376 TEST_F(ResourceSchedulerTest, UnloadedClientBecomesSilentCorrectlyUnthrottles) {
1315 // TODO(aiolos): remove when throttling and coalescing have both landed 1377 // TODO(aiolos): remove when throttling and coalescing have both landed
1316 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, 1378 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */,
1317 false /* should_coalesce */); 1379 false /* should_coalesce */);
1318 scheduler_.OnClientCreated(kChildId2, kRouteId2); 1380 scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get());
1319 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); 1381 scheduler_.OnClientCreated(kBackgroundChildId2,
1382 kBackgroundRouteId2,
1383 web_contents_background_2_.get());
1320 scheduler_.OnLoadingStateChanged( 1384 scheduler_.OnLoadingStateChanged(
1321 kBackgroundChildId2, kBackgroundRouteId2, true); 1385 kBackgroundChildId2, kBackgroundRouteId2, true);
1322 scheduler_.OnAudibilityChanged(kChildId, kRouteId, true); 1386 scheduler_.OnAudibilityChanged(kChildId, kRouteId, true);
1323 scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); 1387 web_contents_->WasHidden();
1324 scheduler_.OnAudibilityChanged(kChildId2, kRouteId2, true); 1388 scheduler_.OnAudibilityChanged(kChildId2, kRouteId2, true);
1325 // 2 audible, 2 hidden 1389 // 2 audible, 2 hidden
1326 EXPECT_FALSE(scheduler_.active_clients_loaded()); 1390 EXPECT_FALSE(scheduler_.active_clients_loaded());
1327 EXPECT_EQ(ResourceScheduler::THROTTLED, 1391 EXPECT_EQ(ResourceScheduler::THROTTLED,
1328 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1392 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1329 kBackgroundRouteId)); 1393 kBackgroundRouteId));
1330 EXPECT_EQ(ResourceScheduler::THROTTLED, 1394 EXPECT_EQ(ResourceScheduler::THROTTLED,
1331 scheduler_.GetClientStateForTesting(kBackgroundChildId2, 1395 scheduler_.GetClientStateForTesting(kBackgroundChildId2,
1332 kBackgroundRouteId2)); 1396 kBackgroundRouteId2));
1333 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, 1397 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING,
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1378 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 1442 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
1379 1443
1380 scheduler_.OnClientDeleted(kChildId2, kRouteId2); 1444 scheduler_.OnClientDeleted(kChildId2, kRouteId2);
1381 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); 1445 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2);
1382 } 1446 }
1383 1447
1384 TEST_F(ResourceSchedulerTest, LoadedClientBecomesHiddenCorrectlyThrottles) { 1448 TEST_F(ResourceSchedulerTest, LoadedClientBecomesHiddenCorrectlyThrottles) {
1385 // TODO(aiolos): remove when throttling and coalescing have both landed 1449 // TODO(aiolos): remove when throttling and coalescing have both landed
1386 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, 1450 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */,
1387 false /* should_coalesce */); 1451 false /* should_coalesce */);
1388 scheduler_.OnClientCreated(kChildId2, kRouteId2); 1452 scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get());
1389 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); 1453 scheduler_.OnClientCreated(kBackgroundChildId2,
1454 kBackgroundRouteId2,
1455 web_contents_background_2_.get());
1390 scheduler_.OnLoadingStateChanged( 1456 scheduler_.OnLoadingStateChanged(
1391 kBackgroundChildId2, kBackgroundRouteId2, true); 1457 kBackgroundChildId2, kBackgroundRouteId2, true);
1392 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); 1458 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true);
1393 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); 1459 web_contents_2_->WasShown();
1394 // 2 visible, 2 hidden 1460 // 2 visible, 2 hidden
1395 EXPECT_FALSE(scheduler_.active_clients_loaded()); 1461 EXPECT_FALSE(scheduler_.active_clients_loaded());
1396 EXPECT_EQ(ResourceScheduler::THROTTLED, 1462 EXPECT_EQ(ResourceScheduler::THROTTLED,
1397 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1463 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1398 kBackgroundRouteId)); 1464 kBackgroundRouteId));
1399 EXPECT_EQ(ResourceScheduler::THROTTLED, 1465 EXPECT_EQ(ResourceScheduler::THROTTLED,
1400 scheduler_.GetClientStateForTesting(kBackgroundChildId2, 1466 scheduler_.GetClientStateForTesting(kBackgroundChildId2,
1401 kBackgroundRouteId2)); 1467 kBackgroundRouteId2));
1402 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, 1468 EXPECT_EQ(ResourceScheduler::UNTHROTTLED,
1403 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2)); 1469 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2));
1404 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, 1470 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING,
1405 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 1471 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
1406 1472
1407 // 1 visible, 3 hidden 1473 // 1 visible, 3 hidden
1408 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, false); 1474 web_contents_2_->WasHidden();
1409 EXPECT_FALSE(scheduler_.active_clients_loaded()); 1475 EXPECT_FALSE(scheduler_.active_clients_loaded());
1410 EXPECT_EQ(ResourceScheduler::THROTTLED, 1476 EXPECT_EQ(ResourceScheduler::THROTTLED,
1411 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1477 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1412 kBackgroundRouteId)); 1478 kBackgroundRouteId));
1413 EXPECT_EQ(ResourceScheduler::THROTTLED, 1479 EXPECT_EQ(ResourceScheduler::THROTTLED,
1414 scheduler_.GetClientStateForTesting(kBackgroundChildId2, 1480 scheduler_.GetClientStateForTesting(kBackgroundChildId2,
1415 kBackgroundRouteId2)); 1481 kBackgroundRouteId2));
1416 EXPECT_EQ(ResourceScheduler::THROTTLED, 1482 EXPECT_EQ(ResourceScheduler::THROTTLED,
1417 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2)); 1483 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2));
1418 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, 1484 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING,
1419 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 1485 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
1420 1486
1421 // 0 visible, 4 hidden 1487 // 0 visible, 4 hidden
1422 scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); 1488 web_contents_->WasHidden();
1423 EXPECT_TRUE(scheduler_.active_clients_loaded()); 1489 EXPECT_TRUE(scheduler_.active_clients_loaded());
1424 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, 1490 EXPECT_EQ(ResourceScheduler::UNTHROTTLED,
1425 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1491 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1426 kBackgroundRouteId)); 1492 kBackgroundRouteId));
1427 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, 1493 EXPECT_EQ(ResourceScheduler::UNTHROTTLED,
1428 scheduler_.GetClientStateForTesting(kBackgroundChildId2, 1494 scheduler_.GetClientStateForTesting(kBackgroundChildId2,
1429 kBackgroundRouteId2)); 1495 kBackgroundRouteId2));
1430 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, 1496 EXPECT_EQ(ResourceScheduler::UNTHROTTLED,
1431 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2)); 1497 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2));
1432 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, 1498 EXPECT_EQ(ResourceScheduler::UNTHROTTLED,
1433 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 1499 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
1434 1500
1435 // 1 visible, 3 hidden 1501 // 1 visible, 3 hidden
1436 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); 1502 web_contents_2_->WasShown();
1437 EXPECT_TRUE(scheduler_.active_clients_loaded()); 1503 EXPECT_TRUE(scheduler_.active_clients_loaded());
1438 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, 1504 EXPECT_EQ(ResourceScheduler::UNTHROTTLED,
1439 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1505 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1440 kBackgroundRouteId)); 1506 kBackgroundRouteId));
1441 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, 1507 EXPECT_EQ(ResourceScheduler::UNTHROTTLED,
1442 scheduler_.GetClientStateForTesting(kBackgroundChildId2, 1508 scheduler_.GetClientStateForTesting(kBackgroundChildId2,
1443 kBackgroundRouteId2)); 1509 kBackgroundRouteId2));
1444 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, 1510 EXPECT_EQ(ResourceScheduler::UNTHROTTLED,
1445 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2)); 1511 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2));
1446 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, 1512 EXPECT_EQ(ResourceScheduler::UNTHROTTLED,
1447 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 1513 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
1448 1514
1449 scheduler_.OnClientDeleted(kChildId2, kRouteId2); 1515 scheduler_.OnClientDeleted(kChildId2, kRouteId2);
1450 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); 1516 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2);
1451 } 1517 }
1452 1518
1453 TEST_F(ResourceSchedulerTest, LoadedClientBecomesSilentCorrectlyThrottles) { 1519 TEST_F(ResourceSchedulerTest, LoadedClientBecomesSilentCorrectlyThrottles) {
1454 // TODO(aiolos): remove when throttling and coalescing have both landed 1520 // TODO(aiolos): remove when throttling and coalescing have both landed
1455 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, 1521 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */,
1456 false /* should_coalesce */); 1522 false /* should_coalesce */);
1457 scheduler_.OnClientCreated(kChildId2, kRouteId2); 1523 scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get());
1458 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); 1524 scheduler_.OnClientCreated(kBackgroundChildId2,
1525 kBackgroundRouteId2,
1526 web_contents_background_2_.get());
1459 scheduler_.OnLoadingStateChanged( 1527 scheduler_.OnLoadingStateChanged(
1460 kBackgroundChildId2, kBackgroundRouteId2, true); 1528 kBackgroundChildId2, kBackgroundRouteId2, true);
1461 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); 1529 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true);
1462 scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); 1530 web_contents_->WasHidden();
1463 scheduler_.OnAudibilityChanged(kChildId, kRouteId, true); 1531 scheduler_.OnAudibilityChanged(kChildId, kRouteId, true);
1464 scheduler_.OnAudibilityChanged(kChildId2, kRouteId2, true); 1532 scheduler_.OnAudibilityChanged(kChildId2, kRouteId2, true);
1465 // 2 audible, 2 hidden 1533 // 2 audible, 2 hidden
1466 EXPECT_FALSE(scheduler_.active_clients_loaded()); 1534 EXPECT_FALSE(scheduler_.active_clients_loaded());
1467 EXPECT_EQ(ResourceScheduler::THROTTLED, 1535 EXPECT_EQ(ResourceScheduler::THROTTLED,
1468 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1536 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1469 kBackgroundRouteId)); 1537 kBackgroundRouteId));
1470 EXPECT_EQ(ResourceScheduler::THROTTLED, 1538 EXPECT_EQ(ResourceScheduler::THROTTLED,
1471 scheduler_.GetClientStateForTesting(kBackgroundChildId2, 1539 scheduler_.GetClientStateForTesting(kBackgroundChildId2,
1472 kBackgroundRouteId2)); 1540 kBackgroundRouteId2));
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1518 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 1586 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
1519 1587
1520 scheduler_.OnClientDeleted(kChildId2, kRouteId2); 1588 scheduler_.OnClientDeleted(kChildId2, kRouteId2);
1521 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); 1589 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2);
1522 } 1590 }
1523 1591
1524 TEST_F(ResourceSchedulerTest, HiddenLoadedChangesCorrectlyStayThrottled) { 1592 TEST_F(ResourceSchedulerTest, HiddenLoadedChangesCorrectlyStayThrottled) {
1525 // TODO(aiolos): remove when throttling and coalescing have both landed 1593 // TODO(aiolos): remove when throttling and coalescing have both landed
1526 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, 1594 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */,
1527 false /* should_coalesce */); 1595 false /* should_coalesce */);
1528 scheduler_.OnClientCreated(kChildId2, kRouteId2); 1596 scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get());
1529 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); 1597 scheduler_.OnClientCreated(kBackgroundChildId2,
1598 kBackgroundRouteId2,
1599 web_contents_background_2_.get());
1530 1600
1531 // 1 visible and 2 hidden loading, 1 visible loaded 1601 // 1 visible and 2 hidden loading, 1 visible loaded
1532 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); 1602 web_contents_2_->WasShown();
1533 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); 1603 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true);
1534 EXPECT_FALSE(scheduler_.active_clients_loaded()); 1604 EXPECT_FALSE(scheduler_.active_clients_loaded());
1535 EXPECT_EQ(ResourceScheduler::THROTTLED, 1605 EXPECT_EQ(ResourceScheduler::THROTTLED,
1536 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1606 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1537 kBackgroundRouteId)); 1607 kBackgroundRouteId));
1538 EXPECT_EQ(ResourceScheduler::THROTTLED, 1608 EXPECT_EQ(ResourceScheduler::THROTTLED,
1539 scheduler_.GetClientStateForTesting(kBackgroundChildId2, 1609 scheduler_.GetClientStateForTesting(kBackgroundChildId2,
1540 kBackgroundRouteId2)); 1610 kBackgroundRouteId2));
1541 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, 1611 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING,
1542 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2)); 1612 scheduler_.GetClientStateForTesting(kChildId2, kRouteId2));
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1589 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 1659 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
1590 1660
1591 scheduler_.OnClientDeleted(kChildId2, kRouteId2); 1661 scheduler_.OnClientDeleted(kChildId2, kRouteId2);
1592 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); 1662 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2);
1593 } 1663 }
1594 1664
1595 TEST_F(ResourceSchedulerTest, PartialVisibleClientLoadedDoesNotUnthrottle) { 1665 TEST_F(ResourceSchedulerTest, PartialVisibleClientLoadedDoesNotUnthrottle) {
1596 // TODO(aiolos): remove when throttling and coalescing have both landed 1666 // TODO(aiolos): remove when throttling and coalescing have both landed
1597 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, 1667 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */,
1598 false /* should_coalesce */); 1668 false /* should_coalesce */);
1599 scheduler_.OnClientCreated(kChildId2, kRouteId2); 1669 scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get());
1600 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); 1670 scheduler_.OnClientCreated(kBackgroundChildId2,
1601 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); 1671 kBackgroundRouteId2,
1672 web_contents_background_2_.get());
1673 web_contents_2_->WasShown();
1602 1674
1603 // 2 visible loading, 1 hidden loading, 1 hidden loaded 1675 // 2 visible loading, 1 hidden loading, 1 hidden loaded
1604 scheduler_.OnLoadingStateChanged( 1676 scheduler_.OnLoadingStateChanged(
1605 kBackgroundChildId2, kBackgroundRouteId2, true); 1677 kBackgroundChildId2, kBackgroundRouteId2, true);
1606 EXPECT_FALSE(scheduler_.active_clients_loaded()); 1678 EXPECT_FALSE(scheduler_.active_clients_loaded());
1607 EXPECT_EQ(ResourceScheduler::THROTTLED, 1679 EXPECT_EQ(ResourceScheduler::THROTTLED,
1608 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1680 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1609 kBackgroundRouteId)); 1681 kBackgroundRouteId));
1610 EXPECT_EQ(ResourceScheduler::THROTTLED, 1682 EXPECT_EQ(ResourceScheduler::THROTTLED,
1611 scheduler_.GetClientStateForTesting(kBackgroundChildId2, 1683 scheduler_.GetClientStateForTesting(kBackgroundChildId2,
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1644 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 1716 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
1645 1717
1646 scheduler_.OnClientDeleted(kChildId2, kRouteId2); 1718 scheduler_.OnClientDeleted(kChildId2, kRouteId2);
1647 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); 1719 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2);
1648 } 1720 }
1649 1721
1650 TEST_F(ResourceSchedulerTest, FullVisibleLoadedCorrectlyUnthrottle) { 1722 TEST_F(ResourceSchedulerTest, FullVisibleLoadedCorrectlyUnthrottle) {
1651 // TODO(aiolos): remove when throttling and coalescing have both landed 1723 // TODO(aiolos): remove when throttling and coalescing have both landed
1652 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, 1724 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */,
1653 false /* should_coalesce */); 1725 false /* should_coalesce */);
1654 scheduler_.OnClientCreated(kChildId2, kRouteId2); 1726 scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get());
1655 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); 1727 scheduler_.OnClientCreated(kBackgroundChildId2,
1656 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); 1728 kBackgroundRouteId2,
1729 web_contents_background_2_.get());
1730 web_contents_2_->WasShown();
1657 1731
1658 // 1 visible and 1 hidden loaded, 1 visible and 1 hidden loading 1732 // 1 visible and 1 hidden loaded, 1 visible and 1 hidden loading
1659 scheduler_.OnLoadingStateChanged( 1733 scheduler_.OnLoadingStateChanged(
1660 kBackgroundChildId2, kBackgroundRouteId2, true); 1734 kBackgroundChildId2, kBackgroundRouteId2, true);
1661 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); 1735 scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true);
1662 EXPECT_FALSE(scheduler_.active_clients_loaded()); 1736 EXPECT_FALSE(scheduler_.active_clients_loaded());
1663 EXPECT_EQ(ResourceScheduler::THROTTLED, 1737 EXPECT_EQ(ResourceScheduler::THROTTLED,
1664 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1738 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1665 kBackgroundRouteId)); 1739 kBackgroundRouteId));
1666 EXPECT_EQ(ResourceScheduler::THROTTLED, 1740 EXPECT_EQ(ResourceScheduler::THROTTLED,
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1711 1785
1712 scheduler_.OnClientDeleted(kChildId2, kRouteId2); 1786 scheduler_.OnClientDeleted(kChildId2, kRouteId2);
1713 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); 1787 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2);
1714 } 1788 }
1715 1789
1716 TEST_F(ResourceSchedulerTest, 1790 TEST_F(ResourceSchedulerTest,
1717 ActiveAndLoadingClientDeletedCorrectlyUnthrottle) { 1791 ActiveAndLoadingClientDeletedCorrectlyUnthrottle) {
1718 // TODO(aiolos): remove when throttling and coalescing have both landed 1792 // TODO(aiolos): remove when throttling and coalescing have both landed
1719 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, 1793 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */,
1720 false /* should_coalesce */); 1794 false /* should_coalesce */);
1721 scheduler_.OnClientCreated(kChildId2, kRouteId2); 1795 scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get());
1722 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); 1796 scheduler_.OnClientCreated(kBackgroundChildId2,
1723 scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); 1797 kBackgroundRouteId2,
1798 web_contents_background_2_.get());
1799 web_contents_2_->WasShown();
1724 1800
1725 // 1 visible and 1 hidden loaded, 1 visible and 1 hidden loading 1801 // 1 visible and 1 hidden loaded, 1 visible and 1 hidden loading
1726 scheduler_.OnLoadingStateChanged( 1802 scheduler_.OnLoadingStateChanged(
1727 kBackgroundChildId2, kBackgroundRouteId2, true); 1803 kBackgroundChildId2, kBackgroundRouteId2, true);
1728 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); 1804 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true);
1729 EXPECT_FALSE(scheduler_.active_clients_loaded()); 1805 EXPECT_FALSE(scheduler_.active_clients_loaded());
1730 EXPECT_EQ(ResourceScheduler::THROTTLED, 1806 EXPECT_EQ(ResourceScheduler::THROTTLED,
1731 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1807 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1732 kBackgroundRouteId)); 1808 kBackgroundRouteId));
1733 EXPECT_EQ(ResourceScheduler::THROTTLED, 1809 EXPECT_EQ(ResourceScheduler::THROTTLED,
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1791 EXPECT_FALSE(mock_timer_->IsRunning()); 1867 EXPECT_FALSE(mock_timer_->IsRunning());
1792 1868
1793 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); 1869 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true);
1794 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, 1870 EXPECT_EQ(ResourceScheduler::UNTHROTTLED,
1795 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 1871 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
1796 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, 1872 EXPECT_EQ(ResourceScheduler::UNTHROTTLED,
1797 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1873 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1798 kBackgroundRouteId)); 1874 kBackgroundRouteId));
1799 EXPECT_FALSE(mock_timer_->IsRunning()); 1875 EXPECT_FALSE(mock_timer_->IsRunning());
1800 1876
1801 scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); 1877 web_contents_->WasHidden();
1802 EXPECT_EQ(ResourceScheduler::COALESCED, 1878 EXPECT_EQ(ResourceScheduler::COALESCED,
1803 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 1879 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
1804 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, 1880 EXPECT_EQ(ResourceScheduler::UNTHROTTLED,
1805 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1881 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1806 kBackgroundRouteId)); 1882 kBackgroundRouteId));
1807 EXPECT_TRUE(mock_timer_->IsRunning()); 1883 EXPECT_TRUE(mock_timer_->IsRunning());
1808 } 1884 }
1809 1885
1810 TEST_F(ResourceSchedulerTest, ActiveLoadingClientHiddenAndLoadedStartsTimer) { 1886 TEST_F(ResourceSchedulerTest, ActiveLoadingClientHiddenAndLoadedStartsTimer) {
1811 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, 1887 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */,
1812 true /* should_coalesce */); 1888 true /* should_coalesce */);
1813 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, 1889 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING,
1814 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 1890 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
1815 EXPECT_EQ(ResourceScheduler::THROTTLED, 1891 EXPECT_EQ(ResourceScheduler::THROTTLED,
1816 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1892 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1817 kBackgroundRouteId)); 1893 kBackgroundRouteId));
1818 EXPECT_FALSE(mock_timer_->IsRunning()); 1894 EXPECT_FALSE(mock_timer_->IsRunning());
1819 1895
1820 scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); 1896 web_contents_->WasHidden();
1821 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, 1897 EXPECT_EQ(ResourceScheduler::UNTHROTTLED,
1822 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 1898 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
1823 EXPECT_FALSE(mock_timer_->IsRunning()); 1899 EXPECT_FALSE(mock_timer_->IsRunning());
1824 1900
1825 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); 1901 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true);
1826 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, 1902 EXPECT_EQ(ResourceScheduler::UNTHROTTLED,
1827 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1903 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1828 kBackgroundRouteId)); 1904 kBackgroundRouteId));
1829 EXPECT_EQ(ResourceScheduler::COALESCED, 1905 EXPECT_EQ(ResourceScheduler::COALESCED,
1830 scheduler_.GetClientStateForTesting(kChildId, kRouteId)); 1906 scheduler_.GetClientStateForTesting(kChildId, kRouteId));
(...skipping 18 matching lines...) Expand all
1849 scheduler_.OnAudibilityChanged(kBackgroundChildId, kBackgroundRouteId, true); 1925 scheduler_.OnAudibilityChanged(kBackgroundChildId, kBackgroundRouteId, true);
1850 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, 1926 EXPECT_EQ(ResourceScheduler::UNTHROTTLED,
1851 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1927 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1852 kBackgroundRouteId)); 1928 kBackgroundRouteId));
1853 EXPECT_FALSE(mock_timer_->IsRunning()); 1929 EXPECT_FALSE(mock_timer_->IsRunning());
1854 } 1930 }
1855 1931
1856 TEST_F(ResourceSchedulerTest, LastCoalescedClientDeletionStopsTimer) { 1932 TEST_F(ResourceSchedulerTest, LastCoalescedClientDeletionStopsTimer) {
1857 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, 1933 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */,
1858 true /* should_coalesce */); 1934 true /* should_coalesce */);
1859 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); 1935 scheduler_.OnClientCreated(kBackgroundChildId2,
1936 kBackgroundRouteId2,
1937 web_contents_background_2_.get());
1860 EXPECT_FALSE(mock_timer_->IsRunning()); 1938 EXPECT_FALSE(mock_timer_->IsRunning());
1861 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); 1939 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true);
1862 EXPECT_FALSE(mock_timer_->IsRunning()); 1940 EXPECT_FALSE(mock_timer_->IsRunning());
1863 scheduler_.OnLoadingStateChanged( 1941 scheduler_.OnLoadingStateChanged(
1864 kBackgroundChildId, kBackgroundRouteId, true); 1942 kBackgroundChildId, kBackgroundRouteId, true);
1865 EXPECT_EQ(ResourceScheduler::COALESCED, 1943 EXPECT_EQ(ResourceScheduler::COALESCED,
1866 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1944 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1867 kBackgroundRouteId)); 1945 kBackgroundRouteId));
1868 scheduler_.OnLoadingStateChanged( 1946 scheduler_.OnLoadingStateChanged(
1869 kBackgroundChildId2, kBackgroundRouteId2, true); 1947 kBackgroundChildId2, kBackgroundRouteId2, true);
1870 EXPECT_EQ(ResourceScheduler::COALESCED, 1948 EXPECT_EQ(ResourceScheduler::COALESCED,
1871 scheduler_.GetClientStateForTesting(kBackgroundChildId2, 1949 scheduler_.GetClientStateForTesting(kBackgroundChildId2,
1872 kBackgroundRouteId2)); 1950 kBackgroundRouteId2));
1873 EXPECT_TRUE(mock_timer_->IsRunning()); 1951 EXPECT_TRUE(mock_timer_->IsRunning());
1874 1952
1875 scheduler_.OnClientDeleted(kBackgroundChildId, kBackgroundRouteId); 1953 scheduler_.OnClientDeleted(kBackgroundChildId, kBackgroundRouteId);
1876 EXPECT_TRUE(mock_timer_->IsRunning()); 1954 EXPECT_TRUE(mock_timer_->IsRunning());
1877 1955
1878 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); 1956 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2);
1879 EXPECT_FALSE(mock_timer_->IsRunning()); 1957 EXPECT_FALSE(mock_timer_->IsRunning());
1880 1958
1881 // To avoid errors on test tear down. 1959 // To avoid errors on test tear down.
1882 scheduler_.OnClientCreated(kBackgroundChildId, kBackgroundRouteId); 1960 scheduler_.OnClientCreated(kBackgroundChildId,
1961 kBackgroundRouteId,
1962 web_contents_background_.get());
1883 } 1963 }
1884 1964
1885 TEST_F(ResourceSchedulerTest, LastCoalescedClientStartsLoadingStopsTimer) { 1965 TEST_F(ResourceSchedulerTest, LastCoalescedClientStartsLoadingStopsTimer) {
1886 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, 1966 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */,
1887 true /* should_coalesce */); 1967 true /* should_coalesce */);
1888 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); 1968 scheduler_.OnClientCreated(kBackgroundChildId2,
1969 kBackgroundRouteId2,
1970 web_contents_background_2_.get());
1889 EXPECT_FALSE(mock_timer_->IsRunning()); 1971 EXPECT_FALSE(mock_timer_->IsRunning());
1890 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); 1972 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true);
1891 EXPECT_FALSE(mock_timer_->IsRunning()); 1973 EXPECT_FALSE(mock_timer_->IsRunning());
1892 scheduler_.OnLoadingStateChanged( 1974 scheduler_.OnLoadingStateChanged(
1893 kBackgroundChildId, kBackgroundRouteId, true); 1975 kBackgroundChildId, kBackgroundRouteId, true);
1894 EXPECT_EQ(ResourceScheduler::COALESCED, 1976 EXPECT_EQ(ResourceScheduler::COALESCED,
1895 scheduler_.GetClientStateForTesting(kBackgroundChildId, 1977 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1896 kBackgroundRouteId)); 1978 kBackgroundRouteId));
1897 scheduler_.OnLoadingStateChanged( 1979 scheduler_.OnLoadingStateChanged(
1898 kBackgroundChildId2, kBackgroundRouteId2, true); 1980 kBackgroundChildId2, kBackgroundRouteId2, true);
(...skipping 10 matching lines...) Expand all
1909 kBackgroundChildId2, kBackgroundRouteId2, false); 1991 kBackgroundChildId2, kBackgroundRouteId2, false);
1910 EXPECT_FALSE(mock_timer_->IsRunning()); 1992 EXPECT_FALSE(mock_timer_->IsRunning());
1911 1993
1912 // This is needed to avoid errors on test tear down. 1994 // This is needed to avoid errors on test tear down.
1913 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); 1995 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2);
1914 } 1996 }
1915 1997
1916 TEST_F(ResourceSchedulerTest, LastCoalescedClientBecomesVisibleStopsTimer) { 1998 TEST_F(ResourceSchedulerTest, LastCoalescedClientBecomesVisibleStopsTimer) {
1917 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, 1999 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */,
1918 true /* should_coalesce */); 2000 true /* should_coalesce */);
1919 scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); 2001 scheduler_.OnClientCreated(kBackgroundChildId2,
2002 kBackgroundRouteId2,
2003 web_contents_background_2_.get());
1920 EXPECT_FALSE(mock_timer_->IsRunning()); 2004 EXPECT_FALSE(mock_timer_->IsRunning());
1921 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); 2005 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true);
1922 EXPECT_FALSE(mock_timer_->IsRunning()); 2006 EXPECT_FALSE(mock_timer_->IsRunning());
1923 scheduler_.OnLoadingStateChanged( 2007 scheduler_.OnLoadingStateChanged(
1924 kBackgroundChildId, kBackgroundRouteId, true); 2008 kBackgroundChildId, kBackgroundRouteId, true);
1925 EXPECT_EQ(ResourceScheduler::COALESCED, 2009 EXPECT_EQ(ResourceScheduler::COALESCED,
1926 scheduler_.GetClientStateForTesting(kBackgroundChildId, 2010 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1927 kBackgroundRouteId)); 2011 kBackgroundRouteId));
1928 scheduler_.OnLoadingStateChanged( 2012 scheduler_.OnLoadingStateChanged(
1929 kBackgroundChildId2, kBackgroundRouteId2, true); 2013 kBackgroundChildId2, kBackgroundRouteId2, true);
1930 EXPECT_EQ(ResourceScheduler::COALESCED, 2014 EXPECT_EQ(ResourceScheduler::COALESCED,
1931 scheduler_.GetClientStateForTesting(kBackgroundChildId2, 2015 scheduler_.GetClientStateForTesting(kBackgroundChildId2,
1932 kBackgroundRouteId2)); 2016 kBackgroundRouteId2));
1933 EXPECT_TRUE(mock_timer_->IsRunning()); 2017 EXPECT_TRUE(mock_timer_->IsRunning());
1934 2018
1935 scheduler_.OnVisibilityChanged(kBackgroundChildId, kBackgroundRouteId, true); 2019 web_contents_background_->WasShown();
1936 EXPECT_TRUE(mock_timer_->IsRunning()); 2020 EXPECT_TRUE(mock_timer_->IsRunning());
1937 2021
1938 scheduler_.OnVisibilityChanged( 2022 web_contents_background_2_->WasShown();
1939 kBackgroundChildId2, kBackgroundRouteId2, true);
1940 EXPECT_FALSE(mock_timer_->IsRunning()); 2023 EXPECT_FALSE(mock_timer_->IsRunning());
1941 2024
1942 // To avoid errors on test tear down. 2025 // To avoid errors on test tear down.
1943 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); 2026 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2);
1944 } 2027 }
1945 2028
1946 TEST_F(ResourceSchedulerTest, 2029 TEST_F(ResourceSchedulerTest,
1947 CoalescedClientBecomesLoadingAndVisibleStopsTimer) { 2030 CoalescedClientBecomesLoadingAndVisibleStopsTimer) {
1948 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, 2031 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */,
1949 true /* should_coalesce */); 2032 true /* should_coalesce */);
1950 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); 2033 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true);
1951 EXPECT_FALSE(mock_timer_->IsRunning()); 2034 EXPECT_FALSE(mock_timer_->IsRunning());
1952 scheduler_.OnLoadingStateChanged( 2035 scheduler_.OnLoadingStateChanged(
1953 kBackgroundChildId, kBackgroundRouteId, true); 2036 kBackgroundChildId, kBackgroundRouteId, true);
1954 EXPECT_EQ(ResourceScheduler::COALESCED, 2037 EXPECT_EQ(ResourceScheduler::COALESCED,
1955 scheduler_.GetClientStateForTesting(kBackgroundChildId, 2038 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1956 kBackgroundRouteId)); 2039 kBackgroundRouteId));
1957 EXPECT_TRUE(mock_timer_->IsRunning()); 2040 EXPECT_TRUE(mock_timer_->IsRunning());
1958 2041
1959 scheduler_.OnLoadingStateChanged( 2042 scheduler_.OnLoadingStateChanged(
1960 kBackgroundChildId, kBackgroundRouteId, false); 2043 kBackgroundChildId, kBackgroundRouteId, false);
1961 EXPECT_EQ(ResourceScheduler::UNTHROTTLED, 2044 EXPECT_EQ(ResourceScheduler::UNTHROTTLED,
1962 scheduler_.GetClientStateForTesting(kBackgroundChildId, 2045 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1963 kBackgroundRouteId)); 2046 kBackgroundRouteId));
1964 EXPECT_FALSE(mock_timer_->IsRunning()); 2047 EXPECT_FALSE(mock_timer_->IsRunning());
1965 2048
1966 scheduler_.OnVisibilityChanged(kBackgroundChildId, kBackgroundRouteId, true); 2049 web_contents_background_->WasShown();
1967 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, 2050 EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING,
1968 scheduler_.GetClientStateForTesting(kBackgroundChildId, 2051 scheduler_.GetClientStateForTesting(kBackgroundChildId,
1969 kBackgroundRouteId)); 2052 kBackgroundRouteId));
1970 EXPECT_FALSE(mock_timer_->IsRunning()); 2053 EXPECT_FALSE(mock_timer_->IsRunning());
1971 } 2054 }
1972 2055
1973 TEST_F(ResourceSchedulerTest, CoalescedRequestsIssueOnTimer) { 2056 TEST_F(ResourceSchedulerTest, CoalescedRequestsIssueOnTimer) {
1974 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, 2057 scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */,
1975 true /* should_coalesce */); 2058 true /* should_coalesce */);
1976 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); 2059 scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true);
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
2090 EXPECT_FALSE(high2->started()); 2173 EXPECT_FALSE(high2->started());
2091 EXPECT_FALSE(low->started()); 2174 EXPECT_FALSE(low->started());
2092 2175
2093 FireCoalescingTimer(); 2176 FireCoalescingTimer();
2094 2177
2095 EXPECT_TRUE(high->started()); 2178 EXPECT_TRUE(high->started());
2096 EXPECT_TRUE(high2->started()); 2179 EXPECT_TRUE(high2->started());
2097 EXPECT_TRUE(low->started()); 2180 EXPECT_TRUE(low->started());
2098 } 2181 }
2099 2182
2183 TEST_F(ResourceSchedulerTest, CheckInitialVisibility) {
2184 scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get());
2185 scheduler_.OnClientCreated(kBackgroundChildId2,
2186 kBackgroundRouteId2,
2187 web_contents_background_2_.get());
2188 web_contents_2_->WasShown();
2189
2190 EXPECT_TRUE(scheduler_.IsClientVisibleForTesting(kChildId2, kRouteId2));
2191 EXPECT_FALSE(scheduler_.IsClientVisibleForTesting(kBackgroundChildId2,
2192 kBackgroundRouteId2));
2193
2194 scheduler_.OnClientDeleted(kChildId2, kRouteId2);
2195 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2);
2196 }
2197
2198 TEST_F(ResourceSchedulerTest, GetVisualSignalFromWebContents) {
2199 scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get());
2200 scheduler_.OnClientCreated(kBackgroundChildId2,
2201 kBackgroundRouteId2,
2202 web_contents_background_2_.get());
2203 web_contents_2_->WasShown();
2204
2205 // Change visibility of web contents.
2206 web_contents_2_->WasHidden();
2207 web_contents_background_2_->WasShown();
2208
2209 // The clients get the visual signal from web contents.
2210 EXPECT_FALSE(scheduler_.IsClientVisibleForTesting(kChildId2, kRouteId2));
2211 EXPECT_TRUE(scheduler_.IsClientVisibleForTesting(kBackgroundChildId2,
2212 kBackgroundRouteId2));
2213
2214 scheduler_.OnClientDeleted(kChildId2, kRouteId2);
2215 scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2);
2216 }
2217
2100 } // unnamed namespace 2218 } // unnamed namespace
2101 2219
2102 } // namespace content 2220 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698