| Index: content/browser/service_worker/service_worker_version_unittest.cc
|
| diff --git a/content/browser/service_worker/service_worker_version_unittest.cc b/content/browser/service_worker/service_worker_version_unittest.cc
|
| index f478b4aaa5c3d5c65d9a301554733d819f4d93bb..cafd3aa4f97e97308f028e35130e3be2005ec104 100644
|
| --- a/content/browser/service_worker/service_worker_version_unittest.cc
|
| +++ b/content/browser/service_worker/service_worker_version_unittest.cc
|
| @@ -411,7 +411,11 @@ TEST_F(ServiceWorkerVersionTest, RepeatedlyObserveStatusChanges) {
|
| ASSERT_EQ(ServiceWorkerVersion::REDUNDANT, statuses[4]);
|
| }
|
|
|
| -TEST_F(ServiceWorkerVersionTest, ScheduleStopWorker) {
|
| +TEST_F(ServiceWorkerVersionTest, IdleTimeout) {
|
| + // Used to reliably test when the idle time gets reset regardless of clock
|
| + // granularity.
|
| + const base::TimeDelta kOneSecond = base::TimeDelta::FromSeconds(1);
|
| +
|
| // Verify the timer is not running when version initializes its status.
|
| version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
|
| EXPECT_FALSE(version_->timeout_timer_.IsRunning());
|
| @@ -422,9 +426,13 @@ TEST_F(ServiceWorkerVersionTest, ScheduleStopWorker) {
|
| base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(SERVICE_WORKER_OK, status);
|
| EXPECT_TRUE(version_->timeout_timer_.IsRunning());
|
| + EXPECT_FALSE(version_->idle_time_.is_null());
|
|
|
| - // The timer should be running if the worker is restarted without controllee.
|
| + // The idle time should be reset if the worker is restarted without
|
| + // controllee.
|
| status = SERVICE_WORKER_ERROR_FAILED;
|
| + version_->idle_time_ -= kOneSecond;
|
| + base::TimeTicks idle_time = version_->idle_time_;
|
| version_->StopWorker(CreateReceiverOnCurrentThread(&status));
|
| base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(SERVICE_WORKER_OK, status);
|
| @@ -433,8 +441,11 @@ TEST_F(ServiceWorkerVersionTest, ScheduleStopWorker) {
|
| base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(SERVICE_WORKER_OK, status);
|
| EXPECT_TRUE(version_->timeout_timer_.IsRunning());
|
| + EXPECT_LT(idle_time, version_->idle_time_);
|
|
|
| - // Adding controllee doesn't stop the stop-worker-timer.
|
| + // Adding a controllee resets the idle time.
|
| + version_->idle_time_ -= kOneSecond;
|
| + idle_time = version_->idle_time_;
|
| scoped_ptr<ServiceWorkerProviderHost> host(
|
| new ServiceWorkerProviderHost(33 /* dummy render process id */,
|
| MSG_ROUTING_NONE /* render_frame_id */,
|
| @@ -444,6 +455,19 @@ TEST_F(ServiceWorkerVersionTest, ScheduleStopWorker) {
|
| NULL));
|
| version_->AddControllee(host.get());
|
| EXPECT_TRUE(version_->timeout_timer_.IsRunning());
|
| + EXPECT_LT(idle_time, version_->idle_time_);
|
| +
|
| + // Completing an event resets the idle time.
|
| + status = SERVICE_WORKER_ERROR_FAILED;
|
| + version_->idle_time_ -= kOneSecond;
|
| + idle_time = version_->idle_time_;
|
| + version_->DispatchFetchEvent(ServiceWorkerFetchRequest(),
|
| + base::Bind(&base::DoNothing),
|
| + base::Bind(&ReceiveFetchResult, &status));
|
| + base::RunLoop().RunUntilIdle();
|
| +
|
| + EXPECT_EQ(SERVICE_WORKER_OK, status);
|
| + EXPECT_LT(idle_time, version_->idle_time_);
|
| }
|
|
|
|
|
|
|