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

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

Issue 1223193009: WIP attempt to replace StartWorker/StopWorker IPCs with a new mojo EmbeddedWorker service. Base URL: https://chromium.googlesource.com/chromium/src.git@mojo-event-dispatching-option2
Patch Set: Created 5 years, 5 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/run_loop.h" 6 #include "base/run_loop.h"
7 #include "content/browser/message_port_service.h" 7 #include "content/browser/message_port_service.h"
8 #include "content/browser/service_worker/embedded_worker_registry.h" 8 #include "content/browser/service_worker/embedded_worker_registry.h"
9 #include "content/browser/service_worker/embedded_worker_test_helper.h" 9 #include "content/browser/service_worker/embedded_worker_test_helper.h"
10 #include "content/browser/service_worker/service_worker_context_core.h" 10 #include "content/browser/service_worker/service_worker_context_core.h"
11 #include "content/browser/service_worker/service_worker_registration.h" 11 #include "content/browser/service_worker/service_worker_registration.h"
12 #include "content/browser/service_worker/service_worker_test_utils.h" 12 #include "content/browser/service_worker/service_worker_test_utils.h"
13 #include "content/browser/service_worker/service_worker_utils.h" 13 #include "content/browser/service_worker/service_worker_utils.h"
14 #include "content/browser/service_worker/service_worker_version.h" 14 #include "content/browser/service_worker/service_worker_version.h"
15 #include "content/public/test/test_browser_thread_bundle.h" 15 #include "content/public/test/test_browser_thread_bundle.h"
16 #include "content/public/test/test_utils.h"
16 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
17 18
18 // IPC messages for testing --------------------------------------------------- 19 // IPC messages for testing ---------------------------------------------------
19 20
20 #define IPC_MESSAGE_IMPL 21 #define IPC_MESSAGE_IMPL
21 #include "ipc/ipc_message_macros.h" 22 #include "ipc/ipc_message_macros.h"
22 23
23 #define IPC_MESSAGE_START TestMsgStart 24 #define IPC_MESSAGE_START TestMsgStart
24 25
25 IPC_MESSAGE_CONTROL0(TestMsg_Message); 26 IPC_MESSAGE_CONTROL0(TestMsg_Message);
26 IPC_MESSAGE_ROUTED1(TestMsg_MessageFromWorker, int); 27 IPC_MESSAGE_ROUTED1(TestMsg_MessageFromWorker, int);
27 28
28 // --------------------------------------------------------------------------- 29 // ---------------------------------------------------------------------------
29 30
30 namespace content { 31 namespace content {
31 32
32 namespace { 33 namespace {
33 34
34 static const int kRenderProcessId = 1;
35
36 class MessageReceiver : public EmbeddedWorkerTestHelper { 35 class MessageReceiver : public EmbeddedWorkerTestHelper {
37 public: 36 public:
38 MessageReceiver() 37 MessageReceiver()
39 : EmbeddedWorkerTestHelper(base::FilePath(), kRenderProcessId), 38 : EmbeddedWorkerTestHelper(base::FilePath()),
40 current_embedded_worker_id_(0) {} 39 current_embedded_worker_id_(0) {}
41 ~MessageReceiver() override {} 40 ~MessageReceiver() override {}
42 41
43 bool OnMessageToWorker(int thread_id, 42 bool OnMessageToWorker(int thread_id,
44 int embedded_worker_id, 43 int embedded_worker_id,
45 const IPC::Message& message) override { 44 const IPC::Message& message) override {
46 if (EmbeddedWorkerTestHelper::OnMessageToWorker( 45 if (EmbeddedWorkerTestHelper::OnMessageToWorker(
47 thread_id, embedded_worker_id, message)) { 46 thread_id, embedded_worker_id, message)) {
48 return true; 47 return true;
49 } 48 }
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 base::RunLoop().RunUntilIdle(); 170 base::RunLoop().RunUntilIdle();
172 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 171 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
173 helper_->context()->storage()->StoreRegistration( 172 helper_->context()->storage()->StoreRegistration(
174 registration_.get(), 173 registration_.get(),
175 version_.get(), 174 version_.get(),
176 CreateReceiverOnCurrentThread(&status)); 175 CreateReceiverOnCurrentThread(&status));
177 base::RunLoop().RunUntilIdle(); 176 base::RunLoop().RunUntilIdle();
178 ASSERT_EQ(SERVICE_WORKER_OK, status); 177 ASSERT_EQ(SERVICE_WORKER_OK, status);
179 178
180 // Simulate adding one process to the pattern. 179 // Simulate adding one process to the pattern.
181 helper_->SimulateAddProcessToPattern(pattern_, kRenderProcessId); 180 helper_->SimulateAddProcessToPattern(pattern_,
181 helper_->mock_render_process_id());
182 ASSERT_TRUE(helper_->context()->process_manager() 182 ASSERT_TRUE(helper_->context()->process_manager()
183 ->PatternHasProcessToRun(pattern_)); 183 ->PatternHasProcessToRun(pattern_));
184 } 184 }
185 185
186 virtual scoped_ptr<MessageReceiver> GetMessageReceiver() { 186 virtual scoped_ptr<MessageReceiver> GetMessageReceiver() {
187 return make_scoped_ptr(new MessageReceiver()); 187 return make_scoped_ptr(new MessageReceiver());
188 } 188 }
189 189
190 void TearDown() override { 190 void TearDown() override {
191 version_ = 0; 191 version_ = 0;
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 258
259 private: 259 private:
260 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerWaitForeverInFetchTest); 260 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerWaitForeverInFetchTest);
261 }; 261 };
262 262
263 TEST_F(ServiceWorkerVersionTest, ConcurrentStartAndStop) { 263 TEST_F(ServiceWorkerVersionTest, ConcurrentStartAndStop) {
264 // Call StartWorker() multiple times. 264 // Call StartWorker() multiple times.
265 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_FAILED; 265 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_FAILED;
266 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_FAILED; 266 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_FAILED;
267 ServiceWorkerStatusCode status3 = SERVICE_WORKER_ERROR_FAILED; 267 ServiceWorkerStatusCode status3 = SERVICE_WORKER_ERROR_FAILED;
268 version_->StartWorker(CreateReceiverOnCurrentThread(&status1)); 268 scoped_refptr<MessageLoopRunner> runner1(new MessageLoopRunner);
269 version_->StartWorker(CreateReceiverOnCurrentThread(&status2)); 269 scoped_refptr<MessageLoopRunner> runner2(new MessageLoopRunner);
270 version_->StartWorker(
271 CreateReceiverOnCurrentThread(&status1, runner1->QuitClosure()));
272 version_->StartWorker(
273 CreateReceiverOnCurrentThread(&status2, runner2->QuitClosure()));
270 274
271 EXPECT_EQ(ServiceWorkerVersion::STARTING, version_->running_status()); 275 EXPECT_EQ(ServiceWorkerVersion::STARTING, version_->running_status());
272 base::RunLoop().RunUntilIdle(); 276 runner1->Run();
277 runner2->Run();
273 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 278 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
274 279
275 // Call StartWorker() after it's started. 280 // Call StartWorker() after it's started.
276 version_->StartWorker(CreateReceiverOnCurrentThread(&status3)); 281 runner1 = new MessageLoopRunner();
277 base::RunLoop().RunUntilIdle(); 282 version_->StartWorker(
283 CreateReceiverOnCurrentThread(&status3, runner1->QuitClosure()));
284 runner1->Run();
278 285
279 // All should just succeed. 286 // All should just succeed.
280 EXPECT_EQ(SERVICE_WORKER_OK, status1); 287 EXPECT_EQ(SERVICE_WORKER_OK, status1);
281 EXPECT_EQ(SERVICE_WORKER_OK, status2); 288 EXPECT_EQ(SERVICE_WORKER_OK, status2);
282 EXPECT_EQ(SERVICE_WORKER_OK, status3); 289 EXPECT_EQ(SERVICE_WORKER_OK, status3);
283 290
284 // Call StopWorker() multiple times. 291 // Call StopWorker() multiple times.
285 status1 = SERVICE_WORKER_ERROR_FAILED; 292 status1 = SERVICE_WORKER_ERROR_FAILED;
286 status2 = SERVICE_WORKER_ERROR_FAILED; 293 status2 = SERVICE_WORKER_ERROR_FAILED;
287 version_->StopWorker(CreateReceiverOnCurrentThread(&status1)); 294 runner1 = new MessageLoopRunner;
288 version_->StopWorker(CreateReceiverOnCurrentThread(&status2)); 295 runner2 = new MessageLoopRunner;
296 version_->StopWorker(
297 CreateReceiverOnCurrentThread(&status1, runner1->QuitClosure()));
298 version_->StopWorker(
299 CreateReceiverOnCurrentThread(&status2, runner2->QuitClosure()));
289 300
290 EXPECT_EQ(ServiceWorkerVersion::STOPPING, version_->running_status()); 301 EXPECT_EQ(ServiceWorkerVersion::STOPPING, version_->running_status());
291 base::RunLoop().RunUntilIdle(); 302 runner1->Run();
303 runner2->Run();
292 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status()); 304 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status());
293 305
294 // All StopWorker should just succeed. 306 // All StopWorker should just succeed.
295 EXPECT_EQ(SERVICE_WORKER_OK, status1); 307 EXPECT_EQ(SERVICE_WORKER_OK, status1);
296 EXPECT_EQ(SERVICE_WORKER_OK, status2); 308 EXPECT_EQ(SERVICE_WORKER_OK, status2);
297 309
298 // Start worker again. 310 // Start worker again.
299 status1 = SERVICE_WORKER_ERROR_FAILED; 311 status1 = SERVICE_WORKER_ERROR_FAILED;
300 status2 = SERVICE_WORKER_ERROR_FAILED; 312 status2 = SERVICE_WORKER_ERROR_FAILED;
301 status3 = SERVICE_WORKER_ERROR_FAILED; 313 status3 = SERVICE_WORKER_ERROR_FAILED;
314 runner1 = new MessageLoopRunner();
315 scoped_refptr<MessageLoopRunner> runner3(new MessageLoopRunner());
302 316
303 version_->StartWorker(CreateReceiverOnCurrentThread(&status1)); 317 version_->StartWorker(
318 CreateReceiverOnCurrentThread(&status1, runner1->QuitClosure()));
304 319
305 EXPECT_EQ(ServiceWorkerVersion::STARTING, version_->running_status()); 320 EXPECT_EQ(ServiceWorkerVersion::STARTING, version_->running_status());
306 base::RunLoop().RunUntilIdle(); 321 runner1->Run();
307 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 322 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
308 323
309 // Call StopWorker() 324 // Call StopWorker()
310 status2 = SERVICE_WORKER_ERROR_FAILED; 325 status2 = SERVICE_WORKER_ERROR_FAILED;
311 version_->StopWorker(CreateReceiverOnCurrentThread(&status2)); 326 version_->StopWorker(CreateReceiverOnCurrentThread(&status2));
312 327
313 // And try calling StartWorker while StopWorker is in queue. 328 // And try calling StartWorker while StopWorker is in queue.
314 version_->StartWorker(CreateReceiverOnCurrentThread(&status3)); 329 version_->StartWorker(
330 CreateReceiverOnCurrentThread(&status3, runner3->QuitClosure()));
315 331
316 EXPECT_EQ(ServiceWorkerVersion::STOPPING, version_->running_status()); 332 EXPECT_EQ(ServiceWorkerVersion::STOPPING, version_->running_status());
317 base::RunLoop().RunUntilIdle(); 333 runner3->Run();
318 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 334 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
319 335
320 // All should just succeed. 336 // All should just succeed.
321 EXPECT_EQ(SERVICE_WORKER_OK, status1); 337 EXPECT_EQ(SERVICE_WORKER_OK, status1);
322 EXPECT_EQ(SERVICE_WORKER_OK, status2); 338 EXPECT_EQ(SERVICE_WORKER_OK, status2);
323 EXPECT_EQ(SERVICE_WORKER_OK, status3); 339 EXPECT_EQ(SERVICE_WORKER_OK, status3);
324 } 340 }
325 341
326 TEST_F(ServiceWorkerVersionTest, DispatchEventToStoppedWorker) { 342 TEST_F(ServiceWorkerVersionTest, DispatchEventToStoppedWorker) {
327 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status()); 343 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status());
328 344
329 // Dispatch an event without starting the worker. 345 // Dispatch an event without starting the worker.
330 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 346 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
347 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
331 version_->SetStatus(ServiceWorkerVersion::INSTALLING); 348 version_->SetStatus(ServiceWorkerVersion::INSTALLING);
332 version_->DispatchInstallEvent(CreateReceiverOnCurrentThread(&status)); 349 version_->DispatchInstallEvent(
333 base::RunLoop().RunUntilIdle(); 350 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
351 runner->Run();
334 EXPECT_EQ(SERVICE_WORKER_OK, status); 352 EXPECT_EQ(SERVICE_WORKER_OK, status);
335 353
336 // The worker should be now started. 354 // The worker should be now started.
337 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 355 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
338 356
339 // Stop the worker, and then dispatch an event immediately after that. 357 // Stop the worker, and then dispatch an event immediately after that.
340 status = SERVICE_WORKER_ERROR_FAILED; 358 status = SERVICE_WORKER_ERROR_FAILED;
359 runner = new MessageLoopRunner;
341 ServiceWorkerStatusCode stop_status = SERVICE_WORKER_ERROR_FAILED; 360 ServiceWorkerStatusCode stop_status = SERVICE_WORKER_ERROR_FAILED;
342 version_->StopWorker(CreateReceiverOnCurrentThread(&stop_status)); 361 version_->StopWorker(CreateReceiverOnCurrentThread(&stop_status));
343 version_->DispatchInstallEvent(CreateReceiverOnCurrentThread(&status)); 362 version_->DispatchInstallEvent(
344 base::RunLoop().RunUntilIdle(); 363 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
364 runner->Run();
345 EXPECT_EQ(SERVICE_WORKER_OK, stop_status); 365 EXPECT_EQ(SERVICE_WORKER_OK, stop_status);
346 366
347 // Dispatch an event should return SERVICE_WORKER_OK since the worker 367 // Dispatch an event should return SERVICE_WORKER_OK since the worker
348 // should have been restarted to dispatch the event. 368 // should have been restarted to dispatch the event.
349 EXPECT_EQ(SERVICE_WORKER_OK, status); 369 EXPECT_EQ(SERVICE_WORKER_OK, status);
350 370
351 // The worker should be now started again. 371 // The worker should be now started again.
352 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 372 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
353 } 373 }
354 374
355 TEST_F(ServiceWorkerVersionTest, ReceiveMessageFromWorker) { 375 TEST_F(ServiceWorkerVersionTest, ReceiveMessageFromWorker) {
356 // Start worker. 376 // Start worker.
357 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 377 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
358 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 378 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
379 version_->StartWorker(
380 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
359 EXPECT_EQ(ServiceWorkerVersion::STARTING, version_->running_status()); 381 EXPECT_EQ(ServiceWorkerVersion::STARTING, version_->running_status());
360 base::RunLoop().RunUntilIdle(); 382 runner->Run();
361 EXPECT_EQ(SERVICE_WORKER_OK, status); 383 EXPECT_EQ(SERVICE_WORKER_OK, status);
362 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 384 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
363 385
364 MessageReceiverFromWorker receiver(version_->embedded_worker()); 386 MessageReceiverFromWorker receiver(version_->embedded_worker());
365 387
366 // Simulate sending some dummy values from the worker. 388 // Simulate sending some dummy values from the worker.
367 helper_->SimulateSendValueToBrowser( 389 helper_->SimulateSendValueToBrowser(
368 version_->embedded_worker()->embedded_worker_id(), 555); 390 version_->embedded_worker()->embedded_worker_id(), 555);
369 helper_->SimulateSendValueToBrowser( 391 helper_->SimulateSendValueToBrowser(
370 version_->embedded_worker()->embedded_worker_id(), 777); 392 version_->embedded_worker()->embedded_worker_id(), 777);
371 393
372 // Verify the receiver received the values. 394 // Verify the receiver received the values.
373 ASSERT_EQ(2U, receiver.received_values().size()); 395 ASSERT_EQ(2U, receiver.received_values().size());
374 EXPECT_EQ(555, receiver.received_values()[0]); 396 EXPECT_EQ(555, receiver.received_values()[0]);
375 EXPECT_EQ(777, receiver.received_values()[1]); 397 EXPECT_EQ(777, receiver.received_values()[1]);
376 } 398 }
377 399
378 TEST_F(ServiceWorkerVersionTest, InstallAndWaitCompletion) { 400 TEST_F(ServiceWorkerVersionTest, InstallAndWaitCompletion) {
379 version_->SetStatus(ServiceWorkerVersion::INSTALLING); 401 version_->SetStatus(ServiceWorkerVersion::INSTALLING);
380 402
381 // Dispatch an install event. 403 // Dispatch an install event.
382 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 404 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
383 version_->DispatchInstallEvent(CreateReceiverOnCurrentThread(&status)); 405 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
406 version_->DispatchInstallEvent(
407 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
384 408
385 // Wait for the completion. 409 // Wait for the completion.
386 bool status_change_called = false; 410 bool status_change_called = false;
387 version_->RegisterStatusChangeCallback( 411 version_->RegisterStatusChangeCallback(
388 base::Bind(&VerifyCalled, &status_change_called)); 412 base::Bind(&VerifyCalled, &status_change_called));
389 413
390 base::RunLoop().RunUntilIdle(); 414 runner->Run();
391 415
392 // Version's status must not have changed during installation. 416 // Version's status must not have changed during installation.
393 EXPECT_EQ(SERVICE_WORKER_OK, status); 417 EXPECT_EQ(SERVICE_WORKER_OK, status);
394 EXPECT_FALSE(status_change_called); 418 EXPECT_FALSE(status_change_called);
395 EXPECT_EQ(ServiceWorkerVersion::INSTALLING, version_->status()); 419 EXPECT_EQ(ServiceWorkerVersion::INSTALLING, version_->status());
396 } 420 }
397 421
398 TEST_F(ServiceWorkerVersionTest, ActivateAndWaitCompletion) { 422 TEST_F(ServiceWorkerVersionTest, ActivateAndWaitCompletion) {
399 version_->SetStatus(ServiceWorkerVersion::ACTIVATING); 423 version_->SetStatus(ServiceWorkerVersion::ACTIVATING);
400 424
401 // Dispatch an activate event. 425 // Dispatch an activate event.
402 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 426 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
403 version_->DispatchActivateEvent(CreateReceiverOnCurrentThread(&status)); 427 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
428 version_->DispatchActivateEvent(
429 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
404 430
405 // Wait for the completion. 431 // Wait for the completion.
406 bool status_change_called = false; 432 bool status_change_called = false;
407 version_->RegisterStatusChangeCallback( 433 version_->RegisterStatusChangeCallback(
408 base::Bind(&VerifyCalled, &status_change_called)); 434 base::Bind(&VerifyCalled, &status_change_called));
409 435
410 base::RunLoop().RunUntilIdle(); 436 runner->Run();
411 437
412 // Version's status must not have changed during activation. 438 // Version's status must not have changed during activation.
413 EXPECT_EQ(SERVICE_WORKER_OK, status); 439 EXPECT_EQ(SERVICE_WORKER_OK, status);
414 EXPECT_FALSE(status_change_called); 440 EXPECT_FALSE(status_change_called);
415 EXPECT_EQ(ServiceWorkerVersion::ACTIVATING, version_->status()); 441 EXPECT_EQ(ServiceWorkerVersion::ACTIVATING, version_->status());
416 } 442 }
417 443
418 TEST_F(ServiceWorkerVersionTest, RepeatedlyObserveStatusChanges) { 444 TEST_F(ServiceWorkerVersionTest, RepeatedlyObserveStatusChanges) {
419 EXPECT_EQ(ServiceWorkerVersion::NEW, version_->status()); 445 EXPECT_EQ(ServiceWorkerVersion::NEW, version_->status());
420 446
(...skipping 21 matching lines...) Expand all
442 // Used to reliably test when the idle time gets reset regardless of clock 468 // Used to reliably test when the idle time gets reset regardless of clock
443 // granularity. 469 // granularity.
444 const base::TimeDelta kOneSecond = base::TimeDelta::FromSeconds(1); 470 const base::TimeDelta kOneSecond = base::TimeDelta::FromSeconds(1);
445 471
446 // Verify the timer is not running when version initializes its status. 472 // Verify the timer is not running when version initializes its status.
447 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 473 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
448 EXPECT_FALSE(version_->timeout_timer_.IsRunning()); 474 EXPECT_FALSE(version_->timeout_timer_.IsRunning());
449 475
450 // Verify the timer is running after the worker is started. 476 // Verify the timer is running after the worker is started.
451 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 477 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
452 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 478 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
453 base::RunLoop().RunUntilIdle(); 479 version_->StartWorker(
480 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
481 runner->Run();
454 EXPECT_EQ(SERVICE_WORKER_OK, status); 482 EXPECT_EQ(SERVICE_WORKER_OK, status);
455 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); 483 EXPECT_TRUE(version_->timeout_timer_.IsRunning());
456 EXPECT_FALSE(version_->idle_time_.is_null()); 484 EXPECT_FALSE(version_->idle_time_.is_null());
457 485
458 // The idle time should be reset if the worker is restarted without 486 // The idle time should be reset if the worker is restarted without
459 // controllee. 487 // controllee.
460 status = SERVICE_WORKER_ERROR_FAILED; 488 status = SERVICE_WORKER_ERROR_FAILED;
489 runner = new MessageLoopRunner;
461 version_->idle_time_ -= kOneSecond; 490 version_->idle_time_ -= kOneSecond;
462 base::TimeTicks idle_time = version_->idle_time_; 491 base::TimeTicks idle_time = version_->idle_time_;
463 version_->StopWorker(CreateReceiverOnCurrentThread(&status)); 492 version_->StopWorker(
464 base::RunLoop().RunUntilIdle(); 493 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
494 runner->Run();
465 EXPECT_EQ(SERVICE_WORKER_OK, status); 495 EXPECT_EQ(SERVICE_WORKER_OK, status);
466 status = SERVICE_WORKER_ERROR_FAILED; 496 status = SERVICE_WORKER_ERROR_FAILED;
467 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 497 runner = new MessageLoopRunner;
468 base::RunLoop().RunUntilIdle(); 498 version_->StartWorker(
499 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
500 runner->Run();
469 EXPECT_EQ(SERVICE_WORKER_OK, status); 501 EXPECT_EQ(SERVICE_WORKER_OK, status);
470 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); 502 EXPECT_TRUE(version_->timeout_timer_.IsRunning());
471 EXPECT_LT(idle_time, version_->idle_time_); 503 EXPECT_LT(idle_time, version_->idle_time_);
472 504
473 // Adding a controllee resets the idle time. 505 // Adding a controllee resets the idle time.
474 version_->idle_time_ -= kOneSecond; 506 version_->idle_time_ -= kOneSecond;
475 idle_time = version_->idle_time_; 507 idle_time = version_->idle_time_;
476 scoped_ptr<ServiceWorkerProviderHost> host(new ServiceWorkerProviderHost( 508 scoped_ptr<ServiceWorkerProviderHost> host(new ServiceWorkerProviderHost(
477 33 /* dummy render process id */, MSG_ROUTING_NONE /* render_frame_id */, 509 33 /* dummy render process id */, MSG_ROUTING_NONE /* render_frame_id */,
478 1 /* dummy provider_id */, SERVICE_WORKER_PROVIDER_FOR_WINDOW, 510 1 /* dummy provider_id */, SERVICE_WORKER_PROVIDER_FOR_WINDOW,
(...skipping 24 matching lines...) Expand all
503 CreateReceiverOnCurrentThread(&status)); 535 CreateReceiverOnCurrentThread(&status));
504 base::RunLoop().RunUntilIdle(); 536 base::RunLoop().RunUntilIdle();
505 MessagePortService::GetInstance()->Destroy(ports[0].id); 537 MessagePortService::GetInstance()->Destroy(ports[0].id);
506 538
507 EXPECT_EQ(SERVICE_WORKER_OK, status); 539 EXPECT_EQ(SERVICE_WORKER_OK, status);
508 EXPECT_LT(idle_time, version_->idle_time_); 540 EXPECT_LT(idle_time, version_->idle_time_);
509 } 541 }
510 542
511 TEST_F(ServiceWorkerVersionTest, SetDevToolsAttached) { 543 TEST_F(ServiceWorkerVersionTest, SetDevToolsAttached) {
512 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 544 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
513 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 545 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
546 version_->StartWorker(
547 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
514 548
515 ASSERT_EQ(ServiceWorkerVersion::STARTING, version_->running_status()); 549 ASSERT_EQ(ServiceWorkerVersion::STARTING, version_->running_status());
516 550
517 ASSERT_TRUE(version_->timeout_timer_.IsRunning()); 551 ASSERT_TRUE(version_->timeout_timer_.IsRunning());
518 ASSERT_FALSE(version_->start_time_.is_null()); 552 ASSERT_FALSE(version_->start_time_.is_null());
519 ASSERT_FALSE(version_->skip_recording_startup_time_); 553 ASSERT_FALSE(version_->skip_recording_startup_time_);
520 554
521 // Simulate DevTools is attached. This should deactivate the timer for start 555 // Simulate DevTools is attached. This should deactivate the timer for start
522 // timeout, but not stop the timer itself. 556 // timeout, but not stop the timer itself.
523 version_->SetDevToolsAttached(true); 557 version_->SetDevToolsAttached(true);
524 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); 558 EXPECT_TRUE(version_->timeout_timer_.IsRunning());
525 EXPECT_TRUE(version_->start_time_.is_null()); 559 EXPECT_TRUE(version_->start_time_.is_null());
526 EXPECT_TRUE(version_->skip_recording_startup_time_); 560 EXPECT_TRUE(version_->skip_recording_startup_time_);
527 561
528 // Simulate DevTools is detached. This should reactivate the timer for start 562 // Simulate DevTools is detached. This should reactivate the timer for start
529 // timeout. 563 // timeout.
530 version_->SetDevToolsAttached(false); 564 version_->SetDevToolsAttached(false);
531 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); 565 EXPECT_TRUE(version_->timeout_timer_.IsRunning());
532 EXPECT_FALSE(version_->start_time_.is_null()); 566 EXPECT_FALSE(version_->start_time_.is_null());
533 EXPECT_TRUE(version_->skip_recording_startup_time_); 567 EXPECT_TRUE(version_->skip_recording_startup_time_);
534 568
535 base::RunLoop().RunUntilIdle(); 569 runner->Run();
536 EXPECT_EQ(SERVICE_WORKER_OK, status); 570 EXPECT_EQ(SERVICE_WORKER_OK, status);
537 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 571 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
538 } 572 }
539 573
540 TEST_F(ServiceWorkerVersionTest, StoppingBeforeDestruct) { 574 TEST_F(ServiceWorkerVersionTest, StoppingBeforeDestruct) {
541 RunningStateListener listener; 575 RunningStateListener listener;
542 version_->AddListener(&listener); 576 version_->AddListener(&listener);
543 577
578 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
544 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 579 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
545 version_->StartWorker(CreateReceiverOnCurrentThread(&status)); 580 version_->StartWorker(
546 base::RunLoop().RunUntilIdle(); 581 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
582 runner->Run();
547 EXPECT_EQ(SERVICE_WORKER_OK, status); 583 EXPECT_EQ(SERVICE_WORKER_OK, status);
548 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); 584 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
549 EXPECT_EQ(ServiceWorkerVersion::RUNNING, listener.last_status); 585 EXPECT_EQ(ServiceWorkerVersion::RUNNING, listener.last_status);
550 586
551 version_ = nullptr; 587 version_ = nullptr;
552 EXPECT_EQ(ServiceWorkerVersion::STOPPING, listener.last_status); 588 EXPECT_EQ(ServiceWorkerVersion::STOPPING, listener.last_status);
553 } 589 }
554 590
555 // Test that update isn't triggered for a non-stale worker. 591 // Test that update isn't triggered for a non-stale worker.
556 TEST_F(ServiceWorkerVersionTest, StaleUpdate_FreshWorker) { 592 TEST_F(ServiceWorkerVersionTest, StaleUpdate_FreshWorker) {
557 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 593 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
558 594
595 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
559 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 596 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
560 registration_->SetActiveVersion(version_); 597 registration_->SetActiveVersion(version_);
561 registration_->set_last_update_check(base::Time::Now()); 598 registration_->set_last_update_check(base::Time::Now());
562 version_->DispatchPushEvent(CreateReceiverOnCurrentThread(&status), 599 version_->DispatchPushEvent(
563 std::string()); 600 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()),
564 base::RunLoop().RunUntilIdle(); 601 std::string());
602 runner->Run();
565 603
566 EXPECT_EQ(SERVICE_WORKER_OK, status); 604 EXPECT_EQ(SERVICE_WORKER_OK, status);
567 EXPECT_TRUE(version_->stale_time_.is_null()); 605 EXPECT_TRUE(version_->stale_time_.is_null());
568 EXPECT_FALSE(version_->update_timer_.IsRunning()); 606 EXPECT_FALSE(version_->update_timer_.IsRunning());
569 } 607 }
570 608
571 // Test that update isn't triggered for a non-active worker. 609 // Test that update isn't triggered for a non-active worker.
572 TEST_F(ServiceWorkerVersionTest, StaleUpdate_NonActiveWorker) { 610 TEST_F(ServiceWorkerVersionTest, StaleUpdate_NonActiveWorker) {
573 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 611 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
574 612
613 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
575 version_->SetStatus(ServiceWorkerVersion::INSTALLING); 614 version_->SetStatus(ServiceWorkerVersion::INSTALLING);
576 registration_->SetInstallingVersion(version_); 615 registration_->SetInstallingVersion(version_);
577 registration_->set_last_update_check(GetYesterday()); 616 registration_->set_last_update_check(GetYesterday());
578 version_->DispatchInstallEvent(CreateReceiverOnCurrentThread(&status)); 617 version_->DispatchInstallEvent(
579 base::RunLoop().RunUntilIdle(); 618 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
619 runner->Run();
580 620
581 EXPECT_EQ(SERVICE_WORKER_OK, status); 621 EXPECT_EQ(SERVICE_WORKER_OK, status);
582 EXPECT_TRUE(version_->stale_time_.is_null()); 622 EXPECT_TRUE(version_->stale_time_.is_null());
583 EXPECT_FALSE(version_->update_timer_.IsRunning()); 623 EXPECT_FALSE(version_->update_timer_.IsRunning());
584 } 624 }
585 625
586 // Test that staleness is detected when starting a worker. 626 // Test that staleness is detected when starting a worker.
587 TEST_F(ServiceWorkerVersionTest, StaleUpdate_StartWorker) { 627 TEST_F(ServiceWorkerVersionTest, StaleUpdate_StartWorker) {
588 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 628 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
589 629
590 // Starting the worker marks it as stale. 630 // Starting the worker marks it as stale.
631 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
591 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 632 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
592 registration_->SetActiveVersion(version_); 633 registration_->SetActiveVersion(version_);
593 registration_->set_last_update_check(GetYesterday()); 634 registration_->set_last_update_check(GetYesterday());
594 version_->DispatchPushEvent(CreateReceiverOnCurrentThread(&status), 635 version_->DispatchPushEvent(
595 std::string()); 636 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()),
596 base::RunLoop().RunUntilIdle(); 637 std::string());
638 runner->Run();
597 EXPECT_EQ(SERVICE_WORKER_OK, status); 639 EXPECT_EQ(SERVICE_WORKER_OK, status);
598 EXPECT_FALSE(version_->stale_time_.is_null()); 640 EXPECT_FALSE(version_->stale_time_.is_null());
599 EXPECT_FALSE(version_->update_timer_.IsRunning()); 641 EXPECT_FALSE(version_->update_timer_.IsRunning());
600 642
601 // Update is actually scheduled after the worker stops. 643 // Update is actually scheduled after the worker stops.
602 version_->StopWorker(CreateReceiverOnCurrentThread(&status)); 644 runner = new MessageLoopRunner;
603 base::RunLoop().RunUntilIdle(); 645 version_->StopWorker(
646 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
647 runner->Run();
604 EXPECT_EQ(SERVICE_WORKER_OK, status); 648 EXPECT_EQ(SERVICE_WORKER_OK, status);
605 EXPECT_TRUE(version_->stale_time_.is_null()); 649 EXPECT_TRUE(version_->stale_time_.is_null());
606 EXPECT_TRUE(version_->update_timer_.IsRunning()); 650 EXPECT_TRUE(version_->update_timer_.IsRunning());
607 } 651 }
608 652
609 // Test that staleness is detected on a running worker. 653 // Test that staleness is detected on a running worker.
610 TEST_F(ServiceWorkerVersionTest, StaleUpdate_RunningWorker) { 654 TEST_F(ServiceWorkerVersionTest, StaleUpdate_RunningWorker) {
611 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 655 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
612 656
613 // Start a fresh worker. 657 // Start a fresh worker.
658 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
614 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 659 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
615 registration_->SetActiveVersion(version_); 660 registration_->SetActiveVersion(version_);
616 registration_->set_last_update_check(base::Time::Now()); 661 registration_->set_last_update_check(base::Time::Now());
617 version_->DispatchPushEvent(CreateReceiverOnCurrentThread(&status), 662 version_->DispatchPushEvent(
618 std::string()); 663 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()),
619 base::RunLoop().RunUntilIdle(); 664 std::string());
665 runner->Run();
620 EXPECT_EQ(SERVICE_WORKER_OK, status); 666 EXPECT_EQ(SERVICE_WORKER_OK, status);
621 EXPECT_TRUE(version_->stale_time_.is_null()); 667 EXPECT_TRUE(version_->stale_time_.is_null());
622 668
623 // Simulate it running for a day. It will be marked stale. 669 // Simulate it running for a day. It will be marked stale.
624 registration_->set_last_update_check(GetYesterday()); 670 registration_->set_last_update_check(GetYesterday());
625 version_->OnTimeoutTimer(); 671 version_->OnTimeoutTimer();
626 EXPECT_FALSE(version_->stale_time_.is_null()); 672 EXPECT_FALSE(version_->stale_time_.is_null());
627 EXPECT_FALSE(version_->update_timer_.IsRunning()); 673 EXPECT_FALSE(version_->update_timer_.IsRunning());
628 674
629 // Simulate it running for past the wait threshold. The update will be 675 // Simulate it running for past the wait threshold. The update will be
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
741 base::TimeTicks::Now() - 787 base::TimeTicks::Now() -
742 base::TimeDelta::FromMinutes( 788 base::TimeDelta::FromMinutes(
743 ServiceWorkerVersion::kStartWorkerTimeoutMinutes + 1); 789 ServiceWorkerVersion::kStartWorkerTimeoutMinutes + 1);
744 version_->timeout_timer_.user_task().Run(); 790 version_->timeout_timer_.user_task().Run();
745 base::RunLoop().RunUntilIdle(); 791 base::RunLoop().RunUntilIdle();
746 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status); 792 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status);
747 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status()); 793 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status());
748 } 794 }
749 795
750 } // namespace content 796 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/service_worker/service_worker_url_request_job_unittest.cc ('k') | content/common/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698