Chromium Code Reviews| 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 aecf390039264b9f70208f4304446309c2b4bd49..47b0b2b6b990e2200bc2d58e619761ac68023b82 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 |
| @@ -41,11 +41,18 @@ ServiceWorkerReadFromCacheJob::~ServiceWorkerReadFromCacheJob() { |
| } |
| void ServiceWorkerReadFromCacheJob::Start() { |
| + base::ThreadTaskRunnerHandle::Get()->PostTask( |
| + FROM_HERE, base::Bind(&ServiceWorkerReadFromCacheJob::StartAsync, |
| + weak_factory_.GetWeakPtr())); |
| +} |
| + |
| +void ServiceWorkerReadFromCacheJob::StartAsync() { |
|
mmenke
2015/10/30 20:06:43
Should be in declaration order.
xunjieli
2015/10/30 20:33:28
Done. The order in this file doesn't strictly adhe
|
| TRACE_EVENT_ASYNC_BEGIN1("ServiceWorker", |
| "ServiceWorkerReadFromCacheJob::ReadInfo", |
| this, |
| "URL", request_->url().spec()); |
| if (!context_) { |
| + // NotifyStartError is not safe to call synchronously in Start. |
| NotifyStartError(net::URLRequestStatus( |
| net::URLRequestStatus::FAILED, net::ERR_FAILED)); |
| return; |
| @@ -123,22 +130,18 @@ void ServiceWorkerReadFromCacheJob::SetExtraRequestHeaders( |
| range_requested_ = ranges[0]; |
| } |
| -bool ServiceWorkerReadFromCacheJob::ReadRawData( |
| - net::IOBuffer* buf, |
| - int buf_size, |
| - int *bytes_read) { |
| +int ServiceWorkerReadFromCacheJob::ReadRawData(net::IOBuffer* buf, |
| + int buf_size) { |
| DCHECK_NE(buf_size, 0); |
| - DCHECK(bytes_read); |
| DCHECK(!reader_->IsReadPending()); |
| TRACE_EVENT_ASYNC_BEGIN1("ServiceWorker", |
| "ServiceWorkerReadFromCacheJob::ReadRawData", |
| this, |
| "URL", request_->url().spec()); |
| - reader_->ReadData( |
| - buf, buf_size, base::Bind(&ServiceWorkerReadFromCacheJob::OnReadComplete, |
| - weak_factory_.GetWeakPtr())); |
| - SetStatus(net::URLRequestStatus(net::URLRequestStatus::IO_PENDING, 0)); |
| - return false; |
| + reader_->ReadData(buf, buf_size, |
| + base::Bind(&ServiceWorkerReadFromCacheJob::OnReadComplete, |
| + weak_factory_.GetWeakPtr())); |
| + return net::ERR_IO_PENDING; |
| } |
| const net::HttpResponseInfo* ServiceWorkerReadFromCacheJob::http_info() const { |
| @@ -156,6 +159,8 @@ void ServiceWorkerReadFromCacheJob::OnReadInfoComplete(int result) { |
| ServiceWorkerMetrics::CountReadResponseResult( |
| ServiceWorkerMetrics::READ_HEADERS_ERROR); |
| Done(net::URLRequestStatus(net::URLRequestStatus::FAILED, result)); |
| + NotifyStartError( |
| + net::URLRequestStatus(net::URLRequestStatus::FAILED, result)); |
| return; |
| } |
| DCHECK_GE(result, 0); |
| @@ -209,23 +214,22 @@ void ServiceWorkerReadFromCacheJob::Done(const net::URLRequestStatus& status) { |
| } |
| if (is_main_script()) |
| version_->embedded_worker()->OnScriptReadFinished(); |
| - NotifyDone(status); |
| } |
| void ServiceWorkerReadFromCacheJob::OnReadComplete(int result) { |
| ServiceWorkerMetrics::ReadResponseResult check_result; |
| - if (result == 0) { |
| + |
| + if (result >= 0) { |
| check_result = ServiceWorkerMetrics::READ_OK; |
| - Done(net::URLRequestStatus()); |
| - } else if (result < 0) { |
| + if (result == 0) |
| + Done(net::URLRequestStatus()); |
| + } else { |
| check_result = ServiceWorkerMetrics::READ_DATA_ERROR; |
| Done(net::URLRequestStatus(net::URLRequestStatus::FAILED, result)); |
| - } else { |
| - check_result = ServiceWorkerMetrics::READ_OK; |
| - SetStatus(net::URLRequestStatus()); // Clear the IO_PENDING status |
| } |
| + |
| ServiceWorkerMetrics::CountReadResponseResult(check_result); |
| - NotifyReadComplete(result); |
| + ReadRawDataComplete(result); |
| TRACE_EVENT_ASYNC_END1("ServiceWorker", |
| "ServiceWorkerReadFromCacheJob::ReadRawData", |
| this, |