Index: content/browser/service_worker/service_worker_url_request_job.cc |
diff --git a/content/browser/service_worker/service_worker_url_request_job.cc b/content/browser/service_worker/service_worker_url_request_job.cc |
index 7b5fe06e0bb29ae275318b5b38ca6d0d4f7dd5b2..a8249b0a378168bddea8678e18ffad18d5e1e07b 100644 |
--- a/content/browser/service_worker/service_worker_url_request_job.cc |
+++ b/content/browser/service_worker/service_worker_url_request_job.cc |
@@ -22,6 +22,7 @@ |
#include "base/time/time.h" |
#include "content/browser/resource_context_impl.h" |
#include "content/browser/service_worker/embedded_worker_instance.h" |
+#include "content/browser/service_worker/service_worker_blob_reader.h" |
#include "content/browser/service_worker/service_worker_fetch_dispatcher.h" |
#include "content/browser/service_worker/service_worker_provider_host.h" |
#include "content/browser/service_worker/service_worker_response_info.h" |
@@ -44,7 +45,6 @@ |
#include "storage/browser/blob/blob_data_builder.h" |
#include "storage/browser/blob/blob_data_handle.h" |
#include "storage/browser/blob/blob_storage_context.h" |
-#include "storage/browser/blob/blob_url_request_job_factory.h" |
#include "ui/base/page_transition_types.h" |
namespace content { |
@@ -280,7 +280,7 @@ void ServiceWorkerURLRequestJob::Kill() { |
net::URLRequestJob::Kill(); |
ClearStream(); |
fetch_dispatcher_.reset(); |
- blob_request_.reset(); |
+ blob_reader_.reset(); |
weak_factory_.InvalidateWeakPtrs(); |
} |
@@ -340,9 +340,8 @@ int ServiceWorkerURLRequestJob::ReadRawData(net::IOBuffer* buf, int buf_size) { |
DCHECK_GE(buf_size, 0); |
DCHECK(waiting_stream_url_.is_empty()); |
- int bytes_read = 0; |
- |
if (stream_.get()) { |
+ int bytes_read = 0; |
switch (stream_->ReadRawData(buf, buf_size, &bytes_read)) { |
case Stream::STREAM_HAS_DATA: |
DCHECK_GT(bytes_read, 0); |
@@ -364,65 +363,38 @@ int ServiceWorkerURLRequestJob::ReadRawData(net::IOBuffer* buf, int buf_size) { |
return net::ERR_FAILED; |
} |
- if (!blob_request_) |
- return 0; |
- blob_request_->Read(buf, buf_size, &bytes_read); |
- net::URLRequestStatus status = blob_request_->status(); |
- if (status.status() != net::URLRequestStatus::SUCCESS) |
- return status.error(); |
- if (bytes_read == 0) |
- RecordResult(ServiceWorkerMetrics::REQUEST_JOB_BLOB_RESPONSE); |
- return bytes_read; |
-} |
- |
-// TODO(falken): Refactor Blob and Stream specific handling to separate classes. |
-// Overrides for Blob reading ------------------------------------------------- |
- |
-void ServiceWorkerURLRequestJob::OnReceivedRedirect( |
- net::URLRequest* request, |
- const net::RedirectInfo& redirect_info, |
- bool* defer_redirect) { |
- NOTREACHED(); |
-} |
- |
-void ServiceWorkerURLRequestJob::OnAuthRequired( |
- net::URLRequest* request, |
- net::AuthChallengeInfo* auth_info) { |
- NOTREACHED(); |
-} |
- |
-void ServiceWorkerURLRequestJob::OnCertificateRequested( |
- net::URLRequest* request, |
- net::SSLCertRequestInfo* cert_request_info) { |
- NOTREACHED(); |
-} |
+ if (blob_reader_) |
+ return blob_reader_->ReadRawData(buf, buf_size); |
-void ServiceWorkerURLRequestJob::OnSSLCertificateError( |
- net::URLRequest* request, |
- const net::SSLInfo& ssl_info, |
- bool fatal) { |
- NOTREACHED(); |
+ return 0; |
} |
-void ServiceWorkerURLRequestJob::OnResponseStarted(net::URLRequest* request) { |
- // TODO(falken): Add Content-Length, Content-Type if they were not provided in |
- // the ServiceWorkerResponse. |
+void ServiceWorkerURLRequestJob::OnResponseStarted() { |
if (response_time_.is_null()) |
response_time_ = base::Time::Now(); |
CommitResponseHeader(); |
} |
-void ServiceWorkerURLRequestJob::OnReadCompleted(net::URLRequest* request, |
- int bytes_read) { |
- if (!request->status().is_success()) { |
- RecordResult(ServiceWorkerMetrics::REQUEST_JOB_ERROR_BLOB_READ); |
- } else if (bytes_read == 0) { |
- RecordResult(ServiceWorkerMetrics::REQUEST_JOB_BLOB_RESPONSE); |
+void ServiceWorkerURLRequestJob::OnReadRawDataComplete(int bytes_read) { |
+ ReadRawDataComplete(bytes_read); |
+} |
+ |
+void ServiceWorkerURLRequestJob::RecordResult( |
+ ServiceWorkerMetrics::URLRequestJobResult result) { |
+ // It violates style guidelines to handle a NOTREACHED() failure but if there |
+ // is a bug don't let it corrupt UMA results by double-counting. |
+ if (!ShouldRecordResult()) { |
+ NOTREACHED(); |
+ return; |
+ } |
+ did_record_result_ = true; |
+ ServiceWorkerMetrics::RecordURLRequestJobResult(IsMainResourceLoad(), result); |
+ if (request()) { |
+ request()->net_log().AddEvent(RequestJobResultToNetEventType(result)); |
} |
- net::URLRequestStatus status = request->status(); |
- ReadRawDataComplete(status.is_success() ? bytes_read : status.error()); |
} |
+// TODO(falken): Refactor Stream specific handling to a separate class. |
// Overrides for Stream reading ----------------------------------------------- |
void ServiceWorkerURLRequestJob::OnDataAvailable(Stream* stream) { |
@@ -787,14 +759,12 @@ void ServiceWorkerURLRequestJob::DidDispatchFetchEvent( |
DeliverErrorResponse(); |
return; |
} |
- blob_request_ = storage::BlobProtocolHandler::CreateBlobRequest( |
- std::move(blob_data_handle), request()->context(), this); |
- blob_request_->Start(); |
+ blob_reader_.reset(new ServiceWorkerBlobReader(this)); |
+ blob_reader_->Start(std::move(blob_data_handle), request()->context()); |
} |
SetResponse(response); |
- |
- if (!blob_request_) { |
+ if (!blob_reader_) { |
RecordResult(ServiceWorkerMetrics::REQUEST_JOB_HEADERS_ONLY_RESPONSE); |
CommitResponseHeader(); |
} |
@@ -842,7 +812,7 @@ void ServiceWorkerURLRequestJob::CommitResponseHeader() { |
http_response_info_->headers.swap(http_response_headers_); |
http_response_info_->vary_data = net::HttpVaryData(); |
http_response_info_->metadata = |
- blob_request_ ? blob_request_->response_info().metadata : nullptr; |
+ blob_reader_ ? blob_reader_->response_metadata() : nullptr; |
NotifyHeadersComplete(); |
} |
@@ -908,20 +878,6 @@ bool ServiceWorkerURLRequestJob::ShouldRecordResult() { |
response_type_ == FORWARD_TO_SERVICE_WORKER; |
} |
-void ServiceWorkerURLRequestJob::RecordResult( |
- ServiceWorkerMetrics::URLRequestJobResult result) { |
- // It violates style guidelines to handle a NOTREACHED() failure but if there |
- // is a bug don't let it corrupt UMA results by double-counting. |
- if (!ShouldRecordResult()) { |
- NOTREACHED(); |
- return; |
- } |
- did_record_result_ = true; |
- ServiceWorkerMetrics::RecordURLRequestJobResult(IsMainResourceLoad(), result); |
- if (request()) |
- request()->net_log().AddEvent(RequestJobResultToNetEventType(result)); |
-} |
- |
void ServiceWorkerURLRequestJob::RecordStatusZeroResponseError( |
blink::WebServiceWorkerResponseError error) { |
// It violates style guidelines to handle a NOTREACHED() failure but if there |