Chromium Code Reviews| Index: chrome/common/net/url_fetcher.h |
| diff --git a/chrome/common/net/url_fetcher.h b/chrome/common/net/url_fetcher.h |
| index f4fcf77ee5696ae4ae6c5ea7b06038cf2368d557..5ff7fa7e937d671924d8fb3d2d8691247dc905d7 100644 |
| --- a/chrome/common/net/url_fetcher.h |
| +++ b/chrome/common/net/url_fetcher.h |
| @@ -20,10 +20,16 @@ |
| #include "base/memory/ref_counted.h" |
| #include "base/message_loop.h" |
| +#include "base/platform_file.h" |
| #include "base/time.h" |
| +class FilePath; |
| class GURL; |
| +namespace base { |
| +class MessageLoopProxy; |
| +} // namespace base |
| + |
| namespace net { |
| class HostPortPair; |
| class HttpResponseHeaders; |
| @@ -68,18 +74,44 @@ class URLFetcher { |
| HEAD, |
| }; |
| + // Where should the response be saved? Use set_response_destination() |
| + // to choose. |
| + enum ResponseDestinationType { |
| + STRING, // Default |
| + TEMP_FILE |
| + }; |
| + |
| class Delegate { |
| public: |
| + // TODO(skerner): This will be removed in favor of the |data|-free |
| + // version below. Leaving this for now to make the initial code review |
| + // easy to read. |
| + virtual void OnURLFetchComplete(const URLFetcher* source, |
| + const GURL& url, |
| + const net::URLRequestStatus& status, |
| + int response_code, |
| + const net::ResponseCookies& cookies, |
| + const std::string& data); |
| + |
| // This will be called when the URL has been fetched, successfully or not. |
| // |response_code| is the HTTP response code (200, 404, etc.) if |
| - // applicable. |url|, |status| and |data| are all valid until the |
| - // URLFetcher instance is destroyed. |
| + // applicable. |url| and |status| are all valid until the URLFetcher |
| + // instance is destroyed. |
|
darin (slow to review)
2011/05/16 04:57:04
I don't understand why you need these additional m
Sam Kerner (Chrome)
2011/05/17 04:09:34
One of them (the new OnURLFetchComplete() ) will r
|
| virtual void OnURLFetchComplete(const URLFetcher* source, |
| const GURL& url, |
| const net::URLRequestStatus& status, |
| int response_code, |
| - const net::ResponseCookies& cookies, |
| - const std::string& data) = 0; |
| + const net::ResponseCookies& cookies); |
| + |
| + // Called on a file writing error. Only called when writing the response |
| + // to a file. |
| + // REVIEWER PLEASE NOTE: This method would be unnecessary if the failure |
| + // could be encoded in a net::URLRequestStatus. However, it seems odd |
| + // to put a file system error in that object. Is it worth having this |
| + // method? |
| + virtual void OnFileWriteError(const URLFetcher* source, |
| + const GURL& url, |
| + base::PlatformFileError error); |
| protected: |
| virtual ~Delegate() {} |
| @@ -183,6 +215,23 @@ class URLFetcher { |
| } |
| #endif // defined(UNIT_TEST) |
| + ResponseDestinationType response_destination() { |
| + return response_destination_; |
| + } |
| + |
| + // Where should the response be saved? This should only be called before |
| + // calling Start(). If the response should be saved to a file, you need |
| + // to call set_file_message_loop_proxy() to give the thread on which file |
| + // operations may be done. |
| + void set_response_destination(ResponseDestinationType response_destination) { |
|
darin (slow to review)
2011/05/16 04:57:04
It seems a bit verbose to use an enum here. Maybe
Sam Kerner (Chrome)
2011/05/17 04:09:34
Done. Made the enum private.
|
| + response_destination_ = response_destination; |
| + } |
| + |
| + // Set the message loop proxy for file operations. Used to write the |
| + // response to a file. |
| + void set_file_message_loop_proxy( |
| + scoped_refptr<base::MessageLoopProxy> file_message_loop_proxy); |
| + |
| // Retrieve the response headers from the request. Must only be called after |
| // the OnURLFetchComplete callback has run. |
| virtual net::HttpResponseHeaders* response_headers() const; |
| @@ -207,6 +256,14 @@ class URLFetcher { |
| // Reports that the received content was malformed. |
| void ReceivedContentWasMalformed(); |
| + // Get the response as a string. Return false if the fetcher was not |
| + // set to store the response as a string. |
| + bool GetResponseAsString(std::string* response_string) const; |
| + |
| + // Get the path to the file containing the response body. Returns false |
| + // if the response body was not saved to a file. |
| + bool GetResponseAsFilePath(FilePath* response_path) const; |
| + |
| // Cancels all existing URLFetchers. Will notify the URLFetcher::Delegates. |
| // Note that any new URLFetchers created while this is running will not be |
| // cancelled. Typically, one would call this in the CleanUp() method of an IO |
| @@ -245,6 +302,9 @@ class URLFetcher { |
| // Maximum retries allowed. |
| int max_retries_; |
| + // Where should responses be saved? |
| + ResponseDestinationType response_destination_; |
| + |
| static bool g_interception_enabled; |
| DISALLOW_COPY_AND_ASSIGN(URLFetcher); |