| 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_url_request_job.h" | 5 #include "content/browser/service_worker/service_worker_url_request_job.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 348 TEST_P(ServiceWorkerURLRequestJobTestP, Simple) { | 348 TEST_P(ServiceWorkerURLRequestJobTestP, Simple) { |
| 349 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 349 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 350 TestRequest(200, "OK", std::string(), true /* expect_valid_ssl */); | 350 TestRequest(200, "OK", std::string(), true /* expect_valid_ssl */); |
| 351 | 351 |
| 352 EXPECT_EQ(0, times_prepare_to_restart_invoked_); | 352 EXPECT_EQ(0, times_prepare_to_restart_invoked_); |
| 353 ServiceWorkerResponseInfo* info = | 353 ServiceWorkerResponseInfo* info = |
| 354 ServiceWorkerResponseInfo::ForRequest(request_.get()); | 354 ServiceWorkerResponseInfo::ForRequest(request_.get()); |
| 355 ASSERT_TRUE(info); | 355 ASSERT_TRUE(info); |
| 356 EXPECT_TRUE(info->was_fetched_via_service_worker()); | 356 EXPECT_TRUE(info->was_fetched_via_service_worker()); |
| 357 EXPECT_FALSE(info->was_fallback_required()); | 357 EXPECT_FALSE(info->was_fallback_required()); |
| 358 EXPECT_EQ(GURL(), info->original_url_via_service_worker()); | 358 EXPECT_EQ(0u, info->url_list_via_service_worker().size()); |
| 359 EXPECT_EQ(blink::WebServiceWorkerResponseTypeDefault, | 359 EXPECT_EQ(blink::WebServiceWorkerResponseTypeDefault, |
| 360 info->response_type_via_service_worker()); | 360 info->response_type_via_service_worker()); |
| 361 EXPECT_FALSE(info->service_worker_start_time().is_null()); | 361 EXPECT_FALSE(info->service_worker_start_time().is_null()); |
| 362 EXPECT_FALSE(info->service_worker_ready_time().is_null()); | 362 EXPECT_FALSE(info->service_worker_ready_time().is_null()); |
| 363 EXPECT_FALSE(info->response_is_in_cache_storage()); | 363 EXPECT_FALSE(info->response_is_in_cache_storage()); |
| 364 EXPECT_EQ(std::string(), info->response_cache_storage_cache_name()); | 364 EXPECT_EQ(std::string(), info->response_cache_storage_cache_name()); |
| 365 } | 365 } |
| 366 | 366 |
| 367 TEST_P(ServiceWorkerURLRequestJobTestP, CustomTimeout) { | 367 TEST_P(ServiceWorkerURLRequestJobTestP, CustomTimeout) { |
| 368 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 368 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 386 void OnFetchEvent(int embedded_worker_id, | 386 void OnFetchEvent(int embedded_worker_id, |
| 387 int fetch_event_id, | 387 int fetch_event_id, |
| 388 const ServiceWorkerFetchRequest& request, | 388 const ServiceWorkerFetchRequest& request, |
| 389 mojom::FetchEventPreloadHandlePtr preload_handle, | 389 mojom::FetchEventPreloadHandlePtr preload_handle, |
| 390 const FetchCallback& callback) override { | 390 const FetchCallback& callback) override { |
| 391 context()->RemoveProviderHost(mock_render_process_id(), kProviderID); | 391 context()->RemoveProviderHost(mock_render_process_id(), kProviderID); |
| 392 SimulateSend(new ServiceWorkerHostMsg_FetchEventResponse( | 392 SimulateSend(new ServiceWorkerHostMsg_FetchEventResponse( |
| 393 embedded_worker_id, fetch_event_id, | 393 embedded_worker_id, fetch_event_id, |
| 394 SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, | 394 SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, |
| 395 ServiceWorkerResponse( | 395 ServiceWorkerResponse( |
| 396 GURL(), 200, "OK", blink::WebServiceWorkerResponseTypeDefault, | 396 base::MakeUnique<std::vector<GURL>>(), 200, "OK", |
| 397 ServiceWorkerHeaderMap(), std::string(), 0, GURL(), | 397 blink::WebServiceWorkerResponseTypeDefault, |
| 398 blink::WebServiceWorkerResponseErrorUnknown, base::Time(), | 398 base::MakeUnique<ServiceWorkerHeaderMap>(), std::string(), 0, |
| 399 GURL(), blink::WebServiceWorkerResponseErrorUnknown, base::Time(), |
| 399 false /* response_is_in_cache_storage */, | 400 false /* response_is_in_cache_storage */, |
| 400 std::string() /* response_cache_storage_cache_name */, | 401 std::string() /* response_cache_storage_cache_name */, |
| 401 ServiceWorkerHeaderList() /* cors_exposed_header_names */), | 402 base::MakeUnique< |
| 403 ServiceWorkerHeaderList>() /* cors_exposed_header_names */), |
| 402 base::Time::Now())); | 404 base::Time::Now())); |
| 403 callback.Run(SERVICE_WORKER_OK, base::Time::Now()); | 405 callback.Run(SERVICE_WORKER_OK, base::Time::Now()); |
| 404 } | 406 } |
| 405 | 407 |
| 406 private: | 408 private: |
| 407 DISALLOW_COPY_AND_ASSIGN(ProviderDeleteHelper); | 409 DISALLOW_COPY_AND_ASSIGN(ProviderDeleteHelper); |
| 408 }; | 410 }; |
| 409 | 411 |
| 410 TEST_P(ServiceWorkerURLRequestJobTestP, DeletedProviderHostOnFetchEvent) { | 412 TEST_P(ServiceWorkerURLRequestJobTestP, DeletedProviderHostOnFetchEvent) { |
| 411 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 413 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 412 // Shouldn't crash if the ProviderHost is deleted prior to completion of | 414 // Shouldn't crash if the ProviderHost is deleted prior to completion of |
| 413 // the fetch event. | 415 // the fetch event. |
| 414 SetUpWithHelper(new ProviderDeleteHelper); | 416 SetUpWithHelper(new ProviderDeleteHelper); |
| 415 | 417 |
| 416 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 418 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 417 TestRequest(500, "Service Worker Response Error", std::string(), | 419 TestRequest(500, "Service Worker Response Error", std::string(), |
| 418 false /* expect_valid_ssl */); | 420 false /* expect_valid_ssl */); |
| 419 | 421 |
| 420 EXPECT_EQ(0, times_prepare_to_restart_invoked_); | 422 EXPECT_EQ(0, times_prepare_to_restart_invoked_); |
| 421 ServiceWorkerResponseInfo* info = | 423 ServiceWorkerResponseInfo* info = |
| 422 ServiceWorkerResponseInfo::ForRequest(request_.get()); | 424 ServiceWorkerResponseInfo::ForRequest(request_.get()); |
| 423 ASSERT_TRUE(info); | 425 ASSERT_TRUE(info); |
| 424 EXPECT_TRUE(info->was_fetched_via_service_worker()); | 426 EXPECT_TRUE(info->was_fetched_via_service_worker()); |
| 425 EXPECT_FALSE(info->was_fallback_required()); | 427 EXPECT_FALSE(info->was_fallback_required()); |
| 426 EXPECT_EQ(GURL(), info->original_url_via_service_worker()); | 428 EXPECT_EQ(0u, info->url_list_via_service_worker().size()); |
| 427 EXPECT_EQ(blink::WebServiceWorkerResponseTypeDefault, | 429 EXPECT_EQ(blink::WebServiceWorkerResponseTypeDefault, |
| 428 info->response_type_via_service_worker()); | 430 info->response_type_via_service_worker()); |
| 429 EXPECT_FALSE(info->service_worker_start_time().is_null()); | 431 EXPECT_FALSE(info->service_worker_start_time().is_null()); |
| 430 EXPECT_FALSE(info->service_worker_ready_time().is_null()); | 432 EXPECT_FALSE(info->service_worker_ready_time().is_null()); |
| 431 } | 433 } |
| 432 | 434 |
| 433 TEST_P(ServiceWorkerURLRequestJobTestP, DeletedProviderHostBeforeFetchEvent) { | 435 TEST_P(ServiceWorkerURLRequestJobTestP, DeletedProviderHostBeforeFetchEvent) { |
| 434 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 436 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 435 request_ = url_request_context_.CreateRequest( | 437 request_ = url_request_context_.CreateRequest( |
| 436 GURL("https://example.com/foo.html"), net::DEFAULT_PRIORITY, | 438 GURL("https://example.com/foo.html"), net::DEFAULT_PRIORITY, |
| 437 &url_request_delegate_); | 439 &url_request_delegate_); |
| 438 | 440 |
| 439 request_->set_method("GET"); | 441 request_->set_method("GET"); |
| 440 request_->Start(); | 442 request_->Start(); |
| 441 helper_->context()->RemoveProviderHost(helper_->mock_render_process_id(), | 443 helper_->context()->RemoveProviderHost(helper_->mock_render_process_id(), |
| 442 kProviderID); | 444 kProviderID); |
| 443 base::RunLoop().RunUntilIdle(); | 445 base::RunLoop().RunUntilIdle(); |
| 444 TestRequestResult(500, "Service Worker Response Error", std::string(), | 446 TestRequestResult(500, "Service Worker Response Error", std::string(), |
| 445 false /* expect_valid_ssl */); | 447 false /* expect_valid_ssl */); |
| 446 | 448 |
| 447 EXPECT_EQ(0, times_prepare_to_restart_invoked_); | 449 EXPECT_EQ(0, times_prepare_to_restart_invoked_); |
| 448 ServiceWorkerResponseInfo* info = | 450 ServiceWorkerResponseInfo* info = |
| 449 ServiceWorkerResponseInfo::ForRequest(request_.get()); | 451 ServiceWorkerResponseInfo::ForRequest(request_.get()); |
| 450 ASSERT_TRUE(info); | 452 ASSERT_TRUE(info); |
| 451 EXPECT_TRUE(info->was_fetched_via_service_worker()); | 453 EXPECT_TRUE(info->was_fetched_via_service_worker()); |
| 452 EXPECT_FALSE(info->was_fallback_required()); | 454 EXPECT_FALSE(info->was_fallback_required()); |
| 453 EXPECT_EQ(GURL(), info->original_url_via_service_worker()); | 455 EXPECT_EQ(0u, info->url_list_via_service_worker().size()); |
| 454 EXPECT_EQ(blink::WebServiceWorkerResponseTypeDefault, | 456 EXPECT_EQ(blink::WebServiceWorkerResponseTypeDefault, |
| 455 info->response_type_via_service_worker()); | 457 info->response_type_via_service_worker()); |
| 456 EXPECT_TRUE(info->service_worker_start_time().is_null()); | 458 EXPECT_TRUE(info->service_worker_start_time().is_null()); |
| 457 EXPECT_TRUE(info->service_worker_ready_time().is_null()); | 459 EXPECT_TRUE(info->service_worker_ready_time().is_null()); |
| 458 } | 460 } |
| 459 | 461 |
| 460 // Responds to fetch events with a blob. | 462 // Responds to fetch events with a blob. |
| 461 class BlobResponder : public EmbeddedWorkerTestHelper { | 463 class BlobResponder : public EmbeddedWorkerTestHelper { |
| 462 public: | 464 public: |
| 463 BlobResponder(const std::string& blob_uuid, uint64_t blob_size) | 465 BlobResponder(const std::string& blob_uuid, uint64_t blob_size) |
| 464 : EmbeddedWorkerTestHelper(base::FilePath()), | 466 : EmbeddedWorkerTestHelper(base::FilePath()), |
| 465 blob_uuid_(blob_uuid), | 467 blob_uuid_(blob_uuid), |
| 466 blob_size_(blob_size) {} | 468 blob_size_(blob_size) {} |
| 467 ~BlobResponder() override {} | 469 ~BlobResponder() override {} |
| 468 | 470 |
| 469 protected: | 471 protected: |
| 470 void OnFetchEvent(int embedded_worker_id, | 472 void OnFetchEvent(int embedded_worker_id, |
| 471 int fetch_event_id, | 473 int fetch_event_id, |
| 472 const ServiceWorkerFetchRequest& request, | 474 const ServiceWorkerFetchRequest& request, |
| 473 mojom::FetchEventPreloadHandlePtr preload_handle, | 475 mojom::FetchEventPreloadHandlePtr preload_handle, |
| 474 const FetchCallback& callback) override { | 476 const FetchCallback& callback) override { |
| 475 SimulateSend(new ServiceWorkerHostMsg_FetchEventResponse( | 477 SimulateSend(new ServiceWorkerHostMsg_FetchEventResponse( |
| 476 embedded_worker_id, fetch_event_id, | 478 embedded_worker_id, fetch_event_id, |
| 477 SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, | 479 SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, |
| 478 ServiceWorkerResponse( | 480 ServiceWorkerResponse( |
| 479 GURL(), 200, "OK", blink::WebServiceWorkerResponseTypeDefault, | 481 base::MakeUnique<std::vector<GURL>>(), 200, "OK", |
| 480 ServiceWorkerHeaderMap(), blob_uuid_, blob_size_, GURL(), | 482 blink::WebServiceWorkerResponseTypeDefault, |
| 481 blink::WebServiceWorkerResponseErrorUnknown, base::Time(), | 483 base::MakeUnique<ServiceWorkerHeaderMap>(), blob_uuid_, blob_size_, |
| 484 GURL(), blink::WebServiceWorkerResponseErrorUnknown, base::Time(), |
| 482 false /* response_is_in_cache_storage */, | 485 false /* response_is_in_cache_storage */, |
| 483 std::string() /* response_cache_storage_cache_name */, | 486 std::string() /* response_cache_storage_cache_name */, |
| 484 ServiceWorkerHeaderList() /* cors_exposed_header_names */), | 487 base::MakeUnique< |
| 488 ServiceWorkerHeaderList>() /* cors_exposed_header_names */), |
| 485 base::Time::Now())); | 489 base::Time::Now())); |
| 486 callback.Run(SERVICE_WORKER_OK, base::Time::Now()); | 490 callback.Run(SERVICE_WORKER_OK, base::Time::Now()); |
| 487 } | 491 } |
| 488 | 492 |
| 489 std::string blob_uuid_; | 493 std::string blob_uuid_; |
| 490 uint64_t blob_size_; | 494 uint64_t blob_size_; |
| 491 | 495 |
| 492 private: | 496 private: |
| 493 DISALLOW_COPY_AND_ASSIGN(BlobResponder); | 497 DISALLOW_COPY_AND_ASSIGN(BlobResponder); |
| 494 }; | 498 }; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 509 | 513 |
| 510 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 514 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 511 TestRequest(200, "OK", expected_response, true /* expect_valid_ssl */); | 515 TestRequest(200, "OK", expected_response, true /* expect_valid_ssl */); |
| 512 | 516 |
| 513 EXPECT_EQ(0, times_prepare_to_restart_invoked_); | 517 EXPECT_EQ(0, times_prepare_to_restart_invoked_); |
| 514 ServiceWorkerResponseInfo* info = | 518 ServiceWorkerResponseInfo* info = |
| 515 ServiceWorkerResponseInfo::ForRequest(request_.get()); | 519 ServiceWorkerResponseInfo::ForRequest(request_.get()); |
| 516 ASSERT_TRUE(info); | 520 ASSERT_TRUE(info); |
| 517 EXPECT_TRUE(info->was_fetched_via_service_worker()); | 521 EXPECT_TRUE(info->was_fetched_via_service_worker()); |
| 518 EXPECT_FALSE(info->was_fallback_required()); | 522 EXPECT_FALSE(info->was_fallback_required()); |
| 519 EXPECT_EQ(GURL(), info->original_url_via_service_worker()); | 523 EXPECT_EQ(0u, info->url_list_via_service_worker().size()); |
| 520 EXPECT_EQ(blink::WebServiceWorkerResponseTypeDefault, | 524 EXPECT_EQ(blink::WebServiceWorkerResponseTypeDefault, |
| 521 info->response_type_via_service_worker()); | 525 info->response_type_via_service_worker()); |
| 522 EXPECT_FALSE(info->service_worker_start_time().is_null()); | 526 EXPECT_FALSE(info->service_worker_start_time().is_null()); |
| 523 EXPECT_FALSE(info->service_worker_ready_time().is_null()); | 527 EXPECT_FALSE(info->service_worker_ready_time().is_null()); |
| 524 } | 528 } |
| 525 | 529 |
| 526 TEST_P(ServiceWorkerURLRequestJobTestP, NonExistentBlobUUIDResponse) { | 530 TEST_P(ServiceWorkerURLRequestJobTestP, NonExistentBlobUUIDResponse) { |
| 527 SetUpWithHelper(new BlobResponder("blob-id:nothing-is-here", 0)); | 531 SetUpWithHelper(new BlobResponder("blob-id:nothing-is-here", 0)); |
| 528 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 532 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 529 TestRequest(500, "Service Worker Response Error", std::string(), | 533 TestRequest(500, "Service Worker Response Error", std::string(), |
| 530 true /* expect_valid_ssl */); | 534 true /* expect_valid_ssl */); |
| 531 | 535 |
| 532 EXPECT_EQ(0, times_prepare_to_restart_invoked_); | 536 EXPECT_EQ(0, times_prepare_to_restart_invoked_); |
| 533 ServiceWorkerResponseInfo* info = | 537 ServiceWorkerResponseInfo* info = |
| 534 ServiceWorkerResponseInfo::ForRequest(request_.get()); | 538 ServiceWorkerResponseInfo::ForRequest(request_.get()); |
| 535 ASSERT_TRUE(info); | 539 ASSERT_TRUE(info); |
| 536 EXPECT_TRUE(info->was_fetched_via_service_worker()); | 540 EXPECT_TRUE(info->was_fetched_via_service_worker()); |
| 537 EXPECT_FALSE(info->was_fallback_required()); | 541 EXPECT_FALSE(info->was_fallback_required()); |
| 538 EXPECT_EQ(GURL(), info->original_url_via_service_worker()); | 542 EXPECT_EQ(0u, info->url_list_via_service_worker().size()); |
| 539 EXPECT_EQ(blink::WebServiceWorkerResponseTypeDefault, | 543 EXPECT_EQ(blink::WebServiceWorkerResponseTypeDefault, |
| 540 info->response_type_via_service_worker()); | 544 info->response_type_via_service_worker()); |
| 541 EXPECT_FALSE(info->service_worker_start_time().is_null()); | 545 EXPECT_FALSE(info->service_worker_start_time().is_null()); |
| 542 EXPECT_FALSE(info->service_worker_ready_time().is_null()); | 546 EXPECT_FALSE(info->service_worker_ready_time().is_null()); |
| 543 } | 547 } |
| 544 | 548 |
| 545 // Responds to fetch events with a stream. | 549 // Responds to fetch events with a stream. |
| 546 class StreamResponder : public EmbeddedWorkerTestHelper { | 550 class StreamResponder : public EmbeddedWorkerTestHelper { |
| 547 public: | 551 public: |
| 548 explicit StreamResponder(const GURL& stream_url) | 552 explicit StreamResponder(const GURL& stream_url) |
| 549 : EmbeddedWorkerTestHelper(base::FilePath()), stream_url_(stream_url) {} | 553 : EmbeddedWorkerTestHelper(base::FilePath()), stream_url_(stream_url) {} |
| 550 ~StreamResponder() override {} | 554 ~StreamResponder() override {} |
| 551 | 555 |
| 552 protected: | 556 protected: |
| 553 void OnFetchEvent(int embedded_worker_id, | 557 void OnFetchEvent(int embedded_worker_id, |
| 554 int fetch_event_id, | 558 int fetch_event_id, |
| 555 const ServiceWorkerFetchRequest& request, | 559 const ServiceWorkerFetchRequest& request, |
| 556 mojom::FetchEventPreloadHandlePtr preload_handle, | 560 mojom::FetchEventPreloadHandlePtr preload_handle, |
| 557 const FetchCallback& callback) override { | 561 const FetchCallback& callback) override { |
| 558 SimulateSend(new ServiceWorkerHostMsg_FetchEventResponse( | 562 SimulateSend(new ServiceWorkerHostMsg_FetchEventResponse( |
| 559 embedded_worker_id, fetch_event_id, | 563 embedded_worker_id, fetch_event_id, |
| 560 SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, | 564 SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, |
| 561 ServiceWorkerResponse( | 565 ServiceWorkerResponse( |
| 562 GURL(), 200, "OK", blink::WebServiceWorkerResponseTypeDefault, | 566 base::MakeUnique<std::vector<GURL>>(), 200, "OK", |
| 563 ServiceWorkerHeaderMap(), "", 0, stream_url_, | 567 blink::WebServiceWorkerResponseTypeDefault, |
| 568 base::MakeUnique<ServiceWorkerHeaderMap>(), "", 0, stream_url_, |
| 564 blink::WebServiceWorkerResponseErrorUnknown, base::Time(), | 569 blink::WebServiceWorkerResponseErrorUnknown, base::Time(), |
| 565 false /* response_is_in_cache_storage */, | 570 false /* response_is_in_cache_storage */, |
| 566 std::string() /* response_cache_storage_cache_name */, | 571 std::string() /* response_cache_storage_cache_name */, |
| 567 ServiceWorkerHeaderList() /* cors_exposed_header_names */), | 572 base::MakeUnique< |
| 573 ServiceWorkerHeaderList>() /* cors_exposed_header_names */), |
| 568 base::Time::Now())); | 574 base::Time::Now())); |
| 569 callback.Run(SERVICE_WORKER_OK, base::Time::Now()); | 575 callback.Run(SERVICE_WORKER_OK, base::Time::Now()); |
| 570 } | 576 } |
| 571 | 577 |
| 572 const GURL stream_url_; | 578 const GURL stream_url_; |
| 573 | 579 |
| 574 private: | 580 private: |
| 575 DISALLOW_COPY_AND_ASSIGN(StreamResponder); | 581 DISALLOW_COPY_AND_ASSIGN(StreamResponder); |
| 576 }; | 582 }; |
| 577 | 583 |
| (...skipping 29 matching lines...) Expand all Loading... |
| 607 EXPECT_EQ("OK", | 613 EXPECT_EQ("OK", |
| 608 request_->response_headers()->GetStatusText()); | 614 request_->response_headers()->GetStatusText()); |
| 609 EXPECT_EQ(expected_response, url_request_delegate_.response_data()); | 615 EXPECT_EQ(expected_response, url_request_delegate_.response_data()); |
| 610 | 616 |
| 611 EXPECT_EQ(0, times_prepare_to_restart_invoked_); | 617 EXPECT_EQ(0, times_prepare_to_restart_invoked_); |
| 612 ServiceWorkerResponseInfo* info = | 618 ServiceWorkerResponseInfo* info = |
| 613 ServiceWorkerResponseInfo::ForRequest(request_.get()); | 619 ServiceWorkerResponseInfo::ForRequest(request_.get()); |
| 614 ASSERT_TRUE(info); | 620 ASSERT_TRUE(info); |
| 615 EXPECT_TRUE(info->was_fetched_via_service_worker()); | 621 EXPECT_TRUE(info->was_fetched_via_service_worker()); |
| 616 EXPECT_FALSE(info->was_fallback_required()); | 622 EXPECT_FALSE(info->was_fallback_required()); |
| 617 EXPECT_EQ(GURL(), info->original_url_via_service_worker()); | 623 EXPECT_EQ(0u, info->url_list_via_service_worker().size()); |
| 618 EXPECT_EQ(blink::WebServiceWorkerResponseTypeDefault, | 624 EXPECT_EQ(blink::WebServiceWorkerResponseTypeDefault, |
| 619 info->response_type_via_service_worker()); | 625 info->response_type_via_service_worker()); |
| 620 EXPECT_FALSE(info->service_worker_start_time().is_null()); | 626 EXPECT_FALSE(info->service_worker_start_time().is_null()); |
| 621 EXPECT_FALSE(info->service_worker_ready_time().is_null()); | 627 EXPECT_FALSE(info->service_worker_ready_time().is_null()); |
| 622 | 628 |
| 623 request_.reset(); | 629 request_.reset(); |
| 624 EXPECT_FALSE(HasWork()); | 630 EXPECT_FALSE(HasWork()); |
| 625 } | 631 } |
| 626 | 632 |
| 627 TEST_P(ServiceWorkerURLRequestJobTestP, StreamResponse_DelayedRegistration) { | 633 TEST_P(ServiceWorkerURLRequestJobTestP, StreamResponse_DelayedRegistration) { |
| (...skipping 29 matching lines...) Expand all Loading... |
| 657 EXPECT_EQ("OK", | 663 EXPECT_EQ("OK", |
| 658 request_->response_headers()->GetStatusText()); | 664 request_->response_headers()->GetStatusText()); |
| 659 EXPECT_EQ(expected_response, url_request_delegate_.response_data()); | 665 EXPECT_EQ(expected_response, url_request_delegate_.response_data()); |
| 660 | 666 |
| 661 EXPECT_EQ(0, times_prepare_to_restart_invoked_); | 667 EXPECT_EQ(0, times_prepare_to_restart_invoked_); |
| 662 ServiceWorkerResponseInfo* info = | 668 ServiceWorkerResponseInfo* info = |
| 663 ServiceWorkerResponseInfo::ForRequest(request_.get()); | 669 ServiceWorkerResponseInfo::ForRequest(request_.get()); |
| 664 ASSERT_TRUE(info); | 670 ASSERT_TRUE(info); |
| 665 EXPECT_TRUE(info->was_fetched_via_service_worker()); | 671 EXPECT_TRUE(info->was_fetched_via_service_worker()); |
| 666 EXPECT_FALSE(info->was_fallback_required()); | 672 EXPECT_FALSE(info->was_fallback_required()); |
| 667 EXPECT_EQ(GURL(), info->original_url_via_service_worker()); | 673 EXPECT_EQ(0u, info->url_list_via_service_worker().size()); |
| 668 EXPECT_EQ(blink::WebServiceWorkerResponseTypeDefault, | 674 EXPECT_EQ(blink::WebServiceWorkerResponseTypeDefault, |
| 669 info->response_type_via_service_worker()); | 675 info->response_type_via_service_worker()); |
| 670 EXPECT_FALSE(info->service_worker_start_time().is_null()); | 676 EXPECT_FALSE(info->service_worker_start_time().is_null()); |
| 671 EXPECT_FALSE(info->service_worker_ready_time().is_null()); | 677 EXPECT_FALSE(info->service_worker_ready_time().is_null()); |
| 672 | 678 |
| 673 request_.reset(); | 679 request_.reset(); |
| 674 EXPECT_FALSE(HasWork()); | 680 EXPECT_FALSE(HasWork()); |
| 675 } | 681 } |
| 676 | 682 |
| 677 TEST_P(ServiceWorkerURLRequestJobTestP, StreamResponse_QuickFinalize) { | 683 TEST_P(ServiceWorkerURLRequestJobTestP, StreamResponse_QuickFinalize) { |
| (...skipping 27 matching lines...) Expand all Loading... |
| 705 EXPECT_EQ("OK", | 711 EXPECT_EQ("OK", |
| 706 request_->response_headers()->GetStatusText()); | 712 request_->response_headers()->GetStatusText()); |
| 707 EXPECT_EQ(expected_response, url_request_delegate_.response_data()); | 713 EXPECT_EQ(expected_response, url_request_delegate_.response_data()); |
| 708 | 714 |
| 709 EXPECT_EQ(0, times_prepare_to_restart_invoked_); | 715 EXPECT_EQ(0, times_prepare_to_restart_invoked_); |
| 710 ServiceWorkerResponseInfo* info = | 716 ServiceWorkerResponseInfo* info = |
| 711 ServiceWorkerResponseInfo::ForRequest(request_.get()); | 717 ServiceWorkerResponseInfo::ForRequest(request_.get()); |
| 712 ASSERT_TRUE(info); | 718 ASSERT_TRUE(info); |
| 713 EXPECT_TRUE(info->was_fetched_via_service_worker()); | 719 EXPECT_TRUE(info->was_fetched_via_service_worker()); |
| 714 EXPECT_FALSE(info->was_fallback_required()); | 720 EXPECT_FALSE(info->was_fallback_required()); |
| 715 EXPECT_EQ(GURL(), info->original_url_via_service_worker()); | 721 EXPECT_EQ(0u, info->url_list_via_service_worker().size()); |
| 716 EXPECT_EQ(blink::WebServiceWorkerResponseTypeDefault, | 722 EXPECT_EQ(blink::WebServiceWorkerResponseTypeDefault, |
| 717 info->response_type_via_service_worker()); | 723 info->response_type_via_service_worker()); |
| 718 EXPECT_FALSE(info->service_worker_start_time().is_null()); | 724 EXPECT_FALSE(info->service_worker_start_time().is_null()); |
| 719 EXPECT_FALSE(info->service_worker_ready_time().is_null()); | 725 EXPECT_FALSE(info->service_worker_ready_time().is_null()); |
| 720 | 726 |
| 721 request_.reset(); | 727 request_.reset(); |
| 722 EXPECT_FALSE(HasWork()); | 728 EXPECT_FALSE(HasWork()); |
| 723 } | 729 } |
| 724 | 730 |
| 725 TEST_P(ServiceWorkerURLRequestJobTestP, StreamResponse_Flush) { | 731 TEST_P(ServiceWorkerURLRequestJobTestP, StreamResponse_Flush) { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 754 EXPECT_EQ("OK", | 760 EXPECT_EQ("OK", |
| 755 request_->response_headers()->GetStatusText()); | 761 request_->response_headers()->GetStatusText()); |
| 756 EXPECT_EQ(expected_response, url_request_delegate_.response_data()); | 762 EXPECT_EQ(expected_response, url_request_delegate_.response_data()); |
| 757 | 763 |
| 758 EXPECT_EQ(0, times_prepare_to_restart_invoked_); | 764 EXPECT_EQ(0, times_prepare_to_restart_invoked_); |
| 759 ServiceWorkerResponseInfo* info = | 765 ServiceWorkerResponseInfo* info = |
| 760 ServiceWorkerResponseInfo::ForRequest(request_.get()); | 766 ServiceWorkerResponseInfo::ForRequest(request_.get()); |
| 761 ASSERT_TRUE(info); | 767 ASSERT_TRUE(info); |
| 762 EXPECT_TRUE(info->was_fetched_via_service_worker()); | 768 EXPECT_TRUE(info->was_fetched_via_service_worker()); |
| 763 EXPECT_FALSE(info->was_fallback_required()); | 769 EXPECT_FALSE(info->was_fallback_required()); |
| 764 EXPECT_EQ(GURL(), info->original_url_via_service_worker()); | 770 EXPECT_EQ(0u, info->url_list_via_service_worker().size()); |
| 765 EXPECT_EQ(blink::WebServiceWorkerResponseTypeDefault, | 771 EXPECT_EQ(blink::WebServiceWorkerResponseTypeDefault, |
| 766 info->response_type_via_service_worker()); | 772 info->response_type_via_service_worker()); |
| 767 EXPECT_FALSE(info->service_worker_start_time().is_null()); | 773 EXPECT_FALSE(info->service_worker_start_time().is_null()); |
| 768 EXPECT_FALSE(info->service_worker_ready_time().is_null()); | 774 EXPECT_FALSE(info->service_worker_ready_time().is_null()); |
| 769 } | 775 } |
| 770 | 776 |
| 771 TEST_P(ServiceWorkerURLRequestJobTestP, StreamResponseAndCancel) { | 777 TEST_P(ServiceWorkerURLRequestJobTestP, StreamResponseAndCancel) { |
| 772 const GURL stream_url("blob://stream"); | 778 const GURL stream_url("blob://stream"); |
| 773 StreamContext* stream_context = | 779 StreamContext* stream_context = |
| 774 GetStreamContextForResourceContext( | 780 GetStreamContextForResourceContext( |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 807 | 813 |
| 808 base::RunLoop().RunUntilIdle(); | 814 base::RunLoop().RunUntilIdle(); |
| 809 EXPECT_FALSE(request_->status().is_success()); | 815 EXPECT_FALSE(request_->status().is_success()); |
| 810 | 816 |
| 811 EXPECT_EQ(0, times_prepare_to_restart_invoked_); | 817 EXPECT_EQ(0, times_prepare_to_restart_invoked_); |
| 812 ServiceWorkerResponseInfo* info = | 818 ServiceWorkerResponseInfo* info = |
| 813 ServiceWorkerResponseInfo::ForRequest(request_.get()); | 819 ServiceWorkerResponseInfo::ForRequest(request_.get()); |
| 814 ASSERT_TRUE(info); | 820 ASSERT_TRUE(info); |
| 815 EXPECT_TRUE(info->was_fetched_via_service_worker()); | 821 EXPECT_TRUE(info->was_fetched_via_service_worker()); |
| 816 EXPECT_FALSE(info->was_fallback_required()); | 822 EXPECT_FALSE(info->was_fallback_required()); |
| 817 EXPECT_EQ(GURL(), info->original_url_via_service_worker()); | 823 EXPECT_EQ(0u, info->url_list_via_service_worker().size()); |
| 818 EXPECT_EQ(blink::WebServiceWorkerResponseTypeDefault, | 824 EXPECT_EQ(blink::WebServiceWorkerResponseTypeDefault, |
| 819 info->response_type_via_service_worker()); | 825 info->response_type_via_service_worker()); |
| 820 EXPECT_FALSE(info->service_worker_start_time().is_null()); | 826 EXPECT_FALSE(info->service_worker_start_time().is_null()); |
| 821 EXPECT_FALSE(info->service_worker_ready_time().is_null()); | 827 EXPECT_FALSE(info->service_worker_ready_time().is_null()); |
| 822 } | 828 } |
| 823 | 829 |
| 824 TEST_P(ServiceWorkerURLRequestJobTestP, | 830 TEST_P(ServiceWorkerURLRequestJobTestP, |
| 825 StreamResponse_DelayedRegistrationAndCancel) { | 831 StreamResponse_DelayedRegistrationAndCancel) { |
| 826 const GURL stream_url("blob://stream"); | 832 const GURL stream_url("blob://stream"); |
| 827 StreamContext* stream_context = | 833 StreamContext* stream_context = |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 919 EXPECT_TRUE(request_->status().is_success()); | 925 EXPECT_TRUE(request_->status().is_success()); |
| 920 EXPECT_EQ(200, request_->GetResponseCode()); | 926 EXPECT_EQ(200, request_->GetResponseCode()); |
| 921 EXPECT_EQ("", url_request_delegate_.response_data()); | 927 EXPECT_EQ("", url_request_delegate_.response_data()); |
| 922 | 928 |
| 923 EXPECT_EQ(0, times_prepare_to_restart_invoked_); | 929 EXPECT_EQ(0, times_prepare_to_restart_invoked_); |
| 924 ServiceWorkerResponseInfo* info = | 930 ServiceWorkerResponseInfo* info = |
| 925 ServiceWorkerResponseInfo::ForRequest(request_.get()); | 931 ServiceWorkerResponseInfo::ForRequest(request_.get()); |
| 926 ASSERT_TRUE(info); | 932 ASSERT_TRUE(info); |
| 927 EXPECT_TRUE(info->was_fetched_via_service_worker()); | 933 EXPECT_TRUE(info->was_fetched_via_service_worker()); |
| 928 EXPECT_FALSE(info->was_fallback_required()); | 934 EXPECT_FALSE(info->was_fallback_required()); |
| 929 EXPECT_EQ(GURL(), info->original_url_via_service_worker()); | 935 EXPECT_EQ(0u, info->url_list_via_service_worker().size()); |
| 930 EXPECT_EQ(blink::WebServiceWorkerResponseTypeDefault, | 936 EXPECT_EQ(blink::WebServiceWorkerResponseTypeDefault, |
| 931 info->response_type_via_service_worker()); | 937 info->response_type_via_service_worker()); |
| 932 EXPECT_FALSE(info->service_worker_start_time().is_null()); | 938 EXPECT_FALSE(info->service_worker_start_time().is_null()); |
| 933 EXPECT_FALSE(info->service_worker_ready_time().is_null()); | 939 EXPECT_FALSE(info->service_worker_ready_time().is_null()); |
| 934 } | 940 } |
| 935 | 941 |
| 936 TEST_P(ServiceWorkerURLRequestJobTestP, FailToActivate_MainResource) { | 942 TEST_P(ServiceWorkerURLRequestJobTestP, FailToActivate_MainResource) { |
| 937 RunFailToActivateTest(RESOURCE_TYPE_MAIN_FRAME); | 943 RunFailToActivateTest(RESOURCE_TYPE_MAIN_FRAME); |
| 938 | 944 |
| 939 // The load should fail and we should have fallen back to network because | 945 // The load should fail and we should have fallen back to network because |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 979 void OnFetchEvent(int embedded_worker_id, | 985 void OnFetchEvent(int embedded_worker_id, |
| 980 int fetch_event_id, | 986 int fetch_event_id, |
| 981 const ServiceWorkerFetchRequest& request, | 987 const ServiceWorkerFetchRequest& request, |
| 982 mojom::FetchEventPreloadHandlePtr preload_handle, | 988 mojom::FetchEventPreloadHandlePtr preload_handle, |
| 983 const FetchCallback& callback) override { | 989 const FetchCallback& callback) override { |
| 984 callback_ = callback; | 990 callback_ = callback; |
| 985 SimulateSend(new ServiceWorkerHostMsg_FetchEventResponse( | 991 SimulateSend(new ServiceWorkerHostMsg_FetchEventResponse( |
| 986 embedded_worker_id, fetch_event_id, | 992 embedded_worker_id, fetch_event_id, |
| 987 SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, | 993 SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, |
| 988 ServiceWorkerResponse( | 994 ServiceWorkerResponse( |
| 989 GURL(), 200, "OK", blink::WebServiceWorkerResponseTypeDefault, | 995 base::MakeUnique<std::vector<GURL>>(), 200, "OK", |
| 990 ServiceWorkerHeaderMap(), std::string(), 0, GURL(), | 996 blink::WebServiceWorkerResponseTypeDefault, |
| 991 blink::WebServiceWorkerResponseErrorUnknown, base::Time(), | 997 base::MakeUnique<ServiceWorkerHeaderMap>(), std::string(), 0, |
| 998 GURL(), blink::WebServiceWorkerResponseErrorUnknown, base::Time(), |
| 992 false /* response_is_in_cache_storage */, | 999 false /* response_is_in_cache_storage */, |
| 993 std::string() /* response_cache_storage_cache_name */, | 1000 std::string() /* response_cache_storage_cache_name */, |
| 994 ServiceWorkerHeaderList() /* cors_exposed_header_names */), | 1001 base::MakeUnique< |
| 1002 ServiceWorkerHeaderList>() /* cors_exposed_header_names */), |
| 995 base::Time::Now())); | 1003 base::Time::Now())); |
| 996 } | 1004 } |
| 997 | 1005 |
| 998 private: | 1006 private: |
| 999 FetchCallback callback_; | 1007 FetchCallback callback_; |
| 1000 DISALLOW_COPY_AND_ASSIGN(EarlyResponseHelper); | 1008 DISALLOW_COPY_AND_ASSIGN(EarlyResponseHelper); |
| 1001 }; | 1009 }; |
| 1002 | 1010 |
| 1003 // This simulates the case when a response is returned and the fetch event is | 1011 // This simulates the case when a response is returned and the fetch event is |
| 1004 // still in flight. | 1012 // still in flight. |
| 1005 TEST_P(ServiceWorkerURLRequestJobTestP, EarlyResponse) { | 1013 TEST_P(ServiceWorkerURLRequestJobTestP, EarlyResponse) { |
| 1006 EarlyResponseHelper* helper = new EarlyResponseHelper; | 1014 EarlyResponseHelper* helper = new EarlyResponseHelper; |
| 1007 SetUpWithHelper(helper); | 1015 SetUpWithHelper(helper); |
| 1008 | 1016 |
| 1009 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); | 1017 version_->SetStatus(ServiceWorkerVersion::ACTIVATED); |
| 1010 TestRequest(200, "OK", std::string(), true /* expect_valid_ssl */); | 1018 TestRequest(200, "OK", std::string(), true /* expect_valid_ssl */); |
| 1011 | 1019 |
| 1012 EXPECT_EQ(0, times_prepare_to_restart_invoked_); | 1020 EXPECT_EQ(0, times_prepare_to_restart_invoked_); |
| 1013 ServiceWorkerResponseInfo* info = | 1021 ServiceWorkerResponseInfo* info = |
| 1014 ServiceWorkerResponseInfo::ForRequest(request_.get()); | 1022 ServiceWorkerResponseInfo::ForRequest(request_.get()); |
| 1015 ASSERT_TRUE(info); | 1023 ASSERT_TRUE(info); |
| 1016 EXPECT_TRUE(info->was_fetched_via_service_worker()); | 1024 EXPECT_TRUE(info->was_fetched_via_service_worker()); |
| 1017 EXPECT_FALSE(info->was_fallback_required()); | 1025 EXPECT_FALSE(info->was_fallback_required()); |
| 1018 EXPECT_EQ(GURL(), info->original_url_via_service_worker()); | 1026 EXPECT_EQ(0u, info->url_list_via_service_worker().size()); |
| 1019 EXPECT_EQ(blink::WebServiceWorkerResponseTypeDefault, | 1027 EXPECT_EQ(blink::WebServiceWorkerResponseTypeDefault, |
| 1020 info->response_type_via_service_worker()); | 1028 info->response_type_via_service_worker()); |
| 1021 EXPECT_FALSE(info->service_worker_start_time().is_null()); | 1029 EXPECT_FALSE(info->service_worker_start_time().is_null()); |
| 1022 EXPECT_FALSE(info->service_worker_ready_time().is_null()); | 1030 EXPECT_FALSE(info->service_worker_ready_time().is_null()); |
| 1023 EXPECT_FALSE(info->response_is_in_cache_storage()); | 1031 EXPECT_FALSE(info->response_is_in_cache_storage()); |
| 1024 EXPECT_EQ(std::string(), info->response_cache_storage_cache_name()); | 1032 EXPECT_EQ(std::string(), info->response_cache_storage_cache_name()); |
| 1025 | 1033 |
| 1026 EXPECT_TRUE(version_->HasWork()); | 1034 EXPECT_TRUE(version_->HasWork()); |
| 1027 helper->FinishWaitUntil(); | 1035 helper->FinishWaitUntil(); |
| 1028 base::RunLoop().RunUntilIdle(); | 1036 base::RunLoop().RunUntilIdle(); |
| 1029 EXPECT_FALSE(version_->HasWork()); | 1037 EXPECT_FALSE(version_->HasWork()); |
| 1030 } | 1038 } |
| 1031 | 1039 |
| 1032 // Helper for controlling when to respond to a fetch event. | 1040 // Helper for controlling when to respond to a fetch event. |
| 1033 class DelayedResponseHelper : public EmbeddedWorkerTestHelper { | 1041 class DelayedResponseHelper : public EmbeddedWorkerTestHelper { |
| 1034 public: | 1042 public: |
| 1035 DelayedResponseHelper() : EmbeddedWorkerTestHelper(base::FilePath()) {} | 1043 DelayedResponseHelper() : EmbeddedWorkerTestHelper(base::FilePath()) {} |
| 1036 ~DelayedResponseHelper() override {} | 1044 ~DelayedResponseHelper() override {} |
| 1037 | 1045 |
| 1038 void Respond() { | 1046 void Respond() { |
| 1039 SimulateSend(new ServiceWorkerHostMsg_FetchEventResponse( | 1047 SimulateSend(new ServiceWorkerHostMsg_FetchEventResponse( |
| 1040 embedded_worker_id_, fetch_event_id_, | 1048 embedded_worker_id_, fetch_event_id_, |
| 1041 SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, | 1049 SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, |
| 1042 ServiceWorkerResponse( | 1050 ServiceWorkerResponse( |
| 1043 GURL(), 200, "OK", blink::WebServiceWorkerResponseTypeDefault, | 1051 base::MakeUnique<std::vector<GURL>>(), 200, "OK", |
| 1044 ServiceWorkerHeaderMap(), std::string(), 0, GURL(), | 1052 blink::WebServiceWorkerResponseTypeDefault, |
| 1045 blink::WebServiceWorkerResponseErrorUnknown, base::Time(), | 1053 base::MakeUnique<ServiceWorkerHeaderMap>(), std::string(), 0, |
| 1054 GURL(), blink::WebServiceWorkerResponseErrorUnknown, base::Time(), |
| 1046 false /* response_is_in_cache_storage */, | 1055 false /* response_is_in_cache_storage */, |
| 1047 std::string() /* response_cache_storage_cache_name */, | 1056 std::string() /* response_cache_storage_cache_name */, |
| 1048 ServiceWorkerHeaderList() /* cors_exposed_header_names */), | 1057 base::MakeUnique< |
| 1058 ServiceWorkerHeaderList>() /* cors_exposed_header_names */), |
| 1049 base::Time::Now())); | 1059 base::Time::Now())); |
| 1050 callback_.Run(SERVICE_WORKER_OK, base::Time::Now()); | 1060 callback_.Run(SERVICE_WORKER_OK, base::Time::Now()); |
| 1051 } | 1061 } |
| 1052 | 1062 |
| 1053 protected: | 1063 protected: |
| 1054 void OnFetchEvent(int embedded_worker_id, | 1064 void OnFetchEvent(int embedded_worker_id, |
| 1055 int fetch_event_id, | 1065 int fetch_event_id, |
| 1056 const ServiceWorkerFetchRequest& request, | 1066 const ServiceWorkerFetchRequest& request, |
| 1057 mojom::FetchEventPreloadHandlePtr preload_handle, | 1067 mojom::FetchEventPreloadHandlePtr preload_handle, |
| 1058 const FetchCallback& callback) override { | 1068 const FetchCallback& callback) override { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1097 } | 1107 } |
| 1098 | 1108 |
| 1099 // TODO(kinuko): Add more tests with different response data and also for | 1109 // TODO(kinuko): Add more tests with different response data and also for |
| 1100 // FallbackToNetwork case. | 1110 // FallbackToNetwork case. |
| 1101 | 1111 |
| 1102 INSTANTIATE_TEST_CASE_P(ServiceWorkerURLRequestJobTest, | 1112 INSTANTIATE_TEST_CASE_P(ServiceWorkerURLRequestJobTest, |
| 1103 ServiceWorkerURLRequestJobTestP, | 1113 ServiceWorkerURLRequestJobTestP, |
| 1104 testing::Bool()); | 1114 testing::Bool()); |
| 1105 | 1115 |
| 1106 } // namespace content | 1116 } // namespace content |
| OLD | NEW |