| Index: webkit/browser/appcache/appcache_service_unittest.cc
 | 
| diff --git a/webkit/browser/appcache/appcache_service_unittest.cc b/webkit/browser/appcache/appcache_service_unittest.cc
 | 
| index 7581793063056fb685d29d8a6c8afd4830a24493..4ae6b835fa73cc0ad1a2612d3f86351ce8d9889c 100644
 | 
| --- a/webkit/browser/appcache/appcache_service_unittest.cc
 | 
| +++ b/webkit/browser/appcache/appcache_service_unittest.cc
 | 
| @@ -317,4 +317,61 @@ TEST_F(AppCacheServiceTest, CheckAppCacheResponse) {
 | 
|    base::RunLoop().RunUntilIdle();
 | 
|  }
 | 
|  
 | 
| +// Just tests the backoff scheduling function, not the actual reinit function.
 | 
| +TEST_F(AppCacheServiceTest, ScheduleReinitialize) {
 | 
| +  const base::TimeDelta kNoDelay;
 | 
| +  const base::TimeDelta kOneSecond(base::TimeDelta::FromSeconds(1));
 | 
| +  const base::TimeDelta k30Seconds(base::TimeDelta::FromSeconds(30));
 | 
| +  const base::TimeDelta kOneHour(base::TimeDelta::FromHours(1));
 | 
| +
 | 
| +  // Do things get initialized as expected?
 | 
| +  scoped_ptr<AppCacheService> service(new AppCacheService(NULL));
 | 
| +  EXPECT_TRUE(service->last_reinit_time_.is_null());
 | 
| +  EXPECT_FALSE(service->reinit_timer_.IsRunning());
 | 
| +  EXPECT_EQ(kNoDelay, service->next_reinit_delay_);
 | 
| +
 | 
| +  // Do we see artifacts of the timer pending and such?
 | 
| +  service->ScheduleReinitialize();
 | 
| +  EXPECT_TRUE(service->reinit_timer_.IsRunning());
 | 
| +  EXPECT_EQ(kNoDelay, service->reinit_timer_.GetCurrentDelay());
 | 
| +  EXPECT_EQ(k30Seconds, service->next_reinit_delay_);
 | 
| +
 | 
| +  // Nothing should change if already scheduled
 | 
| +  service->ScheduleReinitialize();
 | 
| +  EXPECT_TRUE(service->reinit_timer_.IsRunning());
 | 
| +  EXPECT_EQ(kNoDelay, service->reinit_timer_.GetCurrentDelay());
 | 
| +  EXPECT_EQ(k30Seconds, service->next_reinit_delay_);
 | 
| +
 | 
| +  // Does the delay increase as expected?
 | 
| +  service->reinit_timer_.Stop();
 | 
| +  service->last_reinit_time_ = base::Time::Now() - kOneSecond;
 | 
| +  service->ScheduleReinitialize();
 | 
| +  EXPECT_TRUE(service->reinit_timer_.IsRunning());
 | 
| +  EXPECT_EQ(k30Seconds, service->reinit_timer_.GetCurrentDelay());
 | 
| +  EXPECT_EQ(k30Seconds + k30Seconds, service->next_reinit_delay_);
 | 
| +
 | 
| +  // Does the delay reset as expected?
 | 
| +  service->reinit_timer_.Stop();
 | 
| +  service->last_reinit_time_ = base::Time::Now() -
 | 
| +                               base::TimeDelta::FromHours(2);
 | 
| +  service->ScheduleReinitialize();
 | 
| +  EXPECT_TRUE(service->reinit_timer_.IsRunning());
 | 
| +  EXPECT_EQ(kNoDelay, service->reinit_timer_.GetCurrentDelay());
 | 
| +  EXPECT_EQ(k30Seconds, service->next_reinit_delay_);
 | 
| +
 | 
| +  // Does the delay max out as expected?
 | 
| +  service->reinit_timer_.Stop();
 | 
| +  service->last_reinit_time_ = base::Time::Now() - kOneSecond;
 | 
| +  service->next_reinit_delay_ = kOneHour;
 | 
| +  service->ScheduleReinitialize();
 | 
| +  EXPECT_TRUE(service->reinit_timer_.IsRunning());
 | 
| +  EXPECT_EQ(kOneHour, service->reinit_timer_.GetCurrentDelay());
 | 
| +  EXPECT_EQ(kOneHour, service->next_reinit_delay_);
 | 
| +
 | 
| +  // Fine to delete while pending.
 | 
| +  service.reset(NULL);
 | 
| +}
 | 
| +
 | 
| +
 | 
| +
 | 
|  }  // namespace appcache
 | 
| 
 |