Chromium Code Reviews| 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..5155d31ce44b006398924c8a3d0fe69011a8aa4b 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::BindRequest(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) { |
| + BindRequest(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_) { |
|
michaeln
2017/07/26 23:08:41
i don't understand the purpose of the !client_ che
ananta
2017/07/27 02:40:25
For fallback responses the callback would be null.
|
| 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; |
| } |