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

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

Issue 2434583002: Mojofy unittests: ServiceWorkerVersionTest (Closed)
Patch Set: Created 4 years, 2 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
« no previous file with comments | « content/browser/service_worker/service_worker_version.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "content/browser/service_worker/service_worker_version.h" 5 #include "content/browser/service_worker/service_worker_version.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 #include <tuple> 8 #include <tuple>
9 9
10 #include "base/macros.h" 10 #include "base/macros.h"
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 TestBrowserThreadBundle thread_bundle_; 284 TestBrowserThreadBundle thread_bundle_;
285 std::unique_ptr<MessageReceiver> helper_; 285 std::unique_ptr<MessageReceiver> helper_;
286 scoped_refptr<ServiceWorkerRegistration> registration_; 286 scoped_refptr<ServiceWorkerRegistration> registration_;
287 scoped_refptr<ServiceWorkerVersion> version_; 287 scoped_refptr<ServiceWorkerVersion> version_;
288 GURL pattern_; 288 GURL pattern_;
289 289
290 private: 290 private:
291 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerVersionTest); 291 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerVersionTest);
292 }; 292 };
293 293
294 class ServiceWorkerVersionTestP
295 : public MojoServiceWorkerTestP<ServiceWorkerVersionTest> {};
296
294 class MessageReceiverDisallowStart : public MessageReceiver { 297 class MessageReceiverDisallowStart : public MessageReceiver {
295 public: 298 public:
296 MessageReceiverDisallowStart() 299 MessageReceiverDisallowStart()
297 : MessageReceiver() {} 300 : MessageReceiver() {}
298 ~MessageReceiverDisallowStart() override {} 301 ~MessageReceiverDisallowStart() override {}
299 302
300 enum class StartMode { STALL, FAIL, SUCCEED }; 303 enum class StartMode { STALL, FAIL, SUCCEED };
301 304
302 void OnStartWorker(int embedded_worker_id, 305 void OnStartWorker(int embedded_worker_id,
303 int64_t service_worker_version_id, 306 int64_t service_worker_version_id,
(...skipping 14 matching lines...) Expand all
318 } 321 }
319 } 322 }
320 323
321 void set_start_mode(StartMode mode) { mode_ = mode; } 324 void set_start_mode(StartMode mode) { mode_ = mode; }
322 325
323 private: 326 private:
324 StartMode mode_ = StartMode::STALL; 327 StartMode mode_ = StartMode::STALL;
325 DISALLOW_COPY_AND_ASSIGN(MessageReceiverDisallowStart); 328 DISALLOW_COPY_AND_ASSIGN(MessageReceiverDisallowStart);
326 }; 329 };
327 330
328 class ServiceWorkerFailToStartTest : public ServiceWorkerVersionTest { 331 class ServiceWorkerFailToStartTest : public ServiceWorkerVersionTestP {
329 protected: 332 protected:
330 ServiceWorkerFailToStartTest() 333 ServiceWorkerFailToStartTest() : ServiceWorkerVersionTestP() {}
331 : ServiceWorkerVersionTest() {}
332 334
333 void set_start_mode(MessageReceiverDisallowStart::StartMode mode) { 335 void set_start_mode(MessageReceiverDisallowStart::StartMode mode) {
334 MessageReceiverDisallowStart* helper = 336 MessageReceiverDisallowStart* helper =
335 static_cast<MessageReceiverDisallowStart*>(helper_.get()); 337 static_cast<MessageReceiverDisallowStart*>(helper_.get());
336 helper->set_start_mode(mode); 338 helper->set_start_mode(mode);
337 } 339 }
338 340
339 std::unique_ptr<MessageReceiver> GetMessageReceiver() override { 341 std::unique_ptr<MessageReceiver> GetMessageReceiver() override {
340 return base::MakeUnique<MessageReceiverDisallowStart>(); 342 return base::MakeUnique<MessageReceiverDisallowStart>();
341 } 343 }
342 344
343 private: 345 private:
344 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerFailToStartTest); 346 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerFailToStartTest);
345 }; 347 };
346 348
349 class NoOpStopWorkerEmbeddedWorkerInstanceClient
350 : public EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient {
351 public:
352 explicit NoOpStopWorkerEmbeddedWorkerInstanceClient(
353 base::WeakPtr<EmbeddedWorkerTestHelper> helper)
354 : EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient(helper) {}
355 ~NoOpStopWorkerEmbeddedWorkerInstanceClient() override {
356 // Stop callback should be called once.
357 if (pending_stop_callback_)
358 pending_stop_callback_.Run();
359 }
360
361 protected:
362 void StopWorker(const StopWorkerCallback& callback) override {
363 pending_stop_callback_ = std::move(callback);
364 // Do nothing.
365 }
366
367 StopWorkerCallback pending_stop_callback_;
368
369 private:
370 DISALLOW_COPY_AND_ASSIGN(NoOpStopWorkerEmbeddedWorkerInstanceClient);
371 };
372
347 class MessageReceiverDisallowStop : public MessageReceiver { 373 class MessageReceiverDisallowStop : public MessageReceiver {
348 public: 374 public:
349 MessageReceiverDisallowStop() : MessageReceiver() {} 375 MessageReceiverDisallowStop() : MessageReceiver() {
376 CreateAndRegisterMockInstanceClient<
377 NoOpStopWorkerEmbeddedWorkerInstanceClient>(AsWeakPtr());
378 }
350 ~MessageReceiverDisallowStop() override {} 379 ~MessageReceiverDisallowStop() override {}
351 380
352 void OnStopWorker(int embedded_worker_id) override { 381 void OnStopWorker(int embedded_worker_id) override {
353 // Do nothing. 382 // Do nothing.
354 } 383 }
355 384
356 private: 385 private:
357 DISALLOW_COPY_AND_ASSIGN(MessageReceiverDisallowStop); 386 DISALLOW_COPY_AND_ASSIGN(MessageReceiverDisallowStop);
358 }; 387 };
359 388
360 class ServiceWorkerStallInStoppingTest : public ServiceWorkerVersionTest { 389 class ServiceWorkerStallInStoppingTest : public ServiceWorkerVersionTestP {
361 protected: 390 protected:
362 ServiceWorkerStallInStoppingTest() : ServiceWorkerVersionTest() {} 391 ServiceWorkerStallInStoppingTest() : ServiceWorkerVersionTestP() {}
363 392
364 std::unique_ptr<MessageReceiver> GetMessageReceiver() override { 393 std::unique_ptr<MessageReceiver> GetMessageReceiver() override {
365 return base::MakeUnique<MessageReceiverDisallowStop>(); 394 return base::MakeUnique<MessageReceiverDisallowStop>();
366 } 395 }
367 396
368 private: 397 private:
369 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerStallInStoppingTest); 398 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerStallInStoppingTest);
370 }; 399 };
371 400
372 class MessageReceiverMojoTestService : public MessageReceiver { 401 class MessageReceiverMojoTestService : public MessageReceiver {
373 public: 402 public:
374 MessageReceiverMojoTestService() : MessageReceiver() {} 403 MessageReceiverMojoTestService() : MessageReceiver() {}
375 ~MessageReceiverMojoTestService() override {} 404 ~MessageReceiverMojoTestService() override {}
376 405
377 void OnSetupMojo(int thread_id, 406 void OnSetupMojo(int thread_id,
378 service_manager::InterfaceRegistry* registry) override { 407 service_manager::InterfaceRegistry* registry) override {
379 registry->AddInterface(base::Bind(&TestServiceImpl::Create)); 408 registry->AddInterface(base::Bind(&TestServiceImpl::Create));
380 } 409 }
381 410
382 private: 411 private:
383 DISALLOW_COPY_AND_ASSIGN(MessageReceiverMojoTestService); 412 DISALLOW_COPY_AND_ASSIGN(MessageReceiverMojoTestService);
384 }; 413 };
385 414
386 class ServiceWorkerVersionWithMojoTest : public ServiceWorkerVersionTest { 415 class ServiceWorkerVersionWithMojoTest : public ServiceWorkerVersionTestP {
387 protected: 416 protected:
388 ServiceWorkerVersionWithMojoTest() : ServiceWorkerVersionTest() {} 417 ServiceWorkerVersionWithMojoTest() : ServiceWorkerVersionTestP() {}
389 418
390 std::unique_ptr<MessageReceiver> GetMessageReceiver() override { 419 std::unique_ptr<MessageReceiver> GetMessageReceiver() override {
391 return base::MakeUnique<MessageReceiverMojoTestService>(); 420 return base::MakeUnique<MessageReceiverMojoTestService>();
392 } 421 }
393 422
394 private: 423 private:
395 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerVersionWithMojoTest); 424 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerVersionWithMojoTest);
396 }; 425 };
397 426
398 TEST_F(ServiceWorkerVersionTest, ConcurrentStartAndStop) { 427 TEST_P(ServiceWorkerVersionTestP, ConcurrentStartAndStop) {
399 // Call StartWorker() multiple times. 428 // Call StartWorker() multiple times.
400 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_FAILED; 429 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_FAILED;
401 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_FAILED; 430 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_FAILED;
402 ServiceWorkerStatusCode status3 = SERVICE_WORKER_ERROR_FAILED; 431 ServiceWorkerStatusCode status3 = SERVICE_WORKER_ERROR_FAILED;
403 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, 432 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
404 CreateReceiverOnCurrentThread(&status1)); 433 CreateReceiverOnCurrentThread(&status1));
405 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, 434 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
406 CreateReceiverOnCurrentThread(&status2)); 435 CreateReceiverOnCurrentThread(&status2));
407 436
408 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, version_->running_status()); 437 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, version_->running_status());
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
456 EXPECT_EQ(EmbeddedWorkerStatus::STOPPING, version_->running_status()); 485 EXPECT_EQ(EmbeddedWorkerStatus::STOPPING, version_->running_status());
457 base::RunLoop().RunUntilIdle(); 486 base::RunLoop().RunUntilIdle();
458 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 487 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
459 488
460 // All should just succeed. 489 // All should just succeed.
461 EXPECT_EQ(SERVICE_WORKER_OK, status1); 490 EXPECT_EQ(SERVICE_WORKER_OK, status1);
462 EXPECT_EQ(SERVICE_WORKER_OK, status2); 491 EXPECT_EQ(SERVICE_WORKER_OK, status2);
463 EXPECT_EQ(SERVICE_WORKER_OK, status3); 492 EXPECT_EQ(SERVICE_WORKER_OK, status3);
464 } 493 }
465 494
466 TEST_F(ServiceWorkerVersionTest, DispatchEventToStoppedWorker) { 495 TEST_P(ServiceWorkerVersionTestP, DispatchEventToStoppedWorker) {
467 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); 496 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status());
468 497
469 // Dispatch an event without starting the worker. 498 // Dispatch an event without starting the worker.
470 version_->SetStatus(ServiceWorkerVersion::INSTALLING); 499 version_->SetStatus(ServiceWorkerVersion::INSTALLING);
471 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::INSTALL); 500 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::INSTALL);
472 501
473 // The worker should be now started. 502 // The worker should be now started.
474 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 503 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
475 504
476 // Stop the worker, and then dispatch an event immediately after that. 505 // Stop the worker, and then dispatch an event immediately after that.
477 ServiceWorkerStatusCode stop_status = SERVICE_WORKER_ERROR_FAILED; 506 ServiceWorkerStatusCode stop_status = SERVICE_WORKER_ERROR_FAILED;
478 version_->StopWorker(CreateReceiverOnCurrentThread(&stop_status)); 507 version_->StopWorker(CreateReceiverOnCurrentThread(&stop_status));
479 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::INSTALL); 508 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::INSTALL);
480 EXPECT_EQ(SERVICE_WORKER_OK, stop_status); 509 EXPECT_EQ(SERVICE_WORKER_OK, stop_status);
481 510
482 // The worker should be now started again. 511 // The worker should be now started again.
483 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 512 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
484 } 513 }
485 514
486 TEST_F(ServiceWorkerVersionTest, StartUnregisteredButStillLiveWorker) { 515 TEST_P(ServiceWorkerVersionTestP, StartUnregisteredButStillLiveWorker) {
487 // Start the worker. 516 // Start the worker.
488 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 517 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
489 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, 518 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
490 CreateReceiverOnCurrentThread(&status)); 519 CreateReceiverOnCurrentThread(&status));
491 base::RunLoop().RunUntilIdle(); 520 base::RunLoop().RunUntilIdle();
492 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 521 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
493 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 522 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
494 523
495 // Delete the registration. 524 // Delete the registration.
496 status = SERVICE_WORKER_ERROR_FAILED; 525 status = SERVICE_WORKER_ERROR_FAILED;
(...skipping 13 matching lines...) Expand all
510 EXPECT_EQ(SERVICE_WORKER_OK, stop_status); 539 EXPECT_EQ(SERVICE_WORKER_OK, stop_status);
511 540
512 // Dispatch an event on the unregistered and stopped but still live worker. 541 // Dispatch an event on the unregistered and stopped but still live worker.
513 status = SERVICE_WORKER_ERROR_FAILED; 542 status = SERVICE_WORKER_ERROR_FAILED;
514 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME); 543 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME);
515 544
516 // The worker should be now started again. 545 // The worker should be now started again.
517 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 546 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
518 } 547 }
519 548
520 TEST_F(ServiceWorkerVersionTest, ReceiveMessageFromWorker) { 549 TEST_P(ServiceWorkerVersionTestP, ReceiveMessageFromWorker) {
521 // Start worker. 550 // Start worker.
522 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 551 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
523 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, 552 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
524 CreateReceiverOnCurrentThread(&status)); 553 CreateReceiverOnCurrentThread(&status));
525 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, version_->running_status()); 554 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, version_->running_status());
526 base::RunLoop().RunUntilIdle(); 555 base::RunLoop().RunUntilIdle();
527 EXPECT_EQ(SERVICE_WORKER_OK, status); 556 EXPECT_EQ(SERVICE_WORKER_OK, status);
528 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 557 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
529 558
530 MessageReceiverFromWorker receiver(version_->embedded_worker()); 559 MessageReceiverFromWorker receiver(version_->embedded_worker());
531 560
532 // Simulate sending some dummy values from the worker. 561 // Simulate sending some dummy values from the worker.
533 helper_->SimulateSendValueToBrowser( 562 helper_->SimulateSendValueToBrowser(
534 version_->embedded_worker()->embedded_worker_id(), 555); 563 version_->embedded_worker()->embedded_worker_id(), 555);
535 helper_->SimulateSendValueToBrowser( 564 helper_->SimulateSendValueToBrowser(
536 version_->embedded_worker()->embedded_worker_id(), 777); 565 version_->embedded_worker()->embedded_worker_id(), 777);
537 566
538 // Verify the receiver received the values. 567 // Verify the receiver received the values.
539 ASSERT_EQ(2U, receiver.received_values().size()); 568 ASSERT_EQ(2U, receiver.received_values().size());
540 EXPECT_EQ(555, receiver.received_values()[0]); 569 EXPECT_EQ(555, receiver.received_values()[0]);
541 EXPECT_EQ(777, receiver.received_values()[1]); 570 EXPECT_EQ(777, receiver.received_values()[1]);
542 } 571 }
543 572
544 TEST_F(ServiceWorkerVersionTest, InstallAndWaitCompletion) { 573 TEST_P(ServiceWorkerVersionTestP, InstallAndWaitCompletion) {
545 version_->SetStatus(ServiceWorkerVersion::INSTALLING); 574 version_->SetStatus(ServiceWorkerVersion::INSTALLING);
546 575
547 // Wait for the completion. 576 // Wait for the completion.
548 bool status_change_called = false; 577 bool status_change_called = false;
549 version_->RegisterStatusChangeCallback( 578 version_->RegisterStatusChangeCallback(
550 base::Bind(&VerifyCalled, &status_change_called)); 579 base::Bind(&VerifyCalled, &status_change_called));
551 580
552 // Dispatch an install event. 581 // Dispatch an install event.
553 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::INSTALL); 582 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::INSTALL);
554 583
555 // Version's status must not have changed during installation. 584 // Version's status must not have changed during installation.
556 EXPECT_FALSE(status_change_called); 585 EXPECT_FALSE(status_change_called);
557 EXPECT_EQ(ServiceWorkerVersion::INSTALLING, version_->status()); 586 EXPECT_EQ(ServiceWorkerVersion::INSTALLING, version_->status());
558 } 587 }
559 588
560 TEST_F(ServiceWorkerVersionTest, ActivateAndWaitCompletion) { 589 TEST_P(ServiceWorkerVersionTestP, ActivateAndWaitCompletion) {
561 // TODO(mek): This test (and the one above for the install event) made more 590 // TODO(mek): This test (and the one above for the install event) made more
562 // sense back when ServiceWorkerVersion was responsible for updating the 591 // sense back when ServiceWorkerVersion was responsible for updating the
563 // status. Now a better version of this test should probably be added to 592 // status. Now a better version of this test should probably be added to
564 // ServiceWorkerRegistrationTest instead. 593 // ServiceWorkerRegistrationTest instead.
565 594
566 version_->SetStatus(ServiceWorkerVersion::ACTIVATING); 595 version_->SetStatus(ServiceWorkerVersion::ACTIVATING);
567 596
568 // Wait for the completion. 597 // Wait for the completion.
569 bool status_change_called = false; 598 bool status_change_called = false;
570 version_->RegisterStatusChangeCallback( 599 version_->RegisterStatusChangeCallback(
571 base::Bind(&VerifyCalled, &status_change_called)); 600 base::Bind(&VerifyCalled, &status_change_called));
572 601
573 // Dispatch an activate event. 602 // Dispatch an activate event.
574 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::ACTIVATE); 603 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::ACTIVATE);
575 604
576 // Version's status must not have changed during activation. 605 // Version's status must not have changed during activation.
577 EXPECT_FALSE(status_change_called); 606 EXPECT_FALSE(status_change_called);
578 EXPECT_EQ(ServiceWorkerVersion::ACTIVATING, version_->status()); 607 EXPECT_EQ(ServiceWorkerVersion::ACTIVATING, version_->status());
579 } 608 }
580 609
581 TEST_F(ServiceWorkerVersionTest, RepeatedlyObserveStatusChanges) { 610 TEST_P(ServiceWorkerVersionTestP, RepeatedlyObserveStatusChanges) {
582 EXPECT_EQ(ServiceWorkerVersion::NEW, version_->status()); 611 EXPECT_EQ(ServiceWorkerVersion::NEW, version_->status());
583 612
584 // Repeatedly observe status changes (the callback re-registers itself). 613 // Repeatedly observe status changes (the callback re-registers itself).
585 std::vector<ServiceWorkerVersion::Status> statuses; 614 std::vector<ServiceWorkerVersion::Status> statuses;
586 version_->RegisterStatusChangeCallback(base::Bind( 615 version_->RegisterStatusChangeCallback(base::Bind(
587 &ObserveStatusChanges, base::RetainedRef(version_), &statuses)); 616 &ObserveStatusChanges, base::RetainedRef(version_), &statuses));
588 617
589 version_->SetStatus(ServiceWorkerVersion::INSTALLING); 618 version_->SetStatus(ServiceWorkerVersion::INSTALLING);
590 version_->SetStatus(ServiceWorkerVersion::INSTALLED); 619 version_->SetStatus(ServiceWorkerVersion::INSTALLED);
591 version_->SetStatus(ServiceWorkerVersion::ACTIVATING); 620 version_->SetStatus(ServiceWorkerVersion::ACTIVATING);
592 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 621 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
593 version_->SetStatus(ServiceWorkerVersion::REDUNDANT); 622 version_->SetStatus(ServiceWorkerVersion::REDUNDANT);
594 623
595 // Verify that we could successfully observe repeated status changes. 624 // Verify that we could successfully observe repeated status changes.
596 ASSERT_EQ(5U, statuses.size()); 625 ASSERT_EQ(5U, statuses.size());
597 ASSERT_EQ(ServiceWorkerVersion::INSTALLING, statuses[0]); 626 ASSERT_EQ(ServiceWorkerVersion::INSTALLING, statuses[0]);
598 ASSERT_EQ(ServiceWorkerVersion::INSTALLED, statuses[1]); 627 ASSERT_EQ(ServiceWorkerVersion::INSTALLED, statuses[1]);
599 ASSERT_EQ(ServiceWorkerVersion::ACTIVATING, statuses[2]); 628 ASSERT_EQ(ServiceWorkerVersion::ACTIVATING, statuses[2]);
600 ASSERT_EQ(ServiceWorkerVersion::ACTIVATED, statuses[3]); 629 ASSERT_EQ(ServiceWorkerVersion::ACTIVATED, statuses[3]);
601 ASSERT_EQ(ServiceWorkerVersion::REDUNDANT, statuses[4]); 630 ASSERT_EQ(ServiceWorkerVersion::REDUNDANT, statuses[4]);
602 } 631 }
603 632
604 TEST_F(ServiceWorkerVersionTest, IdleTimeout) { 633 TEST_P(ServiceWorkerVersionTestP, IdleTimeout) {
605 // Used to reliably test when the idle time gets reset regardless of clock 634 // Used to reliably test when the idle time gets reset regardless of clock
606 // granularity. 635 // granularity.
607 const base::TimeDelta kOneSecond = base::TimeDelta::FromSeconds(1); 636 const base::TimeDelta kOneSecond = base::TimeDelta::FromSeconds(1);
608 637
609 // Verify the timer is not running when version initializes its status. 638 // Verify the timer is not running when version initializes its status.
610 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 639 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
611 EXPECT_FALSE(version_->timeout_timer_.IsRunning()); 640 EXPECT_FALSE(version_->timeout_timer_.IsRunning());
612 641
613 // Verify the timer is running after the worker is started. 642 // Verify the timer is running after the worker is started.
614 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 643 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
659 int request_id = 688 int request_id =
660 version_->StartRequest(ServiceWorkerMetrics::EventType::SYNC, 689 version_->StartRequest(ServiceWorkerMetrics::EventType::SYNC,
661 CreateReceiverOnCurrentThread(&status)); 690 CreateReceiverOnCurrentThread(&status));
662 EXPECT_TRUE(version_->FinishRequest(request_id, true /* was_handled */, 691 EXPECT_TRUE(version_->FinishRequest(request_id, true /* was_handled */,
663 base::Time::Now())); 692 base::Time::Now()));
664 693
665 EXPECT_EQ(SERVICE_WORKER_OK, status); 694 EXPECT_EQ(SERVICE_WORKER_OK, status);
666 EXPECT_LT(idle_time, version_->idle_time_); 695 EXPECT_LT(idle_time, version_->idle_time_);
667 } 696 }
668 697
669 TEST_F(ServiceWorkerVersionTest, SetDevToolsAttached) { 698 TEST_P(ServiceWorkerVersionTestP, SetDevToolsAttached) {
670 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 699 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
671 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, 700 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
672 CreateReceiverOnCurrentThread(&status)); 701 CreateReceiverOnCurrentThread(&status));
673 702
674 ASSERT_EQ(EmbeddedWorkerStatus::STARTING, version_->running_status()); 703 ASSERT_EQ(EmbeddedWorkerStatus::STARTING, version_->running_status());
675 704
676 ASSERT_TRUE(version_->timeout_timer_.IsRunning()); 705 ASSERT_TRUE(version_->timeout_timer_.IsRunning());
677 ASSERT_FALSE(version_->start_time_.is_null()); 706 ASSERT_FALSE(version_->start_time_.is_null());
678 ASSERT_FALSE(version_->skip_recording_startup_time_); 707 ASSERT_FALSE(version_->skip_recording_startup_time_);
679 708
680 // Simulate DevTools is attached. This should deactivate the timer for start 709 // Simulate DevTools is attached. This should deactivate the timer for start
681 // timeout, but not stop the timer itself. 710 // timeout, but not stop the timer itself.
682 version_->SetDevToolsAttached(true); 711 version_->SetDevToolsAttached(true);
683 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); 712 EXPECT_TRUE(version_->timeout_timer_.IsRunning());
684 EXPECT_TRUE(version_->start_time_.is_null()); 713 EXPECT_TRUE(version_->start_time_.is_null());
685 EXPECT_TRUE(version_->skip_recording_startup_time_); 714 EXPECT_TRUE(version_->skip_recording_startup_time_);
686 715
687 // Simulate DevTools is detached. This should reactivate the timer for start 716 // Simulate DevTools is detached. This should reactivate the timer for start
688 // timeout. 717 // timeout.
689 version_->SetDevToolsAttached(false); 718 version_->SetDevToolsAttached(false);
690 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); 719 EXPECT_TRUE(version_->timeout_timer_.IsRunning());
691 EXPECT_FALSE(version_->start_time_.is_null()); 720 EXPECT_FALSE(version_->start_time_.is_null());
692 EXPECT_TRUE(version_->skip_recording_startup_time_); 721 EXPECT_TRUE(version_->skip_recording_startup_time_);
693 722
694 base::RunLoop().RunUntilIdle(); 723 base::RunLoop().RunUntilIdle();
695 EXPECT_EQ(SERVICE_WORKER_OK, status); 724 EXPECT_EQ(SERVICE_WORKER_OK, status);
696 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 725 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
697 } 726 }
698 727
699 TEST_F(ServiceWorkerVersionTest, StoppingBeforeDestruct) { 728 TEST_P(ServiceWorkerVersionTestP, StoppingBeforeDestruct) {
700 RunningStateListener listener; 729 RunningStateListener listener;
701 version_->AddListener(&listener); 730 version_->AddListener(&listener);
702 731
703 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 732 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
704 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, 733 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
705 CreateReceiverOnCurrentThread(&status)); 734 CreateReceiverOnCurrentThread(&status));
706 base::RunLoop().RunUntilIdle(); 735 base::RunLoop().RunUntilIdle();
707 EXPECT_EQ(SERVICE_WORKER_OK, status); 736 EXPECT_EQ(SERVICE_WORKER_OK, status);
708 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 737 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
709 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, listener.last_status); 738 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, listener.last_status);
710 739
711 version_ = nullptr; 740 version_ = nullptr;
712 EXPECT_EQ(EmbeddedWorkerStatus::STOPPING, listener.last_status); 741 EXPECT_EQ(EmbeddedWorkerStatus::STOPPING, listener.last_status);
713 } 742 }
714 743
715 // Test that update isn't triggered for a non-stale worker. 744 // Test that update isn't triggered for a non-stale worker.
716 TEST_F(ServiceWorkerVersionTest, StaleUpdate_FreshWorker) { 745 TEST_P(ServiceWorkerVersionTestP, StaleUpdate_FreshWorker) {
717 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 746 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
718 registration_->SetActiveVersion(version_); 747 registration_->SetActiveVersion(version_);
719 registration_->set_last_update_check(base::Time::Now()); 748 registration_->set_last_update_check(base::Time::Now());
720 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH); 749 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH);
721 750
722 EXPECT_TRUE(version_->stale_time_.is_null()); 751 EXPECT_TRUE(version_->stale_time_.is_null());
723 EXPECT_FALSE(version_->update_timer_.IsRunning()); 752 EXPECT_FALSE(version_->update_timer_.IsRunning());
724 } 753 }
725 754
726 // Test that update isn't triggered for a non-active worker. 755 // Test that update isn't triggered for a non-active worker.
727 TEST_F(ServiceWorkerVersionTest, StaleUpdate_NonActiveWorker) { 756 TEST_P(ServiceWorkerVersionTestP, StaleUpdate_NonActiveWorker) {
728 version_->SetStatus(ServiceWorkerVersion::INSTALLING); 757 version_->SetStatus(ServiceWorkerVersion::INSTALLING);
729 registration_->SetInstallingVersion(version_); 758 registration_->SetInstallingVersion(version_);
730 registration_->set_last_update_check(GetYesterday()); 759 registration_->set_last_update_check(GetYesterday());
731 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::INSTALL); 760 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::INSTALL);
732 761
733 EXPECT_TRUE(version_->stale_time_.is_null()); 762 EXPECT_TRUE(version_->stale_time_.is_null());
734 EXPECT_FALSE(version_->update_timer_.IsRunning()); 763 EXPECT_FALSE(version_->update_timer_.IsRunning());
735 } 764 }
736 765
737 // Test that staleness is detected when starting a worker. 766 // Test that staleness is detected when starting a worker.
738 TEST_F(ServiceWorkerVersionTest, StaleUpdate_StartWorker) { 767 TEST_P(ServiceWorkerVersionTestP, StaleUpdate_StartWorker) {
739 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 768 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
740 769
741 // Starting the worker marks it as stale. 770 // Starting the worker marks it as stale.
742 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 771 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
743 registration_->SetActiveVersion(version_); 772 registration_->SetActiveVersion(version_);
744 registration_->set_last_update_check(GetYesterday()); 773 registration_->set_last_update_check(GetYesterday());
745 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH); 774 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH);
746 EXPECT_FALSE(version_->stale_time_.is_null()); 775 EXPECT_FALSE(version_->stale_time_.is_null());
747 EXPECT_FALSE(version_->update_timer_.IsRunning()); 776 EXPECT_FALSE(version_->update_timer_.IsRunning());
748 777
749 // Update is actually scheduled after the worker stops. 778 // Update is actually scheduled after the worker stops.
750 version_->StopWorker(CreateReceiverOnCurrentThread(&status)); 779 version_->StopWorker(CreateReceiverOnCurrentThread(&status));
751 base::RunLoop().RunUntilIdle(); 780 base::RunLoop().RunUntilIdle();
752 EXPECT_EQ(SERVICE_WORKER_OK, status); 781 EXPECT_EQ(SERVICE_WORKER_OK, status);
753 EXPECT_TRUE(version_->stale_time_.is_null()); 782 EXPECT_TRUE(version_->stale_time_.is_null());
754 EXPECT_TRUE(version_->update_timer_.IsRunning()); 783 EXPECT_TRUE(version_->update_timer_.IsRunning());
755 } 784 }
756 785
757 // Test that staleness is detected on a running worker. 786 // Test that staleness is detected on a running worker.
758 TEST_F(ServiceWorkerVersionTest, StaleUpdate_RunningWorker) { 787 TEST_P(ServiceWorkerVersionTestP, StaleUpdate_RunningWorker) {
759 // Start a fresh worker. 788 // Start a fresh worker.
760 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 789 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
761 registration_->SetActiveVersion(version_); 790 registration_->SetActiveVersion(version_);
762 registration_->set_last_update_check(base::Time::Now()); 791 registration_->set_last_update_check(base::Time::Now());
763 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH); 792 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH);
764 EXPECT_TRUE(version_->stale_time_.is_null()); 793 EXPECT_TRUE(version_->stale_time_.is_null());
765 794
766 // Simulate it running for a day. It will be marked stale. 795 // Simulate it running for a day. It will be marked stale.
767 registration_->set_last_update_check(GetYesterday()); 796 registration_->set_last_update_check(GetYesterday());
768 version_->OnTimeoutTimer(); 797 version_->OnTimeoutTimer();
769 EXPECT_FALSE(version_->stale_time_.is_null()); 798 EXPECT_FALSE(version_->stale_time_.is_null());
770 EXPECT_FALSE(version_->update_timer_.IsRunning()); 799 EXPECT_FALSE(version_->update_timer_.IsRunning());
771 800
772 // Simulate it running for past the wait threshold. The update will be 801 // Simulate it running for past the wait threshold. The update will be
773 // scheduled. 802 // scheduled.
774 version_->stale_time_ = 803 version_->stale_time_ =
775 base::TimeTicks::Now() - 804 base::TimeTicks::Now() -
776 base::TimeDelta::FromMinutes( 805 base::TimeDelta::FromMinutes(
777 ServiceWorkerVersion::kStartNewWorkerTimeoutMinutes + 1); 806 ServiceWorkerVersion::kStartNewWorkerTimeoutMinutes + 1);
778 version_->OnTimeoutTimer(); 807 version_->OnTimeoutTimer();
779 EXPECT_TRUE(version_->stale_time_.is_null()); 808 EXPECT_TRUE(version_->stale_time_.is_null());
780 EXPECT_TRUE(version_->update_timer_.IsRunning()); 809 EXPECT_TRUE(version_->update_timer_.IsRunning());
781 } 810 }
782 811
783 // Test that a stream of events doesn't restart the timer. 812 // Test that a stream of events doesn't restart the timer.
784 TEST_F(ServiceWorkerVersionTest, StaleUpdate_DoNotDeferTimer) { 813 TEST_P(ServiceWorkerVersionTestP, StaleUpdate_DoNotDeferTimer) {
785 // Make a stale worker. 814 // Make a stale worker.
786 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 815 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
787 registration_->SetActiveVersion(version_); 816 registration_->SetActiveVersion(version_);
788 registration_->set_last_update_check(GetYesterday()); 817 registration_->set_last_update_check(GetYesterday());
789 base::TimeTicks stale_time = 818 base::TimeTicks stale_time =
790 base::TimeTicks::Now() - 819 base::TimeTicks::Now() -
791 base::TimeDelta::FromMinutes( 820 base::TimeDelta::FromMinutes(
792 ServiceWorkerVersion::kStartNewWorkerTimeoutMinutes + 1); 821 ServiceWorkerVersion::kStartNewWorkerTimeoutMinutes + 1);
793 version_->stale_time_ = stale_time; 822 version_->stale_time_ = stale_time;
794 823
(...skipping 15 matching lines...) Expand all
810 // Update timer is not deferred. 839 // Update timer is not deferred.
811 base::TimeTicks run_time = version_->update_timer_.desired_run_time(); 840 base::TimeTicks run_time = version_->update_timer_.desired_run_time();
812 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH); 841 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH);
813 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH); 842 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH);
814 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH); 843 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH);
815 base::RunLoop().RunUntilIdle(); 844 base::RunLoop().RunUntilIdle();
816 EXPECT_TRUE(version_->stale_time_.is_null()); 845 EXPECT_TRUE(version_->stale_time_.is_null());
817 EXPECT_EQ(run_time, version_->update_timer_.desired_run_time()); 846 EXPECT_EQ(run_time, version_->update_timer_.desired_run_time());
818 } 847 }
819 848
820 TEST_F(ServiceWorkerVersionTest, RequestTimeout) { 849 TEST_P(ServiceWorkerVersionTestP, RequestTimeout) {
821 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value 850 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
822 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 851 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
823 852
824 version_->StartWorker(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME, 853 version_->StartWorker(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME,
825 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 854 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
826 base::RunLoop().RunUntilIdle(); 855 base::RunLoop().RunUntilIdle();
827 856
828 // Create a request. 857 // Create a request.
829 int request_id = 858 int request_id =
830 version_->StartRequest(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME, 859 version_->StartRequest(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME,
831 CreateReceiverOnCurrentThread(&status)); 860 CreateReceiverOnCurrentThread(&status));
832 base::RunLoop().RunUntilIdle(); 861 base::RunLoop().RunUntilIdle();
833 862
834 // Callback has not completed yet. 863 // Callback has not completed yet.
835 EXPECT_EQ(SERVICE_WORKER_ERROR_NETWORK, status); 864 EXPECT_EQ(SERVICE_WORKER_ERROR_NETWORK, status);
836 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 865 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
837 866
838 // Simulate timeout. 867 // Simulate timeout.
839 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); 868 EXPECT_TRUE(version_->timeout_timer_.IsRunning());
840 version_->SetAllRequestExpirations(base::TimeTicks::Now()); 869 version_->SetAllRequestExpirations(base::TimeTicks::Now());
841 version_->timeout_timer_.user_task().Run(); 870 version_->timeout_timer_.user_task().Run();
842 base::RunLoop().RunUntilIdle(); 871 base::RunLoop().RunUntilIdle();
843 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status); 872 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status);
844 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); 873 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status());
845 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */, 874 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */,
846 base::Time::Now())); 875 base::Time::Now()));
847 } 876 }
848 877
849 TEST_F(ServiceWorkerVersionTest, RequestCustomizedTimeout) { 878 TEST_P(ServiceWorkerVersionTestP, RequestCustomizedTimeout) {
850 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value 879 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
851 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 880 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
852 881
853 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, 882 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC,
854 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 883 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
855 base::RunLoop().RunUntilIdle(); 884 base::RunLoop().RunUntilIdle();
856 885
857 // Create a request that should expire Now(). 886 // Create a request that should expire Now().
858 int request_id = version_->StartRequestWithCustomTimeout( 887 int request_id = version_->StartRequestWithCustomTimeout(
859 ServiceWorkerMetrics::EventType::SYNC, 888 ServiceWorkerMetrics::EventType::SYNC,
860 CreateReceiverOnCurrentThread(&status), base::TimeDelta(), 889 CreateReceiverOnCurrentThread(&status), base::TimeDelta(),
861 ServiceWorkerVersion::CONTINUE_ON_TIMEOUT); 890 ServiceWorkerVersion::CONTINUE_ON_TIMEOUT);
862 891
863 base::RunLoop().RunUntilIdle(); 892 base::RunLoop().RunUntilIdle();
864 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); 893 EXPECT_TRUE(version_->timeout_timer_.IsRunning());
865 version_->timeout_timer_.user_task().Run(); 894 version_->timeout_timer_.user_task().Run();
866 base::RunLoop().RunUntilIdle(); 895 base::RunLoop().RunUntilIdle();
867 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status); 896 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status);
868 897
869 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */, 898 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */,
870 base::Time::Now())); 899 base::Time::Now()));
871 900
872 // CONTINUE_ON_TIMEOUT timeouts don't stop the service worker. 901 // CONTINUE_ON_TIMEOUT timeouts don't stop the service worker.
873 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 902 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
874 } 903 }
875 904
876 TEST_F(ServiceWorkerVersionTest, RequestCustomizedTimeoutKill) { 905 TEST_P(ServiceWorkerVersionTestP, RequestCustomizedTimeoutKill) {
877 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value 906 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
878 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 907 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
879 908
880 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, 909 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC,
881 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 910 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
882 base::RunLoop().RunUntilIdle(); 911 base::RunLoop().RunUntilIdle();
883 912
884 // Create a request that should expire Now(). 913 // Create a request that should expire Now().
885 int request_id = version_->StartRequestWithCustomTimeout( 914 int request_id = version_->StartRequestWithCustomTimeout(
886 ServiceWorkerMetrics::EventType::SYNC, 915 ServiceWorkerMetrics::EventType::SYNC,
887 CreateReceiverOnCurrentThread(&status), base::TimeDelta(), 916 CreateReceiverOnCurrentThread(&status), base::TimeDelta(),
888 ServiceWorkerVersion::KILL_ON_TIMEOUT); 917 ServiceWorkerVersion::KILL_ON_TIMEOUT);
889 918
890 base::RunLoop().RunUntilIdle(); 919 base::RunLoop().RunUntilIdle();
891 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); 920 EXPECT_TRUE(version_->timeout_timer_.IsRunning());
892 version_->timeout_timer_.user_task().Run(); 921 version_->timeout_timer_.user_task().Run();
893 base::RunLoop().RunUntilIdle(); 922 base::RunLoop().RunUntilIdle();
894 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status); 923 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status);
895 924
896 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */, 925 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */,
897 base::Time::Now())); 926 base::Time::Now()));
898 927
899 // KILL_ON_TIMEOUT timeouts should stop the service worker. 928 // KILL_ON_TIMEOUT timeouts should stop the service worker.
900 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); 929 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status());
901 } 930 }
902 931
903 TEST_F(ServiceWorkerVersionTest, MixedRequestTimeouts) { 932 TEST_P(ServiceWorkerVersionTestP, MixedRequestTimeouts) {
904 ServiceWorkerStatusCode sync_status = 933 ServiceWorkerStatusCode sync_status =
905 SERVICE_WORKER_ERROR_NETWORK; // dummy value 934 SERVICE_WORKER_ERROR_NETWORK; // dummy value
906 ServiceWorkerStatusCode fetch_status = 935 ServiceWorkerStatusCode fetch_status =
907 SERVICE_WORKER_ERROR_NETWORK; // dummy value 936 SERVICE_WORKER_ERROR_NETWORK; // dummy value
908 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 937 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
909 938
910 version_->StartWorker(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME, 939 version_->StartWorker(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME,
911 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 940 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
912 base::RunLoop().RunUntilIdle(); 941 base::RunLoop().RunUntilIdle();
913 942
(...skipping 30 matching lines...) Expand all
944 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, fetch_status); 973 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, fetch_status);
945 974
946 // Fetch request should no longer exist. 975 // Fetch request should no longer exist.
947 EXPECT_FALSE(version_->FinishRequest(fetch_request_id, true /* was_handled */, 976 EXPECT_FALSE(version_->FinishRequest(fetch_request_id, true /* was_handled */,
948 base::Time::Now())); 977 base::Time::Now()));
949 978
950 // Other timeouts do stop the service worker. 979 // Other timeouts do stop the service worker.
951 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); 980 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status());
952 } 981 }
953 982
954 TEST_F(ServiceWorkerFailToStartTest, RendererCrash) { 983 TEST_P(ServiceWorkerFailToStartTest, RendererCrash) {
955 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value 984 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
956 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, 985 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
957 CreateReceiverOnCurrentThread(&status)); 986 CreateReceiverOnCurrentThread(&status));
958 base::RunLoop().RunUntilIdle(); 987 base::RunLoop().RunUntilIdle();
959 988
960 // Callback has not completed yet. 989 // Callback has not completed yet.
961 EXPECT_EQ(SERVICE_WORKER_ERROR_NETWORK, status); 990 EXPECT_EQ(SERVICE_WORKER_ERROR_NETWORK, status);
962 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, version_->running_status()); 991 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, version_->running_status());
963 992
964 // Simulate renderer crash: do what 993 // Simulate renderer crash: do what
965 // ServiceWorkerDispatcherHost::OnFilterRemoved does. 994 // ServiceWorkerDispatcherHost::OnFilterRemoved does.
966 int process_id = helper_->mock_render_process_id(); 995 int process_id = helper_->mock_render_process_id();
967 helper_->context()->RemoveAllProviderHostsForProcess(process_id); 996 helper_->context()->RemoveAllProviderHostsForProcess(process_id);
968 helper_->context()->embedded_worker_registry()->RemoveChildProcessSender( 997 helper_->context()->embedded_worker_registry()->RemoveChildProcessSender(
969 process_id); 998 process_id);
970 base::RunLoop().RunUntilIdle(); 999 base::RunLoop().RunUntilIdle();
971 1000
972 // Callback completed. 1001 // Callback completed.
973 EXPECT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, status); 1002 EXPECT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, status);
974 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); 1003 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status());
975 } 1004 }
976 1005
977 TEST_F(ServiceWorkerFailToStartTest, Timeout) { 1006 TEST_P(ServiceWorkerFailToStartTest, Timeout) {
978 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value 1007 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
979 1008
980 // Start starting the worker. 1009 // Start starting the worker.
981 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, 1010 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
982 CreateReceiverOnCurrentThread(&status)); 1011 CreateReceiverOnCurrentThread(&status));
983 base::RunLoop().RunUntilIdle(); 1012 base::RunLoop().RunUntilIdle();
984 1013
985 // Callback has not completed yet. 1014 // Callback has not completed yet.
986 EXPECT_EQ(SERVICE_WORKER_ERROR_NETWORK, status); 1015 EXPECT_EQ(SERVICE_WORKER_ERROR_NETWORK, status);
987 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, version_->running_status()); 1016 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, version_->running_status());
988 1017
989 // Simulate timeout. 1018 // Simulate timeout.
990 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); 1019 EXPECT_TRUE(version_->timeout_timer_.IsRunning());
991 version_->start_time_ = 1020 version_->start_time_ =
992 base::TimeTicks::Now() - 1021 base::TimeTicks::Now() -
993 base::TimeDelta::FromMinutes( 1022 base::TimeDelta::FromMinutes(
994 ServiceWorkerVersion::kStartNewWorkerTimeoutMinutes + 1); 1023 ServiceWorkerVersion::kStartNewWorkerTimeoutMinutes + 1);
995 version_->timeout_timer_.user_task().Run(); 1024 version_->timeout_timer_.user_task().Run();
996 base::RunLoop().RunUntilIdle(); 1025 base::RunLoop().RunUntilIdle();
997 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status); 1026 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status);
998 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); 1027 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status());
999 } 1028 }
1000 1029
1001 // Test that a service worker stalled in stopping will timeout and not get in a 1030 // Test that a service worker stalled in stopping will timeout and not get in a
1002 // sticky error state. 1031 // sticky error state.
1003 TEST_F(ServiceWorkerStallInStoppingTest, DetachThenStart) { 1032 TEST_P(ServiceWorkerStallInStoppingTest, DetachThenStart) {
1004 // Start a worker. 1033 // Start a worker.
1005 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 1034 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
1006 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, 1035 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
1007 CreateReceiverOnCurrentThread(&status)); 1036 CreateReceiverOnCurrentThread(&status));
1008 base::RunLoop().RunUntilIdle(); 1037 base::RunLoop().RunUntilIdle();
1009 EXPECT_EQ(SERVICE_WORKER_OK, status); 1038 EXPECT_EQ(SERVICE_WORKER_OK, status);
1010 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 1039 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
1011 1040
1012 // Try to stop the worker. 1041 // Try to stop the worker.
1013 status = SERVICE_WORKER_ERROR_FAILED; 1042 status = SERVICE_WORKER_ERROR_FAILED;
(...skipping 27 matching lines...) Expand all
1041 1070
1042 // The timeout interval should be reset to normal. 1071 // The timeout interval should be reset to normal.
1043 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); 1072 EXPECT_TRUE(version_->timeout_timer_.IsRunning());
1044 EXPECT_EQ(base::TimeDelta::FromSeconds( 1073 EXPECT_EQ(base::TimeDelta::FromSeconds(
1045 ServiceWorkerVersion::kTimeoutTimerDelaySeconds), 1074 ServiceWorkerVersion::kTimeoutTimerDelaySeconds),
1046 version_->timeout_timer_.GetCurrentDelay()); 1075 version_->timeout_timer_.GetCurrentDelay());
1047 } 1076 }
1048 1077
1049 // Test that a service worker stalled in stopping with a start worker 1078 // Test that a service worker stalled in stopping with a start worker
1050 // request queued up will timeout and restart. 1079 // request queued up will timeout and restart.
1051 TEST_F(ServiceWorkerStallInStoppingTest, DetachThenRestart) { 1080 TEST_P(ServiceWorkerStallInStoppingTest, DetachThenRestart) {
1052 // Start a worker. 1081 // Start a worker.
1053 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 1082 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
1054 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, 1083 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
1055 CreateReceiverOnCurrentThread(&status)); 1084 CreateReceiverOnCurrentThread(&status));
1056 base::RunLoop().RunUntilIdle(); 1085 base::RunLoop().RunUntilIdle();
1057 EXPECT_EQ(SERVICE_WORKER_OK, status); 1086 EXPECT_EQ(SERVICE_WORKER_OK, status);
1058 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 1087 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
1059 1088
1060 // Try to stop the worker. 1089 // Try to stop the worker.
1061 status = SERVICE_WORKER_ERROR_FAILED; 1090 status = SERVICE_WORKER_ERROR_FAILED;
(...skipping 11 matching lines...) Expand all
1073 base::TimeTicks::Now() - 1102 base::TimeTicks::Now() -
1074 base::TimeDelta::FromSeconds( 1103 base::TimeDelta::FromSeconds(
1075 ServiceWorkerVersion::kStopWorkerTimeoutSeconds + 1); 1104 ServiceWorkerVersion::kStopWorkerTimeoutSeconds + 1);
1076 version_->timeout_timer_.user_task().Run(); 1105 version_->timeout_timer_.user_task().Run();
1077 base::RunLoop().RunUntilIdle(); 1106 base::RunLoop().RunUntilIdle();
1078 EXPECT_EQ(SERVICE_WORKER_OK, status); 1107 EXPECT_EQ(SERVICE_WORKER_OK, status);
1079 EXPECT_EQ(SERVICE_WORKER_OK, start_status); 1108 EXPECT_EQ(SERVICE_WORKER_OK, start_status);
1080 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 1109 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
1081 } 1110 }
1082 1111
1083 TEST_F(ServiceWorkerVersionTest, RegisterForeignFetchScopes) { 1112 TEST_P(ServiceWorkerVersionTestP, RegisterForeignFetchScopes) {
1084 version_->SetStatus(ServiceWorkerVersion::INSTALLING); 1113 version_->SetStatus(ServiceWorkerVersion::INSTALLING);
1085 // Start a worker. 1114 // Start a worker.
1086 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 1115 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
1087 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, 1116 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
1088 CreateReceiverOnCurrentThread(&status)); 1117 CreateReceiverOnCurrentThread(&status));
1089 base::RunLoop().RunUntilIdle(); 1118 base::RunLoop().RunUntilIdle();
1090 EXPECT_EQ(SERVICE_WORKER_OK, status); 1119 EXPECT_EQ(SERVICE_WORKER_OK, status);
1091 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 1120 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
1092 EXPECT_EQ(0, helper_->mock_render_process_host()->bad_msg_count()); 1121 EXPECT_EQ(0, helper_->mock_render_process_host()->bad_msg_count());
1093 1122
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1149 version_->OnRegisterForeignFetchScopes(valid_scopes, valid_origin_list); 1178 version_->OnRegisterForeignFetchScopes(valid_scopes, valid_origin_list);
1150 base::RunLoop().RunUntilIdle(); 1179 base::RunLoop().RunUntilIdle();
1151 EXPECT_EQ(4, helper_->mock_render_process_host()->bad_msg_count()); 1180 EXPECT_EQ(4, helper_->mock_render_process_host()->bad_msg_count());
1152 EXPECT_EQ(2u, version_->foreign_fetch_scopes_.size()); 1181 EXPECT_EQ(2u, version_->foreign_fetch_scopes_.size());
1153 EXPECT_EQ(valid_scope_1, version_->foreign_fetch_scopes_[0]); 1182 EXPECT_EQ(valid_scope_1, version_->foreign_fetch_scopes_[0]);
1154 EXPECT_EQ(valid_scope_2, version_->foreign_fetch_scopes_[1]); 1183 EXPECT_EQ(valid_scope_2, version_->foreign_fetch_scopes_[1]);
1155 EXPECT_EQ(1u, version_->foreign_fetch_origins_.size()); 1184 EXPECT_EQ(1u, version_->foreign_fetch_origins_.size());
1156 EXPECT_EQ(valid_origin, version_->foreign_fetch_origins_[0]); 1185 EXPECT_EQ(valid_origin, version_->foreign_fetch_origins_[0]);
1157 } 1186 }
1158 1187
1159 TEST_F(ServiceWorkerVersionTest, RendererCrashDuringEvent) { 1188 TEST_P(ServiceWorkerVersionTestP, RendererCrashDuringEvent) {
1160 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value 1189 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
1161 1190
1162 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 1191 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
1163 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, 1192 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC,
1164 CreateReceiverOnCurrentThread(&status)); 1193 CreateReceiverOnCurrentThread(&status));
1165 base::RunLoop().RunUntilIdle(); 1194 base::RunLoop().RunUntilIdle();
1166 EXPECT_EQ(SERVICE_WORKER_OK, status); 1195 EXPECT_EQ(SERVICE_WORKER_OK, status);
1167 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 1196 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
1168 1197
1169 int request_id = 1198 int request_id =
(...skipping 14 matching lines...) Expand all
1184 1213
1185 // Callback completed. 1214 // Callback completed.
1186 EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED, status); 1215 EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED, status);
1187 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); 1216 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status());
1188 1217
1189 // Request already failed, calling finsh should return false. 1218 // Request already failed, calling finsh should return false.
1190 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */, 1219 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */,
1191 base::Time::Now())); 1220 base::Time::Now()));
1192 } 1221 }
1193 1222
1194 TEST_F(ServiceWorkerVersionWithMojoTest, MojoService) { 1223 TEST_P(ServiceWorkerVersionWithMojoTest, MojoService) {
1195 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value 1224 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
1196 1225
1197 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 1226 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
1198 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, 1227 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC,
1199 CreateReceiverOnCurrentThread(&status)); 1228 CreateReceiverOnCurrentThread(&status));
1200 base::RunLoop().RunUntilIdle(); 1229 base::RunLoop().RunUntilIdle();
1201 EXPECT_EQ(SERVICE_WORKER_OK, status); 1230 EXPECT_EQ(SERVICE_WORKER_OK, status);
1202 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 1231 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
1203 1232
1204 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner); 1233 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
1205 int request_id = version_->StartRequest( 1234 int request_id = version_->StartRequest(
1206 ServiceWorkerMetrics::EventType::SYNC, 1235 ServiceWorkerMetrics::EventType::SYNC,
1207 CreateReceiverOnCurrentThread(&status, runner->QuitClosure())); 1236 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
1208 base::WeakPtr<mojom::TestService> service = 1237 base::WeakPtr<mojom::TestService> service =
1209 version_->GetMojoServiceForRequest<mojom::TestService>(request_id); 1238 version_->GetMojoServiceForRequest<mojom::TestService>(request_id);
1210 service->DoSomething(runner->QuitClosure()); 1239 service->DoSomething(runner->QuitClosure());
1211 runner->Run(); 1240 runner->Run();
1212 1241
1213 // Mojo service does exist in worker, so error callback should not have been 1242 // Mojo service does exist in worker, so error callback should not have been
1214 // called and FinishRequest should return true. 1243 // called and FinishRequest should return true.
1215 EXPECT_EQ(SERVICE_WORKER_OK, status); 1244 EXPECT_EQ(SERVICE_WORKER_OK, status);
1216 EXPECT_TRUE(version_->FinishRequest(request_id, true /* was_handled */, 1245 EXPECT_TRUE(version_->FinishRequest(request_id, true /* was_handled */,
1217 base::Time::Now())); 1246 base::Time::Now()));
1218 } 1247 }
1219 1248
1220 TEST_F(ServiceWorkerVersionTest, NonExistentMojoService) { 1249 TEST_P(ServiceWorkerVersionTestP, NonExistentMojoService) {
1221 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value 1250 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
1222 1251
1223 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 1252 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
1224 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, 1253 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC,
1225 CreateReceiverOnCurrentThread(&status)); 1254 CreateReceiverOnCurrentThread(&status));
1226 base::RunLoop().RunUntilIdle(); 1255 base::RunLoop().RunUntilIdle();
1227 EXPECT_EQ(SERVICE_WORKER_OK, status); 1256 EXPECT_EQ(SERVICE_WORKER_OK, status);
1228 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 1257 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
1229 1258
1230 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner); 1259 scoped_refptr<MessageLoopRunner> runner(new MessageLoopRunner);
1231 int request_id = version_->StartRequest( 1260 int request_id = version_->StartRequest(
1232 ServiceWorkerMetrics::EventType::SYNC, 1261 ServiceWorkerMetrics::EventType::SYNC,
1233 CreateReceiverOnCurrentThread(&status, runner->QuitClosure())); 1262 CreateReceiverOnCurrentThread(&status, runner->QuitClosure()));
1234 base::WeakPtr<mojom::TestService> service = 1263 base::WeakPtr<mojom::TestService> service =
1235 version_->GetMojoServiceForRequest<mojom::TestService>(request_id); 1264 version_->GetMojoServiceForRequest<mojom::TestService>(request_id);
1236 service->DoSomething(runner->QuitClosure()); 1265 service->DoSomething(runner->QuitClosure());
1237 runner->Run(); 1266 runner->Run();
1238 1267
1239 // Mojo service doesn't exist in worker, so error callback should have been 1268 // Mojo service doesn't exist in worker, so error callback should have been
1240 // called and FinishRequest should return false. 1269 // called and FinishRequest should return false.
1241 EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED, status); 1270 EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED, status);
1242 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */, 1271 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */,
1243 base::Time::Now())); 1272 base::Time::Now()));
1244 } 1273 }
1245 1274
1246 TEST_F(ServiceWorkerVersionTest, DispatchEvent) { 1275 TEST_P(ServiceWorkerVersionTestP, DispatchEvent) {
1247 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value 1276 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
1248 1277
1249 // Activate and start worker. 1278 // Activate and start worker.
1250 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 1279 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
1251 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, 1280 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC,
1252 CreateReceiverOnCurrentThread(&status)); 1281 CreateReceiverOnCurrentThread(&status));
1253 base::RunLoop().RunUntilIdle(); 1282 base::RunLoop().RunUntilIdle();
1254 EXPECT_EQ(SERVICE_WORKER_OK, status); 1283 EXPECT_EQ(SERVICE_WORKER_OK, status);
1255 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 1284 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
1256 1285
(...skipping 25 matching lines...) Expand all
1282 EXPECT_EQ(request_id, received_request_id); 1311 EXPECT_EQ(request_id, received_request_id);
1283 EXPECT_EQ(reply, received_data); 1312 EXPECT_EQ(reply, received_data);
1284 1313
1285 // Should not have timed out, so error callback should not have been 1314 // Should not have timed out, so error callback should not have been
1286 // called and FinishRequest should return true. 1315 // called and FinishRequest should return true.
1287 EXPECT_EQ(SERVICE_WORKER_OK, status); 1316 EXPECT_EQ(SERVICE_WORKER_OK, status);
1288 EXPECT_TRUE(version_->FinishRequest(request_id, true /* was_handled */, 1317 EXPECT_TRUE(version_->FinishRequest(request_id, true /* was_handled */,
1289 base::Time::Now())); 1318 base::Time::Now()));
1290 } 1319 }
1291 1320
1292 TEST_F(ServiceWorkerFailToStartTest, FailingWorkerUsesNewRendererProcess) { 1321 TEST_P(ServiceWorkerFailToStartTest, FailingWorkerUsesNewRendererProcess) {
1293 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; 1322 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE;
1294 1323
1295 helper_->SimulateAddProcessToPattern(pattern_, 1324 helper_->SimulateAddProcessToPattern(pattern_,
1296 helper_->new_render_process_id()); 1325 helper_->new_render_process_id());
1297 ServiceWorkerContextCore* context = helper_->context(); 1326 ServiceWorkerContextCore* context = helper_->context();
1298 int64_t id = version_->version_id(); 1327 int64_t id = version_->version_id();
1299 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 1328 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
1300 1329
1301 // Start once. It should choose the "existing process". 1330 // Start once. It should choose the "existing process".
1302 set_start_mode(MessageReceiverDisallowStart::StartMode::SUCCEED); 1331 set_start_mode(MessageReceiverDisallowStart::StartMode::SUCCEED);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1341 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, 1370 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
1342 CreateReceiverOnCurrentThread(&status)); 1371 CreateReceiverOnCurrentThread(&status));
1343 base::RunLoop().RunUntilIdle(); 1372 base::RunLoop().RunUntilIdle();
1344 EXPECT_EQ(SERVICE_WORKER_OK, status); 1373 EXPECT_EQ(SERVICE_WORKER_OK, status);
1345 EXPECT_EQ(helper_->mock_render_process_id(), 1374 EXPECT_EQ(helper_->mock_render_process_id(),
1346 version_->embedded_worker()->process_id()); 1375 version_->embedded_worker()->process_id());
1347 version_->StopWorker(CreateReceiverOnCurrentThread(&status)); 1376 version_->StopWorker(CreateReceiverOnCurrentThread(&status));
1348 base::RunLoop().RunUntilIdle(); 1377 base::RunLoop().RunUntilIdle();
1349 } 1378 }
1350 1379
1351 TEST_F(ServiceWorkerFailToStartTest, RestartStalledWorker) { 1380 TEST_P(ServiceWorkerFailToStartTest, RestartStalledWorker) {
1352 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_MAX_VALUE; 1381 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_MAX_VALUE;
1353 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_MAX_VALUE; 1382 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_MAX_VALUE;
1354 version_->StartWorker(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME, 1383 version_->StartWorker(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME,
1355 CreateReceiverOnCurrentThread(&status1)); 1384 CreateReceiverOnCurrentThread(&status1));
1356 base::RunLoop().RunUntilIdle(); 1385 base::RunLoop().RunUntilIdle();
1357 // The default start mode is StartMode::STALL. So the callback of StartWorker 1386 // The default start mode is StartMode::STALL. So the callback of StartWorker
1358 // is not called yet. 1387 // is not called yet.
1359 EXPECT_EQ(SERVICE_WORKER_ERROR_MAX_VALUE, status1); 1388 EXPECT_EQ(SERVICE_WORKER_ERROR_MAX_VALUE, status1);
1360 1389
1361 // Set StartMode::SUCCEED. So the next start worker will be successful. 1390 // Set StartMode::SUCCEED. So the next start worker will be successful.
1362 set_start_mode(MessageReceiverDisallowStart::StartMode::SUCCEED); 1391 set_start_mode(MessageReceiverDisallowStart::StartMode::SUCCEED);
1363 1392
1364 // StartWorker message will be sent again because OnStopped is called before 1393 // StartWorker message will be sent again because OnStopped is called before
1365 // OnStarted. 1394 // OnStarted.
1366 version_->StopWorker(CreateReceiverOnCurrentThread(&status2)); 1395 version_->StopWorker(CreateReceiverOnCurrentThread(&status2));
1367 base::RunLoop().RunUntilIdle(); 1396 base::RunLoop().RunUntilIdle();
1368 1397
1369 EXPECT_EQ(SERVICE_WORKER_OK, status1); 1398 EXPECT_EQ(SERVICE_WORKER_OK, status1);
1370 EXPECT_EQ(SERVICE_WORKER_OK, status2); 1399 EXPECT_EQ(SERVICE_WORKER_OK, status2);
1371 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 1400 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
1372 } 1401 }
1373 1402
1374 TEST_F(ServiceWorkerVersionTest, DispatchConcurrentEvent) { 1403 TEST_P(ServiceWorkerVersionTestP, DispatchConcurrentEvent) {
1375 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value 1404 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value
1376 1405
1377 // Activate and start worker. 1406 // Activate and start worker.
1378 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 1407 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
1379 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, 1408 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC,
1380 CreateReceiverOnCurrentThread(&status)); 1409 CreateReceiverOnCurrentThread(&status));
1381 base::RunLoop().RunUntilIdle(); 1410 base::RunLoop().RunUntilIdle();
1382 EXPECT_EQ(SERVICE_WORKER_OK, status); 1411 EXPECT_EQ(SERVICE_WORKER_OK, status);
1383 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 1412 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
1384 1413
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1443 1472
1444 // Verify correct response was received. 1473 // Verify correct response was received.
1445 EXPECT_EQ(request_id1, received_request_id1); 1474 EXPECT_EQ(request_id1, received_request_id1);
1446 EXPECT_EQ(request_id2, received_request_id2); 1475 EXPECT_EQ(request_id2, received_request_id2);
1447 EXPECT_EQ(reply1, received_data1); 1476 EXPECT_EQ(reply1, received_data1);
1448 EXPECT_EQ(SERVICE_WORKER_OK, status1); 1477 EXPECT_EQ(SERVICE_WORKER_OK, status1);
1449 EXPECT_TRUE(version_->FinishRequest(request_id1, true /* was_handled */, 1478 EXPECT_TRUE(version_->FinishRequest(request_id1, true /* was_handled */,
1450 base::Time::Now())); 1479 base::Time::Now()));
1451 } 1480 }
1452 1481
1453 TEST_F(ServiceWorkerVersionTest, DispatchSimpleEvent_Completed) { 1482 TEST_P(ServiceWorkerVersionTestP, DispatchSimpleEvent_Completed) {
1454 ServiceWorkerStatusCode status = 1483 ServiceWorkerStatusCode status =
1455 SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value 1484 SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value
1456 1485
1457 // Activate and start worker. 1486 // Activate and start worker.
1458 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 1487 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
1459 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, 1488 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC,
1460 CreateReceiverOnCurrentThread(&status)); 1489 CreateReceiverOnCurrentThread(&status));
1461 base::RunLoop().RunUntilIdle(); 1490 base::RunLoop().RunUntilIdle();
1462 EXPECT_EQ(SERVICE_WORKER_OK, status); 1491 EXPECT_EQ(SERVICE_WORKER_OK, status);
1463 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 1492 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
(...skipping 16 matching lines...) Expand all
1480 // Simulate sending reply to event. 1509 // Simulate sending reply to event.
1481 helper_->SimulateSendSimpleEventResult( 1510 helper_->SimulateSendSimpleEventResult(
1482 version_->embedded_worker()->embedded_worker_id(), request_id, 1511 version_->embedded_worker()->embedded_worker_id(), request_id,
1483 blink::WebServiceWorkerEventResultCompleted, base::Time::Now()); 1512 blink::WebServiceWorkerEventResultCompleted, base::Time::Now());
1484 runner->Run(); 1513 runner->Run();
1485 1514
1486 // Verify callback was called with correct status. 1515 // Verify callback was called with correct status.
1487 EXPECT_EQ(SERVICE_WORKER_OK, status); 1516 EXPECT_EQ(SERVICE_WORKER_OK, status);
1488 } 1517 }
1489 1518
1490 TEST_F(ServiceWorkerVersionTest, DispatchSimpleEvent_Rejected) { 1519 TEST_P(ServiceWorkerVersionTestP, DispatchSimpleEvent_Rejected) {
1491 ServiceWorkerStatusCode status = 1520 ServiceWorkerStatusCode status =
1492 SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value 1521 SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value
1493 1522
1494 // Activate and start worker. 1523 // Activate and start worker.
1495 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 1524 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
1496 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, 1525 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC,
1497 CreateReceiverOnCurrentThread(&status)); 1526 CreateReceiverOnCurrentThread(&status));
1498 base::RunLoop().RunUntilIdle(); 1527 base::RunLoop().RunUntilIdle();
1499 EXPECT_EQ(SERVICE_WORKER_OK, status); 1528 EXPECT_EQ(SERVICE_WORKER_OK, status);
1500 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 1529 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
(...skipping 16 matching lines...) Expand all
1517 // Simulate sending reply to event. 1546 // Simulate sending reply to event.
1518 helper_->SimulateSendSimpleEventResult( 1547 helper_->SimulateSendSimpleEventResult(
1519 version_->embedded_worker()->embedded_worker_id(), request_id, 1548 version_->embedded_worker()->embedded_worker_id(), request_id,
1520 blink::WebServiceWorkerEventResultRejected, base::Time::Now()); 1549 blink::WebServiceWorkerEventResultRejected, base::Time::Now());
1521 runner->Run(); 1550 runner->Run();
1522 1551
1523 // Verify callback was called with correct status. 1552 // Verify callback was called with correct status.
1524 EXPECT_EQ(SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, status); 1553 EXPECT_EQ(SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, status);
1525 } 1554 }
1526 1555
1527 TEST_F(ServiceWorkerVersionTest, DispatchEvent_MultipleResponse) { 1556 TEST_P(ServiceWorkerVersionTestP, DispatchEvent_MultipleResponse) {
1528 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; 1557 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE;
1529 1558
1530 // Activate and start worker. 1559 // Activate and start worker.
1531 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 1560 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
1532 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, 1561 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN,
1533 CreateReceiverOnCurrentThread(&status)); 1562 CreateReceiverOnCurrentThread(&status));
1534 base::RunLoop().RunUntilIdle(); 1563 base::RunLoop().RunUntilIdle();
1535 EXPECT_EQ(SERVICE_WORKER_OK, status); 1564 EXPECT_EQ(SERVICE_WORKER_OK, status);
1536 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); 1565 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status());
1537 1566
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1586 1615
1587 // Should not have timed out, so error callback should not have been 1616 // Should not have timed out, so error callback should not have been
1588 // called and FinishRequest should return true. 1617 // called and FinishRequest should return true.
1589 EXPECT_EQ(SERVICE_WORKER_OK, status); 1618 EXPECT_EQ(SERVICE_WORKER_OK, status);
1590 EXPECT_TRUE(version_->FinishRequest(request_id1, true /* was_handled */, 1619 EXPECT_TRUE(version_->FinishRequest(request_id1, true /* was_handled */,
1591 base::Time::Now())); 1620 base::Time::Now()));
1592 EXPECT_TRUE(version_->FinishRequest(request_id2, true /* was_handled */, 1621 EXPECT_TRUE(version_->FinishRequest(request_id2, true /* was_handled */,
1593 base::Time::Now())); 1622 base::Time::Now()));
1594 } 1623 }
1595 1624
1596 class ServiceWorkerNavigationHintUMATest : public ServiceWorkerVersionTest { 1625 class ServiceWorkerNavigationHintUMATest : public ServiceWorkerVersionTestP {
1597 protected: 1626 protected:
1598 ServiceWorkerNavigationHintUMATest() : ServiceWorkerVersionTest() {} 1627 ServiceWorkerNavigationHintUMATest() : ServiceWorkerVersionTestP() {}
1599 1628
1600 void StartWorker(ServiceWorkerMetrics::EventType purpose) { 1629 void StartWorker(ServiceWorkerMetrics::EventType purpose) {
1601 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; 1630 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE;
1602 version_->StartWorker(purpose, CreateReceiverOnCurrentThread(&status)); 1631 version_->StartWorker(purpose, CreateReceiverOnCurrentThread(&status));
1603 base::RunLoop().RunUntilIdle(); 1632 base::RunLoop().RunUntilIdle();
1604 EXPECT_EQ(SERVICE_WORKER_OK, status); 1633 EXPECT_EQ(SERVICE_WORKER_OK, status);
1605 } 1634 }
1606 1635
1607 void StopWorker() { 1636 void StopWorker() {
1608 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; 1637 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
1669 1698
1670 const char ServiceWorkerNavigationHintUMATest::kNavigationHintPrecision[] = 1699 const char ServiceWorkerNavigationHintUMATest::kNavigationHintPrecision[] =
1671 "ServiceWorker.NavigationHintPrecision"; 1700 "ServiceWorker.NavigationHintPrecision";
1672 const char ServiceWorkerNavigationHintUMATest::kLinkMouseDown[] = 1701 const char ServiceWorkerNavigationHintUMATest::kLinkMouseDown[] =
1673 "ServiceWorker.NavigationHintPrecision.LINK_MOUSE_DOWN"; 1702 "ServiceWorker.NavigationHintPrecision.LINK_MOUSE_DOWN";
1674 const char ServiceWorkerNavigationHintUMATest::kLinkTapUnconfirmed[] = 1703 const char ServiceWorkerNavigationHintUMATest::kLinkTapUnconfirmed[] =
1675 "ServiceWorker.NavigationHintPrecision.LINK_TAP_UNCONFIRMED"; 1704 "ServiceWorker.NavigationHintPrecision.LINK_TAP_UNCONFIRMED";
1676 const char ServiceWorkerNavigationHintUMATest::kLinkTapDown[] = 1705 const char ServiceWorkerNavigationHintUMATest::kLinkTapDown[] =
1677 "ServiceWorker.NavigationHintPrecision.LINK_TAP_DOWN"; 1706 "ServiceWorker.NavigationHintPrecision.LINK_TAP_DOWN";
1678 1707
1679 TEST_F(ServiceWorkerNavigationHintUMATest, LinkMouseDown) { 1708 TEST_P(ServiceWorkerNavigationHintUMATest, LinkMouseDown) {
1680 SimpleNavigationHintTest( 1709 SimpleNavigationHintTest(
1681 ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_MOUSE_DOWN, 1710 ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_MOUSE_DOWN,
1682 kLinkMouseDown, {kLinkTapUnconfirmed, kLinkTapDown}); 1711 kLinkMouseDown, {kLinkTapUnconfirmed, kLinkTapDown});
1683 } 1712 }
1684 1713
1685 TEST_F(ServiceWorkerNavigationHintUMATest, LinkTapUnconfirmed) { 1714 TEST_P(ServiceWorkerNavigationHintUMATest, LinkTapUnconfirmed) {
1686 SimpleNavigationHintTest( 1715 SimpleNavigationHintTest(
1687 ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_TAP_UNCONFIRMED, 1716 ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_TAP_UNCONFIRMED,
1688 kLinkTapUnconfirmed, {kLinkMouseDown, kLinkTapDown}); 1717 kLinkTapUnconfirmed, {kLinkMouseDown, kLinkTapDown});
1689 } 1718 }
1690 1719
1691 TEST_F(ServiceWorkerNavigationHintUMATest, LinkTapDown) { 1720 TEST_P(ServiceWorkerNavigationHintUMATest, LinkTapDown) {
1692 SimpleNavigationHintTest( 1721 SimpleNavigationHintTest(
1693 ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_TAP_DOWN, 1722 ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_TAP_DOWN,
1694 kLinkTapDown, {kLinkMouseDown, kLinkTapUnconfirmed}); 1723 kLinkTapDown, {kLinkMouseDown, kLinkTapUnconfirmed});
1695 } 1724 }
1696 1725
1697 TEST_F(ServiceWorkerNavigationHintUMATest, ConcurrentStart) { 1726 TEST_P(ServiceWorkerNavigationHintUMATest, ConcurrentStart) {
1698 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); 1727 version_->SetStatus(ServiceWorkerVersion::ACTIVATED);
1699 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_MAX_VALUE; 1728 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_MAX_VALUE;
1700 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_MAX_VALUE; 1729 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_MAX_VALUE;
1701 version_->StartWorker(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME, 1730 version_->StartWorker(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME,
1702 CreateReceiverOnCurrentThread(&status1)); 1731 CreateReceiverOnCurrentThread(&status1));
1703 version_->StartWorker( 1732 version_->StartWorker(
1704 ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_MOUSE_DOWN, 1733 ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_MOUSE_DOWN,
1705 CreateReceiverOnCurrentThread(&status2)); 1734 CreateReceiverOnCurrentThread(&status2));
1706 base::RunLoop().RunUntilIdle(); 1735 base::RunLoop().RunUntilIdle();
1707 EXPECT_EQ(SERVICE_WORKER_OK, status1); 1736 EXPECT_EQ(SERVICE_WORKER_OK, status1);
(...skipping 13 matching lines...) Expand all
1721 EXPECT_EQ(SERVICE_WORKER_OK, status1); 1750 EXPECT_EQ(SERVICE_WORKER_OK, status1);
1722 EXPECT_EQ(SERVICE_WORKER_OK, status2); 1751 EXPECT_EQ(SERVICE_WORKER_OK, status2);
1723 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME); 1752 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME);
1724 StopWorker(); 1753 StopWorker();
1725 // The first purpose of starting worker was a navigation hint. 1754 // The first purpose of starting worker was a navigation hint.
1726 histogram_tester_.ExpectTotalCount(kNavigationHintPrecision, 1); 1755 histogram_tester_.ExpectTotalCount(kNavigationHintPrecision, 1);
1727 histogram_tester_.ExpectBucketCount(kNavigationHintPrecision, true, 1); 1756 histogram_tester_.ExpectBucketCount(kNavigationHintPrecision, true, 1);
1728 histogram_tester_.ExpectBucketCount(kNavigationHintPrecision, false, 0); 1757 histogram_tester_.ExpectBucketCount(kNavigationHintPrecision, false, 0);
1729 } 1758 }
1730 1759
1731 TEST_F(ServiceWorkerNavigationHintUMATest, StartWhileStopping) { 1760 TEST_P(ServiceWorkerNavigationHintUMATest, StartWhileStopping) {
1732 StartWorker(ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_MOUSE_DOWN); 1761 StartWorker(ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_MOUSE_DOWN);
1733 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; 1762 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE;
1734 version_->StopWorker(CreateReceiverOnCurrentThread(&status)); 1763 version_->StopWorker(CreateReceiverOnCurrentThread(&status));
1735 EXPECT_EQ(EmbeddedWorkerStatus::STOPPING, version_->running_status()); 1764 EXPECT_EQ(EmbeddedWorkerStatus::STOPPING, version_->running_status());
1736 histogram_tester_.ExpectTotalCount(kLinkMouseDown, 0); 1765 histogram_tester_.ExpectTotalCount(kLinkMouseDown, 0);
1737 1766
1738 StartWorker(ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_TAP_DOWN); 1767 StartWorker(ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_TAP_DOWN);
1739 // The UMA for kLinkMouseDown must be recorded while restarting. 1768 // The UMA for kLinkMouseDown must be recorded while restarting.
1740 histogram_tester_.ExpectTotalCount(kLinkMouseDown, 1); 1769 histogram_tester_.ExpectTotalCount(kLinkMouseDown, 1);
1741 histogram_tester_.ExpectTotalCount(kLinkTapDown, 0); 1770 histogram_tester_.ExpectTotalCount(kLinkTapDown, 0);
1742 EXPECT_EQ(SERVICE_WORKER_OK, status); 1771 EXPECT_EQ(SERVICE_WORKER_OK, status);
1743 StopWorker(); 1772 StopWorker();
1744 // The UMA for kLinkMouseDown must be recorded when the worker stopped. 1773 // The UMA for kLinkMouseDown must be recorded when the worker stopped.
1745 histogram_tester_.ExpectTotalCount(kLinkMouseDown, 1); 1774 histogram_tester_.ExpectTotalCount(kLinkMouseDown, 1);
1746 histogram_tester_.ExpectTotalCount(kLinkTapDown, 1); 1775 histogram_tester_.ExpectTotalCount(kLinkTapDown, 1);
1747 } 1776 }
1748 1777
1778 INSTANTIATE_TEST_CASE_P(ServiceWorkerVersionTestP,
1779 ServiceWorkerVersionTestP,
1780 testing::Bool());
1781 INSTANTIATE_TEST_CASE_P(ServiceWorkerFailToStartTest,
1782 ServiceWorkerFailToStartTest,
1783 testing::Bool());
1784 INSTANTIATE_TEST_CASE_P(ServiceWorkerNavigationHintUMATest,
1785 ServiceWorkerNavigationHintUMATest,
1786 testing::Bool());
1787 INSTANTIATE_TEST_CASE_P(ServiceWorkerStallInStoppingTest,
1788 ServiceWorkerStallInStoppingTest,
1789 testing::Bool());
1790 INSTANTIATE_TEST_CASE_P(ServiceWorkerVersionWithMojoTest,
1791 ServiceWorkerVersionWithMojoTest,
1792 testing::Bool());
1793
1749 } // namespace content 1794 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/service_worker/service_worker_version.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698