Chromium Code Reviews| Index: content/browser/loader/resource_scheduler_unittest.cc |
| diff --git a/content/browser/loader/resource_scheduler_unittest.cc b/content/browser/loader/resource_scheduler_unittest.cc |
| index ea4fc023fa0fbf6e888d355e25ed6c426c26d9a7..edb9e119b8b60c6000ed61558bdb05cfb2c5504f 100644 |
| --- a/content/browser/loader/resource_scheduler_unittest.cc |
| +++ b/content/browser/loader/resource_scheduler_unittest.cc |
| @@ -19,6 +19,9 @@ |
| #include "content/public/browser/resource_throttle.h" |
| #include "content/public/common/process_type.h" |
| #include "content/public/common/resource_type.h" |
| +#include "content/public/test/mock_render_process_host.h" |
| +#include "content/public/test/test_browser_context.h" |
| +#include "content/test/test_web_contents.h" |
| #include "net/base/host_port_pair.h" |
| #include "net/base/request_priority.h" |
| #include "net/http/http_server_properties_impl.h" |
| @@ -140,21 +143,61 @@ class ResourceSchedulerTest : public testing::Test { |
| ui_thread_(BrowserThread::UI, &message_loop_), |
| io_thread_(BrowserThread::IO, &message_loop_), |
| mock_timer_(new base::MockTimer(true, true)) { |
| + // Set up web contents. |
| + render_process_host_factory_.reset(new MockRenderProcessHostFactory()); |
| + browser_context_.reset(new TestBrowserContext()); |
| + scoped_refptr<SiteInstance> site_instance = |
| + SiteInstance::Create(browser_context_.get()); |
| + scoped_refptr<SiteInstance> site_instance_background = |
| + SiteInstance::Create(browser_context_.get()); |
| + scoped_refptr<SiteInstance> site_instance_2 = |
| + SiteInstance::Create(browser_context_.get()); |
| + scoped_refptr<SiteInstance> site_instance_background_2 = |
| + SiteInstance::Create(browser_context_.get()); |
| + SiteInstanceImpl::set_render_process_host_factory( |
| + render_process_host_factory_.get()); |
| + |
| + web_contents_.reset( |
| + TestWebContents::Create(browser_context_.get(), site_instance.get())); |
| + web_contents_background_.reset( |
| + TestWebContents::Create(browser_context_.get(), |
| + site_instance_background.get())); |
| + web_contents_2_.reset( |
| + TestWebContents::Create(browser_context_.get(), site_instance_2.get())); |
| + web_contents_background_2_.reset( |
| + TestWebContents::Create(browser_context_.get(), |
| + site_instance_background_2.get())); |
| + |
| + web_contents_->WasHidden(); |
|
aiolos (Not reviewing)
2014/08/15 01:45:38
Either remove this line, or change it to WasShown(
Zhen Wang
2014/08/15 18:43:01
Done.
|
| + web_contents_background_->WasHidden(); |
| + web_contents_2_->WasHidden(); |
| + web_contents_background_2_->WasHidden(); |
| + |
| + // set up resource scheduler |
| scheduler_.set_timer_for_testing(scoped_ptr<base::Timer>(mock_timer_)); |
| // TODO(aiolos): Remove when throttling and coalescing have both landed. |
| scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| false /* should_coalesce */); |
| - scheduler_.OnClientCreated(kChildId, kRouteId); |
| - scheduler_.OnVisibilityChanged(kChildId, kRouteId, true); |
| - scheduler_.OnClientCreated(kBackgroundChildId, kBackgroundRouteId); |
| + scheduler_.OnClientCreated(kChildId, kRouteId, web_contents_.get()); |
| + web_contents_->WasShown(); |
| + scheduler_.OnClientCreated(kBackgroundChildId, |
| + kBackgroundRouteId, |
| + web_contents_background_.get()); |
| context_.set_http_server_properties(http_server_properties_.GetWeakPtr()); |
| } |
| virtual ~ResourceSchedulerTest() { |
| scheduler_.OnClientDeleted(kChildId, kRouteId); |
| scheduler_.OnClientDeleted(kBackgroundChildId, kBackgroundRouteId); |
| + |
| + web_contents_.reset(); |
| + web_contents_background_.reset(); |
| + web_contents_2_.reset(); |
| + web_contents_background_2_.reset(); |
| + browser_context_.reset(); |
| + render_process_host_factory_.reset(); |
| } |
| scoped_ptr<net::URLRequest> NewURLRequestWithChildAndRoute( |
| @@ -279,6 +322,12 @@ class ResourceSchedulerTest : public testing::Test { |
| base::MockTimer* mock_timer_; |
| net::HttpServerPropertiesImpl http_server_properties_; |
| net::TestURLRequestContext context_; |
| + scoped_ptr<MockRenderProcessHostFactory> render_process_host_factory_; |
| + scoped_ptr<TestBrowserContext> browser_context_; |
| + scoped_ptr<TestWebContents> web_contents_; |
| + scoped_ptr<TestWebContents> web_contents_background_; |
| + scoped_ptr<TestWebContents> web_contents_2_; |
| + scoped_ptr<TestWebContents> web_contents_background_2_; |
| }; |
| TEST_F(ResourceSchedulerTest, OneIsolatedLowRequest) { |
| @@ -638,7 +687,9 @@ TEST_F(ResourceSchedulerTest, ThrottledClientCreation) { |
| scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| false /* should_coalesce */); |
| EXPECT_TRUE(scheduler_.should_throttle()); |
| - scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); |
| + scheduler_.OnClientCreated(kBackgroundChildId2, |
| + kBackgroundRouteId2, |
| + web_contents_background_2_.get()); |
| EXPECT_EQ(ResourceScheduler::THROTTLED, |
| scheduler_.GetClientStateForTesting(kBackgroundChildId2, |
| @@ -725,7 +776,7 @@ TEST_F(ResourceSchedulerTest, UnthrottleNewlyVisibleClient) { |
| NewBackgroundRequest("http://host/req", net::IDLE)); |
| EXPECT_FALSE(request->started()); |
| - scheduler_.OnVisibilityChanged(kBackgroundChildId, kBackgroundRouteId, true); |
| + web_contents_background_->WasShown(); |
| EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, |
| scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| kBackgroundRouteId)); |
| @@ -781,7 +832,7 @@ TEST_F(ResourceSchedulerTest, AudibleClientStillUnthrottledOnVisabilityChange) { |
| // TODO(aiolos): remove when throttling and coalescing have both landed |
| scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| false /* should_coalesce */); |
| - scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); |
| + web_contents_->WasHidden(); |
| scheduler_.OnAudibilityChanged(kChildId, kRouteId, true); |
| EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, |
| scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
| @@ -789,14 +840,14 @@ TEST_F(ResourceSchedulerTest, AudibleClientStillUnthrottledOnVisabilityChange) { |
| scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| kBackgroundRouteId)); |
| - scheduler_.OnVisibilityChanged(kChildId, kRouteId, true); |
| + web_contents_->WasShown(); |
| EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, |
| scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
| EXPECT_EQ(ResourceScheduler::THROTTLED, |
| scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| kBackgroundRouteId)); |
| - scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); |
| + web_contents_->WasHidden(); |
| EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, |
| scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
| EXPECT_EQ(ResourceScheduler::THROTTLED, |
| @@ -985,7 +1036,7 @@ TEST_F(ResourceSchedulerTest, AllBackgroundClientsUnthrottle) { |
| scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
| EXPECT_FALSE(scheduler_.active_clients_loaded()); |
| - scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); |
| + web_contents_->WasHidden(); |
| EXPECT_TRUE(scheduler_.active_clients_loaded()); |
| EXPECT_EQ(ResourceScheduler::UNTHROTTLED, |
| scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
| @@ -1022,8 +1073,10 @@ TEST_F(ResourceSchedulerTest, |
| // TODO(aiolos): remove when throttling and coalescing have both landed |
| scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| false /* should_coalesce */); |
| - scheduler_.OnClientCreated(kChildId2, kRouteId2); |
| - scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); |
| + scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get()); |
| + scheduler_.OnClientCreated(kBackgroundChildId2, |
| + kBackgroundRouteId2, |
| + web_contents_background_2_.get()); |
| scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); |
| scheduler_.OnLoadingStateChanged( |
| kBackgroundChildId2, kBackgroundRouteId2, true); |
| @@ -1042,7 +1095,7 @@ TEST_F(ResourceSchedulerTest, |
| scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
| // 2 visible, 2 hidden |
| - scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); |
| + web_contents_2_->WasShown(); |
| EXPECT_FALSE(scheduler_.active_clients_loaded()); |
| EXPECT_EQ(ResourceScheduler::THROTTLED, |
| scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| @@ -1056,7 +1109,7 @@ TEST_F(ResourceSchedulerTest, |
| scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
| // 1 visible, 3 hidden |
| - scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, false); |
| + web_contents_2_->WasHidden(); |
| EXPECT_FALSE(scheduler_.active_clients_loaded()); |
| EXPECT_EQ(ResourceScheduler::THROTTLED, |
| scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| @@ -1078,11 +1131,13 @@ TEST_F(ResourceSchedulerTest, |
| // TODO(aiolos): remove when throttling and coalescing have both landed |
| scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| false /* should_coalesce */); |
| - scheduler_.OnClientCreated(kChildId2, kRouteId2); |
| - scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); |
| + scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get()); |
| + scheduler_.OnClientCreated(kBackgroundChildId2, |
| + kBackgroundRouteId2, |
| + web_contents_background_2_.get()); |
| scheduler_.OnLoadingStateChanged( |
| kBackgroundChildId2, kBackgroundRouteId2, true); |
| - scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); |
| + web_contents_->WasHidden(); |
| scheduler_.OnAudibilityChanged(kChildId, kRouteId, true); |
| // 1 audible, 3 hidden |
| @@ -1135,8 +1190,10 @@ TEST_F(ResourceSchedulerTest, |
| // TODO(aiolos): remove when throttling and coalescing have both landed |
| scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| false /* should_coalesce */); |
| - scheduler_.OnClientCreated(kChildId2, kRouteId2); |
| - scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); |
| + scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get()); |
| + scheduler_.OnClientCreated(kBackgroundChildId2, |
| + kBackgroundRouteId2, |
| + web_contents_background_2_.get()); |
| scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); |
| scheduler_.OnLoadingStateChanged( |
| kBackgroundChildId2, kBackgroundRouteId2, true); |
| @@ -1154,7 +1211,7 @@ TEST_F(ResourceSchedulerTest, |
| scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
| // 2 visible, 2 hidden |
| - scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); |
| + web_contents_2_->WasShown(); |
| EXPECT_FALSE(scheduler_.active_clients_loaded()); |
| EXPECT_EQ(ResourceScheduler::THROTTLED, |
| scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| @@ -1168,7 +1225,7 @@ TEST_F(ResourceSchedulerTest, |
| scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
| // 1 visible, 3 hidden |
| - scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, false); |
| + web_contents_2_->WasHidden(); |
| EXPECT_FALSE(scheduler_.active_clients_loaded()); |
| EXPECT_EQ(ResourceScheduler::THROTTLED, |
| scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| @@ -1190,12 +1247,14 @@ TEST_F(ResourceSchedulerTest, |
| // TODO(aiolos): remove when throttling and coalescing have both landed |
| scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| false /* should_coalesce */); |
| - scheduler_.OnClientCreated(kChildId2, kRouteId2); |
| - scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); |
| + scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get()); |
| + scheduler_.OnClientCreated(kBackgroundChildId2, |
| + kBackgroundRouteId2, |
| + web_contents_background_2_.get()); |
| scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); |
| scheduler_.OnLoadingStateChanged( |
| kBackgroundChildId2, kBackgroundRouteId2, true); |
| - scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); |
| + web_contents_->WasHidden(); |
| scheduler_.OnAudibilityChanged(kChildId, kRouteId, true); |
| // 1 audible, 3 hidden |
| EXPECT_FALSE(scheduler_.active_clients_loaded()); |
| @@ -1246,13 +1305,15 @@ TEST_F(ResourceSchedulerTest, UnloadedClientBecomesHiddenCorrectlyUnthrottles) { |
| // TODO(aiolos): remove when throttling and coalescing have both landed |
| scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| false /* should_coalesce */); |
| - scheduler_.OnClientCreated(kChildId2, kRouteId2); |
| - scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); |
| + scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get()); |
| + scheduler_.OnClientCreated(kBackgroundChildId2, |
| + kBackgroundRouteId2, |
| + web_contents_background_2_.get()); |
| scheduler_.OnLoadingStateChanged( |
| kBackgroundChildId2, kBackgroundRouteId2, true); |
| // 2 visible, 2 hidden |
| - scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); |
| + web_contents_2_->WasShown(); |
| EXPECT_FALSE(scheduler_.active_clients_loaded()); |
| EXPECT_EQ(ResourceScheduler::THROTTLED, |
| scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| @@ -1266,7 +1327,7 @@ TEST_F(ResourceSchedulerTest, UnloadedClientBecomesHiddenCorrectlyUnthrottles) { |
| scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
| // 1 visible, 3 hidden |
| - scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, false); |
| + web_contents_2_->WasHidden(); |
| EXPECT_FALSE(scheduler_.active_clients_loaded()); |
| EXPECT_EQ(ResourceScheduler::THROTTLED, |
| scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| @@ -1280,7 +1341,7 @@ TEST_F(ResourceSchedulerTest, UnloadedClientBecomesHiddenCorrectlyUnthrottles) { |
| scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
| // 0 visible, 4 hidden |
| - scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); |
| + web_contents_->WasHidden(); |
| EXPECT_TRUE(scheduler_.active_clients_loaded()); |
| EXPECT_EQ(ResourceScheduler::UNTHROTTLED, |
| scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| @@ -1294,7 +1355,7 @@ TEST_F(ResourceSchedulerTest, UnloadedClientBecomesHiddenCorrectlyUnthrottles) { |
| scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
| // 1 visible, 3 hidden |
| - scheduler_.OnVisibilityChanged(kChildId, kRouteId, true); |
| + web_contents_->WasShown(); |
| EXPECT_FALSE(scheduler_.active_clients_loaded()); |
| EXPECT_EQ(ResourceScheduler::THROTTLED, |
| scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| @@ -1315,12 +1376,14 @@ TEST_F(ResourceSchedulerTest, UnloadedClientBecomesSilentCorrectlyUnthrottles) { |
| // TODO(aiolos): remove when throttling and coalescing have both landed |
| scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| false /* should_coalesce */); |
| - scheduler_.OnClientCreated(kChildId2, kRouteId2); |
| - scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); |
| + scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get()); |
| + scheduler_.OnClientCreated(kBackgroundChildId2, |
| + kBackgroundRouteId2, |
| + web_contents_background_2_.get()); |
| scheduler_.OnLoadingStateChanged( |
| kBackgroundChildId2, kBackgroundRouteId2, true); |
| scheduler_.OnAudibilityChanged(kChildId, kRouteId, true); |
| - scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); |
| + web_contents_->WasHidden(); |
| scheduler_.OnAudibilityChanged(kChildId2, kRouteId2, true); |
| // 2 audible, 2 hidden |
| EXPECT_FALSE(scheduler_.active_clients_loaded()); |
| @@ -1385,12 +1448,14 @@ TEST_F(ResourceSchedulerTest, LoadedClientBecomesHiddenCorrectlyThrottles) { |
| // TODO(aiolos): remove when throttling and coalescing have both landed |
| scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| false /* should_coalesce */); |
| - scheduler_.OnClientCreated(kChildId2, kRouteId2); |
| - scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); |
| + scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get()); |
| + scheduler_.OnClientCreated(kBackgroundChildId2, |
| + kBackgroundRouteId2, |
| + web_contents_background_2_.get()); |
| scheduler_.OnLoadingStateChanged( |
| kBackgroundChildId2, kBackgroundRouteId2, true); |
| scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); |
| - scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); |
| + web_contents_2_->WasShown(); |
| // 2 visible, 2 hidden |
| EXPECT_FALSE(scheduler_.active_clients_loaded()); |
| EXPECT_EQ(ResourceScheduler::THROTTLED, |
| @@ -1405,7 +1470,7 @@ TEST_F(ResourceSchedulerTest, LoadedClientBecomesHiddenCorrectlyThrottles) { |
| scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
| // 1 visible, 3 hidden |
| - scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, false); |
| + web_contents_2_->WasHidden(); |
| EXPECT_FALSE(scheduler_.active_clients_loaded()); |
| EXPECT_EQ(ResourceScheduler::THROTTLED, |
| scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| @@ -1419,7 +1484,7 @@ TEST_F(ResourceSchedulerTest, LoadedClientBecomesHiddenCorrectlyThrottles) { |
| scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
| // 0 visible, 4 hidden |
| - scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); |
| + web_contents_->WasHidden(); |
| EXPECT_TRUE(scheduler_.active_clients_loaded()); |
| EXPECT_EQ(ResourceScheduler::UNTHROTTLED, |
| scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| @@ -1433,7 +1498,7 @@ TEST_F(ResourceSchedulerTest, LoadedClientBecomesHiddenCorrectlyThrottles) { |
| scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
| // 1 visible, 3 hidden |
| - scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); |
| + web_contents_2_->WasShown(); |
| EXPECT_TRUE(scheduler_.active_clients_loaded()); |
| EXPECT_EQ(ResourceScheduler::UNTHROTTLED, |
| scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| @@ -1454,12 +1519,14 @@ TEST_F(ResourceSchedulerTest, LoadedClientBecomesSilentCorrectlyThrottles) { |
| // TODO(aiolos): remove when throttling and coalescing have both landed |
| scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| false /* should_coalesce */); |
| - scheduler_.OnClientCreated(kChildId2, kRouteId2); |
| - scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); |
| + scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get()); |
| + scheduler_.OnClientCreated(kBackgroundChildId2, |
| + kBackgroundRouteId2, |
| + web_contents_background_2_.get()); |
| scheduler_.OnLoadingStateChanged( |
| kBackgroundChildId2, kBackgroundRouteId2, true); |
| scheduler_.OnLoadingStateChanged(kChildId2, kRouteId2, true); |
| - scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); |
| + web_contents_->WasHidden(); |
| scheduler_.OnAudibilityChanged(kChildId, kRouteId, true); |
| scheduler_.OnAudibilityChanged(kChildId2, kRouteId2, true); |
| // 2 audible, 2 hidden |
| @@ -1525,11 +1592,13 @@ TEST_F(ResourceSchedulerTest, HiddenLoadedChangesCorrectlyStayThrottled) { |
| // TODO(aiolos): remove when throttling and coalescing have both landed |
| scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| false /* should_coalesce */); |
| - scheduler_.OnClientCreated(kChildId2, kRouteId2); |
| - scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); |
| + scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get()); |
| + scheduler_.OnClientCreated(kBackgroundChildId2, |
| + kBackgroundRouteId2, |
| + web_contents_background_2_.get()); |
| // 1 visible and 2 hidden loading, 1 visible loaded |
| - scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); |
| + web_contents_2_->WasShown(); |
| scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); |
| EXPECT_FALSE(scheduler_.active_clients_loaded()); |
| EXPECT_EQ(ResourceScheduler::THROTTLED, |
| @@ -1596,9 +1665,11 @@ TEST_F(ResourceSchedulerTest, PartialVisibleClientLoadedDoesNotUnthrottle) { |
| // TODO(aiolos): remove when throttling and coalescing have both landed |
| scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| false /* should_coalesce */); |
| - scheduler_.OnClientCreated(kChildId2, kRouteId2); |
| - scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); |
| - scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); |
| + scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get()); |
| + scheduler_.OnClientCreated(kBackgroundChildId2, |
| + kBackgroundRouteId2, |
| + web_contents_background_2_.get()); |
| + web_contents_2_->WasShown(); |
| // 2 visible loading, 1 hidden loading, 1 hidden loaded |
| scheduler_.OnLoadingStateChanged( |
| @@ -1651,9 +1722,11 @@ TEST_F(ResourceSchedulerTest, FullVisibleLoadedCorrectlyUnthrottle) { |
| // TODO(aiolos): remove when throttling and coalescing have both landed |
| scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| false /* should_coalesce */); |
| - scheduler_.OnClientCreated(kChildId2, kRouteId2); |
| - scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); |
| - scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); |
| + scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get()); |
| + scheduler_.OnClientCreated(kBackgroundChildId2, |
| + kBackgroundRouteId2, |
| + web_contents_background_2_.get()); |
| + web_contents_2_->WasShown(); |
| // 1 visible and 1 hidden loaded, 1 visible and 1 hidden loading |
| scheduler_.OnLoadingStateChanged( |
| @@ -1718,9 +1791,11 @@ TEST_F(ResourceSchedulerTest, |
| // TODO(aiolos): remove when throttling and coalescing have both landed |
| scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| false /* should_coalesce */); |
| - scheduler_.OnClientCreated(kChildId2, kRouteId2); |
| - scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); |
| - scheduler_.OnVisibilityChanged(kChildId2, kRouteId2, true); |
| + scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get()); |
| + scheduler_.OnClientCreated(kBackgroundChildId2, |
| + kBackgroundRouteId2, |
| + web_contents_background_2_.get()); |
| + web_contents_2_->WasShown(); |
| // 1 visible and 1 hidden loaded, 1 visible and 1 hidden loading |
| scheduler_.OnLoadingStateChanged( |
| @@ -1798,7 +1873,7 @@ TEST_F(ResourceSchedulerTest, ActiveLoadingClientLoadedAndHiddenStartsTimer) { |
| kBackgroundRouteId)); |
| EXPECT_FALSE(mock_timer_->IsRunning()); |
| - scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); |
| + web_contents_->WasHidden(); |
| EXPECT_EQ(ResourceScheduler::COALESCED, |
| scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
| EXPECT_EQ(ResourceScheduler::UNTHROTTLED, |
| @@ -1817,7 +1892,7 @@ TEST_F(ResourceSchedulerTest, ActiveLoadingClientHiddenAndLoadedStartsTimer) { |
| kBackgroundRouteId)); |
| EXPECT_FALSE(mock_timer_->IsRunning()); |
| - scheduler_.OnVisibilityChanged(kChildId, kRouteId, false); |
| + web_contents_->WasHidden(); |
| EXPECT_EQ(ResourceScheduler::UNTHROTTLED, |
| scheduler_.GetClientStateForTesting(kChildId, kRouteId)); |
| EXPECT_FALSE(mock_timer_->IsRunning()); |
| @@ -1856,7 +1931,9 @@ TEST_F(ResourceSchedulerTest, CoalescedClientBecomesAudibleStopsTimer) { |
| TEST_F(ResourceSchedulerTest, LastCoalescedClientDeletionStopsTimer) { |
| scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| true /* should_coalesce */); |
| - scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); |
| + scheduler_.OnClientCreated(kBackgroundChildId2, |
| + kBackgroundRouteId2, |
| + web_contents_background_2_.get()); |
| EXPECT_FALSE(mock_timer_->IsRunning()); |
| scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); |
| EXPECT_FALSE(mock_timer_->IsRunning()); |
| @@ -1879,13 +1956,17 @@ TEST_F(ResourceSchedulerTest, LastCoalescedClientDeletionStopsTimer) { |
| EXPECT_FALSE(mock_timer_->IsRunning()); |
| // To avoid errors on test tear down. |
| - scheduler_.OnClientCreated(kBackgroundChildId, kBackgroundRouteId); |
| + scheduler_.OnClientCreated(kBackgroundChildId, |
| + kBackgroundRouteId, |
| + web_contents_background_.get()); |
| } |
| TEST_F(ResourceSchedulerTest, LastCoalescedClientStartsLoadingStopsTimer) { |
| scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| true /* should_coalesce */); |
| - scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); |
| + scheduler_.OnClientCreated(kBackgroundChildId2, |
| + kBackgroundRouteId2, |
| + web_contents_background_2_.get()); |
| EXPECT_FALSE(mock_timer_->IsRunning()); |
| scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); |
| EXPECT_FALSE(mock_timer_->IsRunning()); |
| @@ -1916,7 +1997,9 @@ TEST_F(ResourceSchedulerTest, LastCoalescedClientStartsLoadingStopsTimer) { |
| TEST_F(ResourceSchedulerTest, LastCoalescedClientBecomesVisibleStopsTimer) { |
| scheduler_.SetThrottleOptionsForTesting(true /* should_throttle */, |
| true /* should_coalesce */); |
| - scheduler_.OnClientCreated(kBackgroundChildId2, kBackgroundRouteId2); |
| + scheduler_.OnClientCreated(kBackgroundChildId2, |
| + kBackgroundRouteId2, |
| + web_contents_background_2_.get()); |
| EXPECT_FALSE(mock_timer_->IsRunning()); |
| scheduler_.OnLoadingStateChanged(kChildId, kRouteId, true); |
| EXPECT_FALSE(mock_timer_->IsRunning()); |
| @@ -1932,11 +2015,10 @@ TEST_F(ResourceSchedulerTest, LastCoalescedClientBecomesVisibleStopsTimer) { |
| kBackgroundRouteId2)); |
| EXPECT_TRUE(mock_timer_->IsRunning()); |
| - scheduler_.OnVisibilityChanged(kBackgroundChildId, kBackgroundRouteId, true); |
| + web_contents_background_->WasShown(); |
| EXPECT_TRUE(mock_timer_->IsRunning()); |
| - scheduler_.OnVisibilityChanged( |
| - kBackgroundChildId2, kBackgroundRouteId2, true); |
| + web_contents_background_2_->WasShown(); |
| EXPECT_FALSE(mock_timer_->IsRunning()); |
| // To avoid errors on test tear down. |
| @@ -1963,7 +2045,7 @@ TEST_F(ResourceSchedulerTest, |
| kBackgroundRouteId)); |
| EXPECT_FALSE(mock_timer_->IsRunning()); |
| - scheduler_.OnVisibilityChanged(kBackgroundChildId, kBackgroundRouteId, true); |
| + web_contents_background_->WasShown(); |
| EXPECT_EQ(ResourceScheduler::ACTIVE_AND_LOADING, |
| scheduler_.GetClientStateForTesting(kBackgroundChildId, |
| kBackgroundRouteId)); |
| @@ -2097,6 +2179,41 @@ TEST_F(ResourceSchedulerTest, CoalescedRequestsWaitForNextTimer) { |
| EXPECT_TRUE(low->started()); |
| } |
| +TEST_F(ResourceSchedulerTest, CheckInitialVisibility) { |
| + scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get()); |
| + scheduler_.OnClientCreated(kBackgroundChildId2, |
| + kBackgroundRouteId2, |
| + web_contents_background_2_.get()); |
| + web_contents_2_->WasShown(); |
| + |
| + EXPECT_TRUE(scheduler_.IsClientVisible(kChildId2, kRouteId2)); |
| + EXPECT_FALSE(scheduler_.IsClientVisible(kBackgroundChildId2, |
| + kBackgroundRouteId2)); |
| + |
| + scheduler_.OnClientDeleted(kChildId2, kRouteId2); |
| + scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
| +} |
| + |
| +TEST_F(ResourceSchedulerTest, GetVisualSignalFromWebContents) { |
| + scheduler_.OnClientCreated(kChildId2, kRouteId2, web_contents_2_.get()); |
| + scheduler_.OnClientCreated(kBackgroundChildId2, |
| + kBackgroundRouteId2, |
| + web_contents_background_2_.get()); |
| + web_contents_2_->WasShown(); |
| + |
| + // Change visibility of web contents. |
| + web_contents_2_->WasHidden(); |
| + web_contents_background_2_->WasShown(); |
| + |
| + // The clients get the visual signal from web contents. |
| + EXPECT_FALSE(scheduler_.IsClientVisible(kChildId2, kRouteId2)); |
| + EXPECT_TRUE(scheduler_.IsClientVisible(kBackgroundChildId2, |
| + kBackgroundRouteId2)); |
| + |
| + scheduler_.OnClientDeleted(kChildId2, kRouteId2); |
| + scheduler_.OnClientDeleted(kBackgroundChildId2, kBackgroundRouteId2); |
| +} |
| + |
| } // unnamed namespace |
| } // namespace content |