| Index: content/browser/service_worker/service_worker_write_to_cache_job.cc
|
| diff --git a/content/browser/service_worker/service_worker_write_to_cache_job.cc b/content/browser/service_worker/service_worker_write_to_cache_job.cc
|
| index fea86a4b91692010ee6b80cb46e441c2e5b67203..4e2c24fd49051f23ed7503186f8882f8e018b1af 100644
|
| --- a/content/browser/service_worker/service_worker_write_to_cache_job.cc
|
| +++ b/content/browser/service_worker/service_worker_write_to_cache_job.cc
|
| @@ -360,7 +360,8 @@ void ServiceWorkerWriteToCacheJob::OnReadCompleted(
|
| net::URLRequest* request,
|
| int bytes_read) {
|
| DCHECK_EQ(net_request_, request);
|
| - if (!request->status().is_success()) {
|
| + if (bytes_read < 0) {
|
| + DCHECK(!request->status().is_success());
|
| AsyncNotifyDoneHelper(request->status());
|
| return;
|
| }
|
| @@ -368,18 +369,20 @@ void ServiceWorkerWriteToCacheJob::OnReadCompleted(
|
| WriteDataToCache(bytes_read);
|
| return;
|
| }
|
| - TRACE_EVENT_ASYNC_STEP_INTO0("ServiceWorker",
|
| - "ServiceWorkerWriteToCacheJob::ExecutingJob",
|
| - this,
|
| - "WriteHeadersToCache");
|
| - // We're done with all.
|
| - AsyncNotifyDoneHelper(request->status());
|
| - return;
|
| + // No more data to process, the job is complete.
|
| + DCHECK(request->status().is_success());
|
| + io_buffer_ = NULL;
|
| + version_->script_cache_map()->NotifyFinishedCaching(
|
| + url_, net::URLRequestStatus());
|
| + did_notify_finished_ = true;
|
| + SetStatus(net::URLRequestStatus()); // Clear the IO_PENDING status
|
| + NotifyReadComplete(0);
|
| }
|
|
|
| void ServiceWorkerWriteToCacheJob::AsyncNotifyDoneHelper(
|
| const net::URLRequestStatus& status) {
|
| DCHECK(!status.is_io_pending());
|
| + DCHECK(!did_notify_finished_);
|
| version_->script_cache_map()->NotifyFinishedCaching(url_, status);
|
| did_notify_finished_ = true;
|
| SetStatus(status);
|
|
|