Index: content/browser/service_worker/service_worker_write_to_cache_job_unittest.cc |
diff --git a/content/browser/service_worker/service_worker_write_to_cache_job_unittest.cc b/content/browser/service_worker/service_worker_write_to_cache_job_unittest.cc |
index 18115d9b8aa24b82b95b028b1dc49c1ed2ab22a0..e6973c8de485f22442ad984ce2646c8a2f0151bd 100644 |
--- a/content/browser/service_worker/service_worker_write_to_cache_job_unittest.cc |
+++ b/content/browser/service_worker/service_worker_write_to_cache_job_unittest.cc |
@@ -84,6 +84,17 @@ net::URLRequestJob* CreateInvalidMimeTypeJob( |
true); |
} |
+net::URLRequestJob* CreateErrorReponseJob( |
+ net::URLRequest* request, |
+ net::NetworkDelegate* network_delegate) { |
+ const char kErrorHeaders[] = |
+ "HTTP/1.1 404 Not Found\0" |
+ "\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.
|
+ return new net::URLRequestTestJob( |
+ request, network_delegate, |
+ std::string(kErrorHeaders, arraysize(kErrorHeaders)), kScriptCode, true); |
+} |
+ |
class SSLCertificateErrorJob : public net::URLRequestTestJob { |
public: |
SSLCertificateErrorJob(net::URLRequest* request, |
@@ -360,7 +371,9 @@ class ServiceWorkerWriteToCacheJobTest : public testing::Test { |
// Performs the net request for an update of |registration_|'s incumbent |
// to the script |response|. Returns the new version. |
scoped_refptr<ServiceWorkerVersion> UpdateScript( |
- const std::string& response) { |
+ const std::string& response, |
+ bool status_success = true, |
+ bool network_accessed = true) { |
int render_process_id = NextRenderProcessId(); |
int provider_id = NextProviderId(); |
scoped_refptr<ServiceWorkerVersion> new_version = |
@@ -369,8 +382,16 @@ class ServiceWorkerWriteToCacheJobTest : public testing::Test { |
CreateHostForVersion(render_process_id, provider_id, new_version); |
SetUpScriptRequest(render_process_id, provider_id); |
- mock_protocol_handler_->SetCreateJobCallback( |
- base::Bind(&CreateResponseJob, response)); |
+ if (status_success) |
+ mock_protocol_handler_->SetCreateJobCallback( |
+ base::Bind(&CreateResponseJob, response)); |
+ else |
+ mock_protocol_handler_->SetCreateJobCallback( |
+ base::Bind(&CreateErrorReponseJob)); |
+ // Whether the script load request accessed the network or was served from |
+ // HTTPCache. |
+ if (network_accessed) |
+ 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.
|
request_->Start(); |
base::RunLoop().RunUntilIdle(); |
return new_version; |
@@ -573,4 +594,35 @@ TEST_F(ServiceWorkerWriteToCacheJobTest, Update_EmptyScript) { |
EXPECT_EQ(kInvalidServiceWorkerResponseId, GetResourceId(version.get())); |
} |
+TEST_F(ServiceWorkerWriteToCacheJobTest, Update_BumpLastUpdateCheckTime) { |
+ std::string response = GenerateLongResponse(); |
+ CreateIncumbent(response); |
+ |
+ // Script was served from HTTPCache. |
+ base::Time current = base::Time::Now(); |
+ registration_->set_last_update_check(current); |
+ scoped_refptr<ServiceWorkerVersion> version = UpdateScript( |
+ response, true /* status_success */, false /* network_accessed */); |
+ EXPECT_EQ(current, registration_->last_update_check()); |
+ |
+ // Same script but the request accessed the network. |
+ version = UpdateScript(response); |
+ EXPECT_LT(current, registration_->last_update_check()); |
+ |
+ // Changed the first byte and the request accessed the network. |
+ response[0] = 'x'; |
+ current = base::Time::Now(); |
+ registration_->set_last_update_check(current); |
+ version = UpdateScript(response); |
+ VerifyResource(GetResourceId(version.get()), response); |
+ registration_->SetWaitingVersion(version); |
+ EXPECT_LT(current, registration_->last_update_check()); |
+ |
+ // The request accessed the network but received a non-2xx error. |
+ current = base::Time::Now(); |
+ registration_->set_last_update_check(current); |
+ version = UpdateScript(response, false /* status_success */); |
+ EXPECT_EQ(current, registration_->last_update_check()); |
+} |
+ |
} // namespace content |