Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "config.h" | |
| 6 #include "webkit/glue/resource_fetcher.h" | 5 #include "webkit/glue/resource_fetcher.h" |
| 7 | 6 |
| 8 #include "base/compiler_specific.h" | 7 #include "base/logging.h" |
| 8 #include "webkit/api/public/WebKit.h" | |
| 9 #include "webkit/api/public/WebKitClient.h" | |
| 10 #include "webkit/api/public/WebURLError.h" | |
| 11 #include "webkit/api/public/WebURLLoader.h" | |
| 12 #include "webkit/api/public/WebURLRequest.h" | |
| 13 #include "webkit/api/public/WebURL.h" | |
| 14 #include "webkit/glue/webframe.h" | |
| 9 | 15 |
| 10 MSVC_PUSH_WARNING_LEVEL(0); | 16 using base::TimeDelta; |
| 11 #include "FrameLoader.h" | 17 using WebKit::WebURLError; |
| 12 #include "FrameLoaderClient.h" | 18 using WebKit::WebURLLoader; |
| 13 #include "ResourceHandle.h" | 19 using WebKit::WebURLRequest; |
| 14 #include "ResourceRequest.h" | 20 using WebKit::WebURLResponse; |
| 15 MSVC_POP_WARNING(); | |
| 16 | 21 |
| 17 #undef LOG | 22 namespace webkit_glue { |
| 18 #include "base/logging.h" | |
| 19 #include "webkit/glue/glue_util.h" | |
| 20 #include "net/url_request/url_request_status.h" | |
| 21 | 23 |
| 22 using WebCore::ResourceError; | 24 ResourceFetcher::ResourceFetcher(const GURL& url, WebFrame* frame, |
| 23 using WebCore::ResourceHandle; | 25 Callback* c) |
| 24 using WebCore::ResourceResponse; | 26 : url_(url), callback_(c), completed_(false) { |
|
brettw
2009/07/07 15:59:53
Can you put these initializers on separate lines?
darin (slow to review)
2009/07/07 16:20:52
OK
| |
| 25 | |
| 26 ResourceFetcher::ResourceFetcher(const GURL& url, WebCore::Frame* frame, | |
| 27 Delegate* d) | |
| 28 : url_(url), delegate_(d), completed_(false) { | |
| 29 // Can't do anything without a frame. However, delegate can be NULL (so we | 27 // Can't do anything without a frame. However, delegate can be NULL (so we |
| 30 // can do a http request and ignore the results). | 28 // can do a http request and ignore the results). |
| 31 DCHECK(frame); | 29 DCHECK(frame); |
| 32 Start(frame); | 30 Start(frame); |
| 33 } | 31 } |
| 34 | 32 |
| 35 ResourceFetcher::~ResourceFetcher() { | 33 ResourceFetcher::~ResourceFetcher() { |
| 36 if (!completed_ && loader_.get()) | 34 if (!completed_ && loader_.get()) |
| 37 loader_->cancel(); | 35 loader_->cancel(); |
| 38 loader_ = NULL; | |
| 39 } | 36 } |
| 40 | 37 |
| 41 void ResourceFetcher::Cancel() { | 38 void ResourceFetcher::Cancel() { |
| 42 if (!completed_) { | 39 if (!completed_) { |
| 43 loader_->cancel(); | 40 loader_->cancel(); |
| 44 completed_ = true; | 41 completed_ = true; |
| 45 } | 42 } |
| 46 } | 43 } |
| 47 | 44 |
| 48 void ResourceFetcher::Start(WebCore::Frame* frame) { | 45 void ResourceFetcher::Start(WebFrame* frame) { |
| 49 WebCore::ResourceRequest request(webkit_glue::GURLToKURL(url_)); | 46 WebURLRequest request(url_); |
| 50 WebCore::ResourceResponse response; | 47 frame->DispatchWillSendRequest(&request); |
| 51 frame->loader()->client()->dispatchWillSendRequest(NULL, 0, request, | |
| 52 response); | |
| 53 | 48 |
| 54 loader_ = ResourceHandle::create(request, this, NULL, false, false); | 49 loader_.reset(WebKit::webKitClient()->createURLLoader()); |
| 50 loader_->loadAsynchronously(request, this); | |
| 55 } | 51 } |
| 56 | 52 |
| 57 ///////////////////////////////////////////////////////////////////////////// | 53 ///////////////////////////////////////////////////////////////////////////// |
| 58 // ResourceHandleClient methods | 54 // WebURLLoaderClient methods |
| 59 void ResourceFetcher::didReceiveResponse(ResourceHandle* resource_handle, | 55 |
| 60 const ResourceResponse& response) { | 56 void ResourceFetcher::willSendRequest( |
| 61 ASSERT(!completed_); | 57 WebURLLoader* loader, WebURLRequest& new_request, |
| 62 // It's safe to use the ResourceResponse copy constructor | 58 const WebURLResponse& redirect_response) { |
| 63 // (xmlhttprequest.cpp uses it). | 59 } |
| 60 | |
| 61 void ResourceFetcher::didSendData( | |
| 62 WebURLLoader* loader, unsigned long long bytes_sent, | |
| 63 unsigned long long total_bytes_to_be_sent) { | |
| 64 } | |
| 65 | |
| 66 void ResourceFetcher::didReceiveResponse( | |
| 67 WebURLLoader* loader, const WebURLResponse& response) { | |
| 68 DCHECK(!completed_); | |
| 64 response_ = response; | 69 response_ = response; |
| 65 } | 70 } |
| 66 | 71 |
| 67 void ResourceFetcher::didReceiveData(ResourceHandle* resource_handle, | 72 void ResourceFetcher::didReceiveData( |
| 68 const char* data, int length, | 73 WebURLLoader* loader, const char* data, int data_length, |
| 69 int total_length) { | 74 long long total_data_length) { |
| 70 ASSERT(!completed_); | 75 DCHECK(!completed_); |
| 71 if (length <= 0) | 76 DCHECK(data_length > 0); |
| 72 return; | |
| 73 | 77 |
| 74 data_.append(data, length); | 78 data_.append(data, data_length); |
| 75 } | 79 } |
| 76 | 80 |
| 77 void ResourceFetcher::didFinishLoading(ResourceHandle* resource_handle) { | 81 void ResourceFetcher::didFinishLoading(WebURLLoader* loader) { |
| 78 ASSERT(!completed_); | 82 DCHECK(!completed_); |
| 79 completed_ = true; | 83 completed_ = true; |
| 80 | 84 |
| 81 if (delegate_) | 85 if (callback_) |
| 82 delegate_->OnURLFetchComplete(response_, data_); | 86 callback_->Run(response_, data_); |
| 83 } | 87 } |
| 84 | 88 |
| 85 void ResourceFetcher::didFail(ResourceHandle* resource_handle, | 89 void ResourceFetcher::didFail(WebURLLoader* loader, const WebURLError& error) { |
| 86 const ResourceError& error) { | 90 DCHECK(!completed_); |
| 87 ASSERT(!completed_); | |
| 88 completed_ = true; | 91 completed_ = true; |
| 89 | 92 |
| 90 // Go ahead and tell our delegate that we're done. Send an empty | 93 // Go ahead and tell our delegate that we're done. |
| 91 // ResourceResponse and string. | 94 if (callback_) |
| 92 if (delegate_) | 95 callback_->Run(WebURLResponse(), std::string()); |
| 93 delegate_->OnURLFetchComplete(ResourceResponse(), std::string()); | |
| 94 } | 96 } |
| 95 | 97 |
| 96 ///////////////////////////////////////////////////////////////////////////// | 98 ///////////////////////////////////////////////////////////////////////////// |
| 97 // A resource fetcher with a timeout | 99 // A resource fetcher with a timeout |
| 98 | 100 |
| 99 ResourceFetcherWithTimeout::ResourceFetcherWithTimeout( | 101 ResourceFetcherWithTimeout::ResourceFetcherWithTimeout( |
| 100 const GURL& url, WebCore::Frame* frame, double timeout_secs, Delegate* d) | 102 const GURL& url, WebFrame* frame, int timeout_secs, Callback* c) |
| 101 : ResourceFetcher(url, frame, d) { | 103 : ResourceFetcher(url, frame, c) { |
| 102 timeout_timer_.reset(new FetchTimer(this, | 104 timeout_timer_.Start(TimeDelta::FromSeconds(timeout_secs), this, |
| 103 &ResourceFetcherWithTimeout::TimeoutFired)); | 105 &ResourceFetcherWithTimeout::TimeoutFired); |
| 104 timeout_timer_->startOneShot(timeout_secs); | |
| 105 } | 106 } |
| 106 | 107 |
| 107 void ResourceFetcherWithTimeout::TimeoutFired(FetchTimer* timer) { | 108 void ResourceFetcherWithTimeout::TimeoutFired() { |
| 108 if (!completed_) { | 109 if (!completed_) { |
| 109 loader_->cancel(); | 110 loader_->cancel(); |
| 110 didFail(NULL, ResourceError()); | 111 didFail(NULL, WebURLError()); |
| 111 } | 112 } |
| 112 } | 113 } |
| 114 | |
| 115 } // namespace webkit_glue | |
| OLD | NEW |