diff options
Diffstat (limited to 'content/renderer')
-rw-r--r-- | content/renderer/fetchers/alt_error_page_resource_fetcher.cc | 56 | ||||
-rw-r--r-- | content/renderer/fetchers/alt_error_page_resource_fetcher.h | 68 | ||||
-rw-r--r-- | content/renderer/fetchers/image_resource_fetcher.cc | 66 | ||||
-rw-r--r-- | content/renderer/fetchers/image_resource_fetcher.h | 65 | ||||
-rw-r--r-- | content/renderer/fetchers/multi_resolution_image_resource_fetcher.cc | 58 | ||||
-rw-r--r-- | content/renderer/fetchers/multi_resolution_image_resource_fetcher.h | 61 | ||||
-rw-r--r-- | content/renderer/fetchers/resource_fetcher.cc | 145 | ||||
-rw-r--r-- | content/renderer/fetchers/resource_fetcher.h | 135 | ||||
-rw-r--r-- | content/renderer/image_loading_helper.cc | 3 | ||||
-rw-r--r-- | content/renderer/image_loading_helper.h | 10 | ||||
-rw-r--r-- | content/renderer/internal_document_state_data.cc | 4 | ||||
-rw-r--r-- | content/renderer/internal_document_state_data.h | 11 | ||||
-rw-r--r-- | content/renderer/render_view_impl.cc | 8 | ||||
-rw-r--r-- | content/renderer/render_view_impl.h | 10 | ||||
-rw-r--r-- | content/renderer/resource_fetcher_browsertest.cc | 4 |
15 files changed, 672 insertions, 32 deletions
diff --git a/content/renderer/fetchers/alt_error_page_resource_fetcher.cc b/content/renderer/fetchers/alt_error_page_resource_fetcher.cc new file mode 100644 index 0000000..cbcab09 --- /dev/null +++ b/content/renderer/fetchers/alt_error_page_resource_fetcher.cc @@ -0,0 +1,56 @@ +// Copyright (c) 2011 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/alt_error_page_resource_fetcher.h" + +#include "base/bind.h" +#include "base/bind_helpers.h" +#include "content/renderer/fetchers/resource_fetcher.h" + +using WebKit::WebFrame; +using WebKit::WebURLError; +using WebKit::WebURLRequest; +using WebKit::WebURLResponse; + +namespace content { + +// Number of seconds to wait for the alternate error page server. If it takes +// too long, just use the local error page. +static const int kDownloadTimeoutSec = 3; + +AltErrorPageResourceFetcher::AltErrorPageResourceFetcher( + const GURL& url, + WebFrame* frame, + const WebURLRequest& original_request, + const WebURLError& original_error, + const Callback& callback) + : frame_(frame), + callback_(callback), + original_request_(original_request), + original_error_(original_error) { + fetcher_.reset(new ResourceFetcherWithTimeout( + url, frame, WebURLRequest::TargetIsMainFrame, kDownloadTimeoutSec, + base::Bind(&AltErrorPageResourceFetcher::OnURLFetchComplete, + base::Unretained(this)))); +} + +AltErrorPageResourceFetcher::~AltErrorPageResourceFetcher() { +} + +void AltErrorPageResourceFetcher::Cancel() { + fetcher_->Cancel(); +} + +void AltErrorPageResourceFetcher::OnURLFetchComplete( + const WebURLResponse& response, + const std::string& data) { + // A null response indicates a network error. + if (!response.isNull() && response.httpStatusCode() == 200) { + callback_.Run(frame_, original_request_, original_error_, data); + } else { + callback_.Run(frame_, original_request_, original_error_, std::string()); + } +} + +} // namespace content diff --git a/content/renderer/fetchers/alt_error_page_resource_fetcher.h b/content/renderer/fetchers/alt_error_page_resource_fetcher.h new file mode 100644 index 0000000..14ffd7d --- /dev/null +++ b/content/renderer/fetchers/alt_error_page_resource_fetcher.h @@ -0,0 +1,68 @@ +// Copyright (c) 2011 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. + +#ifndef CONTENT_RENDERER_FETCHERS_ALT_ERROR_PAGE_RESOURCE_FETCHER_H_ +#define CONTENT_RENDERER_FETCHERS_ALT_ERROR_PAGE_RESOURCE_FETCHER_H_ + +#include "base/callback.h" +#include "base/memory/scoped_ptr.h" +#include "googleurl/src/gurl.h" +#include "third_party/WebKit/Source/Platform/chromium/public/WebURLError.h" +#include "third_party/WebKit/Source/Platform/chromium/public/WebURLRequest.h" + +namespace WebKit { +class WebFrame; +class WebURLResponse; +} + +namespace content { +class ResourceFetcherWithTimeout; + +// Used for downloading alternate dns error pages. Once downloading is done +// (or fails), the webview delegate is notified. +class AltErrorPageResourceFetcher { + public: + // This will be called when the alternative error page has been fetched, + // successfully or not. If there is a failure, the third parameter (the + // data) will be empty. + typedef base::Callback<void(WebKit::WebFrame*, + const WebKit::WebURLRequest&, + const WebKit::WebURLError&, + const std::string&)> Callback; + + AltErrorPageResourceFetcher( + const GURL& url, + WebKit::WebFrame* frame, + const WebKit::WebURLRequest& original_request, + const WebKit::WebURLError& original_error, + const Callback& callback); + ~AltErrorPageResourceFetcher(); + + // Stop any pending loads. + void Cancel(); + + private: + void OnURLFetchComplete(const WebKit::WebURLResponse& response, + const std::string& data); + + // Does the actual fetching. + scoped_ptr<ResourceFetcherWithTimeout> fetcher_; + + WebKit::WebFrame* frame_; + Callback callback_; + + // The original request. If loading the alternate error page fails, it's + // needed to generate the error page. + WebKit::WebURLRequest original_request_; + + // The error associated with this load. If there's an error talking with the + // alt error page server, we need this to complete the original load. + WebKit::WebURLError original_error_; + + DISALLOW_COPY_AND_ASSIGN(AltErrorPageResourceFetcher); +}; + +} // namespace content + +#endif // CONTENT_RENDERER_FETCHERS_ALT_ERROR_PAGE_RESOURCE_FETCHER_H_ diff --git a/content/renderer/fetchers/image_resource_fetcher.cc b/content/renderer/fetchers/image_resource_fetcher.cc new file mode 100644 index 0000000..8185e61 --- /dev/null +++ b/content/renderer/fetchers/image_resource_fetcher.cc @@ -0,0 +1,66 @@ +// Copyright (c) 2011 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/image_resource_fetcher.h" + +#include "base/bind.h" +#include "base/bind_helpers.h" +#include "base/debug/crash_logging.h" +#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" +#include "third_party/skia/include/core/SkBitmap.h" +#include "ui/gfx/size.h" +#include "webkit/glue/image_decoder.h" + +using WebKit::WebFrame; +using WebKit::WebURLRequest; +using WebKit::WebURLResponse; + +namespace content { + +ImageResourceFetcher::ImageResourceFetcher( + const GURL& image_url, + WebFrame* frame, + int id, + int image_size, + WebURLRequest::TargetType target_type, + const Callback& callback) + : callback_(callback), + id_(id), + image_url_(image_url), + image_size_(image_size) { + fetcher_.reset(new ResourceFetcher( + image_url, frame, target_type, + base::Bind(&ImageResourceFetcher::OnURLFetchComplete, + base::Unretained(this)))); + + // Set subresource URL for crash reporting. + base::debug::SetCrashKeyValue("subresource_url", image_url.spec()); +} + +ImageResourceFetcher::~ImageResourceFetcher() { + if (!fetcher_->completed()) + fetcher_->Cancel(); +} + +void ImageResourceFetcher::OnURLFetchComplete( + const WebURLResponse& response, + const std::string& data) { + SkBitmap bitmap; + if (!response.isNull() && response.httpStatusCode() == 200) { + // Request succeeded, try to convert it to an image. + webkit_glue::ImageDecoder decoder(gfx::Size(image_size_, image_size_)); + bitmap = decoder.Decode( + reinterpret_cast<const unsigned char*>(data.data()), data.size()); + } // else case: + // If we get here, it means no image from server or couldn't decode the + // response as an image. The delegate will see a null image, indicating + // that an error occurred. + + // Take a reference to the callback as running the callback may lead to our + // destruction. + Callback callback = callback_; + callback.Run(this, bitmap); +} + +} // namespace content diff --git a/content/renderer/fetchers/image_resource_fetcher.h b/content/renderer/fetchers/image_resource_fetcher.h new file mode 100644 index 0000000..2ddb20d --- /dev/null +++ b/content/renderer/fetchers/image_resource_fetcher.h @@ -0,0 +1,65 @@ +// Copyright (c) 2011 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. + +#ifndef CONTENT_RENDERER_FETCHERS_IMAGE_RESOURCE_FETCHER_H_ +#define CONTENT_RENDERER_FETCHERS_IMAGE_RESOURCE_FETCHER_H_ + +#include "base/basictypes.h" +#include "base/callback.h" +#include "content/renderer/fetchers/resource_fetcher.h" + +class SkBitmap; + +namespace content { + +// ImageResourceFetcher handles downloading an image for a webview. Once +// downloading is done the supplied callback is notified. ImageResourceFetcher +// is used to download the favicon and images for web apps. +class ImageResourceFetcher { + public: + typedef base::Callback<void(ImageResourceFetcher*, const SkBitmap&)> Callback; + + ImageResourceFetcher( + const GURL& image_url, + WebKit::WebFrame* frame, + int id, + int image_size, + WebKit::WebURLRequest::TargetType target_type, + const Callback& callback); + + virtual ~ImageResourceFetcher(); + + // URL of the image we're downloading. + const GURL& image_url() const { return image_url_; } + + // Unique identifier for the request. + int id() const { return id_; } + + private: + // ResourceFetcher::Callback. Decodes the image and invokes callback_. + void OnURLFetchComplete(const WebKit::WebURLResponse& response, + const std::string& data); + + Callback callback_; + + // Unique identifier for the request. + const int id_; + + // URL of the image. + const GURL image_url_; + + // The size of the image. This is only a hint that is used if the image + // contains multiple sizes. A value of 0 results in using the first frame + // of the image. + const int image_size_; + + // Does the actual download. + scoped_ptr<ResourceFetcher> fetcher_; + + DISALLOW_COPY_AND_ASSIGN(ImageResourceFetcher); +}; + +} // namespace content + +#endif // CONTENT_RENDERER_FETCHERS_IMAGE_RESOURCE_FETCHER_H_ diff --git a/content/renderer/fetchers/multi_resolution_image_resource_fetcher.cc b/content/renderer/fetchers/multi_resolution_image_resource_fetcher.cc new file mode 100644 index 0000000..33235c1 --- /dev/null +++ b/content/renderer/fetchers/multi_resolution_image_resource_fetcher.cc @@ -0,0 +1,58 @@ +// 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/multi_resolution_image_resource_fetcher.h" + +#include "base/bind.h" +#include "base/bind_helpers.h" +#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" +#include "third_party/skia/include/core/SkBitmap.h" +#include "ui/gfx/size.h" +#include "webkit/glue/image_decoder.h" + +using WebKit::WebFrame; +using WebKit::WebURLRequest; +using WebKit::WebURLResponse; + +namespace content { + +MultiResolutionImageResourceFetcher::MultiResolutionImageResourceFetcher( + const GURL& image_url, + WebFrame* frame, + int id, + WebURLRequest::TargetType target_type, + const Callback& callback) + : callback_(callback), + id_(id), + image_url_(image_url) { + fetcher_.reset(new ResourceFetcher( + image_url, frame, target_type, + base::Bind(&MultiResolutionImageResourceFetcher::OnURLFetchComplete, + base::Unretained(this)))); +} + +MultiResolutionImageResourceFetcher::~MultiResolutionImageResourceFetcher() { + if (!fetcher_->completed()) + fetcher_->Cancel(); +} + +void MultiResolutionImageResourceFetcher::OnURLFetchComplete( + const WebURLResponse& response, + const std::string& data) { + std::vector<SkBitmap> bitmaps; + if (!response.isNull() && response.httpStatusCode() == 200) { + // Request succeeded, try to convert it to an image. + bitmaps = webkit_glue::ImageDecoder::DecodeAll( + reinterpret_cast<const unsigned char*>(data.data()), data.size()); + } // else case: + // If we get here, it means no image from server or couldn't decode the + // response as an image. The delegate will see an empty vector. + + // Take a reference to the callback as running the callback may lead to our + // destruction. + Callback callback = callback_; + callback.Run(this, bitmaps); +} + +} // namespace content diff --git a/content/renderer/fetchers/multi_resolution_image_resource_fetcher.h b/content/renderer/fetchers/multi_resolution_image_resource_fetcher.h new file mode 100644 index 0000000..925eed2 --- /dev/null +++ b/content/renderer/fetchers/multi_resolution_image_resource_fetcher.h @@ -0,0 +1,61 @@ +// 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. + +#ifndef CONTENT_RENDERER_FETCHERS_MULTI_RESOLUTION_IMAGE_RESOURCE_FETCHER_H_ +#define CONTENT_RENDERER_FETCHERS_MULTI_RESOLUTION_IMAGE_RESOURCE_FETCHER_H_ + +#include <vector> + +#include "base/basictypes.h" +#include "base/callback.h" +#include "content/renderer/fetchers/resource_fetcher.h" + +class SkBitmap; + +namespace content { + +// A resource fetcher that returns all (differently-sized) frames in +// an image. Useful for favicons. +class MultiResolutionImageResourceFetcher{ + public: + typedef base::Callback<void(MultiResolutionImageResourceFetcher*, + const std::vector<SkBitmap>&)> Callback; + + MultiResolutionImageResourceFetcher( + const GURL& image_url, + WebKit::WebFrame* frame, + int id, + WebKit::WebURLRequest::TargetType target_type, + const Callback& callback); + + virtual ~MultiResolutionImageResourceFetcher(); + + // URL of the image we're downloading. + const GURL& image_url() const { return image_url_; } + + // Unique identifier for the request. + int id() const { return id_; } + + private: + // ResourceFetcher::Callback. Decodes the image and invokes callback_. + void OnURLFetchComplete(const WebKit::WebURLResponse& response, + const std::string& data); + + Callback callback_; + + // Unique identifier for the request. + const int id_; + + // URL of the image. + const GURL image_url_; + + // Does the actual download. + scoped_ptr<ResourceFetcher> fetcher_; + + DISALLOW_COPY_AND_ASSIGN(MultiResolutionImageResourceFetcher); +}; + +} // namespace content + +#endif // CONTENT_RENDERER_FETCHERS_MULTI_RESOLUTION_IMAGE_RESOURCE_FETCHER_H_ diff --git a/content/renderer/fetchers/resource_fetcher.cc b/content/renderer/fetchers/resource_fetcher.cc new file mode 100644 index 0000000..bbb7959 --- /dev/null +++ b/content/renderer/fetchers/resource_fetcher.cc @@ -0,0 +1,145 @@ +// 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/resource_fetcher.h" + +#include "base/logging.h" +#include "third_party/WebKit/Source/Platform/chromium/public/Platform.h" +#include "third_party/WebKit/Source/Platform/chromium/public/WebURL.h" +#include "third_party/WebKit/Source/Platform/chromium/public/WebURLError.h" +#include "third_party/WebKit/Source/Platform/chromium/public/WebURLLoader.h" +#include "third_party/WebKit/Source/Platform/chromium/public/WebURLRequest.h" +#include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h" +#include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" +#include "third_party/WebKit/Source/WebKit/chromium/public/WebKit.h" + +using base::TimeDelta; +using WebKit::WebFrame; +using WebKit::WebURLError; +using WebKit::WebURLLoader; +using WebKit::WebURLRequest; +using WebKit::WebURLResponse; + +namespace content { + +ResourceFetcher::ResourceFetcher(const GURL& url, WebFrame* frame, + WebURLRequest::TargetType target_type, + const Callback& callback) + : url_(url), + target_type_(target_type), + completed_(false), + callback_(callback) { + // Can't do anything without a frame. However, delegate can be NULL (so we + // can do a http request and ignore the results). + DCHECK(frame); + Start(frame); +} + +ResourceFetcher::~ResourceFetcher() { + if (!completed_ && loader_) + loader_->cancel(); +} + +void ResourceFetcher::Cancel() { + if (!completed_) { + loader_->cancel(); + completed_ = true; + } +} + +void ResourceFetcher::Start(WebFrame* frame) { + WebURLRequest request(url_); + request.setTargetType(target_type_); + request.setFirstPartyForCookies(frame->document().firstPartyForCookies()); + frame->dispatchWillSendRequest(request); + + loader_.reset(WebKit::Platform::current()->createURLLoader()); + loader_->loadAsynchronously(request, this); +} + +void ResourceFetcher::RunCallback(const WebURLResponse& response, + const std::string& data) { + if (callback_.is_null()) + return; + + // Take a reference to the callback as running the callback may lead to our + // destruction. + Callback callback = callback_; + callback.Run(response, data); +} + +///////////////////////////////////////////////////////////////////////////// +// WebURLLoaderClient methods + +void ResourceFetcher::willSendRequest( + WebURLLoader* loader, WebURLRequest& new_request, + const WebURLResponse& redirect_response) { +} + +void ResourceFetcher::didSendData( + WebURLLoader* loader, unsigned long long bytes_sent, + unsigned long long total_bytes_to_be_sent) { +} + +void ResourceFetcher::didReceiveResponse( + WebURLLoader* loader, const WebURLResponse& response) { + DCHECK(!completed_); + response_ = response; +} + +void ResourceFetcher::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 ResourceFetcher::didReceiveCachedMetadata( + WebURLLoader* loader, const char* data, int data_length) { + DCHECK(!completed_); + DCHECK(data_length > 0); + + metadata_.assign(data, data_length); +} + +void ResourceFetcher::didFinishLoading( + WebURLLoader* loader, double finishTime) { + DCHECK(!completed_); + completed_ = true; + + RunCallback(response_, data_); +} + +void ResourceFetcher::didFail(WebURLLoader* loader, const WebURLError& error) { + DCHECK(!completed_); + completed_ = true; + + // Go ahead and tell our delegate that we're done. + RunCallback(WebURLResponse(), std::string()); +} + +///////////////////////////////////////////////////////////////////////////// +// A resource fetcher with a timeout + +ResourceFetcherWithTimeout::ResourceFetcherWithTimeout( + const GURL& url, WebFrame* frame, WebURLRequest::TargetType target_type, + int timeout_secs, const Callback& callback) + : ResourceFetcher(url, frame, target_type, callback) { + timeout_timer_.Start(FROM_HERE, TimeDelta::FromSeconds(timeout_secs), this, + &ResourceFetcherWithTimeout::TimeoutFired); +} + +ResourceFetcherWithTimeout::~ResourceFetcherWithTimeout() { +} + +void ResourceFetcherWithTimeout::TimeoutFired() { + if (!completed_) { + loader_->cancel(); + didFail(NULL, WebURLError()); + } +} + +} // namespace content diff --git a/content/renderer/fetchers/resource_fetcher.h b/content/renderer/fetchers/resource_fetcher.h new file mode 100644 index 0000000..1580d20 --- /dev/null +++ b/content/renderer/fetchers/resource_fetcher.h @@ -0,0 +1,135 @@ +// Copyright (c) 2011 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. +// +// A wrapper around ResourceHandle and ResourceHandleClient that simplifies +// the download of an HTTP object. The interface is modeled after URLFetcher +// in the /chrome/browser. +// +// ResourceFetcher::Delegate::OnURLFetchComplete will be called async after +// the ResourceFetcher object is created. + +#ifndef CONTENT_RENDERER_FETCHERS_RESOURCE_FETCHER_H_ +#define CONTENT_RENDERER_FETCHERS_RESOURCE_FETCHER_H_ + +#include <string> + +#include "base/basictypes.h" +#include "base/callback.h" +#include "base/compiler_specific.h" +#include "base/memory/scoped_ptr.h" +#include "base/timer.h" +#include "content/common/content_export.h" +#include "googleurl/src/gurl.h" +#include "third_party/WebKit/Source/Platform/chromium/public/WebURLLoaderClient.h" +#include "third_party/WebKit/Source/Platform/chromium/public/WebURLRequest.h" +#include "third_party/WebKit/Source/Platform/chromium/public/WebURLResponse.h" + +class GURL; + +namespace WebKit { +class WebFrame; +class WebURLLoader; +struct WebURLError; +} + +namespace content { + +class CONTENT_EXPORT ResourceFetcher + : NON_EXPORTED_BASE(public WebKit::WebURLLoaderClient) { + public: + // This will be called when the URL has been fetched, successfully or not. + // If there is a failure, response and data will both be empty. |response| + // and |data| are both valid until the URLFetcher instance is destroyed. + typedef base::Callback<void(const WebKit::WebURLResponse&, + const std::string&)> Callback; + + // We need a frame to make requests. + ResourceFetcher( + const GURL& url, WebKit::WebFrame* frame, + WebKit::WebURLRequest::TargetType target_type, + const Callback& callback); + virtual ~ResourceFetcher(); + + // Stop the request and don't call the callback. + void Cancel(); + + bool completed() const { return completed_; } + + protected: + // WebURLLoaderClient methods: + virtual void willSendRequest( + WebKit::WebURLLoader* loader, WebKit::WebURLRequest& new_request, + const WebKit::WebURLResponse& redirect_response); + virtual void didSendData( + WebKit::WebURLLoader* loader, unsigned long long bytes_sent, + unsigned long long total_bytes_to_be_sent); + virtual void didReceiveResponse( + WebKit::WebURLLoader* loader, const WebKit::WebURLResponse& response); + virtual void didReceiveCachedMetadata( + WebKit::WebURLLoader* loader, const char* data, int data_length); + + virtual void didReceiveData( + WebKit::WebURLLoader* loader, const char* data, int data_length, + int encoded_data_length); + virtual void didFinishLoading( + WebKit::WebURLLoader* loader, double finishTime); + virtual void didFail( + WebKit::WebURLLoader* loader, const WebKit::WebURLError& error); + + scoped_ptr<WebKit::WebURLLoader> loader_; + + // URL we're fetching + GURL url_; + + // Target type + WebKit::WebURLRequest::TargetType target_type_; + + // A copy of the original resource response + WebKit::WebURLResponse response_; + + // Set to true once the request is compelte. + bool completed_; + + private: + // Start the actual download. + void Start(WebKit::WebFrame* frame); + + void RunCallback(const WebKit::WebURLResponse& response, + const std::string& data); + + // Callback when we're done + Callback callback_; + + // Buffer to hold the content from the server. + std::string data_; + + // Buffer to hold metadata from the cache. + std::string metadata_; +}; + +///////////////////////////////////////////////////////////////////////////// +// A resource fetcher with a timeout +class CONTENT_EXPORT ResourceFetcherWithTimeout + : NON_EXPORTED_BASE(public ResourceFetcher) { + public: + ResourceFetcherWithTimeout(const GURL& url, + WebKit::WebFrame* frame, + WebKit::WebURLRequest::TargetType target_type, + int timeout_secs, + const Callback& callback); + virtual ~ResourceFetcherWithTimeout(); + + private: + // Callback for timer that limits how long we wait for the alternate error + // page server. If this timer fires and the request hasn't completed, we + // kill the request. + void TimeoutFired(); + + // Limit how long we wait for the alternate error page server. + base::OneShotTimer<ResourceFetcherWithTimeout> timeout_timer_; +}; + +} // namespace content + +#endif // CONTENT_RENDERER_FETCHERS_RESOURCE_FETCHER_H_ diff --git a/content/renderer/image_loading_helper.cc b/content/renderer/image_loading_helper.cc index ff6e2bd..5f936a41f3 100644 --- a/content/renderer/image_loading_helper.cc +++ b/content/renderer/image_loading_helper.cc @@ -9,6 +9,7 @@ #include "content/common/image_messages.h" #include "content/public/common/url_constants.h" #include "content/public/renderer/render_view.h" +#include "content/renderer/fetchers/multi_resolution_image_resource_fetcher.h" #include "net/base/data_url.h" #include "third_party/WebKit/Source/Platform/chromium/public/WebURLRequest.h" #include "third_party/WebKit/Source/Platform/chromium/public/WebVector.h" @@ -18,14 +19,12 @@ #include "ui/gfx/size.h" #include "ui/gfx/skbitmap_operations.h" #include "webkit/glue/image_decoder.h" -#include "webkit/glue/multi_resolution_image_resource_fetcher.h" #include "webkit/glue/webkit_glue.h" using WebKit::WebFrame; using WebKit::WebVector; using WebKit::WebURL; using WebKit::WebURLRequest; -using webkit_glue::MultiResolutionImageResourceFetcher; namespace content { diff --git a/content/renderer/image_loading_helper.h b/content/renderer/image_loading_helper.h index 6e2302d..6856aa3 100644 --- a/content/renderer/image_loading_helper.h +++ b/content/renderer/image_loading_helper.h @@ -14,12 +14,10 @@ class SkBitmap; -namespace webkit_glue { -class MultiResolutionImageResourceFetcher; -} - namespace content { +class MultiResolutionImageResourceFetcher; + // This class deals with image downloading. // One instance of ImageLoadingHelper is owned by RenderView. class ImageLoadingHelper : public RenderViewObserver { @@ -53,7 +51,7 @@ class ImageLoadingHelper : public RenderViewObserver { // details. void DidDownloadImage( int requested_size, - webkit_glue::MultiResolutionImageResourceFetcher* fetcher, + MultiResolutionImageResourceFetcher* fetcher, const std::vector<SkBitmap>& images); // Decodes a data: URL image or returns an empty image in case of failure. @@ -62,7 +60,7 @@ class ImageLoadingHelper : public RenderViewObserver { // RenderViewObserver implementation. virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; - typedef ScopedVector<webkit_glue::MultiResolutionImageResourceFetcher> + typedef ScopedVector<MultiResolutionImageResourceFetcher> ImageResourceFetcherList; // ImageResourceFetchers schedule via DownloadImage. diff --git a/content/renderer/internal_document_state_data.cc b/content/renderer/internal_document_state_data.cc index d5da984..b63410a 100644 --- a/content/renderer/internal_document_state_data.cc +++ b/content/renderer/internal_document_state_data.cc @@ -6,8 +6,8 @@ #include "content/public/common/password_form.h" #include "content/public/renderer/document_state.h" +#include "content/renderer/fetchers/alt_error_page_resource_fetcher.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebDataSource.h" -#include "webkit/glue/alt_error_page_resource_fetcher.h" namespace content { @@ -55,7 +55,7 @@ InternalDocumentStateData::~InternalDocumentStateData() { } void InternalDocumentStateData::set_alt_error_page_fetcher( - webkit_glue::AltErrorPageResourceFetcher* f) { + AltErrorPageResourceFetcher* f) { alt_error_page_fetcher_.reset(f); } diff --git a/content/renderer/internal_document_state_data.h b/content/renderer/internal_document_state_data.h index 08ca357..223e9ad 100644 --- a/content/renderer/internal_document_state_data.h +++ b/content/renderer/internal_document_state_data.h @@ -13,16 +13,13 @@ #include "third_party/WebKit/Source/Platform/chromium/public/WebReferrerPolicy.h" #include "third_party/WebKit/Source/Platform/chromium/public/WebURLRequest.h" -namespace webkit_glue { -class AltErrorPageResourceFetcher; -} - namespace WebKit { class WebDataSource; } namespace content { +class AltErrorPageResourceFetcher; class DocumentState; // Stores internal state per WebDataSource. @@ -123,10 +120,10 @@ class InternalDocumentStateData : public base::SupportsUserData::Data { } bool is_referrer_policy_set() const { return referrer_policy_set_; } - webkit_glue::AltErrorPageResourceFetcher* alt_error_page_fetcher() const { + AltErrorPageResourceFetcher* alt_error_page_fetcher() const { return alt_error_page_fetcher_.get(); } - void set_alt_error_page_fetcher(webkit_glue::AltErrorPageResourceFetcher* f); + void set_alt_error_page_fetcher(AltErrorPageResourceFetcher* f); protected: virtual ~InternalDocumentStateData(); @@ -144,7 +141,7 @@ class InternalDocumentStateData : public base::SupportsUserData::Data { WebKit::WebURLRequest::CachePolicy cache_policy_override_; bool referrer_policy_set_; WebKit::WebReferrerPolicy referrer_policy_; - scoped_ptr<webkit_glue::AltErrorPageResourceFetcher> alt_error_page_fetcher_; + scoped_ptr<AltErrorPageResourceFetcher> alt_error_page_fetcher_; DISALLOW_COPY_AND_ASSIGN(InternalDocumentStateData); }; diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index a189b7b..5aa6276 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc @@ -74,6 +74,7 @@ #include "content/renderer/dom_automation_controller.h" #include "content/renderer/dom_storage/webstoragenamespace_impl.h" #include "content/renderer/external_popup_menu.h" +#include "content/renderer/fetchers/alt_error_page_resource_fetcher.h" #include "content/renderer/geolocation_dispatcher.h" #include "content/renderer/gpu/input_handler_manager.h" #include "content/renderer/gpu/render_widget_compositor.h" @@ -122,8 +123,6 @@ #include "net/base/net_errors.h" #include "net/base/registry_controlled_domains/registry_controlled_domain.h" #include "net/http/http_util.h" -#include "third_party/skia/include/core/SkBitmap.h" -#include "third_party/skia/include/core/SkPicture.h" #include "third_party/WebKit/Source/Platform/chromium/public/WebCString.h" #include "third_party/WebKit/Source/Platform/chromium/public/WebDragData.h" #include "third_party/WebKit/Source/Platform/chromium/public/WebFileSystemType.h" @@ -182,6 +181,8 @@ #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebWindowFeatures.h" #include "third_party/WebKit/Source/WebKit/chromium/public/default/WebRenderTheme.h" +#include "third_party/skia/include/core/SkBitmap.h" +#include "third_party/skia/include/core/SkPicture.h" #include "ui/base/ui_base_switches_util.h" #include "ui/gfx/native_widget_types.h" #include "ui/gfx/point.h" @@ -193,7 +194,6 @@ #include "webkit/appcache/web_application_cache_host_impl.h" #include "webkit/base/file_path_string_conversions.h" #include "webkit/dom_storage/dom_storage_types.h" -#include "webkit/glue/alt_error_page_resource_fetcher.h" #include "webkit/glue/dom_operations.h" #include "webkit/glue/glue_serialize.h" #include "webkit/glue/webdropdata.h" @@ -324,8 +324,6 @@ using appcache::WebApplicationCacheHostImpl; using base::Time; using base::TimeDelta; -using webkit_glue::AltErrorPageResourceFetcher; -using webkit_glue::ResourceFetcher; using webkit_glue::WebURLResponseExtraDataImpl; #if defined(OS_ANDROID) diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h index 466f293..7d7e8f3 100644 --- a/content/renderer/render_view_impl.h +++ b/content/renderer/render_view_impl.h @@ -90,11 +90,6 @@ class PluginInstance; } // namespace webkit -namespace webkit_glue { -class ImageResourceFetcher; -class ResourceFetcher; -} - #if defined(OS_ANDROID) namespace webkit_media { class WebMediaPlayerManagerAndroid; @@ -150,6 +145,7 @@ class DomAutomationController; class ExternalPopupMenu; class FaviconHelper; class GeolocationDispatcher; +class ImageResourceFetcher; class InputTagSpeechDispatcher; class JavaBridgeDispatcher; class LoadProgressTracker; @@ -758,7 +754,7 @@ class CONTENT_EXPORT RenderViewImpl // Cannot use std::set unfortunately since linked_ptr<> does not support // operator<. - typedef std::vector<linked_ptr<webkit_glue::ImageResourceFetcher> > + typedef std::vector<linked_ptr<ImageResourceFetcher> > ImageResourceFetcherList; protected: @@ -1085,7 +1081,7 @@ class CONTENT_EXPORT RenderViewImpl // This callback is triggered when DownloadFavicon completes, either // succesfully or with a failure. See DownloadFavicon for more // details. - void DidDownloadFavicon(webkit_glue::ImageResourceFetcher* fetcher, + void DidDownloadFavicon(ImageResourceFetcher* fetcher, const SkBitmap& image); // Requests to download a favicon image. When done, the RenderView is notified diff --git a/content/renderer/resource_fetcher_browsertest.cc b/content/renderer/resource_fetcher_browsertest.cc index e7e0c36..f246a3b 100644 --- a/content/renderer/resource_fetcher_browsertest.cc +++ b/content/renderer/resource_fetcher_browsertest.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "webkit/glue/resource_fetcher.h" +#include "content/renderer/fetchers/resource_fetcher.h" #include "base/bind.h" #include "base/bind_helpers.h" @@ -22,8 +22,6 @@ using WebKit::WebFrame; using WebKit::WebURLRequest; using WebKit::WebURLResponse; -using webkit_glue::ResourceFetcher; -using webkit_glue::ResourceFetcherWithTimeout; namespace content { |