| Index: content/browser/appcache/appcache_url_loader_job.cc
|
| diff --git a/content/browser/appcache/appcache_url_loader_job.cc b/content/browser/appcache/appcache_url_loader_job.cc
|
| index 8ddd92a49dededf1527e9d065f0f3d539f28e15f..ece139353b103d24bb62546db2399790bd2bc7ba 100644
|
| --- a/content/browser/appcache/appcache_url_loader_job.cc
|
| +++ b/content/browser/appcache/appcache_url_loader_job.cc
|
| @@ -224,16 +224,20 @@ void AppCacheURLLoaderJob::SetSubresourceLoadInfo(
|
| default_url_loader_factory_getter_ = default_url_loader;
|
| }
|
|
|
| -void AppCacheURLLoaderJob::Start(mojom::URLLoaderRequest request,
|
| - mojom::URLLoaderClientPtr client) {
|
| +void AppCacheURLLoaderJob::BindToClient(mojom::URLLoaderClientPtr client,
|
| + mojom::URLLoaderRequest request) {
|
| DCHECK(!binding_.is_bound());
|
| binding_.Bind(std::move(request));
|
|
|
| + client_ = std::move(client);
|
| +
|
| binding_.set_connection_error_handler(base::Bind(
|
| &AppCacheURLLoaderJob::OnConnectionError, StaticAsWeakPtr(this)));
|
| +}
|
|
|
| - client_ = std::move(client);
|
| -
|
| +void AppCacheURLLoaderJob::Start(mojom::URLLoaderRequest request,
|
| + mojom::URLLoaderClientPtr client) {
|
| + BindToClient(std::move(client), std::move(request));
|
| // Send the cached AppCacheResponse if any.
|
| if (info_.get())
|
| SendResponseInfo();
|
| @@ -272,7 +276,7 @@ void AppCacheURLLoaderJob::OnResponseInfoLoaded(
|
| if (is_range_request())
|
| SetupRangeResponse();
|
|
|
| - if (IsResourceTypeFrame(request_.resource_type)) {
|
| + if (IsResourceTypeFrame(request_.resource_type) && !client_) {
|
| DCHECK(!main_resource_loader_callback_.is_null());
|
| std::move(main_resource_loader_callback_)
|
| .Run(base::Bind(&AppCacheURLLoaderJob::Start, StaticAsWeakPtr(this)));
|
| @@ -429,9 +433,9 @@ void AppCacheURLLoaderJob::NotifyCompleted(int error_code) {
|
| if (storage_.get())
|
| storage_->CancelDelegateCallbacks(this);
|
|
|
| - const net::HttpResponseInfo* http_info = is_range_request()
|
| - ? range_response_info_.get()
|
| - : info_->http_response_info();
|
| + const net::HttpResponseInfo* http_info =
|
| + is_range_request() ? range_response_info_.get()
|
| + : (info_ ? info_->http_response_info() : nullptr);
|
|
|
| ResourceRequestCompletionStatus request_complete_data;
|
| request_complete_data.error_code = error_code;
|
| @@ -444,7 +448,7 @@ void AppCacheURLLoaderJob::NotifyCompleted(int error_code) {
|
| request_complete_data.completion_time = base::TimeTicks::Now();
|
| request_complete_data.encoded_body_length =
|
| is_range_request() ? range_response_info_->headers->GetContentLength()
|
| - : info_->response_data_size();
|
| + : (info_ ? info_->response_data_size() : 0);
|
| request_complete_data.decoded_body_length =
|
| request_complete_data.encoded_body_length;
|
| }
|
|
|