Chromium Code Reviews| Index: content/renderer/fetchers/manifest_fetcher.cc |
| diff --git a/content/renderer/fetchers/manifest_fetcher.cc b/content/renderer/fetchers/manifest_fetcher.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..f9ace8e7cb82f2fb1450ea4393632369695c5caf |
| --- /dev/null |
| +++ b/content/renderer/fetchers/manifest_fetcher.cc |
| @@ -0,0 +1,96 @@ |
| +// Copyright 2014 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/manifest_fetcher.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/WebURLRequest.h" |
| +#include "third_party/WebKit/public/web/WebDocument.h" |
| +#include "third_party/WebKit/public/web/WebFrame.h" |
| + |
| +namespace content { |
| + |
| +ManifestFetcher::ManifestFetcher(const GURL& url) |
| + : request_(url), |
| + completed_(false) { |
| +} |
| + |
| +ManifestFetcher::~ManifestFetcher() { |
| + if (!completed_ && loader_) |
| + loader_->cancel(); |
| +} |
| + |
| +void ManifestFetcher::Start(blink::WebFrame* frame, const Callback& callback) { |
| + DCHECK(!loader_); |
| + DCHECK(!request_.isNull()); |
| + DCHECK(callback_.is_null()); |
| + DCHECK(!completed_); |
| + if (!request_.httpBody().isNull()) |
| + DCHECK_NE("GET", request_.httpMethod().utf8()) << "GETs can't have bodies."; |
| + |
| + callback_ = callback; |
| + |
| + request_.setRequestContext(blink::WebURLRequest::RequestContextManifest); |
| + request_.setFrameType(blink::WebURLRequest::FrameTypeNone); |
|
Mike West
2014/09/10 07:45:30
The only difference between ResourceFetcherImpl an
mlamouri (slow - plz ping)
2014/09/10 11:16:05
Not really. I'm using frame->createAssociatedURLLo
Mike West
2014/09/10 11:49:55
You're right. I missed the difference in line #40.
|
| + request_.setFirstPartyForCookies(frame->document().firstPartyForCookies()); |
| + frame->dispatchWillSendRequest(request_); |
| + loader_.reset(frame->createAssociatedURLLoader()); |
| + loader_->loadAsynchronously(request_, this); |
| + |
| + request_.reset(); |
| +} |
| + |
| +void ManifestFetcher::Cancel() { |
| + DCHECK(!completed_ && loader_); |
| + |
| + loader_->cancel(); |
| + RunCallback(blink::WebURLResponse(), std::string()); |
| +} |
| + |
| +void ManifestFetcher::RunCallback(const blink::WebURLResponse& response, |
| + const std::string& data) { |
| + completed_ = true; |
|
Mike West
2014/09/10 07:45:30
The only difference here is the timeout.
|
| + if (callback_.is_null()) |
| + return; |
| + |
| + Callback callback = callback_; |
| + callback.Run(response, data); |
| +} |
| + |
| +void ManifestFetcher::didReceiveResponse( |
|
Mike West
2014/09/10 07:45:30
The implementation of these four methods is exactl
|
| + blink::WebURLLoader* loader, const blink::WebURLResponse& response) { |
| + DCHECK(!completed_); |
| + response_ = response; |
| +} |
| + |
| +void ManifestFetcher::didReceiveData( |
| + blink::WebURLLoader* loader, |
| + const char* data, |
| + int data_length, |
| + int encoded_data_length) { |
| + DCHECK(!completed_); |
| + DCHECK(data_length > 0); |
| + |
| + data_.append(data, data_length); |
| +} |
| + |
| +void ManifestFetcher::didFinishLoading( |
| + blink::WebURLLoader* loader, |
| + double finishTime, |
| + int64_t total_encoded_data_length) { |
| + DCHECK(!completed_); |
| + |
| + RunCallback(response_, data_); |
| +} |
| + |
| +void ManifestFetcher::didFail(blink::WebURLLoader* loader, |
| + const blink::WebURLError& error) { |
| + DCHECK(!completed_); |
| + |
| + RunCallback(blink::WebURLResponse(), std::string()); |
| +} |
| + |
| +} // namespace content |