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, | 121 const GURL& script_url) override { |
122 bool pause_after_download) override { | |
123 if (force_stall_in_start_) { | 122 if (force_stall_in_start_) { |
124 // Do nothing to simulate a stall in the worker process. | 123 // Do nothing to simulate a stall in the worker process. |
125 return; | 124 return; |
126 } | 125 } |
127 EmbeddedWorkerTestHelper::OnStartWorker(embedded_worker_id, | 126 EmbeddedWorkerTestHelper::OnStartWorker( |
128 service_worker_version_id, scope, | 127 embedded_worker_id, service_worker_version_id, scope, script_url); |
129 script_url, pause_after_download); | |
130 } | 128 } |
131 | 129 |
132 void set_force_stall_in_start(bool force_stall_in_start) { | 130 void set_force_stall_in_start(bool force_stall_in_start) { |
133 force_stall_in_start_ = force_stall_in_start; | 131 force_stall_in_start_ = force_stall_in_start; |
134 } | 132 } |
135 | 133 |
136 private: | 134 private: |
137 bool force_stall_in_start_ = true; | 135 bool force_stall_in_start_ = true; |
138 }; | 136 }; |
139 | 137 |
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
466 EXPECT_EQ(SERVICE_WORKER_OK, status); | 464 EXPECT_EQ(SERVICE_WORKER_OK, status); |
467 ASSERT_EQ(3u, events_.size()); | 465 ASSERT_EQ(3u, events_.size()); |
468 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); | 466 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); |
469 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type); | 467 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type); |
470 EXPECT_EQ(STARTED, events_[2].type); | 468 EXPECT_EQ(STARTED, events_[2].type); |
471 | 469 |
472 // Tear down the worker. | 470 // Tear down the worker. |
473 worker->Stop(); | 471 worker->Stop(); |
474 } | 472 } |
475 | 473 |
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 | |
504 TEST_F(EmbeddedWorkerInstanceTest, StopAfterSendingStartWorkerMessage) { | 474 TEST_F(EmbeddedWorkerInstanceTest, StopAfterSendingStartWorkerMessage) { |
505 const int64_t version_id = 55L; | 475 const int64_t version_id = 55L; |
506 const GURL scope("http://example.com/"); | 476 const GURL scope("http://example.com/"); |
507 const GURL url("http://example.com/worker.js"); | 477 const GURL url("http://example.com/worker.js"); |
508 | 478 |
509 helper_.reset(new StalledInStartWorkerHelper); | 479 helper_.reset(new StalledInStartWorkerHelper); |
510 scoped_ptr<EmbeddedWorkerInstance> worker = | 480 scoped_ptr<EmbeddedWorkerInstance> worker = |
511 embedded_worker_registry()->CreateWorker(); | 481 embedded_worker_registry()->CreateWorker(); |
512 worker->AddListener(this); | 482 worker->AddListener(this); |
513 | 483 |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
613 | 583 |
614 // The callback should have run, and we should have got an OnStopped message. | 584 // The callback should have run, and we should have got an OnStopped message. |
615 EXPECT_EQ(SERVICE_WORKER_ERROR_IPC_FAILED, status); | 585 EXPECT_EQ(SERVICE_WORKER_ERROR_IPC_FAILED, status); |
616 ASSERT_EQ(2u, events_.size()); | 586 ASSERT_EQ(2u, events_.size()); |
617 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); | 587 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); |
618 EXPECT_EQ(STOPPED, events_[1].type); | 588 EXPECT_EQ(STOPPED, events_[1].type); |
619 EXPECT_EQ(EmbeddedWorkerInstance::STARTING, events_[1].status); | 589 EXPECT_EQ(EmbeddedWorkerInstance::STARTING, events_[1].status); |
620 } | 590 } |
621 | 591 |
622 } // namespace content | 592 } // namespace content |
OLD | NEW |