Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(254)

Side by Side Diff: content/browser/service_worker/embedded_worker_instance_unittest.cc

Issue 2578023002: ServiceWorker: Stop don't send a message before connection established (Closed)
Patch Set: Reset starting_phase when releasing the process Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, worker->status()); 214 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, worker->status());
215 run_loop.Run(); 215 run_loop.Run();
216 EXPECT_EQ(SERVICE_WORKER_OK, status); 216 EXPECT_EQ(SERVICE_WORKER_OK, status);
217 217
218 // The 'WorkerStarted' message should have been sent by 218 // The 'WorkerStarted' message should have been sent by
219 // EmbeddedWorkerTestHelper. 219 // EmbeddedWorkerTestHelper.
220 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, worker->status()); 220 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, worker->status());
221 EXPECT_EQ(helper_->mock_render_process_id(), worker->process_id()); 221 EXPECT_EQ(helper_->mock_render_process_id(), worker->process_id());
222 222
223 // Stop the worker. 223 // Stop the worker.
224 EXPECT_EQ(SERVICE_WORKER_OK, worker->Stop()); 224 EXPECT_TRUE(worker->Stop());
225 EXPECT_EQ(EmbeddedWorkerStatus::STOPPING, worker->status()); 225 EXPECT_EQ(EmbeddedWorkerStatus::STOPPING, worker->status());
226 base::RunLoop().RunUntilIdle(); 226 base::RunLoop().RunUntilIdle();
227 227
228 // The 'WorkerStopped' message should have been sent by 228 // The 'WorkerStopped' message should have been sent by
229 // EmbeddedWorkerTestHelper. 229 // EmbeddedWorkerTestHelper.
230 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status()); 230 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status());
231 231
232 if (!is_mojo_enabled()) { 232 if (!is_mojo_enabled()) {
233 // Verify that we've sent two messages via chromium IPC to start and 233 // Verify that we've sent two messages via chromium IPC to start and
234 // terminate the worker. 234 // terminate the worker.
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 CreateStartParams(service_worker_version_id, pattern, url); 276 CreateStartParams(service_worker_version_id, pattern, url);
277 worker->Start( 277 worker->Start(
278 std::move(params), CreateEventDispatcher(), 278 std::move(params), CreateEventDispatcher(),
279 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure())); 279 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure()));
280 run_loop.Run(); 280 run_loop.Run();
281 EXPECT_EQ(SERVICE_WORKER_OK, status); 281 EXPECT_EQ(SERVICE_WORKER_OK, status);
282 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, worker->status()); 282 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, worker->status());
283 // The worker should be using the default render process. 283 // The worker should be using the default render process.
284 EXPECT_EQ(helper_->mock_render_process_id(), worker->process_id()); 284 EXPECT_EQ(helper_->mock_render_process_id(), worker->process_id());
285 285
286 EXPECT_EQ(SERVICE_WORKER_OK, worker->Stop()); 286 EXPECT_TRUE(worker->Stop());
287 base::RunLoop().RunUntilIdle(); 287 base::RunLoop().RunUntilIdle();
288 } 288 }
289 289
290 // Fail twice. 290 // Fail twice.
291 context()->UpdateVersionFailureCount(service_worker_version_id, 291 context()->UpdateVersionFailureCount(service_worker_version_id,
292 SERVICE_WORKER_ERROR_FAILED); 292 SERVICE_WORKER_ERROR_FAILED);
293 context()->UpdateVersionFailureCount(service_worker_version_id, 293 context()->UpdateVersionFailureCount(service_worker_version_id,
294 SERVICE_WORKER_ERROR_FAILED); 294 SERVICE_WORKER_ERROR_FAILED);
295 295
296 { 296 {
297 // Start again. 297 // Start again.
298 ServiceWorkerStatusCode status; 298 ServiceWorkerStatusCode status;
299 base::RunLoop run_loop; 299 base::RunLoop run_loop;
300 std::unique_ptr<EmbeddedWorkerStartParams> params = 300 std::unique_ptr<EmbeddedWorkerStartParams> params =
301 CreateStartParams(service_worker_version_id, pattern, url); 301 CreateStartParams(service_worker_version_id, pattern, url);
302 worker->Start( 302 worker->Start(
303 std::move(params), CreateEventDispatcher(), 303 std::move(params), CreateEventDispatcher(),
304 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure())); 304 base::Bind(&SaveStatusAndCall, &status, run_loop.QuitClosure()));
305 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, worker->status()); 305 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, worker->status());
306 run_loop.Run(); 306 run_loop.Run();
307 EXPECT_EQ(SERVICE_WORKER_OK, status); 307 EXPECT_EQ(SERVICE_WORKER_OK, status);
308 308
309 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, worker->status()); 309 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, worker->status());
310 // The worker should be using the new render process. 310 // The worker should be using the new render process.
311 EXPECT_EQ(helper_->new_render_process_id(), worker->process_id()); 311 EXPECT_EQ(helper_->new_render_process_id(), worker->process_id());
312 EXPECT_EQ(SERVICE_WORKER_OK, worker->Stop()); 312 EXPECT_TRUE(worker->Stop());
313 base::RunLoop().RunUntilIdle(); 313 base::RunLoop().RunUntilIdle();
314 } 314 }
315 } 315 }
316 316
317 TEST_P(EmbeddedWorkerInstanceTestP, StopWhenDevToolsAttached) { 317 TEST_P(EmbeddedWorkerInstanceTestP, StopWhenDevToolsAttached) {
318 std::unique_ptr<EmbeddedWorkerInstance> worker = 318 std::unique_ptr<EmbeddedWorkerInstance> worker =
319 embedded_worker_registry()->CreateWorker(); 319 embedded_worker_registry()->CreateWorker();
320 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status()); 320 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status());
321 321
322 const int64_t service_worker_version_id = 55L; 322 const int64_t service_worker_version_id = 55L;
(...skipping 24 matching lines...) Expand all
347 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, worker->status()); 347 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, worker->status());
348 EXPECT_EQ(helper_->mock_render_process_id(), worker->process_id()); 348 EXPECT_EQ(helper_->mock_render_process_id(), worker->process_id());
349 worker->StopIfIdle(); 349 worker->StopIfIdle();
350 base::RunLoop().RunUntilIdle(); 350 base::RunLoop().RunUntilIdle();
351 351
352 // The worker must not be stopped this time. 352 // The worker must not be stopped this time.
353 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, worker->status()); 353 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, worker->status());
354 354
355 // Calling Stop() actually stops the worker regardless of whether devtools 355 // Calling Stop() actually stops the worker regardless of whether devtools
356 // is attached or not. 356 // is attached or not.
357 EXPECT_EQ(SERVICE_WORKER_OK, worker->Stop()); 357 EXPECT_TRUE(worker->Stop());
358 base::RunLoop().RunUntilIdle(); 358 base::RunLoop().RunUntilIdle();
359 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status()); 359 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status());
360 } 360 }
361 361
362 // Test that the removal of a worker from the registry doesn't remove 362 // Test that the removal of a worker from the registry doesn't remove
363 // other workers in the same process. 363 // other workers in the same process.
364 TEST_P(EmbeddedWorkerInstanceTestP, RemoveWorkerInSharedProcess) { 364 TEST_P(EmbeddedWorkerInstanceTestP, RemoveWorkerInSharedProcess) {
365 std::unique_ptr<EmbeddedWorkerInstance> worker1 = 365 std::unique_ptr<EmbeddedWorkerInstance> worker1 =
366 embedded_worker_registry()->CreateWorker(); 366 embedded_worker_registry()->CreateWorker();
367 std::unique_ptr<EmbeddedWorkerInstance> worker2 = 367 std::unique_ptr<EmbeddedWorkerInstance> worker2 =
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status()); 513 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, worker->status());
514 EXPECT_EQ(ChildProcessHost::kInvalidUniqueID, worker->process_id()); 514 EXPECT_EQ(ChildProcessHost::kInvalidUniqueID, worker->process_id());
515 515
516 // The start callback should not be aborted by stop (see a comment on the dtor 516 // The start callback should not be aborted by stop (see a comment on the dtor
517 // of EmbeddedWorkerInstance::StartTask). 517 // of EmbeddedWorkerInstance::StartTask).
518 EXPECT_EQ(SERVICE_WORKER_ERROR_MAX_VALUE, status); 518 EXPECT_EQ(SERVICE_WORKER_ERROR_MAX_VALUE, status);
519 519
520 // "PROCESS_ALLOCATED" event should not be recorded. 520 // "PROCESS_ALLOCATED" event should not be recorded.
521 ASSERT_EQ(1u, events_.size()); 521 ASSERT_EQ(1u, events_.size());
522 EXPECT_EQ(DETACHED, events_[0].type); 522 EXPECT_EQ(DETACHED, events_[0].type);
523 if (is_mojo_enabled()) { 523 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, events_[0].status);
524 // STOPPING should be recorded here because EmbeddedWorkerInstance must be
525 // detached while executing RunUntilIdle.
526 EXPECT_EQ(EmbeddedWorkerStatus::STOPPING, events_[0].status);
527 } else {
528 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, events_[0].status);
529 }
530 events_.clear(); 524 events_.clear();
531 525
532 // Restart the worker. 526 // Restart the worker.
533 status = SERVICE_WORKER_ERROR_MAX_VALUE; 527 status = SERVICE_WORKER_ERROR_MAX_VALUE;
534 std::unique_ptr<base::RunLoop> run_loop(new base::RunLoop); 528 std::unique_ptr<base::RunLoop> run_loop(new base::RunLoop);
535 params = CreateStartParams(version_id, scope, url); 529 params = CreateStartParams(version_id, scope, url);
536 worker->Start( 530 worker->Start(
537 std::move(params), CreateEventDispatcher(), 531 std::move(params), CreateEventDispatcher(),
538 base::Bind(&SaveStatusAndCall, &status, run_loop->QuitClosure())); 532 base::Bind(&SaveStatusAndCall, &status, run_loop->QuitClosure()));
539 run_loop->Run(); 533 run_loop->Run();
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
776 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type); 770 EXPECT_EQ(START_WORKER_MESSAGE_SENT, events_[1].type);
777 EXPECT_EQ(DETACHED, events_[2].type); 771 EXPECT_EQ(DETACHED, events_[2].type);
778 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, events_[2].status); 772 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, events_[2].status);
779 } 773 }
780 774
781 INSTANTIATE_TEST_CASE_P(EmbeddedWorkerInstanceTest, 775 INSTANTIATE_TEST_CASE_P(EmbeddedWorkerInstanceTest,
782 EmbeddedWorkerInstanceTestP, 776 EmbeddedWorkerInstanceTestP,
783 ::testing::Values(false, true)); 777 ::testing::Values(false, true));
784 778
785 } // namespace content 779 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698