| OLD | NEW |
| 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 282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 293 TestBrowserThreadBundle thread_bundle_; | 293 TestBrowserThreadBundle thread_bundle_; |
| 294 std::unique_ptr<MessageReceiver> helper_; | 294 std::unique_ptr<MessageReceiver> helper_; |
| 295 scoped_refptr<ServiceWorkerRegistration> registration_; | 295 scoped_refptr<ServiceWorkerRegistration> registration_; |
| 296 scoped_refptr<ServiceWorkerVersion> version_; | 296 scoped_refptr<ServiceWorkerVersion> version_; |
| 297 GURL pattern_; | 297 GURL pattern_; |
| 298 | 298 |
| 299 private: | 299 private: |
| 300 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerVersionTest); | 300 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerVersionTest); |
| 301 }; | 301 }; |
| 302 | 302 |
| 303 class ServiceWorkerVersionTestP | |
| 304 : public MojoServiceWorkerTestP<ServiceWorkerVersionTest> {}; | |
| 305 | |
| 306 class MessageReceiverDisallowStart : public MessageReceiver { | 303 class MessageReceiverDisallowStart : public MessageReceiver { |
| 307 public: | 304 public: |
| 308 MessageReceiverDisallowStart(bool is_mojo_enabled) | 305 MessageReceiverDisallowStart() : MessageReceiver() {} |
| 309 : MessageReceiver(), is_mojo_enabled_(is_mojo_enabled) {} | |
| 310 ~MessageReceiverDisallowStart() override {} | 306 ~MessageReceiverDisallowStart() override {} |
| 311 | 307 |
| 312 enum class StartMode { STALL, FAIL, SUCCEED }; | 308 enum class StartMode { STALL, FAIL, SUCCEED }; |
| 313 | 309 |
| 314 void OnStartWorker(int embedded_worker_id, | 310 void OnStartWorker(int embedded_worker_id, |
| 315 int64_t service_worker_version_id, | 311 int64_t service_worker_version_id, |
| 316 const GURL& scope, | 312 const GURL& scope, |
| 317 const GURL& script_url, | 313 const GURL& script_url, |
| 318 bool pause_after_download) override { | 314 bool pause_after_download) override { |
| 319 switch (mode_) { | 315 switch (mode_) { |
| 320 case StartMode::STALL: | 316 case StartMode::STALL: |
| 321 break; // Do nothing. | 317 break; // Do nothing. |
| 322 case StartMode::FAIL: | 318 case StartMode::FAIL: |
| 323 if (is_mojo_enabled_) { | 319 ASSERT_EQ(current_mock_instance_index_ + 1, |
| 324 ASSERT_EQ(current_mock_instance_index_ + 1, | 320 mock_instance_clients()->size()); |
| 325 mock_instance_clients()->size()); | 321 // Remove the connection by peer |
| 326 // Remove the connection by peer | 322 mock_instance_clients()->at(current_mock_instance_index_).reset(); |
| 327 mock_instance_clients()->at(current_mock_instance_index_).reset(); | |
| 328 } else { | |
| 329 OnStopWorker(embedded_worker_id); | |
| 330 } | |
| 331 break; | 323 break; |
| 332 case StartMode::SUCCEED: | 324 case StartMode::SUCCEED: |
| 333 MessageReceiver::OnStartWorker(embedded_worker_id, | 325 MessageReceiver::OnStartWorker(embedded_worker_id, |
| 334 service_worker_version_id, scope, | 326 service_worker_version_id, scope, |
| 335 script_url, pause_after_download); | 327 script_url, pause_after_download); |
| 336 break; | 328 break; |
| 337 } | 329 } |
| 338 current_mock_instance_index_++; | 330 current_mock_instance_index_++; |
| 339 } | 331 } |
| 340 | 332 |
| 341 void set_start_mode(StartMode mode) { mode_ = mode; } | 333 void set_start_mode(StartMode mode) { mode_ = mode; } |
| 342 | 334 |
| 343 private: | 335 private: |
| 344 const bool is_mojo_enabled_; | |
| 345 uint32_t current_mock_instance_index_ = 0; | 336 uint32_t current_mock_instance_index_ = 0; |
| 346 StartMode mode_ = StartMode::STALL; | 337 StartMode mode_ = StartMode::STALL; |
| 347 DISALLOW_COPY_AND_ASSIGN(MessageReceiverDisallowStart); | 338 DISALLOW_COPY_AND_ASSIGN(MessageReceiverDisallowStart); |
| 348 }; | 339 }; |
| 349 | 340 |
| 350 class ServiceWorkerFailToStartTest : public ServiceWorkerVersionTestP { | 341 class ServiceWorkerFailToStartTest : public ServiceWorkerVersionTest { |
| 351 protected: | 342 protected: |
| 352 ServiceWorkerFailToStartTest() : ServiceWorkerVersionTestP() {} | 343 ServiceWorkerFailToStartTest() : ServiceWorkerVersionTest() {} |
| 353 | 344 |
| 354 void set_start_mode(MessageReceiverDisallowStart::StartMode mode) { | 345 void set_start_mode(MessageReceiverDisallowStart::StartMode mode) { |
| 355 MessageReceiverDisallowStart* helper = | 346 MessageReceiverDisallowStart* helper = |
| 356 static_cast<MessageReceiverDisallowStart*>(helper_.get()); | 347 static_cast<MessageReceiverDisallowStart*>(helper_.get()); |
| 357 helper->set_start_mode(mode); | 348 helper->set_start_mode(mode); |
| 358 } | 349 } |
| 359 | 350 |
| 360 std::unique_ptr<MessageReceiver> GetMessageReceiver() override { | 351 std::unique_ptr<MessageReceiver> GetMessageReceiver() override { |
| 361 return base::MakeUnique<MessageReceiverDisallowStart>(is_mojo_enabled()); | 352 return base::MakeUnique<MessageReceiverDisallowStart>(); |
| 362 } | 353 } |
| 363 | 354 |
| 364 private: | 355 private: |
| 365 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerFailToStartTest); | 356 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerFailToStartTest); |
| 366 }; | 357 }; |
| 367 | 358 |
| 368 class NoOpStopWorkerEmbeddedWorkerInstanceClient | 359 class NoOpStopWorkerEmbeddedWorkerInstanceClient |
| 369 : public EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient { | 360 : public EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient { |
| 370 public: | 361 public: |
| 371 explicit NoOpStopWorkerEmbeddedWorkerInstanceClient( | 362 explicit NoOpStopWorkerEmbeddedWorkerInstanceClient( |
| (...skipping 26 matching lines...) Expand all Loading... |
| 398 ~MessageReceiverDisallowStop() override {} | 389 ~MessageReceiverDisallowStop() override {} |
| 399 | 390 |
| 400 void OnStopWorker(int embedded_worker_id) override { | 391 void OnStopWorker(int embedded_worker_id) override { |
| 401 // Do nothing. | 392 // Do nothing. |
| 402 } | 393 } |
| 403 | 394 |
| 404 private: | 395 private: |
| 405 DISALLOW_COPY_AND_ASSIGN(MessageReceiverDisallowStop); | 396 DISALLOW_COPY_AND_ASSIGN(MessageReceiverDisallowStop); |
| 406 }; | 397 }; |
| 407 | 398 |
| 408 class ServiceWorkerStallInStoppingTest : public ServiceWorkerVersionTestP { | 399 class ServiceWorkerStallInStoppingTest : public ServiceWorkerVersionTest { |
| 409 protected: | 400 protected: |
| 410 ServiceWorkerStallInStoppingTest() : ServiceWorkerVersionTestP() {} | 401 ServiceWorkerStallInStoppingTest() : ServiceWorkerVersionTest() {} |
| 411 | 402 |
| 412 std::unique_ptr<MessageReceiver> GetMessageReceiver() override { | 403 std::unique_ptr<MessageReceiver> GetMessageReceiver() override { |
| 413 return base::MakeUnique<MessageReceiverDisallowStop>(); | 404 return base::MakeUnique<MessageReceiverDisallowStop>(); |
| 414 } | 405 } |
| 415 | 406 |
| 416 private: | 407 private: |
| 417 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerStallInStoppingTest); | 408 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerStallInStoppingTest); |
| 418 }; | 409 }; |
| 419 | 410 |
| 420 TEST_P(ServiceWorkerVersionTestP, ConcurrentStartAndStop) { | 411 TEST_F(ServiceWorkerVersionTest, ConcurrentStartAndStop) { |
| 421 // Call StartWorker() multiple times. | 412 // Call StartWorker() multiple times. |
| 422 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_FAILED; | 413 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_FAILED; |
| 423 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_FAILED; | 414 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_FAILED; |
| 424 ServiceWorkerStatusCode status3 = SERVICE_WORKER_ERROR_FAILED; | 415 ServiceWorkerStatusCode status3 = SERVICE_WORKER_ERROR_FAILED; |
| 425 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, | 416 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, |
| 426 CreateReceiverOnCurrentThread(&status1)); | 417 CreateReceiverOnCurrentThread(&status1)); |
| 427 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, | 418 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, |
| 428 CreateReceiverOnCurrentThread(&status2)); | 419 CreateReceiverOnCurrentThread(&status2)); |
| 429 | 420 |
| 430 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, version_->running_status()); | 421 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, version_->running_status()); |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 478 EXPECT_EQ(EmbeddedWorkerStatus::STOPPING, version_->running_status()); | 469 EXPECT_EQ(EmbeddedWorkerStatus::STOPPING, version_->running_status()); |
| 479 base::RunLoop().RunUntilIdle(); | 470 base::RunLoop().RunUntilIdle(); |
| 480 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | 471 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); |
| 481 | 472 |
| 482 // All should just succeed. | 473 // All should just succeed. |
| 483 EXPECT_EQ(SERVICE_WORKER_OK, status1); | 474 EXPECT_EQ(SERVICE_WORKER_OK, status1); |
| 484 EXPECT_EQ(SERVICE_WORKER_OK, status2); | 475 EXPECT_EQ(SERVICE_WORKER_OK, status2); |
| 485 EXPECT_EQ(SERVICE_WORKER_OK, status3); | 476 EXPECT_EQ(SERVICE_WORKER_OK, status3); |
| 486 } | 477 } |
| 487 | 478 |
| 488 TEST_P(ServiceWorkerVersionTestP, DispatchEventToStoppedWorker) { | 479 TEST_F(ServiceWorkerVersionTest, DispatchEventToStoppedWorker) { |
| 489 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); | 480 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); |
| 490 | 481 |
| 491 // Dispatch an event without starting the worker. | 482 // Dispatch an event without starting the worker. |
| 492 version_->SetStatus(ServiceWorkerVersion::INSTALLING); | 483 version_->SetStatus(ServiceWorkerVersion::INSTALLING); |
| 493 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::INSTALL); | 484 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::INSTALL); |
| 494 | 485 |
| 495 // The worker should be now started. | 486 // The worker should be now started. |
| 496 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | 487 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); |
| 497 | 488 |
| 498 // Stop the worker, and then dispatch an event immediately after that. | 489 // Stop the worker, and then dispatch an event immediately after that. |
| 499 ServiceWorkerStatusCode stop_status = SERVICE_WORKER_ERROR_FAILED; | 490 ServiceWorkerStatusCode stop_status = SERVICE_WORKER_ERROR_FAILED; |
| 500 version_->StopWorker(CreateReceiverOnCurrentThread(&stop_status)); | 491 version_->StopWorker(CreateReceiverOnCurrentThread(&stop_status)); |
| 501 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::INSTALL); | 492 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::INSTALL); |
| 502 EXPECT_EQ(SERVICE_WORKER_OK, stop_status); | 493 EXPECT_EQ(SERVICE_WORKER_OK, stop_status); |
| 503 | 494 |
| 504 // The worker should be now started again. | 495 // The worker should be now started again. |
| 505 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | 496 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); |
| 506 } | 497 } |
| 507 | 498 |
| 508 TEST_P(ServiceWorkerVersionTestP, StartUnregisteredButStillLiveWorker) { | 499 TEST_F(ServiceWorkerVersionTest, StartUnregisteredButStillLiveWorker) { |
| 509 // Start the worker. | 500 // Start the worker. |
| 510 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; | 501 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
| 511 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, | 502 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, |
| 512 CreateReceiverOnCurrentThread(&status)); | 503 CreateReceiverOnCurrentThread(&status)); |
| 513 base::RunLoop().RunUntilIdle(); | 504 base::RunLoop().RunUntilIdle(); |
| 514 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | 505 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); |
| 515 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 506 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 516 | 507 |
| 517 // Delete the registration. | 508 // Delete the registration. |
| 518 status = SERVICE_WORKER_ERROR_FAILED; | 509 status = SERVICE_WORKER_ERROR_FAILED; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 532 EXPECT_EQ(SERVICE_WORKER_OK, stop_status); | 523 EXPECT_EQ(SERVICE_WORKER_OK, stop_status); |
| 533 | 524 |
| 534 // Dispatch an event on the unregistered and stopped but still live worker. | 525 // Dispatch an event on the unregistered and stopped but still live worker. |
| 535 status = SERVICE_WORKER_ERROR_FAILED; | 526 status = SERVICE_WORKER_ERROR_FAILED; |
| 536 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME); | 527 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME); |
| 537 | 528 |
| 538 // The worker should be now started again. | 529 // The worker should be now started again. |
| 539 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | 530 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); |
| 540 } | 531 } |
| 541 | 532 |
| 542 TEST_P(ServiceWorkerVersionTestP, ReceiveMessageFromWorker) { | 533 TEST_F(ServiceWorkerVersionTest, ReceiveMessageFromWorker) { |
| 543 // Start worker. | 534 // Start worker. |
| 544 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; | 535 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
| 545 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, | 536 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, |
| 546 CreateReceiverOnCurrentThread(&status)); | 537 CreateReceiverOnCurrentThread(&status)); |
| 547 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, version_->running_status()); | 538 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, version_->running_status()); |
| 548 base::RunLoop().RunUntilIdle(); | 539 base::RunLoop().RunUntilIdle(); |
| 549 EXPECT_EQ(SERVICE_WORKER_OK, status); | 540 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 550 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | 541 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); |
| 551 | 542 |
| 552 MessageReceiverFromWorker receiver(version_->embedded_worker()); | 543 MessageReceiverFromWorker receiver(version_->embedded_worker()); |
| 553 | 544 |
| 554 // Simulate sending some dummy values from the worker. | 545 // Simulate sending some dummy values from the worker. |
| 555 helper_->SimulateSendValueToBrowser( | 546 helper_->SimulateSendValueToBrowser( |
| 556 version_->embedded_worker()->embedded_worker_id(), 555); | 547 version_->embedded_worker()->embedded_worker_id(), 555); |
| 557 helper_->SimulateSendValueToBrowser( | 548 helper_->SimulateSendValueToBrowser( |
| 558 version_->embedded_worker()->embedded_worker_id(), 777); | 549 version_->embedded_worker()->embedded_worker_id(), 777); |
| 559 | 550 |
| 560 // Verify the receiver received the values. | 551 // Verify the receiver received the values. |
| 561 ASSERT_EQ(2U, receiver.received_values().size()); | 552 ASSERT_EQ(2U, receiver.received_values().size()); |
| 562 EXPECT_EQ(555, receiver.received_values()[0]); | 553 EXPECT_EQ(555, receiver.received_values()[0]); |
| 563 EXPECT_EQ(777, receiver.received_values()[1]); | 554 EXPECT_EQ(777, receiver.received_values()[1]); |
| 564 } | 555 } |
| 565 | 556 |
| 566 TEST_P(ServiceWorkerVersionTestP, InstallAndWaitCompletion) { | 557 TEST_F(ServiceWorkerVersionTest, InstallAndWaitCompletion) { |
| 567 version_->SetStatus(ServiceWorkerVersion::INSTALLING); | 558 version_->SetStatus(ServiceWorkerVersion::INSTALLING); |
| 568 | 559 |
| 569 // Wait for the completion. | 560 // Wait for the completion. |
| 570 bool status_change_called = false; | 561 bool status_change_called = false; |
| 571 version_->RegisterStatusChangeCallback( | 562 version_->RegisterStatusChangeCallback( |
| 572 base::Bind(&VerifyCalled, &status_change_called)); | 563 base::Bind(&VerifyCalled, &status_change_called)); |
| 573 | 564 |
| 574 // Dispatch an install event. | 565 // Dispatch an install event. |
| 575 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::INSTALL); | 566 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::INSTALL); |
| 576 | 567 |
| 577 // Version's status must not have changed during installation. | 568 // Version's status must not have changed during installation. |
| 578 EXPECT_FALSE(status_change_called); | 569 EXPECT_FALSE(status_change_called); |
| 579 EXPECT_EQ(ServiceWorkerVersion::INSTALLING, version_->status()); | 570 EXPECT_EQ(ServiceWorkerVersion::INSTALLING, version_->status()); |
| 580 } | 571 } |
| 581 | 572 |
| 582 TEST_P(ServiceWorkerVersionTestP, ActivateAndWaitCompletion) { | 573 TEST_F(ServiceWorkerVersionTest, ActivateAndWaitCompletion) { |
| 583 // TODO(mek): This test (and the one above for the install event) made more | 574 // TODO(mek): This test (and the one above for the install event) made more |
| 584 // sense back when ServiceWorkerVersion was responsible for updating the | 575 // sense back when ServiceWorkerVersion was responsible for updating the |
| 585 // status. Now a better version of this test should probably be added to | 576 // status. Now a better version of this test should probably be added to |
| 586 // ServiceWorkerRegistrationTest instead. | 577 // ServiceWorkerRegistrationTest instead. |
| 587 | 578 |
| 588 version_->SetStatus(ServiceWorkerVersion::ACTIVATING); | 579 version_->SetStatus(ServiceWorkerVersion::ACTIVATING); |
| 589 | 580 |
| 590 // Wait for the completion. | 581 // Wait for the completion. |
| 591 bool status_change_called = false; | 582 bool status_change_called = false; |
| 592 version_->RegisterStatusChangeCallback( | 583 version_->RegisterStatusChangeCallback( |
| 593 base::Bind(&VerifyCalled, &status_change_called)); | 584 base::Bind(&VerifyCalled, &status_change_called)); |
| 594 | 585 |
| 595 // Dispatch an activate event. | 586 // Dispatch an activate event. |
| 596 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::ACTIVATE); | 587 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::ACTIVATE); |
| 597 | 588 |
| 598 // Version's status must not have changed during activation. | 589 // Version's status must not have changed during activation. |
| 599 EXPECT_FALSE(status_change_called); | 590 EXPECT_FALSE(status_change_called); |
| 600 EXPECT_EQ(ServiceWorkerVersion::ACTIVATING, version_->status()); | 591 EXPECT_EQ(ServiceWorkerVersion::ACTIVATING, version_->status()); |
| 601 } | 592 } |
| 602 | 593 |
| 603 TEST_P(ServiceWorkerVersionTestP, RepeatedlyObserveStatusChanges) { | 594 TEST_F(ServiceWorkerVersionTest, RepeatedlyObserveStatusChanges) { |
| 604 EXPECT_EQ(ServiceWorkerVersion::NEW, version_->status()); | 595 EXPECT_EQ(ServiceWorkerVersion::NEW, version_->status()); |
| 605 | 596 |
| 606 // Repeatedly observe status changes (the callback re-registers itself). | 597 // Repeatedly observe status changes (the callback re-registers itself). |
| 607 std::vector<ServiceWorkerVersion::Status> statuses; | 598 std::vector<ServiceWorkerVersion::Status> statuses; |
| 608 version_->RegisterStatusChangeCallback(base::Bind( | 599 version_->RegisterStatusChangeCallback(base::Bind( |
| 609 &ObserveStatusChanges, base::RetainedRef(version_), &statuses)); | 600 &ObserveStatusChanges, base::RetainedRef(version_), &statuses)); |
| 610 | 601 |
| 611 version_->SetStatus(ServiceWorkerVersion::INSTALLING); | 602 version_->SetStatus(ServiceWorkerVersion::INSTALLING); |
| 612 version_->SetStatus(ServiceWorkerVersion::INSTALLED); | 603 version_->SetStatus(ServiceWorkerVersion::INSTALLED); |
| 613 version_->SetStatus(ServiceWorkerVersion::ACTIVATING); | 604 version_->SetStatus(ServiceWorkerVersion::ACTIVATING); |
| 614 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 605 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 615 version_->SetStatus(ServiceWorkerVersion::REDUNDANT); | 606 version_->SetStatus(ServiceWorkerVersion::REDUNDANT); |
| 616 | 607 |
| 617 // Verify that we could successfully observe repeated status changes. | 608 // Verify that we could successfully observe repeated status changes. |
| 618 ASSERT_EQ(5U, statuses.size()); | 609 ASSERT_EQ(5U, statuses.size()); |
| 619 ASSERT_EQ(ServiceWorkerVersion::INSTALLING, statuses[0]); | 610 ASSERT_EQ(ServiceWorkerVersion::INSTALLING, statuses[0]); |
| 620 ASSERT_EQ(ServiceWorkerVersion::INSTALLED, statuses[1]); | 611 ASSERT_EQ(ServiceWorkerVersion::INSTALLED, statuses[1]); |
| 621 ASSERT_EQ(ServiceWorkerVersion::ACTIVATING, statuses[2]); | 612 ASSERT_EQ(ServiceWorkerVersion::ACTIVATING, statuses[2]); |
| 622 ASSERT_EQ(ServiceWorkerVersion::ACTIVATED, statuses[3]); | 613 ASSERT_EQ(ServiceWorkerVersion::ACTIVATED, statuses[3]); |
| 623 ASSERT_EQ(ServiceWorkerVersion::REDUNDANT, statuses[4]); | 614 ASSERT_EQ(ServiceWorkerVersion::REDUNDANT, statuses[4]); |
| 624 } | 615 } |
| 625 | 616 |
| 626 TEST_P(ServiceWorkerVersionTestP, IdleTimeout) { | 617 TEST_F(ServiceWorkerVersionTest, IdleTimeout) { |
| 627 // Used to reliably test when the idle time gets reset regardless of clock | 618 // Used to reliably test when the idle time gets reset regardless of clock |
| 628 // granularity. | 619 // granularity. |
| 629 const base::TimeDelta kOneSecond = base::TimeDelta::FromSeconds(1); | 620 const base::TimeDelta kOneSecond = base::TimeDelta::FromSeconds(1); |
| 630 | 621 |
| 631 // Verify the timer is not running when version initializes its status. | 622 // Verify the timer is not running when version initializes its status. |
| 632 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 623 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 633 EXPECT_FALSE(version_->timeout_timer_.IsRunning()); | 624 EXPECT_FALSE(version_->timeout_timer_.IsRunning()); |
| 634 | 625 |
| 635 // Verify the timer is running after the worker is started. | 626 // Verify the timer is running after the worker is started. |
| 636 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; | 627 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 681 int request_id = | 672 int request_id = |
| 682 version_->StartRequest(ServiceWorkerMetrics::EventType::SYNC, | 673 version_->StartRequest(ServiceWorkerMetrics::EventType::SYNC, |
| 683 CreateReceiverOnCurrentThread(&status)); | 674 CreateReceiverOnCurrentThread(&status)); |
| 684 EXPECT_TRUE(version_->FinishRequest(request_id, true /* was_handled */, | 675 EXPECT_TRUE(version_->FinishRequest(request_id, true /* was_handled */, |
| 685 base::Time::Now())); | 676 base::Time::Now())); |
| 686 | 677 |
| 687 EXPECT_EQ(SERVICE_WORKER_OK, status); | 678 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 688 EXPECT_LT(idle_time, version_->idle_time_); | 679 EXPECT_LT(idle_time, version_->idle_time_); |
| 689 } | 680 } |
| 690 | 681 |
| 691 TEST_P(ServiceWorkerVersionTestP, SetDevToolsAttached) { | 682 TEST_F(ServiceWorkerVersionTest, SetDevToolsAttached) { |
| 692 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; | 683 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
| 693 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, | 684 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, |
| 694 CreateReceiverOnCurrentThread(&status)); | 685 CreateReceiverOnCurrentThread(&status)); |
| 695 | 686 |
| 696 ASSERT_EQ(EmbeddedWorkerStatus::STARTING, version_->running_status()); | 687 ASSERT_EQ(EmbeddedWorkerStatus::STARTING, version_->running_status()); |
| 697 | 688 |
| 698 ASSERT_TRUE(version_->timeout_timer_.IsRunning()); | 689 ASSERT_TRUE(version_->timeout_timer_.IsRunning()); |
| 699 ASSERT_FALSE(version_->start_time_.is_null()); | 690 ASSERT_FALSE(version_->start_time_.is_null()); |
| 700 ASSERT_FALSE(version_->skip_recording_startup_time_); | 691 ASSERT_FALSE(version_->skip_recording_startup_time_); |
| 701 | 692 |
| 702 // Simulate DevTools is attached. This should deactivate the timer for start | 693 // Simulate DevTools is attached. This should deactivate the timer for start |
| 703 // timeout, but not stop the timer itself. | 694 // timeout, but not stop the timer itself. |
| 704 version_->SetDevToolsAttached(true); | 695 version_->SetDevToolsAttached(true); |
| 705 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); | 696 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); |
| 706 EXPECT_TRUE(version_->start_time_.is_null()); | 697 EXPECT_TRUE(version_->start_time_.is_null()); |
| 707 EXPECT_TRUE(version_->skip_recording_startup_time_); | 698 EXPECT_TRUE(version_->skip_recording_startup_time_); |
| 708 | 699 |
| 709 // Simulate DevTools is detached. This should reactivate the timer for start | 700 // Simulate DevTools is detached. This should reactivate the timer for start |
| 710 // timeout. | 701 // timeout. |
| 711 version_->SetDevToolsAttached(false); | 702 version_->SetDevToolsAttached(false); |
| 712 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); | 703 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); |
| 713 EXPECT_FALSE(version_->start_time_.is_null()); | 704 EXPECT_FALSE(version_->start_time_.is_null()); |
| 714 EXPECT_TRUE(version_->skip_recording_startup_time_); | 705 EXPECT_TRUE(version_->skip_recording_startup_time_); |
| 715 | 706 |
| 716 base::RunLoop().RunUntilIdle(); | 707 base::RunLoop().RunUntilIdle(); |
| 717 EXPECT_EQ(SERVICE_WORKER_OK, status); | 708 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 718 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | 709 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); |
| 719 } | 710 } |
| 720 | 711 |
| 721 TEST_P(ServiceWorkerVersionTestP, StoppingBeforeDestruct) { | 712 TEST_F(ServiceWorkerVersionTest, StoppingBeforeDestruct) { |
| 722 RunningStateListener listener; | 713 RunningStateListener listener; |
| 723 version_->AddListener(&listener); | 714 version_->AddListener(&listener); |
| 724 | 715 |
| 725 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; | 716 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
| 726 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, | 717 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, |
| 727 CreateReceiverOnCurrentThread(&status)); | 718 CreateReceiverOnCurrentThread(&status)); |
| 728 base::RunLoop().RunUntilIdle(); | 719 base::RunLoop().RunUntilIdle(); |
| 729 EXPECT_EQ(SERVICE_WORKER_OK, status); | 720 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 730 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | 721 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); |
| 731 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, listener.last_status); | 722 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, listener.last_status); |
| 732 | 723 |
| 733 version_ = nullptr; | 724 version_ = nullptr; |
| 734 EXPECT_EQ(EmbeddedWorkerStatus::STOPPING, listener.last_status); | 725 EXPECT_EQ(EmbeddedWorkerStatus::STOPPING, listener.last_status); |
| 735 } | 726 } |
| 736 | 727 |
| 737 // Test that update isn't triggered for a non-stale worker. | 728 // Test that update isn't triggered for a non-stale worker. |
| 738 TEST_P(ServiceWorkerVersionTestP, StaleUpdate_FreshWorker) { | 729 TEST_F(ServiceWorkerVersionTest, StaleUpdate_FreshWorker) { |
| 739 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 730 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 740 registration_->SetActiveVersion(version_); | 731 registration_->SetActiveVersion(version_); |
| 741 registration_->set_last_update_check(base::Time::Now()); | 732 registration_->set_last_update_check(base::Time::Now()); |
| 742 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH); | 733 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH); |
| 743 | 734 |
| 744 EXPECT_TRUE(version_->stale_time_.is_null()); | 735 EXPECT_TRUE(version_->stale_time_.is_null()); |
| 745 EXPECT_FALSE(version_->update_timer_.IsRunning()); | 736 EXPECT_FALSE(version_->update_timer_.IsRunning()); |
| 746 } | 737 } |
| 747 | 738 |
| 748 // Test that update isn't triggered for a non-active worker. | 739 // Test that update isn't triggered for a non-active worker. |
| 749 TEST_P(ServiceWorkerVersionTestP, StaleUpdate_NonActiveWorker) { | 740 TEST_F(ServiceWorkerVersionTest, StaleUpdate_NonActiveWorker) { |
| 750 version_->SetStatus(ServiceWorkerVersion::INSTALLING); | 741 version_->SetStatus(ServiceWorkerVersion::INSTALLING); |
| 751 registration_->SetInstallingVersion(version_); | 742 registration_->SetInstallingVersion(version_); |
| 752 registration_->set_last_update_check(GetYesterday()); | 743 registration_->set_last_update_check(GetYesterday()); |
| 753 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::INSTALL); | 744 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::INSTALL); |
| 754 | 745 |
| 755 EXPECT_TRUE(version_->stale_time_.is_null()); | 746 EXPECT_TRUE(version_->stale_time_.is_null()); |
| 756 EXPECT_FALSE(version_->update_timer_.IsRunning()); | 747 EXPECT_FALSE(version_->update_timer_.IsRunning()); |
| 757 } | 748 } |
| 758 | 749 |
| 759 // Test that staleness is detected when starting a worker. | 750 // Test that staleness is detected when starting a worker. |
| 760 TEST_P(ServiceWorkerVersionTestP, StaleUpdate_StartWorker) { | 751 TEST_F(ServiceWorkerVersionTest, StaleUpdate_StartWorker) { |
| 761 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; | 752 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
| 762 | 753 |
| 763 // Starting the worker marks it as stale. | 754 // Starting the worker marks it as stale. |
| 764 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 755 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 765 registration_->SetActiveVersion(version_); | 756 registration_->SetActiveVersion(version_); |
| 766 registration_->set_last_update_check(GetYesterday()); | 757 registration_->set_last_update_check(GetYesterday()); |
| 767 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH); | 758 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH); |
| 768 EXPECT_FALSE(version_->stale_time_.is_null()); | 759 EXPECT_FALSE(version_->stale_time_.is_null()); |
| 769 EXPECT_FALSE(version_->update_timer_.IsRunning()); | 760 EXPECT_FALSE(version_->update_timer_.IsRunning()); |
| 770 | 761 |
| 771 // Update is actually scheduled after the worker stops. | 762 // Update is actually scheduled after the worker stops. |
| 772 version_->StopWorker(CreateReceiverOnCurrentThread(&status)); | 763 version_->StopWorker(CreateReceiverOnCurrentThread(&status)); |
| 773 base::RunLoop().RunUntilIdle(); | 764 base::RunLoop().RunUntilIdle(); |
| 774 EXPECT_EQ(SERVICE_WORKER_OK, status); | 765 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 775 EXPECT_TRUE(version_->stale_time_.is_null()); | 766 EXPECT_TRUE(version_->stale_time_.is_null()); |
| 776 EXPECT_TRUE(version_->update_timer_.IsRunning()); | 767 EXPECT_TRUE(version_->update_timer_.IsRunning()); |
| 777 } | 768 } |
| 778 | 769 |
| 779 // Test that staleness is detected on a running worker. | 770 // Test that staleness is detected on a running worker. |
| 780 TEST_P(ServiceWorkerVersionTestP, StaleUpdate_RunningWorker) { | 771 TEST_F(ServiceWorkerVersionTest, StaleUpdate_RunningWorker) { |
| 781 // Start a fresh worker. | 772 // Start a fresh worker. |
| 782 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 773 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 783 registration_->SetActiveVersion(version_); | 774 registration_->SetActiveVersion(version_); |
| 784 registration_->set_last_update_check(base::Time::Now()); | 775 registration_->set_last_update_check(base::Time::Now()); |
| 785 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH); | 776 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH); |
| 786 EXPECT_TRUE(version_->stale_time_.is_null()); | 777 EXPECT_TRUE(version_->stale_time_.is_null()); |
| 787 | 778 |
| 788 // Simulate it running for a day. It will be marked stale. | 779 // Simulate it running for a day. It will be marked stale. |
| 789 registration_->set_last_update_check(GetYesterday()); | 780 registration_->set_last_update_check(GetYesterday()); |
| 790 version_->OnTimeoutTimer(); | 781 version_->OnTimeoutTimer(); |
| 791 EXPECT_FALSE(version_->stale_time_.is_null()); | 782 EXPECT_FALSE(version_->stale_time_.is_null()); |
| 792 EXPECT_FALSE(version_->update_timer_.IsRunning()); | 783 EXPECT_FALSE(version_->update_timer_.IsRunning()); |
| 793 | 784 |
| 794 // Simulate it running for past the wait threshold. The update will be | 785 // Simulate it running for past the wait threshold. The update will be |
| 795 // scheduled. | 786 // scheduled. |
| 796 version_->stale_time_ = | 787 version_->stale_time_ = |
| 797 base::TimeTicks::Now() - | 788 base::TimeTicks::Now() - |
| 798 base::TimeDelta::FromMinutes( | 789 base::TimeDelta::FromMinutes( |
| 799 ServiceWorkerVersion::kStartNewWorkerTimeoutMinutes + 1); | 790 ServiceWorkerVersion::kStartNewWorkerTimeoutMinutes + 1); |
| 800 version_->OnTimeoutTimer(); | 791 version_->OnTimeoutTimer(); |
| 801 EXPECT_TRUE(version_->stale_time_.is_null()); | 792 EXPECT_TRUE(version_->stale_time_.is_null()); |
| 802 EXPECT_TRUE(version_->update_timer_.IsRunning()); | 793 EXPECT_TRUE(version_->update_timer_.IsRunning()); |
| 803 } | 794 } |
| 804 | 795 |
| 805 // Test that a stream of events doesn't restart the timer. | 796 // Test that a stream of events doesn't restart the timer. |
| 806 TEST_P(ServiceWorkerVersionTestP, StaleUpdate_DoNotDeferTimer) { | 797 TEST_F(ServiceWorkerVersionTest, StaleUpdate_DoNotDeferTimer) { |
| 807 // Make a stale worker. | 798 // Make a stale worker. |
| 808 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 799 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 809 registration_->SetActiveVersion(version_); | 800 registration_->SetActiveVersion(version_); |
| 810 registration_->set_last_update_check(GetYesterday()); | 801 registration_->set_last_update_check(GetYesterday()); |
| 811 base::TimeTicks stale_time = | 802 base::TimeTicks stale_time = |
| 812 base::TimeTicks::Now() - | 803 base::TimeTicks::Now() - |
| 813 base::TimeDelta::FromMinutes( | 804 base::TimeDelta::FromMinutes( |
| 814 ServiceWorkerVersion::kStartNewWorkerTimeoutMinutes + 1); | 805 ServiceWorkerVersion::kStartNewWorkerTimeoutMinutes + 1); |
| 815 version_->stale_time_ = stale_time; | 806 version_->stale_time_ = stale_time; |
| 816 | 807 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 832 // Update timer is not deferred. | 823 // Update timer is not deferred. |
| 833 base::TimeTicks run_time = version_->update_timer_.desired_run_time(); | 824 base::TimeTicks run_time = version_->update_timer_.desired_run_time(); |
| 834 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH); | 825 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH); |
| 835 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH); | 826 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH); |
| 836 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH); | 827 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::PUSH); |
| 837 base::RunLoop().RunUntilIdle(); | 828 base::RunLoop().RunUntilIdle(); |
| 838 EXPECT_TRUE(version_->stale_time_.is_null()); | 829 EXPECT_TRUE(version_->stale_time_.is_null()); |
| 839 EXPECT_EQ(run_time, version_->update_timer_.desired_run_time()); | 830 EXPECT_EQ(run_time, version_->update_timer_.desired_run_time()); |
| 840 } | 831 } |
| 841 | 832 |
| 842 TEST_P(ServiceWorkerVersionTestP, RequestTimeout) { | 833 TEST_F(ServiceWorkerVersionTest, RequestTimeout) { |
| 843 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value | 834 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value |
| 844 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 835 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 845 | 836 |
| 846 version_->StartWorker(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME, | 837 version_->StartWorker(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME, |
| 847 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); | 838 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
| 848 base::RunLoop().RunUntilIdle(); | 839 base::RunLoop().RunUntilIdle(); |
| 849 | 840 |
| 850 // Create a request. | 841 // Create a request. |
| 851 int request_id = | 842 int request_id = |
| 852 version_->StartRequest(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME, | 843 version_->StartRequest(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME, |
| 853 CreateReceiverOnCurrentThread(&status)); | 844 CreateReceiverOnCurrentThread(&status)); |
| 854 base::RunLoop().RunUntilIdle(); | 845 base::RunLoop().RunUntilIdle(); |
| 855 | 846 |
| 856 // Callback has not completed yet. | 847 // Callback has not completed yet. |
| 857 EXPECT_EQ(SERVICE_WORKER_ERROR_NETWORK, status); | 848 EXPECT_EQ(SERVICE_WORKER_ERROR_NETWORK, status); |
| 858 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | 849 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); |
| 859 | 850 |
| 860 // Simulate timeout. | 851 // Simulate timeout. |
| 861 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); | 852 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); |
| 862 version_->SetAllRequestExpirations(base::TimeTicks::Now()); | 853 version_->SetAllRequestExpirations(base::TimeTicks::Now()); |
| 863 version_->timeout_timer_.user_task().Run(); | 854 version_->timeout_timer_.user_task().Run(); |
| 864 base::RunLoop().RunUntilIdle(); | 855 base::RunLoop().RunUntilIdle(); |
| 865 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status); | 856 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status); |
| 866 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); | 857 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); |
| 867 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */, | 858 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */, |
| 868 base::Time::Now())); | 859 base::Time::Now())); |
| 869 } | 860 } |
| 870 | 861 |
| 871 TEST_P(ServiceWorkerVersionTestP, RequestNowTimeout) { | 862 TEST_F(ServiceWorkerVersionTest, RequestNowTimeout) { |
| 872 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value | 863 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value |
| 873 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 864 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 874 | 865 |
| 875 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, | 866 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, |
| 876 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); | 867 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
| 877 base::RunLoop().RunUntilIdle(); | 868 base::RunLoop().RunUntilIdle(); |
| 878 | 869 |
| 879 // Create a request that should expire Now(). | 870 // Create a request that should expire Now(). |
| 880 int request_id = version_->StartRequestWithCustomTimeout( | 871 int request_id = version_->StartRequestWithCustomTimeout( |
| 881 ServiceWorkerMetrics::EventType::SYNC, | 872 ServiceWorkerMetrics::EventType::SYNC, |
| 882 CreateReceiverOnCurrentThread(&status), base::TimeDelta(), | 873 CreateReceiverOnCurrentThread(&status), base::TimeDelta(), |
| 883 ServiceWorkerVersion::CONTINUE_ON_TIMEOUT); | 874 ServiceWorkerVersion::CONTINUE_ON_TIMEOUT); |
| 884 | 875 |
| 885 base::RunLoop().RunUntilIdle(); | 876 base::RunLoop().RunUntilIdle(); |
| 886 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); | 877 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); |
| 887 version_->timeout_timer_.user_task().Run(); | 878 version_->timeout_timer_.user_task().Run(); |
| 888 base::RunLoop().RunUntilIdle(); | 879 base::RunLoop().RunUntilIdle(); |
| 889 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status); | 880 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status); |
| 890 | 881 |
| 891 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */, | 882 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */, |
| 892 base::Time::Now())); | 883 base::Time::Now())); |
| 893 | 884 |
| 894 // CONTINUE_ON_TIMEOUT timeouts don't stop the service worker. | 885 // CONTINUE_ON_TIMEOUT timeouts don't stop the service worker. |
| 895 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | 886 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); |
| 896 } | 887 } |
| 897 | 888 |
| 898 TEST_P(ServiceWorkerVersionTestP, RequestNowTimeoutKill) { | 889 TEST_F(ServiceWorkerVersionTest, RequestNowTimeoutKill) { |
| 899 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value | 890 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value |
| 900 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 891 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 901 | 892 |
| 902 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, | 893 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, |
| 903 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); | 894 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
| 904 base::RunLoop().RunUntilIdle(); | 895 base::RunLoop().RunUntilIdle(); |
| 905 | 896 |
| 906 // Create a request that should expire Now(). | 897 // Create a request that should expire Now(). |
| 907 int request_id = version_->StartRequestWithCustomTimeout( | 898 int request_id = version_->StartRequestWithCustomTimeout( |
| 908 ServiceWorkerMetrics::EventType::SYNC, | 899 ServiceWorkerMetrics::EventType::SYNC, |
| 909 CreateReceiverOnCurrentThread(&status), base::TimeDelta(), | 900 CreateReceiverOnCurrentThread(&status), base::TimeDelta(), |
| 910 ServiceWorkerVersion::KILL_ON_TIMEOUT); | 901 ServiceWorkerVersion::KILL_ON_TIMEOUT); |
| 911 | 902 |
| 912 base::RunLoop().RunUntilIdle(); | 903 base::RunLoop().RunUntilIdle(); |
| 913 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); | 904 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); |
| 914 version_->timeout_timer_.user_task().Run(); | 905 version_->timeout_timer_.user_task().Run(); |
| 915 base::RunLoop().RunUntilIdle(); | 906 base::RunLoop().RunUntilIdle(); |
| 916 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status); | 907 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status); |
| 917 | 908 |
| 918 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */, | 909 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */, |
| 919 base::Time::Now())); | 910 base::Time::Now())); |
| 920 | 911 |
| 921 // KILL_ON_TIMEOUT timeouts should stop the service worker. | 912 // KILL_ON_TIMEOUT timeouts should stop the service worker. |
| 922 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); | 913 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); |
| 923 } | 914 } |
| 924 | 915 |
| 925 TEST_P(ServiceWorkerVersionTestP, RequestCustomizedTimeout) { | 916 TEST_F(ServiceWorkerVersionTest, RequestCustomizedTimeout) { |
| 926 ServiceWorkerStatusCode first_status = | 917 ServiceWorkerStatusCode first_status = |
| 927 SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value | 918 SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value |
| 928 ServiceWorkerStatusCode second_status = | 919 ServiceWorkerStatusCode second_status = |
| 929 SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value | 920 SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value |
| 930 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 921 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 931 | 922 |
| 932 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, | 923 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, |
| 933 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); | 924 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
| 934 base::RunLoop().RunUntilIdle(); | 925 base::RunLoop().RunUntilIdle(); |
| 935 | 926 |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 977 EXPECT_FALSE(version_->FinishRequest(first_request_id, true /* was_handled */, | 968 EXPECT_FALSE(version_->FinishRequest(first_request_id, true /* was_handled */, |
| 978 base::Time::Now())); | 969 base::Time::Now())); |
| 979 | 970 |
| 980 EXPECT_FALSE(version_->FinishRequest( | 971 EXPECT_FALSE(version_->FinishRequest( |
| 981 second_request_id, true /* was_handled */, base::Time::Now())); | 972 second_request_id, true /* was_handled */, base::Time::Now())); |
| 982 | 973 |
| 983 // KILL_ON_TIMEOUT timeouts should stop the service worker. | 974 // KILL_ON_TIMEOUT timeouts should stop the service worker. |
| 984 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); | 975 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); |
| 985 } | 976 } |
| 986 | 977 |
| 987 TEST_P(ServiceWorkerVersionTestP, MixedRequestTimeouts) { | 978 TEST_F(ServiceWorkerVersionTest, MixedRequestTimeouts) { |
| 988 ServiceWorkerStatusCode sync_status = | 979 ServiceWorkerStatusCode sync_status = |
| 989 SERVICE_WORKER_ERROR_NETWORK; // dummy value | 980 SERVICE_WORKER_ERROR_NETWORK; // dummy value |
| 990 ServiceWorkerStatusCode fetch_status = | 981 ServiceWorkerStatusCode fetch_status = |
| 991 SERVICE_WORKER_ERROR_NETWORK; // dummy value | 982 SERVICE_WORKER_ERROR_NETWORK; // dummy value |
| 992 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 983 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 993 | 984 |
| 994 version_->StartWorker(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME, | 985 version_->StartWorker(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME, |
| 995 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); | 986 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
| 996 base::RunLoop().RunUntilIdle(); | 987 base::RunLoop().RunUntilIdle(); |
| 997 | 988 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1028 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, fetch_status); | 1019 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, fetch_status); |
| 1029 | 1020 |
| 1030 // Fetch request should no longer exist. | 1021 // Fetch request should no longer exist. |
| 1031 EXPECT_FALSE(version_->FinishRequest(fetch_request_id, true /* was_handled */, | 1022 EXPECT_FALSE(version_->FinishRequest(fetch_request_id, true /* was_handled */, |
| 1032 base::Time::Now())); | 1023 base::Time::Now())); |
| 1033 | 1024 |
| 1034 // Other timeouts do stop the service worker. | 1025 // Other timeouts do stop the service worker. |
| 1035 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); | 1026 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); |
| 1036 } | 1027 } |
| 1037 | 1028 |
| 1038 TEST_P(ServiceWorkerFailToStartTest, RendererCrash) { | 1029 TEST_F(ServiceWorkerFailToStartTest, RendererCrash) { |
| 1039 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value | 1030 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value |
| 1040 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, | 1031 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, |
| 1041 CreateReceiverOnCurrentThread(&status)); | 1032 CreateReceiverOnCurrentThread(&status)); |
| 1042 base::RunLoop().RunUntilIdle(); | 1033 base::RunLoop().RunUntilIdle(); |
| 1043 | 1034 |
| 1044 // Callback has not completed yet. | 1035 // Callback has not completed yet. |
| 1045 EXPECT_EQ(SERVICE_WORKER_ERROR_NETWORK, status); | 1036 EXPECT_EQ(SERVICE_WORKER_ERROR_NETWORK, status); |
| 1046 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, version_->running_status()); | 1037 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, version_->running_status()); |
| 1047 | 1038 |
| 1048 // Simulate renderer crash: do what | 1039 // Simulate renderer crash: do what |
| 1049 // ServiceWorkerDispatcherHost::OnFilterRemoved does. | 1040 // ServiceWorkerDispatcherHost::OnFilterRemoved does. |
| 1050 int process_id = helper_->mock_render_process_id(); | 1041 int process_id = helper_->mock_render_process_id(); |
| 1051 helper_->context()->RemoveAllProviderHostsForProcess(process_id); | 1042 helper_->context()->RemoveAllProviderHostsForProcess(process_id); |
| 1052 helper_->context()->embedded_worker_registry()->RemoveChildProcessSender( | 1043 helper_->context()->embedded_worker_registry()->RemoveChildProcessSender( |
| 1053 process_id); | 1044 process_id); |
| 1054 base::RunLoop().RunUntilIdle(); | 1045 base::RunLoop().RunUntilIdle(); |
| 1055 | 1046 |
| 1056 // Callback completed. | 1047 // Callback completed. |
| 1057 EXPECT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, status); | 1048 EXPECT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, status); |
| 1058 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); | 1049 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); |
| 1059 } | 1050 } |
| 1060 | 1051 |
| 1061 TEST_P(ServiceWorkerFailToStartTest, Timeout) { | 1052 TEST_F(ServiceWorkerFailToStartTest, Timeout) { |
| 1062 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value | 1053 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value |
| 1063 | 1054 |
| 1064 // Start starting the worker. | 1055 // Start starting the worker. |
| 1065 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, | 1056 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, |
| 1066 CreateReceiverOnCurrentThread(&status)); | 1057 CreateReceiverOnCurrentThread(&status)); |
| 1067 base::RunLoop().RunUntilIdle(); | 1058 base::RunLoop().RunUntilIdle(); |
| 1068 | 1059 |
| 1069 // Callback has not completed yet. | 1060 // Callback has not completed yet. |
| 1070 EXPECT_EQ(SERVICE_WORKER_ERROR_NETWORK, status); | 1061 EXPECT_EQ(SERVICE_WORKER_ERROR_NETWORK, status); |
| 1071 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, version_->running_status()); | 1062 EXPECT_EQ(EmbeddedWorkerStatus::STARTING, version_->running_status()); |
| 1072 | 1063 |
| 1073 // Simulate timeout. | 1064 // Simulate timeout. |
| 1074 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); | 1065 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); |
| 1075 version_->start_time_ = | 1066 version_->start_time_ = |
| 1076 base::TimeTicks::Now() - | 1067 base::TimeTicks::Now() - |
| 1077 base::TimeDelta::FromMinutes( | 1068 base::TimeDelta::FromMinutes( |
| 1078 ServiceWorkerVersion::kStartNewWorkerTimeoutMinutes + 1); | 1069 ServiceWorkerVersion::kStartNewWorkerTimeoutMinutes + 1); |
| 1079 version_->timeout_timer_.user_task().Run(); | 1070 version_->timeout_timer_.user_task().Run(); |
| 1080 base::RunLoop().RunUntilIdle(); | 1071 base::RunLoop().RunUntilIdle(); |
| 1081 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status); | 1072 EXPECT_EQ(SERVICE_WORKER_ERROR_TIMEOUT, status); |
| 1082 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); | 1073 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); |
| 1083 } | 1074 } |
| 1084 | 1075 |
| 1085 // Test that a service worker stalled in stopping will timeout and not get in a | 1076 // Test that a service worker stalled in stopping will timeout and not get in a |
| 1086 // sticky error state. | 1077 // sticky error state. |
| 1087 TEST_P(ServiceWorkerStallInStoppingTest, DetachThenStart) { | 1078 TEST_F(ServiceWorkerStallInStoppingTest, DetachThenStart) { |
| 1088 // Start a worker. | 1079 // Start a worker. |
| 1089 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; | 1080 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
| 1090 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, | 1081 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, |
| 1091 CreateReceiverOnCurrentThread(&status)); | 1082 CreateReceiverOnCurrentThread(&status)); |
| 1092 base::RunLoop().RunUntilIdle(); | 1083 base::RunLoop().RunUntilIdle(); |
| 1093 EXPECT_EQ(SERVICE_WORKER_OK, status); | 1084 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 1094 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | 1085 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); |
| 1095 | 1086 |
| 1096 // Try to stop the worker. | 1087 // Try to stop the worker. |
| 1097 status = SERVICE_WORKER_ERROR_FAILED; | 1088 status = SERVICE_WORKER_ERROR_FAILED; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1125 | 1116 |
| 1126 // The timeout interval should be reset to normal. | 1117 // The timeout interval should be reset to normal. |
| 1127 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); | 1118 EXPECT_TRUE(version_->timeout_timer_.IsRunning()); |
| 1128 EXPECT_EQ(base::TimeDelta::FromSeconds( | 1119 EXPECT_EQ(base::TimeDelta::FromSeconds( |
| 1129 ServiceWorkerVersion::kTimeoutTimerDelaySeconds), | 1120 ServiceWorkerVersion::kTimeoutTimerDelaySeconds), |
| 1130 version_->timeout_timer_.GetCurrentDelay()); | 1121 version_->timeout_timer_.GetCurrentDelay()); |
| 1131 } | 1122 } |
| 1132 | 1123 |
| 1133 // Test that a service worker stalled in stopping with a start worker | 1124 // Test that a service worker stalled in stopping with a start worker |
| 1134 // request queued up will timeout and restart. | 1125 // request queued up will timeout and restart. |
| 1135 TEST_P(ServiceWorkerStallInStoppingTest, DetachThenRestart) { | 1126 TEST_F(ServiceWorkerStallInStoppingTest, DetachThenRestart) { |
| 1136 // Start a worker. | 1127 // Start a worker. |
| 1137 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; | 1128 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
| 1138 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, | 1129 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, |
| 1139 CreateReceiverOnCurrentThread(&status)); | 1130 CreateReceiverOnCurrentThread(&status)); |
| 1140 base::RunLoop().RunUntilIdle(); | 1131 base::RunLoop().RunUntilIdle(); |
| 1141 EXPECT_EQ(SERVICE_WORKER_OK, status); | 1132 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 1142 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | 1133 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); |
| 1143 | 1134 |
| 1144 // Try to stop the worker. | 1135 // Try to stop the worker. |
| 1145 status = SERVICE_WORKER_ERROR_FAILED; | 1136 status = SERVICE_WORKER_ERROR_FAILED; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1157 base::TimeTicks::Now() - | 1148 base::TimeTicks::Now() - |
| 1158 base::TimeDelta::FromSeconds( | 1149 base::TimeDelta::FromSeconds( |
| 1159 ServiceWorkerVersion::kStopWorkerTimeoutSeconds + 1); | 1150 ServiceWorkerVersion::kStopWorkerTimeoutSeconds + 1); |
| 1160 version_->timeout_timer_.user_task().Run(); | 1151 version_->timeout_timer_.user_task().Run(); |
| 1161 base::RunLoop().RunUntilIdle(); | 1152 base::RunLoop().RunUntilIdle(); |
| 1162 EXPECT_EQ(SERVICE_WORKER_OK, status); | 1153 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 1163 EXPECT_EQ(SERVICE_WORKER_OK, start_status); | 1154 EXPECT_EQ(SERVICE_WORKER_OK, start_status); |
| 1164 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | 1155 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); |
| 1165 } | 1156 } |
| 1166 | 1157 |
| 1167 TEST_P(ServiceWorkerVersionTestP, RegisterForeignFetchScopes) { | 1158 TEST_F(ServiceWorkerVersionTest, RegisterForeignFetchScopes) { |
| 1168 version_->SetStatus(ServiceWorkerVersion::INSTALLING); | 1159 version_->SetStatus(ServiceWorkerVersion::INSTALLING); |
| 1169 // Start a worker. | 1160 // Start a worker. |
| 1170 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; | 1161 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
| 1171 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, | 1162 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, |
| 1172 CreateReceiverOnCurrentThread(&status)); | 1163 CreateReceiverOnCurrentThread(&status)); |
| 1173 base::RunLoop().RunUntilIdle(); | 1164 base::RunLoop().RunUntilIdle(); |
| 1174 EXPECT_EQ(SERVICE_WORKER_OK, status); | 1165 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 1175 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | 1166 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); |
| 1176 EXPECT_EQ(0, helper_->mock_render_process_host()->bad_msg_count()); | 1167 EXPECT_EQ(0, helper_->mock_render_process_host()->bad_msg_count()); |
| 1177 | 1168 |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1233 version_->OnRegisterForeignFetchScopes(valid_scopes, valid_origin_list); | 1224 version_->OnRegisterForeignFetchScopes(valid_scopes, valid_origin_list); |
| 1234 base::RunLoop().RunUntilIdle(); | 1225 base::RunLoop().RunUntilIdle(); |
| 1235 EXPECT_EQ(4, helper_->mock_render_process_host()->bad_msg_count()); | 1226 EXPECT_EQ(4, helper_->mock_render_process_host()->bad_msg_count()); |
| 1236 EXPECT_EQ(2u, version_->foreign_fetch_scopes_.size()); | 1227 EXPECT_EQ(2u, version_->foreign_fetch_scopes_.size()); |
| 1237 EXPECT_EQ(valid_scope_1, version_->foreign_fetch_scopes_[0]); | 1228 EXPECT_EQ(valid_scope_1, version_->foreign_fetch_scopes_[0]); |
| 1238 EXPECT_EQ(valid_scope_2, version_->foreign_fetch_scopes_[1]); | 1229 EXPECT_EQ(valid_scope_2, version_->foreign_fetch_scopes_[1]); |
| 1239 EXPECT_EQ(1u, version_->foreign_fetch_origins_.size()); | 1230 EXPECT_EQ(1u, version_->foreign_fetch_origins_.size()); |
| 1240 EXPECT_EQ(valid_origin, version_->foreign_fetch_origins_[0]); | 1231 EXPECT_EQ(valid_origin, version_->foreign_fetch_origins_[0]); |
| 1241 } | 1232 } |
| 1242 | 1233 |
| 1243 TEST_P(ServiceWorkerVersionTestP, RendererCrashDuringEvent) { | 1234 TEST_F(ServiceWorkerVersionTest, RendererCrashDuringEvent) { |
| 1244 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value | 1235 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value |
| 1245 | 1236 |
| 1246 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 1237 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 1247 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, | 1238 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, |
| 1248 CreateReceiverOnCurrentThread(&status)); | 1239 CreateReceiverOnCurrentThread(&status)); |
| 1249 base::RunLoop().RunUntilIdle(); | 1240 base::RunLoop().RunUntilIdle(); |
| 1250 EXPECT_EQ(SERVICE_WORKER_OK, status); | 1241 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 1251 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | 1242 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); |
| 1252 | 1243 |
| 1253 int request_id = | 1244 int request_id = |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1268 | 1259 |
| 1269 // Callback completed. | 1260 // Callback completed. |
| 1270 EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED, status); | 1261 EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED, status); |
| 1271 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); | 1262 EXPECT_EQ(EmbeddedWorkerStatus::STOPPED, version_->running_status()); |
| 1272 | 1263 |
| 1273 // Request already failed, calling finsh should return false. | 1264 // Request already failed, calling finsh should return false. |
| 1274 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */, | 1265 EXPECT_FALSE(version_->FinishRequest(request_id, true /* was_handled */, |
| 1275 base::Time::Now())); | 1266 base::Time::Now())); |
| 1276 } | 1267 } |
| 1277 | 1268 |
| 1278 TEST_P(ServiceWorkerVersionTestP, DispatchEvent) { | 1269 TEST_F(ServiceWorkerVersionTest, DispatchEvent) { |
| 1279 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value | 1270 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value |
| 1280 | 1271 |
| 1281 // Activate and start worker. | 1272 // Activate and start worker. |
| 1282 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 1273 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 1283 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, | 1274 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, |
| 1284 CreateReceiverOnCurrentThread(&status)); | 1275 CreateReceiverOnCurrentThread(&status)); |
| 1285 base::RunLoop().RunUntilIdle(); | 1276 base::RunLoop().RunUntilIdle(); |
| 1286 EXPECT_EQ(SERVICE_WORKER_OK, status); | 1277 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 1287 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | 1278 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); |
| 1288 | 1279 |
| (...skipping 25 matching lines...) Expand all Loading... |
| 1314 EXPECT_EQ(request_id, received_request_id); | 1305 EXPECT_EQ(request_id, received_request_id); |
| 1315 EXPECT_EQ(reply, received_data); | 1306 EXPECT_EQ(reply, received_data); |
| 1316 | 1307 |
| 1317 // Should not have timed out, so error callback should not have been | 1308 // Should not have timed out, so error callback should not have been |
| 1318 // called and FinishRequest should return true. | 1309 // called and FinishRequest should return true. |
| 1319 EXPECT_EQ(SERVICE_WORKER_OK, status); | 1310 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 1320 EXPECT_TRUE(version_->FinishRequest(request_id, true /* was_handled */, | 1311 EXPECT_TRUE(version_->FinishRequest(request_id, true /* was_handled */, |
| 1321 base::Time::Now())); | 1312 base::Time::Now())); |
| 1322 } | 1313 } |
| 1323 | 1314 |
| 1324 TEST_P(ServiceWorkerFailToStartTest, FailingWorkerUsesNewRendererProcess) { | 1315 TEST_F(ServiceWorkerFailToStartTest, FailingWorkerUsesNewRendererProcess) { |
| 1325 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; | 1316 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; |
| 1326 | 1317 |
| 1327 helper_->SimulateAddProcessToPattern(pattern_, | 1318 helper_->SimulateAddProcessToPattern(pattern_, |
| 1328 helper_->new_render_process_id()); | 1319 helper_->new_render_process_id()); |
| 1329 ServiceWorkerContextCore* context = helper_->context(); | 1320 ServiceWorkerContextCore* context = helper_->context(); |
| 1330 int64_t id = version_->version_id(); | 1321 int64_t id = version_->version_id(); |
| 1331 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 1322 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 1332 | 1323 |
| 1333 // Start once. It should choose the "existing process". | 1324 // Start once. It should choose the "existing process". |
| 1334 set_start_mode(MessageReceiverDisallowStart::StartMode::SUCCEED); | 1325 set_start_mode(MessageReceiverDisallowStart::StartMode::SUCCEED); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1373 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, | 1364 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, |
| 1374 CreateReceiverOnCurrentThread(&status)); | 1365 CreateReceiverOnCurrentThread(&status)); |
| 1375 base::RunLoop().RunUntilIdle(); | 1366 base::RunLoop().RunUntilIdle(); |
| 1376 EXPECT_EQ(SERVICE_WORKER_OK, status); | 1367 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 1377 EXPECT_EQ(helper_->mock_render_process_id(), | 1368 EXPECT_EQ(helper_->mock_render_process_id(), |
| 1378 version_->embedded_worker()->process_id()); | 1369 version_->embedded_worker()->process_id()); |
| 1379 version_->StopWorker(CreateReceiverOnCurrentThread(&status)); | 1370 version_->StopWorker(CreateReceiverOnCurrentThread(&status)); |
| 1380 base::RunLoop().RunUntilIdle(); | 1371 base::RunLoop().RunUntilIdle(); |
| 1381 } | 1372 } |
| 1382 | 1373 |
| 1383 TEST_P(ServiceWorkerFailToStartTest, RestartStalledWorker) { | 1374 TEST_F(ServiceWorkerFailToStartTest, RestartStalledWorker) { |
| 1384 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_MAX_VALUE; | 1375 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_MAX_VALUE; |
| 1385 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_MAX_VALUE; | 1376 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_MAX_VALUE; |
| 1386 version_->StartWorker(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME, | 1377 version_->StartWorker(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME, |
| 1387 CreateReceiverOnCurrentThread(&status1)); | 1378 CreateReceiverOnCurrentThread(&status1)); |
| 1388 base::RunLoop().RunUntilIdle(); | 1379 base::RunLoop().RunUntilIdle(); |
| 1389 // The default start mode is StartMode::STALL. So the callback of StartWorker | 1380 // The default start mode is StartMode::STALL. So the callback of StartWorker |
| 1390 // is not called yet. | 1381 // is not called yet. |
| 1391 EXPECT_EQ(SERVICE_WORKER_ERROR_MAX_VALUE, status1); | 1382 EXPECT_EQ(SERVICE_WORKER_ERROR_MAX_VALUE, status1); |
| 1392 | 1383 |
| 1393 // Set StartMode::SUCCEED. So the next start worker will be successful. | 1384 // Set StartMode::SUCCEED. So the next start worker will be successful. |
| 1394 set_start_mode(MessageReceiverDisallowStart::StartMode::SUCCEED); | 1385 set_start_mode(MessageReceiverDisallowStart::StartMode::SUCCEED); |
| 1395 | 1386 |
| 1396 // StartWorker message will be sent again because OnStopped is called before | 1387 // StartWorker message will be sent again because OnStopped is called before |
| 1397 // OnStarted. | 1388 // OnStarted. |
| 1398 version_->StopWorker(CreateReceiverOnCurrentThread(&status2)); | 1389 version_->StopWorker(CreateReceiverOnCurrentThread(&status2)); |
| 1399 base::RunLoop().RunUntilIdle(); | 1390 base::RunLoop().RunUntilIdle(); |
| 1400 | 1391 |
| 1401 EXPECT_EQ(SERVICE_WORKER_OK, status1); | 1392 EXPECT_EQ(SERVICE_WORKER_OK, status1); |
| 1402 EXPECT_EQ(SERVICE_WORKER_OK, status2); | 1393 EXPECT_EQ(SERVICE_WORKER_OK, status2); |
| 1403 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | 1394 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); |
| 1404 } | 1395 } |
| 1405 | 1396 |
| 1406 TEST_P(ServiceWorkerVersionTestP, DispatchConcurrentEvent) { | 1397 TEST_F(ServiceWorkerVersionTest, DispatchConcurrentEvent) { |
| 1407 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value | 1398 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_NETWORK; // dummy value |
| 1408 | 1399 |
| 1409 // Activate and start worker. | 1400 // Activate and start worker. |
| 1410 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 1401 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 1411 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, | 1402 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, |
| 1412 CreateReceiverOnCurrentThread(&status)); | 1403 CreateReceiverOnCurrentThread(&status)); |
| 1413 base::RunLoop().RunUntilIdle(); | 1404 base::RunLoop().RunUntilIdle(); |
| 1414 EXPECT_EQ(SERVICE_WORKER_OK, status); | 1405 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 1415 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | 1406 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); |
| 1416 | 1407 |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1475 | 1466 |
| 1476 // Verify correct response was received. | 1467 // Verify correct response was received. |
| 1477 EXPECT_EQ(request_id1, received_request_id1); | 1468 EXPECT_EQ(request_id1, received_request_id1); |
| 1478 EXPECT_EQ(request_id2, received_request_id2); | 1469 EXPECT_EQ(request_id2, received_request_id2); |
| 1479 EXPECT_EQ(reply1, received_data1); | 1470 EXPECT_EQ(reply1, received_data1); |
| 1480 EXPECT_EQ(SERVICE_WORKER_OK, status1); | 1471 EXPECT_EQ(SERVICE_WORKER_OK, status1); |
| 1481 EXPECT_TRUE(version_->FinishRequest(request_id1, true /* was_handled */, | 1472 EXPECT_TRUE(version_->FinishRequest(request_id1, true /* was_handled */, |
| 1482 base::Time::Now())); | 1473 base::Time::Now())); |
| 1483 } | 1474 } |
| 1484 | 1475 |
| 1485 TEST_P(ServiceWorkerVersionTestP, DispatchSimpleEvent_Completed) { | 1476 TEST_F(ServiceWorkerVersionTest, DispatchSimpleEvent_Completed) { |
| 1486 ServiceWorkerStatusCode status = | 1477 ServiceWorkerStatusCode status = |
| 1487 SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value | 1478 SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value |
| 1488 | 1479 |
| 1489 // Activate and start worker. | 1480 // Activate and start worker. |
| 1490 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 1481 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 1491 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, | 1482 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, |
| 1492 CreateReceiverOnCurrentThread(&status)); | 1483 CreateReceiverOnCurrentThread(&status)); |
| 1493 base::RunLoop().RunUntilIdle(); | 1484 base::RunLoop().RunUntilIdle(); |
| 1494 EXPECT_EQ(SERVICE_WORKER_OK, status); | 1485 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 1495 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | 1486 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1512 // Simulate sending reply to event. | 1503 // Simulate sending reply to event. |
| 1513 helper_->SimulateSendSimpleEventResult( | 1504 helper_->SimulateSendSimpleEventResult( |
| 1514 version_->embedded_worker()->embedded_worker_id(), request_id, | 1505 version_->embedded_worker()->embedded_worker_id(), request_id, |
| 1515 blink::WebServiceWorkerEventResultCompleted, base::Time::Now()); | 1506 blink::WebServiceWorkerEventResultCompleted, base::Time::Now()); |
| 1516 runner->Run(); | 1507 runner->Run(); |
| 1517 | 1508 |
| 1518 // Verify callback was called with correct status. | 1509 // Verify callback was called with correct status. |
| 1519 EXPECT_EQ(SERVICE_WORKER_OK, status); | 1510 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 1520 } | 1511 } |
| 1521 | 1512 |
| 1522 TEST_P(ServiceWorkerVersionTestP, DispatchSimpleEvent_Rejected) { | 1513 TEST_F(ServiceWorkerVersionTest, DispatchSimpleEvent_Rejected) { |
| 1523 ServiceWorkerStatusCode status = | 1514 ServiceWorkerStatusCode status = |
| 1524 SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value | 1515 SERVICE_WORKER_ERROR_MAX_VALUE; // dummy value |
| 1525 | 1516 |
| 1526 // Activate and start worker. | 1517 // Activate and start worker. |
| 1527 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 1518 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 1528 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, | 1519 version_->StartWorker(ServiceWorkerMetrics::EventType::SYNC, |
| 1529 CreateReceiverOnCurrentThread(&status)); | 1520 CreateReceiverOnCurrentThread(&status)); |
| 1530 base::RunLoop().RunUntilIdle(); | 1521 base::RunLoop().RunUntilIdle(); |
| 1531 EXPECT_EQ(SERVICE_WORKER_OK, status); | 1522 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 1532 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | 1523 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1549 // Simulate sending reply to event. | 1540 // Simulate sending reply to event. |
| 1550 helper_->SimulateSendSimpleEventResult( | 1541 helper_->SimulateSendSimpleEventResult( |
| 1551 version_->embedded_worker()->embedded_worker_id(), request_id, | 1542 version_->embedded_worker()->embedded_worker_id(), request_id, |
| 1552 blink::WebServiceWorkerEventResultRejected, base::Time::Now()); | 1543 blink::WebServiceWorkerEventResultRejected, base::Time::Now()); |
| 1553 runner->Run(); | 1544 runner->Run(); |
| 1554 | 1545 |
| 1555 // Verify callback was called with correct status. | 1546 // Verify callback was called with correct status. |
| 1556 EXPECT_EQ(SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, status); | 1547 EXPECT_EQ(SERVICE_WORKER_ERROR_EVENT_WAITUNTIL_REJECTED, status); |
| 1557 } | 1548 } |
| 1558 | 1549 |
| 1559 TEST_P(ServiceWorkerVersionTestP, DispatchEvent_MultipleResponse) { | 1550 TEST_F(ServiceWorkerVersionTest, DispatchEvent_MultipleResponse) { |
| 1560 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; | 1551 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; |
| 1561 | 1552 |
| 1562 // Activate and start worker. | 1553 // Activate and start worker. |
| 1563 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 1554 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 1564 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, | 1555 version_->StartWorker(ServiceWorkerMetrics::EventType::UNKNOWN, |
| 1565 CreateReceiverOnCurrentThread(&status)); | 1556 CreateReceiverOnCurrentThread(&status)); |
| 1566 base::RunLoop().RunUntilIdle(); | 1557 base::RunLoop().RunUntilIdle(); |
| 1567 EXPECT_EQ(SERVICE_WORKER_OK, status); | 1558 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 1568 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); | 1559 EXPECT_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status()); |
| 1569 | 1560 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1618 | 1609 |
| 1619 // Should not have timed out, so error callback should not have been | 1610 // Should not have timed out, so error callback should not have been |
| 1620 // called and FinishRequest should return true. | 1611 // called and FinishRequest should return true. |
| 1621 EXPECT_EQ(SERVICE_WORKER_OK, status); | 1612 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 1622 EXPECT_TRUE(version_->FinishRequest(request_id1, true /* was_handled */, | 1613 EXPECT_TRUE(version_->FinishRequest(request_id1, true /* was_handled */, |
| 1623 base::Time::Now())); | 1614 base::Time::Now())); |
| 1624 EXPECT_TRUE(version_->FinishRequest(request_id2, true /* was_handled */, | 1615 EXPECT_TRUE(version_->FinishRequest(request_id2, true /* was_handled */, |
| 1625 base::Time::Now())); | 1616 base::Time::Now())); |
| 1626 } | 1617 } |
| 1627 | 1618 |
| 1628 class ServiceWorkerNavigationHintUMATest : public ServiceWorkerVersionTestP { | 1619 class ServiceWorkerNavigationHintUMATest : public ServiceWorkerVersionTest { |
| 1629 protected: | 1620 protected: |
| 1630 ServiceWorkerNavigationHintUMATest() : ServiceWorkerVersionTestP() {} | 1621 ServiceWorkerNavigationHintUMATest() : ServiceWorkerVersionTest() {} |
| 1631 | 1622 |
| 1632 void StartWorker(ServiceWorkerMetrics::EventType purpose) { | 1623 void StartWorker(ServiceWorkerMetrics::EventType purpose) { |
| 1633 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; | 1624 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; |
| 1634 version_->StartWorker(purpose, CreateReceiverOnCurrentThread(&status)); | 1625 version_->StartWorker(purpose, CreateReceiverOnCurrentThread(&status)); |
| 1635 base::RunLoop().RunUntilIdle(); | 1626 base::RunLoop().RunUntilIdle(); |
| 1636 EXPECT_EQ(SERVICE_WORKER_OK, status); | 1627 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 1637 } | 1628 } |
| 1638 | 1629 |
| 1639 void StopWorker() { | 1630 void StopWorker() { |
| 1640 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; | 1631 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1701 | 1692 |
| 1702 const char ServiceWorkerNavigationHintUMATest::kNavigationHintPrecision[] = | 1693 const char ServiceWorkerNavigationHintUMATest::kNavigationHintPrecision[] = |
| 1703 "ServiceWorker.NavigationHintPrecision"; | 1694 "ServiceWorker.NavigationHintPrecision"; |
| 1704 const char ServiceWorkerNavigationHintUMATest::kLinkMouseDown[] = | 1695 const char ServiceWorkerNavigationHintUMATest::kLinkMouseDown[] = |
| 1705 "ServiceWorker.NavigationHintPrecision.LINK_MOUSE_DOWN"; | 1696 "ServiceWorker.NavigationHintPrecision.LINK_MOUSE_DOWN"; |
| 1706 const char ServiceWorkerNavigationHintUMATest::kLinkTapUnconfirmed[] = | 1697 const char ServiceWorkerNavigationHintUMATest::kLinkTapUnconfirmed[] = |
| 1707 "ServiceWorker.NavigationHintPrecision.LINK_TAP_UNCONFIRMED"; | 1698 "ServiceWorker.NavigationHintPrecision.LINK_TAP_UNCONFIRMED"; |
| 1708 const char ServiceWorkerNavigationHintUMATest::kLinkTapDown[] = | 1699 const char ServiceWorkerNavigationHintUMATest::kLinkTapDown[] = |
| 1709 "ServiceWorker.NavigationHintPrecision.LINK_TAP_DOWN"; | 1700 "ServiceWorker.NavigationHintPrecision.LINK_TAP_DOWN"; |
| 1710 | 1701 |
| 1711 TEST_P(ServiceWorkerNavigationHintUMATest, LinkMouseDown) { | 1702 TEST_F(ServiceWorkerNavigationHintUMATest, LinkMouseDown) { |
| 1712 SimpleNavigationHintTest( | 1703 SimpleNavigationHintTest( |
| 1713 ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_MOUSE_DOWN, | 1704 ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_MOUSE_DOWN, |
| 1714 kLinkMouseDown, {kLinkTapUnconfirmed, kLinkTapDown}); | 1705 kLinkMouseDown, {kLinkTapUnconfirmed, kLinkTapDown}); |
| 1715 } | 1706 } |
| 1716 | 1707 |
| 1717 TEST_P(ServiceWorkerNavigationHintUMATest, LinkTapUnconfirmed) { | 1708 TEST_F(ServiceWorkerNavigationHintUMATest, LinkTapUnconfirmed) { |
| 1718 SimpleNavigationHintTest( | 1709 SimpleNavigationHintTest( |
| 1719 ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_TAP_UNCONFIRMED, | 1710 ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_TAP_UNCONFIRMED, |
| 1720 kLinkTapUnconfirmed, {kLinkMouseDown, kLinkTapDown}); | 1711 kLinkTapUnconfirmed, {kLinkMouseDown, kLinkTapDown}); |
| 1721 } | 1712 } |
| 1722 | 1713 |
| 1723 TEST_P(ServiceWorkerNavigationHintUMATest, LinkTapDown) { | 1714 TEST_F(ServiceWorkerNavigationHintUMATest, LinkTapDown) { |
| 1724 SimpleNavigationHintTest( | 1715 SimpleNavigationHintTest( |
| 1725 ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_TAP_DOWN, | 1716 ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_TAP_DOWN, |
| 1726 kLinkTapDown, {kLinkMouseDown, kLinkTapUnconfirmed}); | 1717 kLinkTapDown, {kLinkMouseDown, kLinkTapUnconfirmed}); |
| 1727 } | 1718 } |
| 1728 | 1719 |
| 1729 TEST_P(ServiceWorkerNavigationHintUMATest, ConcurrentStart) { | 1720 TEST_F(ServiceWorkerNavigationHintUMATest, ConcurrentStart) { |
| 1730 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 1721 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 1731 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_MAX_VALUE; | 1722 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_MAX_VALUE; |
| 1732 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_MAX_VALUE; | 1723 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_MAX_VALUE; |
| 1733 version_->StartWorker(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME, | 1724 version_->StartWorker(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME, |
| 1734 CreateReceiverOnCurrentThread(&status1)); | 1725 CreateReceiverOnCurrentThread(&status1)); |
| 1735 version_->StartWorker( | 1726 version_->StartWorker( |
| 1736 ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_MOUSE_DOWN, | 1727 ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_MOUSE_DOWN, |
| 1737 CreateReceiverOnCurrentThread(&status2)); | 1728 CreateReceiverOnCurrentThread(&status2)); |
| 1738 base::RunLoop().RunUntilIdle(); | 1729 base::RunLoop().RunUntilIdle(); |
| 1739 EXPECT_EQ(SERVICE_WORKER_OK, status1); | 1730 EXPECT_EQ(SERVICE_WORKER_OK, status1); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1753 EXPECT_EQ(SERVICE_WORKER_OK, status1); | 1744 EXPECT_EQ(SERVICE_WORKER_OK, status1); |
| 1754 EXPECT_EQ(SERVICE_WORKER_OK, status2); | 1745 EXPECT_EQ(SERVICE_WORKER_OK, status2); |
| 1755 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME); | 1746 SimulateDispatchEvent(ServiceWorkerMetrics::EventType::FETCH_MAIN_FRAME); |
| 1756 StopWorker(); | 1747 StopWorker(); |
| 1757 // The first purpose of starting worker was a navigation hint. | 1748 // The first purpose of starting worker was a navigation hint. |
| 1758 histogram_tester_.ExpectTotalCount(kNavigationHintPrecision, 1); | 1749 histogram_tester_.ExpectTotalCount(kNavigationHintPrecision, 1); |
| 1759 histogram_tester_.ExpectBucketCount(kNavigationHintPrecision, true, 1); | 1750 histogram_tester_.ExpectBucketCount(kNavigationHintPrecision, true, 1); |
| 1760 histogram_tester_.ExpectBucketCount(kNavigationHintPrecision, false, 0); | 1751 histogram_tester_.ExpectBucketCount(kNavigationHintPrecision, false, 0); |
| 1761 } | 1752 } |
| 1762 | 1753 |
| 1763 TEST_P(ServiceWorkerNavigationHintUMATest, StartWhileStopping) { | 1754 TEST_F(ServiceWorkerNavigationHintUMATest, StartWhileStopping) { |
| 1764 StartWorker(ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_MOUSE_DOWN); | 1755 StartWorker(ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_MOUSE_DOWN); |
| 1765 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; | 1756 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; |
| 1766 version_->StopWorker(CreateReceiverOnCurrentThread(&status)); | 1757 version_->StopWorker(CreateReceiverOnCurrentThread(&status)); |
| 1767 EXPECT_EQ(EmbeddedWorkerStatus::STOPPING, version_->running_status()); | 1758 EXPECT_EQ(EmbeddedWorkerStatus::STOPPING, version_->running_status()); |
| 1768 histogram_tester_.ExpectTotalCount(kLinkMouseDown, 0); | 1759 histogram_tester_.ExpectTotalCount(kLinkMouseDown, 0); |
| 1769 | 1760 |
| 1770 StartWorker(ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_TAP_DOWN); | 1761 StartWorker(ServiceWorkerMetrics::EventType::NAVIGATION_HINT_LINK_TAP_DOWN); |
| 1771 // The UMA for kLinkMouseDown must be recorded while restarting. | 1762 // The UMA for kLinkMouseDown must be recorded while restarting. |
| 1772 histogram_tester_.ExpectTotalCount(kLinkMouseDown, 1); | 1763 histogram_tester_.ExpectTotalCount(kLinkMouseDown, 1); |
| 1773 histogram_tester_.ExpectTotalCount(kLinkTapDown, 0); | 1764 histogram_tester_.ExpectTotalCount(kLinkTapDown, 0); |
| 1774 EXPECT_EQ(SERVICE_WORKER_OK, status); | 1765 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 1775 StopWorker(); | 1766 StopWorker(); |
| 1776 // The UMA for kLinkMouseDown must be recorded when the worker stopped. | 1767 // The UMA for kLinkMouseDown must be recorded when the worker stopped. |
| 1777 histogram_tester_.ExpectTotalCount(kLinkMouseDown, 1); | 1768 histogram_tester_.ExpectTotalCount(kLinkMouseDown, 1); |
| 1778 histogram_tester_.ExpectTotalCount(kLinkTapDown, 1); | 1769 histogram_tester_.ExpectTotalCount(kLinkTapDown, 1); |
| 1779 } | 1770 } |
| 1780 | 1771 |
| 1781 INSTANTIATE_TEST_CASE_P(ServiceWorkerVersionTestP, | |
| 1782 ServiceWorkerVersionTestP, | |
| 1783 testing::Bool()); | |
| 1784 INSTANTIATE_TEST_CASE_P(ServiceWorkerFailToStartTest, | |
| 1785 ServiceWorkerFailToStartTest, | |
| 1786 testing::Bool()); | |
| 1787 INSTANTIATE_TEST_CASE_P(ServiceWorkerNavigationHintUMATest, | |
| 1788 ServiceWorkerNavigationHintUMATest, | |
| 1789 testing::Bool()); | |
| 1790 INSTANTIATE_TEST_CASE_P(ServiceWorkerStallInStoppingTest, | |
| 1791 ServiceWorkerStallInStoppingTest, | |
| 1792 testing::Bool()); | |
| 1793 } // namespace content | 1772 } // namespace content |
| OLD | NEW |