OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/run_loop.h" | 6 #include "base/run_loop.h" |
7 #include "content/browser/service_worker/embedded_worker_registry.h" | 7 #include "content/browser/service_worker/embedded_worker_registry.h" |
8 #include "content/browser/service_worker/embedded_worker_test_helper.h" | 8 #include "content/browser/service_worker/embedded_worker_test_helper.h" |
9 #include "content/browser/service_worker/service_worker_context_core.h" | 9 #include "content/browser/service_worker/service_worker_context_core.h" |
10 #include "content/browser/service_worker/service_worker_registration.h" | 10 #include "content/browser/service_worker/service_worker_registration.h" |
(...skipping 393 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
404 | 404 |
405 // Verify that we could successfully observe repeated status changes. | 405 // Verify that we could successfully observe repeated status changes. |
406 ASSERT_EQ(5U, statuses.size()); | 406 ASSERT_EQ(5U, statuses.size()); |
407 ASSERT_EQ(ServiceWorkerVersion::INSTALLING, statuses[0]); | 407 ASSERT_EQ(ServiceWorkerVersion::INSTALLING, statuses[0]); |
408 ASSERT_EQ(ServiceWorkerVersion::INSTALLED, statuses[1]); | 408 ASSERT_EQ(ServiceWorkerVersion::INSTALLED, statuses[1]); |
409 ASSERT_EQ(ServiceWorkerVersion::ACTIVATING, statuses[2]); | 409 ASSERT_EQ(ServiceWorkerVersion::ACTIVATING, statuses[2]); |
410 ASSERT_EQ(ServiceWorkerVersion::ACTIVATED, statuses[3]); | 410 ASSERT_EQ(ServiceWorkerVersion::ACTIVATED, statuses[3]); |
411 ASSERT_EQ(ServiceWorkerVersion::REDUNDANT, statuses[4]); | 411 ASSERT_EQ(ServiceWorkerVersion::REDUNDANT, statuses[4]); |
412 } | 412 } |
413 | 413 |
414 TEST_F(ServiceWorkerVersionTest, ScheduleStopWorker) { | 414 TEST_F(ServiceWorkerVersionTest, IdleTimeout) { |
| 415 // Used to reliably test when the idle time gets reset regardless of clock |
| 416 // granularity. |
| 417 const base::TimeDelta kOneSecond = base::TimeDelta::FromSeconds(1); |
| 418 |
415 // Verify the timer is not running when version initializes its status. | 419 // Verify the timer is not running when version initializes its status. |
416 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 420 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
417 EXPECT_FALSE(version_->timeout_timer_.IsRunning()); | 421 EXPECT_FALSE(version_->timeout_timer_.IsRunning()); |
418 | 422 |
419 // Verify the timer is running after the worker is started. | 423 // Verify the timer is running after the worker is started. |
420 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; | 424 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
421 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); | 425 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); |
422 base::RunLoop().RunUntilIdle(); | 426 base::RunLoop().RunUntilIdle(); |
423 EXPECT_EQ(SERVICE_WORKER_OK, status); | 427 EXPECT_EQ(SERVICE_WORKER_OK, status); |
424 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); | 428 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); |
| 429 EXPECT_FALSE(version_->idle_time_.is_null()); |
425 | 430 |
426 // The timer should be running if the worker is restarted without controllee. | 431 // The idle time should be reset if the worker is restarted without |
| 432 // controllee. |
427 status = SERVICE_WORKER_ERROR_FAILED; | 433 status = SERVICE_WORKER_ERROR_FAILED; |
| 434 version_->idle_time_ -= kOneSecond; |
| 435 base::TimeTicks idle_time = version_->idle_time_; |
428 version_->StopWorker(CreateReceiverOnCurrentThread(&status)); | 436 version_->StopWorker(CreateReceiverOnCurrentThread(&status)); |
429 base::RunLoop().RunUntilIdle(); | 437 base::RunLoop().RunUntilIdle(); |
430 EXPECT_EQ(SERVICE_WORKER_OK, status); | 438 EXPECT_EQ(SERVICE_WORKER_OK, status); |
431 status = SERVICE_WORKER_ERROR_FAILED; | 439 status = SERVICE_WORKER_ERROR_FAILED; |
432 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); | 440 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); |
433 base::RunLoop().RunUntilIdle(); | 441 base::RunLoop().RunUntilIdle(); |
434 EXPECT_EQ(SERVICE_WORKER_OK, status); | 442 EXPECT_EQ(SERVICE_WORKER_OK, status); |
435 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); | 443 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); |
| 444 EXPECT_LT(idle_time, version_->idle_time_); |
436 | 445 |
437 // Adding controllee doesn't stop the stop-worker-timer. | 446 // Adding a controllee resets the idle time. |
| 447 version_->idle_time_ -= kOneSecond; |
| 448 idle_time = version_->idle_time_; |
438 scoped_ptr<ServiceWorkerProviderHost> host( | 449 scoped_ptr<ServiceWorkerProviderHost> host( |
439 new ServiceWorkerProviderHost(33 /* dummy render process id */, | 450 new ServiceWorkerProviderHost(33 /* dummy render process id */, |
440 MSG_ROUTING_NONE /* render_frame_id */, | 451 MSG_ROUTING_NONE /* render_frame_id */, |
441 1 /* dummy provider_id */, | 452 1 /* dummy provider_id */, |
442 SERVICE_WORKER_PROVIDER_FOR_CONTROLLEE, | 453 SERVICE_WORKER_PROVIDER_FOR_CONTROLLEE, |
443 helper_->context()->AsWeakPtr(), | 454 helper_->context()->AsWeakPtr(), |
444 NULL)); | 455 NULL)); |
445 version_->AddControllee(host.get()); | 456 version_->AddControllee(host.get()); |
446 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); | 457 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); |
| 458 EXPECT_LT(idle_time, version_->idle_time_); |
| 459 |
| 460 // Completing an event resets the idle time. |
| 461 status = SERVICE_WORKER_ERROR_FAILED; |
| 462 version_->idle_time_ -= kOneSecond; |
| 463 idle_time = version_->idle_time_; |
| 464 version_->DispatchFetchEvent(ServiceWorkerFetchRequest(), |
| 465 base::Bind(&base::DoNothing), |
| 466 base::Bind(&ReceiveFetchResult, &status)); |
| 467 base::RunLoop().RunUntilIdle(); |
| 468 |
| 469 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 470 EXPECT_LT(idle_time, version_->idle_time_); |
447 } | 471 } |
448 | 472 |
449 | 473 |
450 TEST_F(ServiceWorkerVersionTest, SetDevToolsAttached) { | 474 TEST_F(ServiceWorkerVersionTest, SetDevToolsAttached) { |
451 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; | 475 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
452 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); | 476 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); |
453 | 477 |
454 ASSERT_EQ(ServiceWorkerVersion::STARTING, version_->running_status()); | 478 ASSERT_EQ(ServiceWorkerVersion::STARTING, version_->running_status()); |
455 | 479 |
456 ASSERT_TRUE(version_->timeout_timer_.IsRunning()); | 480 ASSERT_TRUE(version_->timeout_timer_.IsRunning()); |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
543 base::TimeTicks::Now() - | 567 base::TimeTicks::Now() - |
544 base::TimeDelta::FromMinutes( | 568 base::TimeDelta::FromMinutes( |
545 ServiceWorkerVersion::kStartWorkerTimeoutMinutes + 1); | 569 ServiceWorkerVersion::kStartWorkerTimeoutMinutes + 1); |
546 version_->timeout_timer_.user_task().Run(); | 570 version_->timeout_timer_.user_task().Run(); |
547 base::RunLoop().RunUntilIdle(); | 571 base::RunLoop().RunUntilIdle(); |
548 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status); | 572 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status); |
549 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status()); | 573 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status()); |
550 } | 574 } |
551 | 575 |
552 } // namespace content | 576 } // namespace content |
OLD | NEW |