| 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..cd12a0cd4d0353be044a5758a6f3a7f82d8c5cf5 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 since the worker should 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());
|
| }
|
|
|
|
|