| 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 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |