Index: content/browser/service_worker/embedded_worker_instance_unittest.cc |
diff --git a/content/browser/service_worker/embedded_worker_instance_unittest.cc b/content/browser/service_worker/embedded_worker_instance_unittest.cc |
index 6d10c3179e5a448f88528dd02f7a2400be14272c..67e7f26fba5feb3463f15ebd5d51969e3722421c 100644 |
--- a/content/browser/service_worker/embedded_worker_instance_unittest.cc |
+++ b/content/browser/service_worker/embedded_worker_instance_unittest.cc |
@@ -118,13 +118,15 @@ class StalledInStartWorkerHelper : public EmbeddedWorkerTestHelper { |
void OnStartWorker(int embedded_worker_id, |
int64_t service_worker_version_id, |
const GURL& scope, |
- const GURL& script_url) override { |
+ const GURL& script_url, |
+ bool pause_after_download) override { |
if (force_stall_in_start_) { |
// Do nothing to simulate a stall in the worker process. |
return; |
} |
- EmbeddedWorkerTestHelper::OnStartWorker( |
- embedded_worker_id, service_worker_version_id, scope, script_url); |
+ EmbeddedWorkerTestHelper::OnStartWorker(embedded_worker_id, |
+ service_worker_version_id, scope, |
+ script_url, pause_after_download); |
} |
void set_force_stall_in_start(bool force_stall_in_start) { |
@@ -471,6 +473,34 @@ TEST_F(EmbeddedWorkerInstanceTest, StopDuringProcessAllocation) { |
worker->Stop(); |
} |
+TEST_F(EmbeddedWorkerInstanceTest, StopDuringPausedAfterDownload) { |
+ const int64_t version_id = 55L; |
+ const GURL scope("http://example.com/"); |
+ const GURL url("http://example.com/worker.js"); |
+ |
+ scoped_ptr<EmbeddedWorkerInstance> worker = |
+ embedded_worker_registry()->CreateWorker(); |
+ worker->AddListener(this); |
+ |
+ // Run the start worker sequence until pause after download. |
+ ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; |
+ worker->Start(version_id, scope, url, base::Bind(&SaveStatusAndCall, &status, |
+ base::Bind(base::DoNothing)), |
+ true /* pause_after_download */); |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ // Make the worker stopping and attempt to send a resume after download |
+ // message. |
+ worker->Stop(); |
+ worker->ResumeAfterDownload(); |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ // The resume after download message should not have been sent. |
+ EXPECT_EQ(EmbeddedWorkerInstance::STOPPED, worker->status()); |
+ EXPECT_FALSE(ipc_sink()->GetFirstMessageMatching( |
+ EmbeddedWorkerMsg_ResumeAfterDownload::ID)); |
+} |
+ |
TEST_F(EmbeddedWorkerInstanceTest, StopAfterSendingStartWorkerMessage) { |
const int64_t version_id = 55L; |
const GURL scope("http://example.com/"); |