| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "content/renderer/fetchers/web_url_loader_client_impl.h" |
| |
| #include "base/logging.h" |
| #include "third_party/WebKit/public/platform/WebURLError.h" |
| #include "third_party/WebKit/public/platform/WebURLLoader.h" |
| #include "third_party/WebKit/public/platform/WebURLResponse.h" |
| |
| namespace content { |
| |
| WebURLLoaderClientImpl::WebURLLoaderClientImpl() |
| : completed_(false) |
| , status_(LOADING) { |
| } |
| |
| WebURLLoaderClientImpl::~WebURLLoaderClientImpl() { |
| } |
| |
| void WebURLLoaderClientImpl::didReceiveResponse( |
| blink::WebURLLoader* loader, const blink::WebURLResponse& response) { |
| DCHECK(!completed_); |
| response_ = response; |
| } |
| |
| void WebURLLoaderClientImpl::didReceiveData( |
| blink::WebURLLoader* loader, |
| const char* data, |
| int data_length, |
| int encoded_data_length) { |
| // The AssociatedURLLoader will continue after a load failure. |
| // For example, for an Access Control error. |
| if (completed_) |
| return; |
| DCHECK(data_length > 0); |
| |
| data_.append(data, data_length); |
| } |
| |
| void WebURLLoaderClientImpl::didReceiveCachedMetadata( |
| blink::WebURLLoader* loader, |
| const char* data, |
| int data_length) { |
| DCHECK(!completed_); |
| DCHECK(data_length > 0); |
| |
| metadata_.assign(data, data_length); |
| } |
| |
| void WebURLLoaderClientImpl::didFinishLoading( |
| blink::WebURLLoader* loader, |
| double finishTime, |
| int64_t total_encoded_data_length) { |
| // The AssociatedURLLoader will continue after a load failure. |
| // For example, for an Access Control error. |
| if (completed_) |
| return; |
| OnLoadCompleteInternal(LOAD_SUCCEEDED); |
| } |
| |
| void WebURLLoaderClientImpl::didFail(blink::WebURLLoader* loader, |
| const blink::WebURLError& error) { |
| OnLoadCompleteInternal(LOAD_FAILED); |
| } |
| |
| void WebURLLoaderClientImpl::Cancel() { |
| OnLoadCompleteInternal(LOAD_FAILED); |
| } |
| |
| void WebURLLoaderClientImpl::OnLoadCompleteInternal(LoadStatus status) { |
| DCHECK(!completed_); |
| DCHECK(status_ == LOADING); |
| |
| completed_ = true; |
| status_ = status; |
| |
| OnLoadComplete(); |
| } |
| |
| } // namespace content |