OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "content/browser/service_worker/embedded_worker_instance.h" | 5 #include "content/browser/service_worker/embedded_worker_instance.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 #include <utility> | 8 #include <utility> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
111 // A helper to simulate the start worker sequence is stalled in a worker | 111 // A helper to simulate the start worker sequence is stalled in a worker |
112 // process. | 112 // process. |
113 class StalledInStartWorkerHelper : public EmbeddedWorkerTestHelper { | 113 class StalledInStartWorkerHelper : public EmbeddedWorkerTestHelper { |
114 public: | 114 public: |
115 StalledInStartWorkerHelper() : EmbeddedWorkerTestHelper(base::FilePath()) {} | 115 StalledInStartWorkerHelper() : EmbeddedWorkerTestHelper(base::FilePath()) {} |
116 ~StalledInStartWorkerHelper() override{}; | 116 ~StalledInStartWorkerHelper() override{}; |
117 | 117 |
118 void OnStartWorker(int embedded_worker_id, | 118 void OnStartWorker(int embedded_worker_id, |
119 int64_t service_worker_version_id, | 119 int64_t service_worker_version_id, |
120 const GURL& scope, | 120 const GURL& scope, |
121 const GURL& script_url) override { | 121 const GURL& script_url, |
| 122 bool pause_after_download) override { |
122 if (force_stall_in_start_) { | 123 if (force_stall_in_start_) { |
123 // Do nothing to simulate a stall in the worker process. | 124 // Do nothing to simulate a stall in the worker process. |
124 return; | 125 return; |
125 } | 126 } |
126 EmbeddedWorkerTestHelper::OnStartWorker( | 127 EmbeddedWorkerTestHelper::OnStartWorker(embedded_worker_id, |
127 embedded_worker_id, service_worker_version_id, scope, script_url); | 128 service_worker_version_id, scope, |
| 129 script_url, pause_after_download); |
128 } | 130 } |
129 | 131 |
130 void set_force_stall_in_start(bool force_stall_in_start) { | 132 void set_force_stall_in_start(bool force_stall_in_start) { |
131 force_stall_in_start_ = force_stall_in_start; | 133 force_stall_in_start_ = force_stall_in_start; |
132 } | 134 } |
133 | 135 |
134 private: | 136 private: |
135 bool force_stall_in_start_ = true; | 137 bool force_stall_in_start_ = true; |
136 }; | 138 }; |
137 | 139 |
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
464 EXPECT_EQ(SERVICE_WORKER_OK, status); | 466 EXPECT_EQ(SERVICE_WORKER_OK, status); |
465 ASSERT_EQ(3u, events_.size()); | 467 ASSERT_EQ(3u, events_.size()); |
466 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); | 468 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); |
467 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type); | 469 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type); |
468 EXPECT_EQ(STARTED, events_[2].type); | 470 EXPECT_EQ(STARTED, events_[2].type); |
469 | 471 |
470 // Tear down the worker. | 472 // Tear down the worker. |
471 worker->Stop(); | 473 worker->Stop(); |
472 } | 474 } |
473 | 475 |
| 476 TEST_F(EmbeddedWorkerInstanceTest, StopDuringPausedAfterDownload) { |
| 477 const int64_t version_id = 55L; |
| 478 const GURL scope("http://example.com/"); |
| 479 const GURL url("http://example.com/worker.js"); |
| 480 |
| 481 scoped_ptr<EmbeddedWorkerInstance> worker = |
| 482 embedded_worker_registry()->CreateWorker(); |
| 483 worker->AddListener(this); |
| 484 |
| 485 // Run the start worker sequence until pause after download. |
| 486 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; |
| 487 worker->Start(version_id, scope, url, base::Bind(&SaveStatusAndCall, &status, |
| 488 base::Bind(base::DoNothing)), |
| 489 true /* pause_after_download */); |
| 490 base::RunLoop().RunUntilIdle(); |
| 491 |
| 492 // Make the worker stopping and attempt to send a resume after download |
| 493 // message. |
| 494 worker->Stop(); |
| 495 worker->ResumeAfterDownload(); |
| 496 base::RunLoop().RunUntilIdle(); |
| 497 |
| 498 // The resume after download message should not have been sent. |
| 499 EXPECT_EQ(EmbeddedWorkerInstance::STOPPED, worker->status()); |
| 500 EXPECT_FALSE(ipc_sink()->GetFirstMessageMatching( |
| 501 EmbeddedWorkerMsg_ResumeAfterDownload::ID)); |
| 502 } |
| 503 |
474 TEST_F(EmbeddedWorkerInstanceTest, StopAfterSendingStartWorkerMessage) { | 504 TEST_F(EmbeddedWorkerInstanceTest, StopAfterSendingStartWorkerMessage) { |
475 const int64_t version_id = 55L; | 505 const int64_t version_id = 55L; |
476 const GURL scope("http://example.com/"); | 506 const GURL scope("http://example.com/"); |
477 const GURL url("http://example.com/worker.js"); | 507 const GURL url("http://example.com/worker.js"); |
478 | 508 |
479 helper_.reset(new StalledInStartWorkerHelper); | 509 helper_.reset(new StalledInStartWorkerHelper); |
480 scoped_ptr<EmbeddedWorkerInstance> worker = | 510 scoped_ptr<EmbeddedWorkerInstance> worker = |
481 embedded_worker_registry()->CreateWorker(); | 511 embedded_worker_registry()->CreateWorker(); |
482 worker->AddListener(this); | 512 worker->AddListener(this); |
483 | 513 |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
583 | 613 |
584 // The callback should have run, and we should have got an OnStopped message. | 614 // The callback should have run, and we should have got an OnStopped message. |
585 EXPECT_EQ(SERVICE_WORKER_ERROR_IPC_FAILED, status); | 615 EXPECT_EQ(SERVICE_WORKER_ERROR_IPC_FAILED, status); |
586 ASSERT_EQ(2u, events_.size()); | 616 ASSERT_EQ(2u, events_.size()); |
587 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); | 617 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); |
588 EXPECT_EQ(STOPPED, events_[1].type); | 618 EXPECT_EQ(STOPPED, events_[1].type); |
589 EXPECT_EQ(EmbeddedWorkerInstance::STARTING, events_[1].status); | 619 EXPECT_EQ(EmbeddedWorkerInstance::STARTING, events_[1].status); |
590 } | 620 } |
591 | 621 |
592 } // namespace content | 622 } // namespace content |
OLD | NEW |