| Index: content/browser/service_worker/service_worker_register_job.cc
|
| diff --git a/content/browser/service_worker/service_worker_register_job.cc b/content/browser/service_worker/service_worker_register_job.cc
|
| index 244905ef69c213e2d69d80e35acbdb899aa413a2..68772bd7e5f4bbf8a546289b6d6e084b2ed64a1e 100644
|
| --- a/content/browser/service_worker/service_worker_register_job.cc
|
| +++ b/content/browser/service_worker/service_worker_register_job.cc
|
| @@ -350,6 +350,19 @@ void ServiceWorkerRegisterJob::UpdateAndContinue() {
|
|
|
| void ServiceWorkerRegisterJob::OnStartWorkerFinished(
|
| ServiceWorkerStatusCode status) {
|
| + // Bump the last update check time only when the register/update job fetched
|
| + // the version having bypassed the network cache. We assume that the
|
| + // BYPASS_CACHE flag evicts an existing cache entry, so even if the install
|
| + // ultimately failed for whatever reason, we know the version in the HTTP
|
| + // cache is not stale, so it's OK to bump the update check time.
|
| + if (new_version()->embedded_worker()->network_accessed_for_script() ||
|
| + new_version()->force_bypass_cache_for_scripts()) {
|
| + registration()->set_last_update_check(base::Time::Now());
|
| +
|
| + if (job_type_ == UPDATE_JOB)
|
| + context_->storage()->UpdateLastUpdateCheckTime(registration());
|
| + }
|
| +
|
| if (status == SERVICE_WORKER_OK) {
|
| InstallAndContinue();
|
| return;
|
| @@ -357,16 +370,6 @@ void ServiceWorkerRegisterJob::OnStartWorkerFinished(
|
|
|
| // The updated worker is identical to the incumbent.
|
| if (status == SERVICE_WORKER_ERROR_EXISTS) {
|
| - // Only bump the last check time when we've bypassed the browser cache.
|
| - base::TimeDelta time_since_last_check =
|
| - base::Time::Now() - registration()->last_update_check();
|
| - if (time_since_last_check > base::TimeDelta::FromHours(
|
| - kServiceWorkerScriptMaxCacheAgeInHours) ||
|
| - new_version()->force_bypass_cache_for_scripts()) {
|
| - registration()->set_last_update_check(base::Time::Now());
|
| - context_->storage()->UpdateLastUpdateCheckTime(registration());
|
| - }
|
| -
|
| ResolvePromise(SERVICE_WORKER_OK, std::string(), registration());
|
| Complete(status, "The updated worker is identical to the incumbent.");
|
| return;
|
| @@ -431,7 +434,6 @@ void ServiceWorkerRegisterJob::OnInstallFinished(
|
| }
|
|
|
| SetPhase(STORE);
|
| - registration()->set_last_update_check(base::Time::Now());
|
| context_->storage()->StoreRegistration(
|
| registration(),
|
| new_version(),
|
|
|