Chromium Code Reviews| 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 "base/location.h" | 5 #include "base/location.h" |
| 6 #include "base/run_loop.h" | 6 #include "base/run_loop.h" |
| 7 #include "base/single_thread_task_runner.h" | 7 #include "base/single_thread_task_runner.h" |
| 8 #include "base/thread_task_runner_handle.h" | 8 #include "base/thread_task_runner_handle.h" |
| 9 #include "content/browser/fileapi/mock_url_request_delegate.h" | 9 #include "content/browser/fileapi/mock_url_request_delegate.h" |
| 10 #include "content/browser/service_worker/embedded_worker_test_helper.h" | 10 #include "content/browser/service_worker/embedded_worker_test_helper.h" |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 77 "Expires: Thu, 1 Jan 2100 20:00:00 GMT\0" | 77 "Expires: Thu, 1 Jan 2100 20:00:00 GMT\0" |
| 78 "\0"; | 78 "\0"; |
| 79 return new net::URLRequestTestJob( | 79 return new net::URLRequestTestJob( |
| 80 request, | 80 request, |
| 81 network_delegate, | 81 network_delegate, |
| 82 std::string(kPlainTextHeaders, arraysize(kPlainTextHeaders)), | 82 std::string(kPlainTextHeaders, arraysize(kPlainTextHeaders)), |
| 83 kScriptCode, | 83 kScriptCode, |
| 84 true); | 84 true); |
| 85 } | 85 } |
| 86 | 86 |
| 87 net::URLRequestJob* CreateErrorReponseJob( | |
| 88 net::URLRequest* request, | |
| 89 net::NetworkDelegate* network_delegate) { | |
| 90 const char kErrorHeaders[] = | |
| 91 "HTTP/1.1 404 Not Found\0" | |
| 92 "\0"; | |
|
nhiroki
2015/09/07 07:05:59
nit: These lines could be squashed into line 90.
jungkees
2015/09/08 16:01:13
Done.
| |
| 93 return new net::URLRequestTestJob( | |
| 94 request, network_delegate, | |
| 95 std::string(kErrorHeaders, arraysize(kErrorHeaders)), kScriptCode, true); | |
| 96 } | |
| 97 | |
| 87 class SSLCertificateErrorJob : public net::URLRequestTestJob { | 98 class SSLCertificateErrorJob : public net::URLRequestTestJob { |
| 88 public: | 99 public: |
| 89 SSLCertificateErrorJob(net::URLRequest* request, | 100 SSLCertificateErrorJob(net::URLRequest* request, |
| 90 net::NetworkDelegate* network_delegate, | 101 net::NetworkDelegate* network_delegate, |
| 91 const std::string& response_headers, | 102 const std::string& response_headers, |
| 92 const std::string& response_data, | 103 const std::string& response_data, |
| 93 bool auto_advance) | 104 bool auto_advance) |
| 94 : net::URLRequestTestJob(request, | 105 : net::URLRequestTestJob(request, |
| 95 network_delegate, | 106 network_delegate, |
| 96 response_headers, | 107 response_headers, |
| (...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 353 return incumbent_resource_id; | 364 return incumbent_resource_id; |
| 354 } | 365 } |
| 355 | 366 |
| 356 int GetResourceId(ServiceWorkerVersion* version) { | 367 int GetResourceId(ServiceWorkerVersion* version) { |
| 357 return version->script_cache_map()->LookupResourceId(script_url_); | 368 return version->script_cache_map()->LookupResourceId(script_url_); |
| 358 } | 369 } |
| 359 | 370 |
| 360 // Performs the net request for an update of |registration_|'s incumbent | 371 // Performs the net request for an update of |registration_|'s incumbent |
| 361 // to the script |response|. Returns the new version. | 372 // to the script |response|. Returns the new version. |
| 362 scoped_refptr<ServiceWorkerVersion> UpdateScript( | 373 scoped_refptr<ServiceWorkerVersion> UpdateScript( |
| 363 const std::string& response) { | 374 const std::string& response, |
| 375 bool status_success = true, | |
| 376 bool network_accessed = true) { | |
| 364 int render_process_id = NextRenderProcessId(); | 377 int render_process_id = NextRenderProcessId(); |
| 365 int provider_id = NextProviderId(); | 378 int provider_id = NextProviderId(); |
| 366 scoped_refptr<ServiceWorkerVersion> new_version = | 379 scoped_refptr<ServiceWorkerVersion> new_version = |
| 367 new ServiceWorkerVersion(registration_.get(), script_url_, | 380 new ServiceWorkerVersion(registration_.get(), script_url_, |
| 368 NextVersionId(), context()->AsWeakPtr()); | 381 NextVersionId(), context()->AsWeakPtr()); |
| 369 CreateHostForVersion(render_process_id, provider_id, new_version); | 382 CreateHostForVersion(render_process_id, provider_id, new_version); |
| 370 | 383 |
| 371 SetUpScriptRequest(render_process_id, provider_id); | 384 SetUpScriptRequest(render_process_id, provider_id); |
| 372 mock_protocol_handler_->SetCreateJobCallback( | 385 if (status_success) |
| 373 base::Bind(&CreateResponseJob, response)); | 386 mock_protocol_handler_->SetCreateJobCallback( |
| 387 base::Bind(&CreateResponseJob, response)); | |
| 388 else | |
| 389 mock_protocol_handler_->SetCreateJobCallback( | |
| 390 base::Bind(&CreateErrorReponseJob)); | |
| 391 // Whether the script load request accessed the network or was served from | |
| 392 // HTTPCache. | |
| 393 if (network_accessed) | |
| 394 new_version->embedded_worker()->OnNetworkAccessedForScriptLoad(); | |
|
nhiroki
2015/09/07 07:05:59
This might not be necessary after incorporating my
jungkees
2015/09/08 16:01:13
Yes, this part has been removed.
| |
| 374 request_->Start(); | 395 request_->Start(); |
| 375 base::RunLoop().RunUntilIdle(); | 396 base::RunLoop().RunUntilIdle(); |
| 376 return new_version; | 397 return new_version; |
| 377 } | 398 } |
| 378 | 399 |
| 379 void VerifyResource(int id, const std::string& expected) { | 400 void VerifyResource(int id, const std::string& expected) { |
| 380 ASSERT_NE(kInvalidServiceWorkerResourceId, id); | 401 ASSERT_NE(kInvalidServiceWorkerResourceId, id); |
| 381 bool is_equal = false; | 402 bool is_equal = false; |
| 382 scoped_ptr<ServiceWorkerResponseReader> reader = | 403 scoped_ptr<ServiceWorkerResponseReader> reader = |
| 383 context()->storage()->CreateResponseReader(id); | 404 context()->storage()->CreateResponseReader(id); |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 566 // Update from non-empty to empty. | 587 // Update from non-empty to empty. |
| 567 version = UpdateScript(std::string()); | 588 version = UpdateScript(std::string()); |
| 568 VerifyResource(GetResourceId(version.get()), std::string()); | 589 VerifyResource(GetResourceId(version.get()), std::string()); |
| 569 registration_->SetWaitingVersion(version); | 590 registration_->SetWaitingVersion(version); |
| 570 | 591 |
| 571 // Update from empty to empty. | 592 // Update from empty to empty. |
| 572 version = UpdateScript(std::string()); | 593 version = UpdateScript(std::string()); |
| 573 EXPECT_EQ(kInvalidServiceWorkerResponseId, GetResourceId(version.get())); | 594 EXPECT_EQ(kInvalidServiceWorkerResponseId, GetResourceId(version.get())); |
| 574 } | 595 } |
| 575 | 596 |
| 597 TEST_F(ServiceWorkerWriteToCacheJobTest, Update_BumpLastUpdateCheckTime) { | |
| 598 std::string response = GenerateLongResponse(); | |
| 599 CreateIncumbent(response); | |
| 600 | |
| 601 // Script was served from HTTPCache. | |
| 602 base::Time current = base::Time::Now(); | |
| 603 registration_->set_last_update_check(current); | |
| 604 scoped_refptr<ServiceWorkerVersion> version = UpdateScript( | |
| 605 response, true /* status_success */, false /* network_accessed */); | |
| 606 EXPECT_EQ(current, registration_->last_update_check()); | |
| 607 | |
| 608 // Same script but the request accessed the network. | |
| 609 version = UpdateScript(response); | |
| 610 EXPECT_LT(current, registration_->last_update_check()); | |
| 611 | |
| 612 // Changed the first byte and the request accessed the network. | |
| 613 response[0] = 'x'; | |
| 614 current = base::Time::Now(); | |
| 615 registration_->set_last_update_check(current); | |
| 616 version = UpdateScript(response); | |
| 617 VerifyResource(GetResourceId(version.get()), response); | |
| 618 registration_->SetWaitingVersion(version); | |
| 619 EXPECT_LT(current, registration_->last_update_check()); | |
| 620 | |
| 621 // The request accessed the network but received a non-2xx error. | |
| 622 current = base::Time::Now(); | |
| 623 registration_->set_last_update_check(current); | |
| 624 version = UpdateScript(response, false /* status_success */); | |
| 625 EXPECT_EQ(current, registration_->last_update_check()); | |
| 626 } | |
| 627 | |
| 576 } // namespace content | 628 } // namespace content |
| OLD | NEW |