diff options
author | darin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-07 16:44:39 +0000 |
---|---|---|
committer | darin@chromium.org <darin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-07 16:44:39 +0000 |
commit | f6134ff2597f45c240b1fc2a493d38b51aa8a884 (patch) | |
tree | beddc103816d95a1f73a586eb523251154f84e6b /webkit/glue/resource_fetcher.cc | |
parent | 62c9a8e3985009ee3503497cb4e1ab18d8cecc97 (diff) | |
download | chromium_src-f6134ff2597f45c240b1fc2a493d38b51aa8a884.zip chromium_src-f6134ff2597f45c240b1fc2a493d38b51aa8a884.tar.gz chromium_src-f6134ff2597f45c240b1fc2a493d38b51aa8a884.tar.bz2 |
Modify ResourceFetcher to use WebURLLoader instead of ResourceHandle.
This is step 1 of moving ResourceFetcher usage out of WebFrame. This
CL adds a new method to WebFrame, named DispatchWillSendRequest, which
may be used to associate a WebURLRequest with the WebFrame. This
triggers the WebViewDelegate's WillSendRequest method among other things.
ResourceFetcher and friends have been modified to use callbacks instead
of delegates. I just find this approach a bit cleaner and easier to
work with.
BUG=15648
TEST=none
R=brettw
Review URL: http://codereview.chromium.org/149172
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@20031 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue/resource_fetcher.cc')
-rw-r--r-- | webkit/glue/resource_fetcher.cc | 123 |
1 files changed, 64 insertions, 59 deletions
diff --git a/webkit/glue/resource_fetcher.cc b/webkit/glue/resource_fetcher.cc index b72ea54..1716a91 100644 --- a/webkit/glue/resource_fetcher.cc +++ b/webkit/glue/resource_fetcher.cc @@ -2,30 +2,30 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "config.h" #include "webkit/glue/resource_fetcher.h" -#include "base/compiler_specific.h" - -MSVC_PUSH_WARNING_LEVEL(0); -#include "FrameLoader.h" -#include "FrameLoaderClient.h" -#include "ResourceHandle.h" -#include "ResourceRequest.h" -MSVC_POP_WARNING(); - -#undef LOG #include "base/logging.h" -#include "webkit/glue/glue_util.h" -#include "net/url_request/url_request_status.h" - -using WebCore::ResourceError; -using WebCore::ResourceHandle; -using WebCore::ResourceResponse; - -ResourceFetcher::ResourceFetcher(const GURL& url, WebCore::Frame* frame, - Delegate* d) - : url_(url), delegate_(d), completed_(false) { +#include "webkit/api/public/WebKit.h" +#include "webkit/api/public/WebKitClient.h" +#include "webkit/api/public/WebURLError.h" +#include "webkit/api/public/WebURLLoader.h" +#include "webkit/api/public/WebURLRequest.h" +#include "webkit/api/public/WebURL.h" +#include "webkit/glue/webframe.h" + +using base::TimeDelta; +using WebKit::WebURLError; +using WebKit::WebURLLoader; +using WebKit::WebURLRequest; +using WebKit::WebURLResponse; + +namespace webkit_glue { + +ResourceFetcher::ResourceFetcher(const GURL& url, WebFrame* frame, + Callback* c) + : url_(url), + callback_(c), + completed_(false) { // 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); @@ -35,7 +35,6 @@ ResourceFetcher::ResourceFetcher(const GURL& url, WebCore::Frame* frame, ResourceFetcher::~ResourceFetcher() { if (!completed_ && loader_.get()) loader_->cancel(); - loader_ = NULL; } void ResourceFetcher::Cancel() { @@ -45,68 +44,74 @@ void ResourceFetcher::Cancel() { } } -void ResourceFetcher::Start(WebCore::Frame* frame) { - WebCore::ResourceRequest request(webkit_glue::GURLToKURL(url_)); - WebCore::ResourceResponse response; - frame->loader()->client()->dispatchWillSendRequest(NULL, 0, request, - response); +void ResourceFetcher::Start(WebFrame* frame) { + WebURLRequest request(url_); + frame->DispatchWillSendRequest(&request); - loader_ = ResourceHandle::create(request, this, NULL, false, false); + loader_.reset(WebKit::webKitClient()->createURLLoader()); + loader_->loadAsynchronously(request, this); } ///////////////////////////////////////////////////////////////////////////// -// ResourceHandleClient methods -void ResourceFetcher::didReceiveResponse(ResourceHandle* resource_handle, - const ResourceResponse& response) { - ASSERT(!completed_); - // It's safe to use the ResourceResponse copy constructor - // (xmlhttprequest.cpp uses it). +// 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(ResourceHandle* resource_handle, - const char* data, int length, - int total_length) { - ASSERT(!completed_); - if (length <= 0) - return; +void ResourceFetcher::didReceiveData( + WebURLLoader* loader, const char* data, int data_length, + long long total_data_length) { + DCHECK(!completed_); + DCHECK(data_length > 0); - data_.append(data, length); + data_.append(data, data_length); } -void ResourceFetcher::didFinishLoading(ResourceHandle* resource_handle) { - ASSERT(!completed_); +void ResourceFetcher::didFinishLoading(WebURLLoader* loader) { + DCHECK(!completed_); completed_ = true; - if (delegate_) - delegate_->OnURLFetchComplete(response_, data_); + if (callback_) + callback_->Run(response_, data_); } -void ResourceFetcher::didFail(ResourceHandle* resource_handle, - const ResourceError& error) { - ASSERT(!completed_); +void ResourceFetcher::didFail(WebURLLoader* loader, const WebURLError& error) { + DCHECK(!completed_); completed_ = true; - // Go ahead and tell our delegate that we're done. Send an empty - // ResourceResponse and string. - if (delegate_) - delegate_->OnURLFetchComplete(ResourceResponse(), std::string()); + // Go ahead and tell our delegate that we're done. + if (callback_) + callback_->Run(WebURLResponse(), std::string()); } ///////////////////////////////////////////////////////////////////////////// // A resource fetcher with a timeout ResourceFetcherWithTimeout::ResourceFetcherWithTimeout( - const GURL& url, WebCore::Frame* frame, double timeout_secs, Delegate* d) - : ResourceFetcher(url, frame, d) { - timeout_timer_.reset(new FetchTimer(this, - &ResourceFetcherWithTimeout::TimeoutFired)); - timeout_timer_->startOneShot(timeout_secs); + const GURL& url, WebFrame* frame, int timeout_secs, Callback* c) + : ResourceFetcher(url, frame, c) { + timeout_timer_.Start(TimeDelta::FromSeconds(timeout_secs), this, + &ResourceFetcherWithTimeout::TimeoutFired); } -void ResourceFetcherWithTimeout::TimeoutFired(FetchTimer* timer) { +void ResourceFetcherWithTimeout::TimeoutFired() { if (!completed_) { loader_->cancel(); - didFail(NULL, ResourceError()); + didFail(NULL, WebURLError()); } } + +} // namespace webkit_glue |