Index: content/renderer/fetchers/resource_fetcher_impl.cc |
diff --git a/content/renderer/fetchers/resource_fetcher_impl.cc b/content/renderer/fetchers/resource_fetcher_impl.cc |
index 7b25d1284147bb6c9759015ad1a14999ab7654aa..c175abcd79aa00fbdeef1dce707ebf78e70a5d75 100644 |
--- a/content/renderer/fetchers/resource_fetcher_impl.cc |
+++ b/content/renderer/fetchers/resource_fetcher_impl.cc |
@@ -35,12 +35,11 @@ ResourceFetcher* ResourceFetcher::Create(const GURL& url) { |
} |
ResourceFetcherImpl::ResourceFetcherImpl(const GURL& url) |
- : request_(url), |
- completed_(false) { |
+ : request_(url) { |
} |
ResourceFetcherImpl::~ResourceFetcherImpl() { |
- if (!completed_ && loader_) |
+ if (!completed() && loader_) |
loader_->cancel(); |
} |
@@ -81,11 +80,12 @@ void ResourceFetcherImpl::SetHeader(const std::string& header, |
void ResourceFetcherImpl::Start(WebFrame* frame, |
WebURLRequest::RequestContext request_context, |
WebURLRequest::FrameType frame_type, |
+ LoaderType loader_type, |
const Callback& callback) { |
DCHECK(!loader_); |
DCHECK(!request_.isNull()); |
DCHECK(callback_.is_null()); |
- DCHECK(!completed_); |
+ DCHECK(!completed()); |
if (!request_.httpBody().isNull()) |
DCHECK_NE("GET", request_.httpMethod().utf8()) << "GETs can't have bodies."; |
@@ -95,7 +95,15 @@ void ResourceFetcherImpl::Start(WebFrame* frame, |
request_.setFrameType(frame_type); |
request_.setFirstPartyForCookies(frame->document().firstPartyForCookies()); |
frame->dispatchWillSendRequest(request_); |
- loader_.reset(blink::Platform::current()->createURLLoader()); |
+ |
+ switch (loader_type) { |
+ case PLATFORM_LOADER: |
+ loader_.reset(blink::Platform::current()->createURLLoader()); |
+ break; |
+ case FRAME_ASSOCIATED_LOADER: |
+ loader_.reset(frame->createAssociatedURLLoader()); |
+ break; |
+ } |
loader_->loadAsynchronously(request_, this); |
// No need to hold on to the request. |
@@ -104,15 +112,12 @@ void ResourceFetcherImpl::Start(WebFrame* frame, |
void ResourceFetcherImpl::SetTimeout(const base::TimeDelta& timeout) { |
DCHECK(loader_); |
- DCHECK(!completed_); |
+ DCHECK(!completed()); |
- timeout_timer_.Start(FROM_HERE, timeout, this, |
- &ResourceFetcherImpl::TimeoutFired); |
+ timeout_timer_.Start(FROM_HERE, timeout, this, &ResourceFetcherImpl::Cancel); |
} |
-void ResourceFetcherImpl::RunCallback(const WebURLResponse& response, |
- const std::string& data) { |
- completed_ = true; |
+void ResourceFetcherImpl::OnLoadComplete() { |
timeout_timer_.Stop(); |
if (callback_.is_null()) |
return; |
@@ -120,65 +125,13 @@ void ResourceFetcherImpl::RunCallback(const WebURLResponse& response, |
// Take a reference to the callback as running the callback may lead to our |
// destruction. |
Callback callback = callback_; |
- callback.Run(response, data); |
+ callback.Run(status() == LOAD_FAILED ? blink::WebURLResponse() : response(), |
+ status() == LOAD_FAILED ? std::string() : data()); |
} |
-void ResourceFetcherImpl::TimeoutFired() { |
- DCHECK(!completed_); |
+void ResourceFetcherImpl::Cancel() { |
loader_->cancel(); |
- RunCallback(WebURLResponse(), std::string()); |
-} |
- |
-///////////////////////////////////////////////////////////////////////////// |
-// WebURLLoaderClient methods |
- |
-void ResourceFetcherImpl::willSendRequest( |
- WebURLLoader* loader, WebURLRequest& new_request, |
- const WebURLResponse& redirect_response) { |
-} |
- |
-void ResourceFetcherImpl::didSendData( |
- WebURLLoader* loader, unsigned long long bytes_sent, |
- unsigned long long total_bytes_to_be_sent) { |
-} |
- |
-void ResourceFetcherImpl::didReceiveResponse( |
- WebURLLoader* loader, const WebURLResponse& response) { |
- DCHECK(!completed_); |
- response_ = response; |
-} |
- |
-void ResourceFetcherImpl::didReceiveData( |
- WebURLLoader* loader, const char* data, int data_length, |
- int encoded_data_length) { |
- DCHECK(!completed_); |
- DCHECK(data_length > 0); |
- |
- data_.append(data, data_length); |
-} |
- |
-void ResourceFetcherImpl::didReceiveCachedMetadata( |
- WebURLLoader* loader, const char* data, int data_length) { |
- DCHECK(!completed_); |
- DCHECK(data_length > 0); |
- |
- metadata_.assign(data, data_length); |
-} |
- |
-void ResourceFetcherImpl::didFinishLoading( |
- WebURLLoader* loader, double finishTime, |
- int64_t total_encoded_data_length) { |
- DCHECK(!completed_); |
- |
- RunCallback(response_, data_); |
-} |
- |
-void ResourceFetcherImpl::didFail(WebURLLoader* loader, |
- const WebURLError& error) { |
- DCHECK(!completed_); |
- |
- // Go ahead and tell our delegate that we're done. |
- RunCallback(WebURLResponse(), std::string()); |
+ WebURLLoaderClientImpl::Cancel(); |
} |
} // namespace content |