Chromium Code Reviews| 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 31225e963572de85d6919aa1767c42039edfc5ff..6758dd462f7d0de0e9bcd378a8095b2cf8471e5e 100644 |
| --- a/content/browser/service_worker/service_worker_version_unittest.cc |
| +++ b/content/browser/service_worker/service_worker_version_unittest.cc |
| @@ -88,7 +88,9 @@ class MessageReceiverFromWorker : public EmbeddedWorkerInstance::Listener { |
| ~MessageReceiverFromWorker() override { instance_->RemoveListener(this); } |
| void OnStarted() override { NOTREACHED(); } |
| - void OnStopped() override { NOTREACHED(); } |
| + void OnStopped(EmbeddedWorkerInstance::Status old_status) override { |
| + NOTREACHED(); |
| + } |
| bool OnMessageReceived(const IPC::Message& message) override { |
| bool handled = true; |
| IPC_BEGIN_MESSAGE_MAP(MessageReceiverFromWorker, message) |
| @@ -209,21 +211,43 @@ TEST_F(ServiceWorkerVersionTest, ConcurrentStartAndStop) { |
| // Call StopWorker() multiple times. |
| status1 = SERVICE_WORKER_ERROR_FAILED; |
| status2 = SERVICE_WORKER_ERROR_FAILED; |
| - status3 = SERVICE_WORKER_ERROR_FAILED; |
| version_->StopWorker(CreateReceiverOnCurrentThread(&status1)); |
| version_->StopWorker(CreateReceiverOnCurrentThread(&status2)); |
| - // Also try calling StartWorker while StopWorker is in queue. |
| + EXPECT_EQ(ServiceWorkerVersion::STOPPING, version_->running_status()); |
| + base::RunLoop().RunUntilIdle(); |
| + EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status()); |
| + |
| + // All StopWorker should just succeed. |
| + EXPECT_EQ(SERVICE_WORKER_OK, status1); |
| + EXPECT_EQ(SERVICE_WORKER_OK, status2); |
| + |
| + // Start worker again. |
| + status1 = SERVICE_WORKER_ERROR_FAILED; |
| + status2 = SERVICE_WORKER_ERROR_FAILED; |
| + status3 = SERVICE_WORKER_ERROR_FAILED; |
| + |
| + version_->StartWorker(CreateReceiverOnCurrentThread(&status1)); |
| + |
| + EXPECT_EQ(ServiceWorkerVersion::STARTING, version_->running_status()); |
| + base::RunLoop().RunUntilIdle(); |
| + EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); |
| + |
| + // Call StopWorker() |
| + status2 = SERVICE_WORKER_ERROR_FAILED; |
| + version_->StopWorker(CreateReceiverOnCurrentThread(&status2)); |
| + |
| + // And try calling StartWorker while StopWorker is in queue. |
| version_->StartWorker(CreateReceiverOnCurrentThread(&status3)); |
| EXPECT_EQ(ServiceWorkerVersion::STOPPING, version_->running_status()); |
| base::RunLoop().RunUntilIdle(); |
| - EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status()); |
| + EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); |
| - // All StopWorker should just succeed, while StartWorker fails. |
| + // All should just succeed. |
| EXPECT_EQ(SERVICE_WORKER_OK, status1); |
| EXPECT_EQ(SERVICE_WORKER_OK, status2); |
| - EXPECT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, status3); |
| + EXPECT_EQ(SERVICE_WORKER_OK, status3); |
| } |
| TEST_F(ServiceWorkerVersionTest, SendMessage) { |
| @@ -248,39 +272,11 @@ TEST_F(ServiceWorkerVersionTest, SendMessage) { |
| base::RunLoop().RunUntilIdle(); |
| EXPECT_EQ(SERVICE_WORKER_OK, stop_status); |
| - // SendMessage should return START_WORKER_FAILED error since it tried to |
| - // start a worker while it was stopping. |
| - EXPECT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, msg_status); |
| -} |
| - |
| -TEST_F(ServiceWorkerVersionTest, ReSendMessageAfterStop) { |
| - EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status()); |
| - |
| - // Start the worker. |
| - ServiceWorkerStatusCode start_status = SERVICE_WORKER_ERROR_FAILED; |
| - version_->StartWorker(CreateReceiverOnCurrentThread(&start_status)); |
| - base::RunLoop().RunUntilIdle(); |
| - EXPECT_EQ(SERVICE_WORKER_OK, start_status); |
| - EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); |
| - |
| - // Stop the worker, and then send the message immediately. |
| - ServiceWorkerStatusCode msg_status = SERVICE_WORKER_ERROR_FAILED; |
| - ServiceWorkerStatusCode stop_status = SERVICE_WORKER_ERROR_FAILED; |
| - version_->StopWorker(CreateReceiverOnCurrentThread(&stop_status)); |
| - version_->SendMessage(TestMsg_Message(), |
| - CreateReceiverOnCurrentThread(&msg_status)); |
| - base::RunLoop().RunUntilIdle(); |
| - EXPECT_EQ(SERVICE_WORKER_OK, stop_status); |
| - |
| - // SendMessage should return START_WORKER_FAILED error since it tried to |
| - // start a worker while it was stopping. |
| - EXPECT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, msg_status); |
| - |
| - // Resend the message, which should succeed and restart the worker. |
| - version_->SendMessage(TestMsg_Message(), |
| - CreateReceiverOnCurrentThread(&msg_status)); |
| - base::RunLoop().RunUntilIdle(); |
| + // SendMessage should return SERVICE_WORKER_OK error since the worker should |
|
falken
2014/11/25 15:46:04
nit: remove "error"
|
| + // have been restarted to deliver the message. |
| EXPECT_EQ(SERVICE_WORKER_OK, msg_status); |
| + |
| + // The worker should be now started again. |
| EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); |
| } |