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 |