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 f3d1aeb8f70d367dfb10055d6a6384b299f7d614..5826014e13c0b9b2c75787130462425180e148c3 100644 |
--- a/content/browser/service_worker/service_worker_version_unittest.cc |
+++ b/content/browser/service_worker/service_worker_version_unittest.cc |
@@ -240,6 +240,30 @@ class ServiceWorkerVersionTest : public testing::Test { |
helper_.reset(); |
} |
+ void SimulateDispatchEvent() { |
+ ServiceWorkerStatusCode status = |
+ SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value |
+ |
+ // Make sure worker is running. |
+ scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner); |
+ version_->RunAfterStartWorker(runner->QuitClosure(), |
+ CreateReceiverOnCurrentThread(&status)); |
+ runner->Run(); |
+ EXPECT_EQ(SERVICE_WORKER_ERROR_MAX_VALUE, status); |
+ EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); |
+ |
+ // Start request, as if an event is being dispatched. |
+ int request_id = |
+ version_->StartRequest(ServiceWorkerMetrics::EventType::PUSH, |
+ CreateReceiverOnCurrentThread(&status)); |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ // And finish request, as if a response to the event was received. |
+ EXPECT_TRUE(version_->FinishRequest(request_id)); |
+ base::RunLoop().RunUntilIdle(); |
+ EXPECT_EQ(SERVICE_WORKER_ERROR_MAX_VALUE, status); |
+ } |
+ |
TestBrowserThreadBundle thread_bundle_; |
scoped_ptr<MessageReceiver> helper_; |
scoped_refptr<ServiceWorkerRegistration> registration_; |
@@ -702,16 +726,11 @@ TEST_F(ServiceWorkerVersionTest, StoppingBeforeDestruct) { |
// Test that update isn't triggered for a non-stale worker. |
TEST_F(ServiceWorkerVersionTest, StaleUpdate_FreshWorker) { |
- ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
- |
version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
registration_->SetActiveVersion(version_); |
registration_->set_last_update_check(base::Time::Now()); |
- version_->DispatchPushEvent(CreateReceiverOnCurrentThread(&status), |
- std::string()); |
- base::RunLoop().RunUntilIdle(); |
+ SimulateDispatchEvent(); |
- EXPECT_EQ(SERVICE_WORKER_OK, status); |
EXPECT_TRUE(version_->stale_time_.is_null()); |
EXPECT_FALSE(version_->update_timer_.IsRunning()); |
} |
@@ -739,10 +758,7 @@ TEST_F(ServiceWorkerVersionTest, StaleUpdate_StartWorker) { |
version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
registration_->SetActiveVersion(version_); |
registration_->set_last_update_check(GetYesterday()); |
- version_->DispatchPushEvent(CreateReceiverOnCurrentThread(&status), |
- std::string()); |
- base::RunLoop().RunUntilIdle(); |
- EXPECT_EQ(SERVICE_WORKER_OK, status); |
+ SimulateDispatchEvent(); |
EXPECT_FALSE(version_->stale_time_.is_null()); |
EXPECT_FALSE(version_->update_timer_.IsRunning()); |
@@ -756,16 +772,11 @@ TEST_F(ServiceWorkerVersionTest, StaleUpdate_StartWorker) { |
// Test that staleness is detected on a running worker. |
TEST_F(ServiceWorkerVersionTest, StaleUpdate_RunningWorker) { |
- ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
- |
// Start a fresh worker. |
version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
registration_->SetActiveVersion(version_); |
registration_->set_last_update_check(base::Time::Now()); |
- version_->DispatchPushEvent(CreateReceiverOnCurrentThread(&status), |
- std::string()); |
- base::RunLoop().RunUntilIdle(); |
- EXPECT_EQ(SERVICE_WORKER_OK, status); |
+ SimulateDispatchEvent(); |
EXPECT_TRUE(version_->stale_time_.is_null()); |
// Simulate it running for a day. It will be marked stale. |
@@ -798,10 +809,13 @@ TEST_F(ServiceWorkerVersionTest, StaleUpdate_DoNotDeferTimer) { |
version_->stale_time_ = stale_time; |
// Stale time is not deferred. |
- version_->DispatchPushEvent( |
- base::Bind(&ServiceWorkerUtils::NoOpStatusCallback), std::string()); |
- version_->DispatchPushEvent( |
- base::Bind(&ServiceWorkerUtils::NoOpStatusCallback), std::string()); |
+ version_->RunAfterStartWorker( |
+ base::Bind(&base::DoNothing), |
+ base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
+ version_->RunAfterStartWorker( |
+ base::Bind(&base::DoNothing), |
+ base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
+ base::RunLoop().RunUntilIdle(); |
EXPECT_EQ(stale_time, version_->stale_time_); |
// Timeout triggers the update. |
@@ -811,12 +825,9 @@ TEST_F(ServiceWorkerVersionTest, StaleUpdate_DoNotDeferTimer) { |
// Update timer is not deferred. |
base::TimeTicks run_time = version_->update_timer_.desired_run_time(); |
- version_->DispatchPushEvent( |
- base::Bind(&ServiceWorkerUtils::NoOpStatusCallback), std::string()); |
- version_->DispatchPushEvent( |
- base::Bind(&ServiceWorkerUtils::NoOpStatusCallback), std::string()); |
- version_->DispatchPushEvent( |
- base::Bind(&ServiceWorkerUtils::NoOpStatusCallback), std::string()); |
+ SimulateDispatchEvent(); |
+ SimulateDispatchEvent(); |
+ SimulateDispatchEvent(); |
base::RunLoop().RunUntilIdle(); |
EXPECT_TRUE(version_->stale_time_.is_null()); |
EXPECT_EQ(run_time, version_->update_timer_.desired_run_time()); |