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 26 matching lines...) Expand all Loading... |
37 | 37 |
38 void SaveStatusAndCall(ServiceWorkerStatusCode* out, | 38 void SaveStatusAndCall(ServiceWorkerStatusCode* out, |
39 const base::Closure& callback, | 39 const base::Closure& callback, |
40 ServiceWorkerStatusCode status) { | 40 ServiceWorkerStatusCode status) { |
41 *out = status; | 41 *out = status; |
42 callback.Run(); | 42 callback.Run(); |
43 } | 43 } |
44 | 44 |
45 } // namespace | 45 } // namespace |
46 | 46 |
47 class ProviderHostEndpoints : public mojom::ServiceWorkerProviderHost { | |
48 public: | |
49 ProviderHostEndpoints() : binding_(this) {} | |
50 | |
51 ~ProviderHostEndpoints() override {} | |
52 | |
53 mojom::ServiceWorkerProviderInfoForStartWorkerPtr CreateProviderInfoPtr() { | |
54 DCHECK(!binding_.is_bound()); | |
55 DCHECK(!client_.is_bound()); | |
56 // Just keep the endpoints. | |
57 mojom::ServiceWorkerProviderInfoForStartWorkerPtr provider_info = | |
58 mojom::ServiceWorkerProviderInfoForStartWorker::New(); | |
59 binding_.Bind(mojo::MakeRequest(&provider_info->host_ptr_info)); | |
60 provider_info->client_request = mojo::MakeRequest(&client_); | |
61 return provider_info; | |
62 } | |
63 | |
64 private: | |
65 mojom::ServiceWorkerProviderAssociatedPtr client_; | |
66 mojo::AssociatedBinding<mojom::ServiceWorkerProviderHost> binding_; | |
67 | |
68 DISALLOW_COPY_AND_ASSIGN(ProviderHostEndpoints); | |
69 }; | |
70 | |
71 class EmbeddedWorkerInstanceTest : public testing::Test, | 47 class EmbeddedWorkerInstanceTest : public testing::Test, |
72 public EmbeddedWorkerInstance::Listener { | 48 public EmbeddedWorkerInstance::Listener { |
73 protected: | 49 protected: |
74 EmbeddedWorkerInstanceTest() | 50 EmbeddedWorkerInstanceTest() |
75 : thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP) {} | 51 : thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP) {} |
76 | 52 |
77 enum EventType { | 53 enum EventType { |
78 PROCESS_ALLOCATED, | 54 PROCESS_ALLOCATED, |
79 START_WORKER_MESSAGE_SENT, | 55 START_WORKER_MESSAGE_SENT, |
80 STARTED, | 56 STARTED, |
(...skipping 18 matching lines...) Expand all Loading... |
99 RecordEvent(START_WORKER_MESSAGE_SENT); | 75 RecordEvent(START_WORKER_MESSAGE_SENT); |
100 } | 76 } |
101 void OnStarted() override { RecordEvent(STARTED); } | 77 void OnStarted() override { RecordEvent(STARTED); } |
102 void OnStopped(EmbeddedWorkerStatus old_status) override { | 78 void OnStopped(EmbeddedWorkerStatus old_status) override { |
103 RecordEvent(STOPPED, old_status); | 79 RecordEvent(STOPPED, old_status); |
104 } | 80 } |
105 void OnDetached(EmbeddedWorkerStatus old_status) override { | 81 void OnDetached(EmbeddedWorkerStatus old_status) override { |
106 RecordEvent(DETACHED, old_status); | 82 RecordEvent(DETACHED, old_status); |
107 } | 83 } |
108 | 84 |
109 bool OnMessageReceived(const IPC::Message&) override { return false; } | 85 bool OnMessageReceived(const IPC::Message& message) override { return false; } |
110 | 86 |
111 void SetUp() override { | 87 void SetUp() override { |
112 helper_.reset(new EmbeddedWorkerTestHelper(base::FilePath())); | 88 helper_.reset(new EmbeddedWorkerTestHelper(base::FilePath())); |
113 } | 89 } |
114 | 90 |
115 void TearDown() override { helper_.reset(); } | 91 void TearDown() override { helper_.reset(); } |
116 | 92 |
117 ServiceWorkerStatusCode StartWorker(EmbeddedWorkerInstance* worker, | 93 ServiceWorkerStatusCode StartWorker(EmbeddedWorkerInstance* worker, |
118 int id, const GURL& pattern, | 94 int id, const GURL& pattern, |
119 const GURL& url) { | 95 const GURL& url) { |
120 ServiceWorkerStatusCode status; | 96 ServiceWorkerStatusCode status; |
121 base::RunLoop run_loop; | 97 base::RunLoop run_loop; |
122 std::unique_ptr<EmbeddedWorkerStartParams> params = | 98 std::unique_ptr<EmbeddedWorkerStartParams> params = |
123 CreateStartParams(id, pattern, url); | 99 CreateStartParams(id, pattern, url); |
124 worker->Start( | 100 worker->Start( |
125 std::move(params), CreateProviderInfoGetter(), CreateEventDispatcher(), | 101 std::move(params), CreateEventDispatcher(), |
126 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure())); | 102 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure())); |
127 run_loop.Run(); | 103 run_loop.Run(); |
128 return status; | 104 return status; |
129 } | 105 } |
130 | 106 |
131 std::unique_ptr<EmbeddedWorkerStartParams> | 107 std::unique_ptr<EmbeddedWorkerStartParams> |
132 CreateStartParams(int version_id, const GURL& scope, const GURL& script_url) { | 108 CreateStartParams(int version_id, const GURL& scope, const GURL& script_url) { |
133 std::unique_ptr<EmbeddedWorkerStartParams> params = | 109 std::unique_ptr<EmbeddedWorkerStartParams> params = |
134 base::MakeUnique<EmbeddedWorkerStartParams>(); | 110 base::MakeUnique<EmbeddedWorkerStartParams>(); |
135 params->service_worker_version_id = version_id; | 111 params->service_worker_version_id = version_id; |
136 params->scope = scope; | 112 params->scope = scope; |
137 params->script_url = script_url; | 113 params->script_url = script_url; |
138 params->pause_after_download = false; | 114 params->pause_after_download = false; |
139 params->is_installed = false; | 115 params->is_installed = false; |
140 return params; | 116 return params; |
141 } | 117 } |
142 | 118 |
143 mojom::ServiceWorkerProviderInfoForStartWorkerPtr CreateProviderInfo( | |
144 int /* process_id */) { | |
145 provider_host_endpoints_.emplace_back( | |
146 base::MakeUnique<ProviderHostEndpoints>()); | |
147 return provider_host_endpoints_.back()->CreateProviderInfoPtr(); | |
148 } | |
149 | |
150 EmbeddedWorkerInstance::ProviderInfoGetter CreateProviderInfoGetter() { | |
151 return base::BindOnce(&EmbeddedWorkerInstanceTest::CreateProviderInfo, | |
152 base::Unretained(this)); | |
153 } | |
154 | |
155 mojom::ServiceWorkerEventDispatcherRequest CreateEventDispatcher() { | 119 mojom::ServiceWorkerEventDispatcherRequest CreateEventDispatcher() { |
156 dispatchers_.emplace_back(); | 120 dispatchers_.emplace_back(); |
157 return mojo::MakeRequest(&dispatchers_.back()); | 121 return mojo::MakeRequest(&dispatchers_.back()); |
158 } | 122 } |
159 | 123 |
160 ServiceWorkerContextCore* context() { return helper_->context(); } | 124 ServiceWorkerContextCore* context() { return helper_->context(); } |
161 | 125 |
162 EmbeddedWorkerRegistry* embedded_worker_registry() { | 126 EmbeddedWorkerRegistry* embedded_worker_registry() { |
163 DCHECK(context()); | 127 DCHECK(context()); |
164 return context()->embedded_worker_registry(); | 128 return context()->embedded_worker_registry(); |
165 } | 129 } |
166 | 130 |
167 IPC::TestSink* ipc_sink() { return helper_->ipc_sink(); } | 131 IPC::TestSink* ipc_sink() { return helper_->ipc_sink(); } |
168 | 132 |
169 std::vector<std::unique_ptr< | 133 std::vector<std::unique_ptr< |
170 EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient>>* | 134 EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient>>* |
171 mock_instance_clients() { | 135 mock_instance_clients() { |
172 return helper_->mock_instance_clients(); | 136 return helper_->mock_instance_clients(); |
173 } | 137 } |
174 | 138 |
175 std::vector<mojom::ServiceWorkerEventDispatcherPtr> dispatchers_; | 139 std::vector<mojom::ServiceWorkerEventDispatcherPtr> dispatchers_; |
176 std::vector<std::unique_ptr<ProviderHostEndpoints>> provider_host_endpoints_; | |
177 | 140 |
178 TestBrowserThreadBundle thread_bundle_; | 141 TestBrowserThreadBundle thread_bundle_; |
179 std::unique_ptr<EmbeddedWorkerTestHelper> helper_; | 142 std::unique_ptr<EmbeddedWorkerTestHelper> helper_; |
180 std::vector<EventLog> events_; | 143 std::vector<EventLog> events_; |
181 | 144 |
182 private: | 145 private: |
183 DISALLOW_COPY_AND_ASSIGN(EmbeddedWorkerInstanceTest); | 146 DISALLOW_COPY_AND_ASSIGN(EmbeddedWorkerInstanceTest); |
184 }; | 147 }; |
185 | 148 |
186 // A helper to simulate the start worker sequence is stalled in a worker | 149 // A helper to simulate the start worker sequence is stalled in a worker |
187 // process. | 150 // process. |
188 class StalledInStartWorkerHelper : public EmbeddedWorkerTestHelper { | 151 class StalledInStartWorkerHelper : public EmbeddedWorkerTestHelper { |
189 public: | 152 public: |
190 StalledInStartWorkerHelper() : EmbeddedWorkerTestHelper(base::FilePath()) {} | 153 StalledInStartWorkerHelper() : EmbeddedWorkerTestHelper(base::FilePath()) {} |
191 ~StalledInStartWorkerHelper() override {} | 154 ~StalledInStartWorkerHelper() override {} |
192 | 155 |
193 void OnStartWorker( | 156 void OnStartWorker(int embedded_worker_id, |
194 int embedded_worker_id, | 157 int64_t service_worker_version_id, |
195 int64_t service_worker_version_id, | 158 const GURL& scope, |
196 const GURL& scope, | 159 const GURL& script_url, |
197 const GURL& script_url, | 160 bool pause_after_download, |
198 bool pause_after_download, | 161 mojom::ServiceWorkerEventDispatcherRequest request, |
199 mojom::ServiceWorkerEventDispatcherRequest request, | 162 mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo |
200 mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo instance_host, | 163 instance_host) override { |
201 mojom::ServiceWorkerProviderInfoForStartWorkerPtr provider_info) | |
202 override { | |
203 if (force_stall_in_start_) { | 164 if (force_stall_in_start_) { |
204 // Prepare for OnStopWorker(). | 165 // Prepare for OnStopWorker(). |
205 instance_host_ptr_map_[embedded_worker_id].Bind(std::move(instance_host)); | 166 instance_host_ptr_map_[embedded_worker_id].Bind(std::move(instance_host)); |
206 // Do nothing to simulate a stall in the worker process. | 167 // Do nothing to simulate a stall in the worker process. |
207 return; | 168 return; |
208 } | 169 } |
209 EmbeddedWorkerTestHelper::OnStartWorker( | 170 EmbeddedWorkerTestHelper::OnStartWorker( |
210 embedded_worker_id, service_worker_version_id, scope, script_url, | 171 embedded_worker_id, service_worker_version_id, scope, script_url, |
211 pause_after_download, std::move(request), std::move(instance_host), | 172 pause_after_download, std::move(request), std::move(instance_host)); |
212 std::move(provider_info)); | |
213 } | 173 } |
214 | 174 |
215 void OnStopWorker(int embedded_worker_id) override { | 175 void OnStopWorker(int embedded_worker_id) override { |
216 if (instance_host_ptr_map_[embedded_worker_id]) { | 176 if (instance_host_ptr_map_[embedded_worker_id]) { |
217 instance_host_ptr_map_[embedded_worker_id]->OnStopped(); | 177 instance_host_ptr_map_[embedded_worker_id]->OnStopped(); |
218 base::RunLoop().RunUntilIdle(); | 178 base::RunLoop().RunUntilIdle(); |
219 return; | 179 return; |
220 } | 180 } |
221 EmbeddedWorkerTestHelper::OnStopWorker(embedded_worker_id); | 181 EmbeddedWorkerTestHelper::OnStopWorker(embedded_worker_id); |
222 } | 182 } |
(...skipping 24 matching lines...) Expand all Loading... |
247 // Simulate adding one process to the pattern. | 207 // Simulate adding one process to the pattern. |
248 helper_->SimulateAddProcessToPattern(pattern, | 208 helper_->SimulateAddProcessToPattern(pattern, |
249 helper_->mock_render_process_id()); | 209 helper_->mock_render_process_id()); |
250 | 210 |
251 // Start should succeed. | 211 // Start should succeed. |
252 ServiceWorkerStatusCode status; | 212 ServiceWorkerStatusCode status; |
253 base::RunLoop run_loop; | 213 base::RunLoop run_loop; |
254 std::unique_ptr<EmbeddedWorkerStartParams> params = | 214 std::unique_ptr<EmbeddedWorkerStartParams> params = |
255 CreateStartParams(service_worker_version_id, pattern, url); | 215 CreateStartParams(service_worker_version_id, pattern, url); |
256 worker->Start( | 216 worker->Start( |
257 std::move(params), CreateProviderInfoGetter(), CreateEventDispatcher(), | 217 std::move(params), CreateEventDispatcher(), |
258 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure())); | 218 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure())); |
259 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, worker->status()); | 219 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, worker->status()); |
260 run_loop.Run(); | 220 run_loop.Run(); |
261 EXPECT_EQ(SERVICE_WORKER_OK, status); | 221 EXPECT_EQ(SERVICE_WORKER_OK, status); |
262 | 222 |
263 // The 'WorkerStarted' message should have been sent by | 223 // The 'WorkerStarted' message should have been sent by |
264 // EmbeddedWorkerTestHelper. | 224 // EmbeddedWorkerTestHelper. |
265 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, worker->status()); | 225 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, worker->status()); |
266 EXPECT_EQ(helper_->mock_render_process_id(), worker->process_id()); | 226 EXPECT_EQ(helper_->mock_render_process_id(), worker->process_id()); |
267 | 227 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
304 helper_->SimulateAddProcessToPattern(pattern, | 264 helper_->SimulateAddProcessToPattern(pattern, |
305 helper_->new_render_process_id()); | 265 helper_->new_render_process_id()); |
306 | 266 |
307 { | 267 { |
308 // Start once normally. | 268 // Start once normally. |
309 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; | 269 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; |
310 base::RunLoop run_loop; | 270 base::RunLoop run_loop; |
311 std::unique_ptr<EmbeddedWorkerStartParams> params = | 271 std::unique_ptr<EmbeddedWorkerStartParams> params = |
312 CreateStartParams(service_worker_version_id, pattern, url); | 272 CreateStartParams(service_worker_version_id, pattern, url); |
313 worker->Start( | 273 worker->Start( |
314 std::move(params), CreateProviderInfoGetter(), CreateEventDispatcher(), | 274 std::move(params), CreateEventDispatcher(), |
315 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure())); | 275 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure())); |
316 run_loop.Run(); | 276 run_loop.Run(); |
317 EXPECT_EQ(SERVICE_WORKER_OK, status); | 277 EXPECT_EQ(SERVICE_WORKER_OK, status); |
318 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, worker->status()); | 278 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, worker->status()); |
319 // The worker should be using the default render process. | 279 // The worker should be using the default render process. |
320 EXPECT_EQ(helper_->mock_render_process_id(), worker->process_id()); | 280 EXPECT_EQ(helper_->mock_render_process_id(), worker->process_id()); |
321 | 281 |
322 EXPECT_TRUE(worker->Stop()); | 282 EXPECT_TRUE(worker->Stop()); |
323 base::RunLoop().RunUntilIdle(); | 283 base::RunLoop().RunUntilIdle(); |
324 } | 284 } |
325 | 285 |
326 // Fail twice. | 286 // Fail twice. |
327 context()->UpdateVersionFailureCount(service_worker_version_id, | 287 context()->UpdateVersionFailureCount(service_worker_version_id, |
328 SERVICE_WORKER_ERROR_FAILED); | 288 SERVICE_WORKER_ERROR_FAILED); |
329 context()->UpdateVersionFailureCount(service_worker_version_id, | 289 context()->UpdateVersionFailureCount(service_worker_version_id, |
330 SERVICE_WORKER_ERROR_FAILED); | 290 SERVICE_WORKER_ERROR_FAILED); |
331 | 291 |
332 { | 292 { |
333 // Start again. | 293 // Start again. |
334 ServiceWorkerStatusCode status; | 294 ServiceWorkerStatusCode status; |
335 base::RunLoop run_loop; | 295 base::RunLoop run_loop; |
336 std::unique_ptr<EmbeddedWorkerStartParams> params = | 296 std::unique_ptr<EmbeddedWorkerStartParams> params = |
337 CreateStartParams(service_worker_version_id, pattern, url); | 297 CreateStartParams(service_worker_version_id, pattern, url); |
338 worker->Start( | 298 worker->Start( |
339 std::move(params), CreateProviderInfoGetter(), CreateEventDispatcher(), | 299 std::move(params), CreateEventDispatcher(), |
340 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure())); | 300 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure())); |
341 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, worker->status()); | 301 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, worker->status()); |
342 run_loop.Run(); | 302 run_loop.Run(); |
343 EXPECT_EQ(SERVICE_WORKER_OK, status); | 303 EXPECT_EQ(SERVICE_WORKER_OK, status); |
344 | 304 |
345 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, worker->status()); | 305 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, worker->status()); |
346 // The worker should be using the new render process. | 306 // The worker should be using the new render process. |
347 EXPECT_EQ(helper_->new_render_process_id(), worker->process_id()); | 307 EXPECT_EQ(helper_->new_render_process_id(), worker->process_id()); |
348 EXPECT_TRUE(worker->Stop()); | 308 EXPECT_TRUE(worker->Stop()); |
349 base::RunLoop().RunUntilIdle(); | 309 base::RunLoop().RunUntilIdle(); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
410 int process_id = helper_->mock_render_process_id(); | 370 int process_id = helper_->mock_render_process_id(); |
411 | 371 |
412 helper_->SimulateAddProcessToPattern(pattern, process_id); | 372 helper_->SimulateAddProcessToPattern(pattern, process_id); |
413 { | 373 { |
414 // Start worker1. | 374 // Start worker1. |
415 ServiceWorkerStatusCode status; | 375 ServiceWorkerStatusCode status; |
416 base::RunLoop run_loop; | 376 base::RunLoop run_loop; |
417 std::unique_ptr<EmbeddedWorkerStartParams> params = | 377 std::unique_ptr<EmbeddedWorkerStartParams> params = |
418 CreateStartParams(version_id1, pattern, url); | 378 CreateStartParams(version_id1, pattern, url); |
419 worker1->Start( | 379 worker1->Start( |
420 std::move(params), CreateProviderInfoGetter(), CreateEventDispatcher(), | 380 std::move(params), CreateEventDispatcher(), |
421 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure())); | 381 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure())); |
422 run_loop.Run(); | 382 run_loop.Run(); |
423 EXPECT_EQ(SERVICE_WORKER_OK, status); | 383 EXPECT_EQ(SERVICE_WORKER_OK, status); |
424 } | 384 } |
425 | 385 |
426 { | 386 { |
427 // Start worker2. | 387 // Start worker2. |
428 ServiceWorkerStatusCode status; | 388 ServiceWorkerStatusCode status; |
429 base::RunLoop run_loop; | 389 base::RunLoop run_loop; |
430 std::unique_ptr<EmbeddedWorkerStartParams> params = | 390 std::unique_ptr<EmbeddedWorkerStartParams> params = |
431 CreateStartParams(version_id2, pattern, url); | 391 CreateStartParams(version_id2, pattern, url); |
432 worker2->Start( | 392 worker2->Start( |
433 std::move(params), CreateProviderInfoGetter(), CreateEventDispatcher(), | 393 std::move(params), CreateEventDispatcher(), |
434 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure())); | 394 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure())); |
435 run_loop.Run(); | 395 run_loop.Run(); |
436 EXPECT_EQ(SERVICE_WORKER_OK, status); | 396 EXPECT_EQ(SERVICE_WORKER_OK, status); |
437 } | 397 } |
438 | 398 |
439 // The two workers share the same process. | 399 // The two workers share the same process. |
440 EXPECT_EQ(worker1->process_id(), worker2->process_id()); | 400 EXPECT_EQ(worker1->process_id(), worker2->process_id()); |
441 | 401 |
442 // Destroy worker1. It removes itself from the registry. | 402 // Destroy worker1. It removes itself from the registry. |
443 int worker1_id = worker1->embedded_worker_id(); | 403 int worker1_id = worker1->embedded_worker_id(); |
(...skipping 17 matching lines...) Expand all Loading... |
461 | 421 |
462 std::unique_ptr<EmbeddedWorkerInstance> worker = | 422 std::unique_ptr<EmbeddedWorkerInstance> worker = |
463 embedded_worker_registry()->CreateWorker(); | 423 embedded_worker_registry()->CreateWorker(); |
464 worker->AddListener(this); | 424 worker->AddListener(this); |
465 | 425 |
466 // Run the start worker sequence and detach during process allocation. | 426 // Run the start worker sequence and detach during process allocation. |
467 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; | 427 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; |
468 std::unique_ptr<EmbeddedWorkerStartParams> params = | 428 std::unique_ptr<EmbeddedWorkerStartParams> params = |
469 CreateStartParams(version_id, scope, url); | 429 CreateStartParams(version_id, scope, url); |
470 worker->Start( | 430 worker->Start( |
471 std::move(params), CreateProviderInfoGetter(), CreateEventDispatcher(), | 431 std::move(params), CreateEventDispatcher(), |
472 base::Bind(&SaveStatusAndCall, &status, base::Bind(&base::DoNothing))); | 432 base::Bind(&SaveStatusAndCall, &status, base::Bind(&base::DoNothing))); |
473 worker->Detach(); | 433 worker->Detach(); |
474 base::RunLoop().RunUntilIdle(); | 434 base::RunLoop().RunUntilIdle(); |
475 | 435 |
476 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status()); | 436 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status()); |
477 EXPECT_EQ(ChildProcessHost::kInvalidUniqueID, worker->process_id()); | 437 EXPECT_EQ(ChildProcessHost::kInvalidUniqueID, worker->process_id()); |
478 | 438 |
479 // The start callback should not be aborted by detach (see a comment on the | 439 // The start callback should not be aborted by detach (see a comment on the |
480 // dtor of EmbeddedWorkerInstance::StartTask). | 440 // dtor of EmbeddedWorkerInstance::StartTask). |
481 EXPECT_EQ(SERVICE_WORKER_ERROR_MAX_VALUE, status); | 441 EXPECT_EQ(SERVICE_WORKER_ERROR_MAX_VALUE, status); |
(...skipping 12 matching lines...) Expand all Loading... |
494 helper_.reset(new StalledInStartWorkerHelper()); | 454 helper_.reset(new StalledInStartWorkerHelper()); |
495 std::unique_ptr<EmbeddedWorkerInstance> worker = | 455 std::unique_ptr<EmbeddedWorkerInstance> worker = |
496 embedded_worker_registry()->CreateWorker(); | 456 embedded_worker_registry()->CreateWorker(); |
497 worker->AddListener(this); | 457 worker->AddListener(this); |
498 | 458 |
499 // Run the start worker sequence until a start worker message is sent. | 459 // Run the start worker sequence until a start worker message is sent. |
500 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; | 460 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; |
501 std::unique_ptr<EmbeddedWorkerStartParams> params = | 461 std::unique_ptr<EmbeddedWorkerStartParams> params = |
502 CreateStartParams(version_id, scope, url); | 462 CreateStartParams(version_id, scope, url); |
503 worker->Start( | 463 worker->Start( |
504 std::move(params), CreateProviderInfoGetter(), CreateEventDispatcher(), | 464 std::move(params), CreateEventDispatcher(), |
505 base::Bind(&SaveStatusAndCall, &status, base::Bind(&base::DoNothing))); | 465 base::Bind(&SaveStatusAndCall, &status, base::Bind(&base::DoNothing))); |
506 base::RunLoop().RunUntilIdle(); | 466 base::RunLoop().RunUntilIdle(); |
507 | 467 |
508 ASSERT_EQ(2u, events_.size()); | 468 ASSERT_EQ(2u, events_.size()); |
509 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); | 469 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); |
510 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type); | 470 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type); |
511 events_.clear(); | 471 events_.clear(); |
512 | 472 |
513 worker->Detach(); | 473 worker->Detach(); |
514 base::RunLoop().RunUntilIdle(); | 474 base::RunLoop().RunUntilIdle(); |
(...skipping 19 matching lines...) Expand all Loading... |
534 std::unique_ptr<EmbeddedWorkerInstance> worker = | 494 std::unique_ptr<EmbeddedWorkerInstance> worker = |
535 embedded_worker_registry()->CreateWorker(); | 495 embedded_worker_registry()->CreateWorker(); |
536 worker->AddListener(this); | 496 worker->AddListener(this); |
537 | 497 |
538 // Stop the start worker sequence before a process is allocated. | 498 // Stop the start worker sequence before a process is allocated. |
539 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; | 499 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; |
540 | 500 |
541 std::unique_ptr<EmbeddedWorkerStartParams> params = | 501 std::unique_ptr<EmbeddedWorkerStartParams> params = |
542 CreateStartParams(version_id, scope, url); | 502 CreateStartParams(version_id, scope, url); |
543 worker->Start( | 503 worker->Start( |
544 std::move(params), CreateProviderInfoGetter(), CreateEventDispatcher(), | 504 std::move(params), CreateEventDispatcher(), |
545 base::Bind(&SaveStatusAndCall, &status, base::Bind(&base::DoNothing))); | 505 base::Bind(&SaveStatusAndCall, &status, base::Bind(&base::DoNothing))); |
546 worker->Stop(); | 506 worker->Stop(); |
547 base::RunLoop().RunUntilIdle(); | 507 base::RunLoop().RunUntilIdle(); |
548 | 508 |
549 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status()); | 509 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status()); |
550 EXPECT_EQ(ChildProcessHost::kInvalidUniqueID, worker->process_id()); | 510 EXPECT_EQ(ChildProcessHost::kInvalidUniqueID, worker->process_id()); |
551 | 511 |
552 // The start callback should not be aborted by stop (see a comment on the dtor | 512 // The start callback should not be aborted by stop (see a comment on the dtor |
553 // of EmbeddedWorkerInstance::StartTask). | 513 // of EmbeddedWorkerInstance::StartTask). |
554 EXPECT_EQ(SERVICE_WORKER_ERROR_MAX_VALUE, status); | 514 EXPECT_EQ(SERVICE_WORKER_ERROR_MAX_VALUE, status); |
555 | 515 |
556 // "PROCESS_ALLOCATED" event should not be recorded. | 516 // "PROCESS_ALLOCATED" event should not be recorded. |
557 ASSERT_EQ(1u, events_.size()); | 517 ASSERT_EQ(1u, events_.size()); |
558 EXPECT_EQ(DETACHED, events_[0].type); | 518 EXPECT_EQ(DETACHED, events_[0].type); |
559 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, events_[0].status); | 519 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, events_[0].status); |
560 events_.clear(); | 520 events_.clear(); |
561 | 521 |
562 // Restart the worker. | 522 // Restart the worker. |
563 status = SERVICE_WORKER_ERROR_MAX_VALUE; | 523 status = SERVICE_WORKER_ERROR_MAX_VALUE; |
564 std::unique_ptr<base::RunLoop> run_loop(new base::RunLoop); | 524 std::unique_ptr<base::RunLoop> run_loop(new base::RunLoop); |
565 params = CreateStartParams(version_id, scope, url); | 525 params = CreateStartParams(version_id, scope, url); |
566 worker->Start( | 526 worker->Start( |
567 std::move(params), CreateProviderInfoGetter(), CreateEventDispatcher(), | 527 std::move(params), CreateEventDispatcher(), |
568 base::Bind(&SaveStatusAndCall, &status, run_loop->QuitClosure())); | 528 base::Bind(&SaveStatusAndCall, &status, run_loop->QuitClosure())); |
569 run_loop->Run(); | 529 run_loop->Run(); |
570 | 530 |
571 EXPECT_EQ(SERVICE_WORKER_OK, status); | 531 EXPECT_EQ(SERVICE_WORKER_OK, status); |
572 ASSERT_EQ(3u, events_.size()); | 532 ASSERT_EQ(3u, events_.size()); |
573 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); | 533 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); |
574 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type); | 534 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type); |
575 EXPECT_EQ(STARTED, events_[2].type); | 535 EXPECT_EQ(STARTED, events_[2].type); |
576 | 536 |
577 // Tear down the worker. | 537 // Tear down the worker. |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
609 embedded_worker_registry()->CreateWorker(); | 569 embedded_worker_registry()->CreateWorker(); |
610 worker->AddListener(this); | 570 worker->AddListener(this); |
611 | 571 |
612 // Run the start worker sequence until pause after download. | 572 // Run the start worker sequence until pause after download. |
613 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; | 573 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; |
614 | 574 |
615 std::unique_ptr<EmbeddedWorkerStartParams> params = | 575 std::unique_ptr<EmbeddedWorkerStartParams> params = |
616 CreateStartParams(version_id, scope, url); | 576 CreateStartParams(version_id, scope, url); |
617 params->pause_after_download = true; | 577 params->pause_after_download = true; |
618 worker->Start( | 578 worker->Start( |
619 std::move(params), CreateProviderInfoGetter(), CreateEventDispatcher(), | 579 std::move(params), CreateEventDispatcher(), |
620 base::Bind(&SaveStatusAndCall, &status, base::Bind(&base::DoNothing))); | 580 base::Bind(&SaveStatusAndCall, &status, base::Bind(&base::DoNothing))); |
621 base::RunLoop().RunUntilIdle(); | 581 base::RunLoop().RunUntilIdle(); |
622 | 582 |
623 // Make the worker stopping and attempt to send a resume after download | 583 // Make the worker stopping and attempt to send a resume after download |
624 // message. | 584 // message. |
625 worker->Stop(); | 585 worker->Stop(); |
626 worker->ResumeAfterDownload(); | 586 worker->ResumeAfterDownload(); |
627 base::RunLoop().RunUntilIdle(); | 587 base::RunLoop().RunUntilIdle(); |
628 | 588 |
629 // The resume after download message should not have been sent. | 589 // The resume after download message should not have been sent. |
630 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status()); | 590 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status()); |
631 EXPECT_FALSE(was_resume_after_download_called); | 591 EXPECT_FALSE(was_resume_after_download_called); |
632 } | 592 } |
633 | 593 |
634 TEST_F(EmbeddedWorkerInstanceTest, StopAfterSendingStartWorkerMessage) { | 594 TEST_F(EmbeddedWorkerInstanceTest, StopAfterSendingStartWorkerMessage) { |
635 const int64_t version_id = 55L; | 595 const int64_t version_id = 55L; |
636 const GURL scope("http://example.com/"); | 596 const GURL scope("http://example.com/"); |
637 const GURL url("http://example.com/worker.js"); | 597 const GURL url("http://example.com/worker.js"); |
638 | 598 |
639 helper_.reset(new StalledInStartWorkerHelper); | 599 helper_.reset(new StalledInStartWorkerHelper); |
640 std::unique_ptr<EmbeddedWorkerInstance> worker = | 600 std::unique_ptr<EmbeddedWorkerInstance> worker = |
641 embedded_worker_registry()->CreateWorker(); | 601 embedded_worker_registry()->CreateWorker(); |
642 worker->AddListener(this); | 602 worker->AddListener(this); |
643 | 603 |
644 // Run the start worker sequence until a start worker message is sent. | 604 // Run the start worker sequence until a start worker message is sent. |
645 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; | 605 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; |
646 std::unique_ptr<EmbeddedWorkerStartParams> params = | 606 std::unique_ptr<EmbeddedWorkerStartParams> params = |
647 CreateStartParams(version_id, scope, url); | 607 CreateStartParams(version_id, scope, url); |
648 worker->Start( | 608 worker->Start( |
649 std::move(params), CreateProviderInfoGetter(), CreateEventDispatcher(), | 609 std::move(params), CreateEventDispatcher(), |
650 base::Bind(&SaveStatusAndCall, &status, base::Bind(&base::DoNothing))); | 610 base::Bind(&SaveStatusAndCall, &status, base::Bind(&base::DoNothing))); |
651 base::RunLoop().RunUntilIdle(); | 611 base::RunLoop().RunUntilIdle(); |
652 | 612 |
653 ASSERT_EQ(2u, events_.size()); | 613 ASSERT_EQ(2u, events_.size()); |
654 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); | 614 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); |
655 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type); | 615 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type); |
656 events_.clear(); | 616 events_.clear(); |
657 | 617 |
658 worker->Stop(); | 618 worker->Stop(); |
659 base::RunLoop().RunUntilIdle(); | 619 base::RunLoop().RunUntilIdle(); |
(...skipping 12 matching lines...) Expand all Loading... |
672 events_.clear(); | 632 events_.clear(); |
673 | 633 |
674 // Restart the worker. | 634 // Restart the worker. |
675 static_cast<StalledInStartWorkerHelper*>(helper_.get()) | 635 static_cast<StalledInStartWorkerHelper*>(helper_.get()) |
676 ->set_force_stall_in_start(false); | 636 ->set_force_stall_in_start(false); |
677 status = SERVICE_WORKER_ERROR_MAX_VALUE; | 637 status = SERVICE_WORKER_ERROR_MAX_VALUE; |
678 std::unique_ptr<base::RunLoop> run_loop(new base::RunLoop); | 638 std::unique_ptr<base::RunLoop> run_loop(new base::RunLoop); |
679 | 639 |
680 params = CreateStartParams(version_id, scope, url); | 640 params = CreateStartParams(version_id, scope, url); |
681 worker->Start( | 641 worker->Start( |
682 std::move(params), CreateProviderInfoGetter(), CreateEventDispatcher(), | 642 std::move(params), CreateEventDispatcher(), |
683 base::Bind(&SaveStatusAndCall, &status, run_loop->QuitClosure())); | 643 base::Bind(&SaveStatusAndCall, &status, run_loop->QuitClosure())); |
684 run_loop->Run(); | 644 run_loop->Run(); |
685 | 645 |
686 // The worker should be started. | 646 // The worker should be started. |
687 EXPECT_EQ(SERVICE_WORKER_OK, status); | 647 EXPECT_EQ(SERVICE_WORKER_OK, status); |
688 ASSERT_EQ(3u, events_.size()); | 648 ASSERT_EQ(3u, events_.size()); |
689 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); | 649 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); |
690 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type); | 650 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type); |
691 EXPECT_EQ(STARTED, events_[2].type); | 651 EXPECT_EQ(STARTED, events_[2].type); |
692 | 652 |
(...skipping 10 matching lines...) Expand all Loading... |
703 helper_->SimulateAddProcessToPattern(pattern, | 663 helper_->SimulateAddProcessToPattern(pattern, |
704 helper_->mock_render_process_id()); | 664 helper_->mock_render_process_id()); |
705 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; | 665 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
706 worker->AddListener(this); | 666 worker->AddListener(this); |
707 | 667 |
708 // Start the worker. | 668 // Start the worker. |
709 base::RunLoop run_loop; | 669 base::RunLoop run_loop; |
710 std::unique_ptr<EmbeddedWorkerStartParams> params = | 670 std::unique_ptr<EmbeddedWorkerStartParams> params = |
711 CreateStartParams(version_id, pattern, url); | 671 CreateStartParams(version_id, pattern, url); |
712 worker->Start( | 672 worker->Start( |
713 std::move(params), CreateProviderInfoGetter(), CreateEventDispatcher(), | 673 std::move(params), CreateEventDispatcher(), |
714 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure())); | 674 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure())); |
715 run_loop.Run(); | 675 run_loop.Run(); |
716 | 676 |
717 // Detach. | 677 // Detach. |
718 int process_id = worker->process_id(); | 678 int process_id = worker->process_id(); |
719 worker->Detach(); | 679 worker->Detach(); |
720 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status()); | 680 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status()); |
721 | 681 |
722 // Send the registry a message from the detached worker. Nothing should | 682 // Send the registry a message from the detached worker. Nothing should |
723 // happen. | 683 // happen. |
(...skipping 13 matching lines...) Expand all Loading... |
737 | 697 |
738 std::unique_ptr<EmbeddedWorkerInstance> worker = | 698 std::unique_ptr<EmbeddedWorkerInstance> worker = |
739 embedded_worker_registry()->CreateWorker(); | 699 embedded_worker_registry()->CreateWorker(); |
740 helper_->SimulateAddProcessToPattern(pattern, | 700 helper_->SimulateAddProcessToPattern(pattern, |
741 helper_->mock_render_process_id()); | 701 helper_->mock_render_process_id()); |
742 worker->AddListener(this); | 702 worker->AddListener(this); |
743 | 703 |
744 // Attempt to start the worker. | 704 // Attempt to start the worker. |
745 std::unique_ptr<EmbeddedWorkerStartParams> params = | 705 std::unique_ptr<EmbeddedWorkerStartParams> params = |
746 CreateStartParams(version_id, pattern, url); | 706 CreateStartParams(version_id, pattern, url); |
747 worker->Start(std::move(params), CreateProviderInfoGetter(), | 707 worker->Start(std::move(params), CreateEventDispatcher(), |
748 CreateEventDispatcher(), | |
749 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); | 708 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
750 base::RunLoop().RunUntilIdle(); | 709 base::RunLoop().RunUntilIdle(); |
751 | 710 |
752 // Worker should handle the failure of binding as detach. | 711 // Worker should handle the failure of binding as detach. |
753 ASSERT_EQ(2u, events_.size()); | 712 ASSERT_EQ(2u, events_.size()); |
754 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); | 713 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); |
755 EXPECT_EQ(DETACHED, events_[1].type); | 714 EXPECT_EQ(DETACHED, events_[1].type); |
756 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, events_[1].status); | 715 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, events_[1].status); |
757 } | 716 } |
758 | 717 |
759 class FailEmbeddedWorkerInstanceClientImpl | 718 class FailEmbeddedWorkerInstanceClientImpl |
760 : public EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient { | 719 : public EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient { |
761 public: | 720 public: |
762 explicit FailEmbeddedWorkerInstanceClientImpl( | 721 explicit FailEmbeddedWorkerInstanceClientImpl( |
763 base::WeakPtr<EmbeddedWorkerTestHelper> helper) | 722 base::WeakPtr<EmbeddedWorkerTestHelper> helper) |
764 : EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient(helper) {} | 723 : EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient(helper) {} |
765 | 724 |
766 private: | 725 private: |
767 void StartWorker(const EmbeddedWorkerStartParams&, | 726 void StartWorker( |
768 mojom::ServiceWorkerEventDispatcherRequest, | 727 const EmbeddedWorkerStartParams& /* unused */, |
769 mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo, | 728 mojom::ServiceWorkerEventDispatcherRequest /* unused */, |
770 mojom::ServiceWorkerProviderInfoForStartWorkerPtr) override { | 729 mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo /* unused */) |
| 730 override { |
771 helper_->mock_instance_clients()->clear(); | 731 helper_->mock_instance_clients()->clear(); |
772 } | 732 } |
773 }; | 733 }; |
774 | 734 |
775 TEST_F(EmbeddedWorkerInstanceTest, RemoveRemoteInterface) { | 735 TEST_F(EmbeddedWorkerInstanceTest, RemoveRemoteInterface) { |
776 const int64_t version_id = 55L; | 736 const int64_t version_id = 55L; |
777 const GURL pattern("http://example.com/"); | 737 const GURL pattern("http://example.com/"); |
778 const GURL url("http://example.com/worker.js"); | 738 const GURL url("http://example.com/worker.js"); |
779 | 739 |
780 // Let StartWorker fail; binding is discarded in the middle of IPC | 740 // Let StartWorker fail; binding is discarded in the middle of IPC |
781 helper_->RegisterMockInstanceClient( | 741 helper_->RegisterMockInstanceClient( |
782 base::MakeUnique<FailEmbeddedWorkerInstanceClientImpl>( | 742 base::MakeUnique<FailEmbeddedWorkerInstanceClientImpl>( |
783 helper_->AsWeakPtr())); | 743 helper_->AsWeakPtr())); |
784 ASSERT_EQ(mock_instance_clients()->size(), 1UL); | 744 ASSERT_EQ(mock_instance_clients()->size(), 1UL); |
785 | 745 |
786 std::unique_ptr<EmbeddedWorkerInstance> worker = | 746 std::unique_ptr<EmbeddedWorkerInstance> worker = |
787 embedded_worker_registry()->CreateWorker(); | 747 embedded_worker_registry()->CreateWorker(); |
788 helper_->SimulateAddProcessToPattern(pattern, | 748 helper_->SimulateAddProcessToPattern(pattern, |
789 helper_->mock_render_process_id()); | 749 helper_->mock_render_process_id()); |
790 worker->AddListener(this); | 750 worker->AddListener(this); |
791 | 751 |
792 // Attempt to start the worker. | 752 // Attempt to start the worker. |
793 std::unique_ptr<EmbeddedWorkerStartParams> params = | 753 std::unique_ptr<EmbeddedWorkerStartParams> params = |
794 CreateStartParams(version_id, pattern, url); | 754 CreateStartParams(version_id, pattern, url); |
795 worker->Start(std::move(params), CreateProviderInfoGetter(), | 755 worker->Start(std::move(params), CreateEventDispatcher(), |
796 CreateEventDispatcher(), | |
797 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); | 756 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
798 base::RunLoop().RunUntilIdle(); | 757 base::RunLoop().RunUntilIdle(); |
799 | 758 |
800 // Worker should handle the sudden shutdown as detach. | 759 // Worker should handle the sudden shutdown as detach. |
801 ASSERT_EQ(3u, events_.size()); | 760 ASSERT_EQ(3u, events_.size()); |
802 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); | 761 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); |
803 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type); | 762 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type); |
804 EXPECT_EQ(DETACHED, events_[2].type); | 763 EXPECT_EQ(DETACHED, events_[2].type); |
805 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, events_[2].status); | 764 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, events_[2].status); |
806 } | 765 } |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
842 helper_->SimulateAddProcessToPattern(pattern, | 801 helper_->SimulateAddProcessToPattern(pattern, |
843 helper_->mock_render_process_id()); | 802 helper_->mock_render_process_id()); |
844 worker->AddListener(this); | 803 worker->AddListener(this); |
845 | 804 |
846 // Attempt to start the worker and immediate AddMessageToConsole should not | 805 // Attempt to start the worker and immediate AddMessageToConsole should not |
847 // cause a crash. | 806 // cause a crash. |
848 std::pair<blink::WebConsoleMessage::Level, std::string> test_message = | 807 std::pair<blink::WebConsoleMessage::Level, std::string> test_message = |
849 std::make_pair(blink::WebConsoleMessage::kLevelVerbose, ""); | 808 std::make_pair(blink::WebConsoleMessage::kLevelVerbose, ""); |
850 std::unique_ptr<EmbeddedWorkerStartParams> params = | 809 std::unique_ptr<EmbeddedWorkerStartParams> params = |
851 CreateStartParams(version_id, pattern, url); | 810 CreateStartParams(version_id, pattern, url); |
852 worker->Start(std::move(params), CreateProviderInfoGetter(), | 811 worker->Start(std::move(params), CreateEventDispatcher(), |
853 CreateEventDispatcher(), | |
854 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); | 812 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
855 worker->AddMessageToConsole(test_message.first, test_message.second); | 813 worker->AddMessageToConsole(test_message.first, test_message.second); |
856 base::RunLoop().RunUntilIdle(); | 814 base::RunLoop().RunUntilIdle(); |
857 | 815 |
858 // Messages sent before sending StartWorker message won't be dispatched. | 816 // Messages sent before sending StartWorker message won't be dispatched. |
859 ASSERT_EQ(0UL, instance_client_rawptr->message().size()); | 817 ASSERT_EQ(0UL, instance_client_rawptr->message().size()); |
860 ASSERT_EQ(3UL, events_.size()); | 818 ASSERT_EQ(3UL, events_.size()); |
861 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); | 819 EXPECT_EQ(PROCESS_ALLOCATED, events_[0].type); |
862 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type); | 820 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type); |
863 EXPECT_EQ(STARTED, events_[2].type); | 821 EXPECT_EQ(STARTED, events_[2].type); |
864 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, worker->status()); | 822 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, worker->status()); |
865 | 823 |
866 worker->AddMessageToConsole(test_message.first, test_message.second); | 824 worker->AddMessageToConsole(test_message.first, test_message.second); |
867 base::RunLoop().RunUntilIdle(); | 825 base::RunLoop().RunUntilIdle(); |
868 | 826 |
869 // Messages sent after sending StartWorker message should be reached to | 827 // Messages sent after sending StartWorker message should be reached to |
870 // the renderer. | 828 // the renderer. |
871 ASSERT_EQ(1UL, instance_client_rawptr->message().size()); | 829 ASSERT_EQ(1UL, instance_client_rawptr->message().size()); |
872 EXPECT_EQ(test_message, instance_client_rawptr->message()[0]); | 830 EXPECT_EQ(test_message, instance_client_rawptr->message()[0]); |
873 | 831 |
874 // Ensure the worker is stopped. | 832 // Ensure the worker is stopped. |
875 worker->Stop(); | 833 worker->Stop(); |
876 base::RunLoop().RunUntilIdle(); | 834 base::RunLoop().RunUntilIdle(); |
877 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status()); | 835 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status()); |
878 } | 836 } |
879 | 837 |
880 } // namespace content | 838 } // namespace content |
OLD | NEW |