Index: content/browser/service_worker/service_worker_read_from_cache_job.cc |
diff --git a/content/browser/service_worker/service_worker_read_from_cache_job.cc b/content/browser/service_worker/service_worker_read_from_cache_job.cc |
index 094bd73d35b3c596278a9cd7268aa98fcd294b38..f6809dda66d843ef2f91762af2a0dd9c153e7b71 100644 |
--- a/content/browser/service_worker/service_worker_read_from_cache_job.cc |
+++ b/content/browser/service_worker/service_worker_read_from_cache_job.cc |
@@ -11,6 +11,7 @@ |
#include "content/browser/service_worker/service_worker_context_core.h" |
#include "content/browser/service_worker/service_worker_disk_cache.h" |
#include "content/browser/service_worker/service_worker_metrics.h" |
+#include "content/public/browser/browser_thread.h" |
#include "net/base/io_buffer.h" |
#include "net/base/net_errors.h" |
#include "net/http/http_request_headers.h" |
@@ -193,9 +194,15 @@ void ServiceWorkerReadFromCacheJob::SetupRangeResponse(int resource_size) { |
} |
void ServiceWorkerReadFromCacheJob::Done(const net::URLRequestStatus& status) { |
+ DCHECK_CURRENTLY_ON(BrowserThread::IO); |
if (!status.is_success()) { |
version_->SetStartWorkerStatusCode(SERVICE_WORKER_ERROR_DISK_CACHE); |
- // TODO(falken): Retry and evict the SW if it fails again. |
+ // TODO(falken): Retry before evicting. |
+ if (context_) { |
+ ServiceWorkerRegistration* registration = |
+ context_->GetLiveRegistration(version_->registration_id()); |
+ registration->DeleteVersion(version_); |
+ } |
} |
NotifyDone(status); |
} |