Chromium Code Reviews| Index: content/public/common/url_fetcher.h |
| =================================================================== |
| --- content/public/common/url_fetcher.h (revision 0) |
| +++ content/public/common/url_fetcher.h (revision 0) |
| @@ -0,0 +1,223 @@ |
| +// 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_PUBLIC_COMMON_URL_FETCHER_H_ |
| +#define CONTENT_PUBLIC_COMMON_URL_FETCHER_H_ |
| +#pragma once |
| + |
| +#include <string> |
| +#include <vector> |
| + |
| +#include "base/platform_file.h" |
| +#include "content/common/content_export.h" |
| + |
| +class FilePath; |
| +class GURL; |
| + |
| +namespace base { |
| +class MessageLoopProxy; |
| +class TimeDelta; |
| +} |
| + |
| +namespace net { |
| +class HostPortPair; |
| +class HttpRequestHeaders; |
| +class HttpResponseHeaders; |
| +class URLRequestContextGetter; |
| +class URLRequestStatus; |
| +typedef std::vector<std::string> ResponseCookies; |
| +} |
| + |
| +namespace content { |
| + |
| +class URLFetcherDelegate; |
| + |
| +// To use this class, create an instance with the desired URL and a pointer to |
| +// the object to be notified when the URL has been loaded: |
| +// URLFetcher* fetcher = URLFetcher::create("http://www.google.com", |
|
willchan no longer on Chromium
2011/10/25 16:59:49
URLFetcher::Create
jam
2011/10/25 17:16:20
Done.
|
| +// URLFetcher::GET, this); |
| +// |
| +// Then, optionally set properties on this object, like the request context or |
| +// extra headers: |
| +// fetcher->set_extra_request_headers("X-Foo: bar"); |
| +// |
| +// Finally, start the request: |
| +// fetcher->Start(); |
| +// |
| +// |
| +// The object you supply as a delegate must inherit from |
| +// URLFetcherDelegate; when the fetch is completed, |
| +// OnURLFetchComplete() will be called with a pointer to the URLFetcher. From |
| +// that point until the original URLFetcher instance is destroyed, you may use |
| +// accessor methods to see the result of the fetch. You should copy these |
| +// objects if you need them to live longer than the URLFetcher instance. If the |
| +// URLFetcher instance is destroyed before the callback happens, the fetch will |
| +// be canceled and no callback will occur. |
| +// |
| +// You may create the URLFetcher instance on any thread; OnURLFetchComplete() |
| +// will be called back on the same thread you use to create the instance. |
| +// |
| +// |
| +// NOTE: By default URLFetcher requests are NOT intercepted, except when |
| +// interception is explicitly enabled in tests. |
| +class CONTENT_EXPORT URLFetcher { |
| + public: |
| + // Imposible http response code. Used to signal that no http response code |
| + // was received. |
| + static const int kInvalidHttpResponseCode; |
|
willchan no longer on Chromium
2011/10/25 16:59:49
I don't think this actually needs to be public. I
jam
2011/10/25 17:16:20
it's referenced below in GetResponseCode
willchan no longer on Chromium
2011/10/25 17:22:58
Oh, good point. I just did a grep and no one's che
|
| + |
| + enum RequestType { |
| + GET, |
| + POST, |
| + HEAD, |
| + }; |
| + |
| + // |url| is the URL to send the request to. |
| + // |request_type| is the type of request to make. |
| + // |d| the object that will receive the callback on fetch completion. |
| + static URLFetcher* Create(const GURL& url, |
| + RequestType request_type, |
| + content::URLFetcherDelegate* d); |
|
willchan no longer on Chromium
2011/10/25 16:59:49
no need for content::
jam
2011/10/25 17:16:20
Done.
|
| + |
| + // Cancels all existing URLFetchers. Will notify the URLFetcherDelegates. |
| + // 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 |
| + // thread, so that no new URLRequests would be able to start on the IO thread |
| + // anyway. This doesn't prevent new URLFetchers from trying to post to the IO |
| + // thread though, even though the task won't ever run. |
| + static void CancelAll(); |
| + |
| + // Normally interception is disabled for URLFetcher, but you can use this |
| + // to enable it for tests. Also see ScopedURLFetcherFactory for another way |
| + // of testing code that uses an URLFetcher. |
| + static void SetEnableInterceptionForTests(bool enabled); |
| + |
| + virtual ~URLFetcher() {} |
| + |
| + // Sets data only needed by POSTs. All callers making POST requests should |
| + // call this before the request is started. |upload_content_type| is the MIME |
| + // type of the content, while |upload_content| is the data to be sent (the |
| + // Content-Length header value will be set to the length of this data). |
| + virtual void SetUploadData(const std::string& upload_content_type, |
| + const std::string& upload_content) = 0; |
| + |
| + // Indicates that the POST data is sent via chunked transfer encoding. |
| + // This may only be called before calling Start(). |
| + // Use AppendChunkToUpload() to give the data chunks after calling Start(). |
| + virtual void SetChunkedUpload(const std::string& upload_content_type) = 0; |
| + |
| + // Adds the given bytes to a request's POST data transmitted using chunked |
| + // transfer encoding. |
| + // This method should be called ONLY after calling Start(). |
| + virtual void AppendChunkToUpload(const std::string& data, |
| + bool is_last_chunk) = 0; |
| + |
| + // Set one or more load flags as defined in net/base/load_flags.h. Must be |
| + // called before the request is started. |
| + virtual void SetLoadFlags(int load_flags) = 0; |
| + |
| + // Returns the current load flags. |
| + virtual int GetLoadFlags() const = 0; |
| + |
| + // The referrer URL for the request. Must be called before the request is |
| + // started. |
| + virtual void SetReferrer(const std::string& referrer) = 0; |
| + |
| + // Set extra headers on the request. Must be called before the request |
| + // is started. |
| + virtual void SetExtraRequestHeaders( |
| + const std::string& extra_request_headers) = 0; |
| + |
| + virtual void GetExtraRequestHeaders(net::HttpRequestHeaders* headers) = 0; |
| + |
| + // Set the net::URLRequestContext on the request. Must be called before the |
| + // request is started. |
| + virtual void SetRequestContext( |
| + net::URLRequestContextGetter* request_context_getter) = 0; |
| + |
| + // If |retry| is false, 5xx responses will be propagated to the observer, |
| + // if it is true URLFetcher will automatically re-execute the request, |
| + // after backoff_delay() elapses. URLFetcher has it set to true by default. |
| + virtual void SetAutomaticallyRetryOn5xx(bool retry) = 0; |
| + |
| + virtual void SetMaxRetries(int max_retries) = 0; |
| + virtual int GetMaxRetries() const = 0; |
| + |
| + // Returns the back-off delay before the request will be retried, |
| + // when a 5xx response was received. |
| + virtual base::TimeDelta GetBackoffDelay() const = 0; |
| + |
| + // Sets the back-off delay, allowing to mock 5xx requests in unit-tests. |
| + virtual void SetBackoffDelayForTesting(base::TimeDelta backoff_delay) = 0; |
| + |
| + // By default, the response is saved in a string. Call this method to save the |
| + // response to a temporary file instead. Must be called before Start(). |
| + // |file_message_loop_proxy| will be used for all file operations. |
| + virtual void SaveResponseToTemporaryFile( |
| + scoped_refptr<base::MessageLoopProxy> file_message_loop_proxy) = 0; |
| + |
| + // Retrieve the response headers from the request. Must only be called after |
| + // the OnURLFetchComplete callback has run. |
| + virtual net::HttpResponseHeaders* GetResponseHeaders() const = 0; |
| + |
| + // Retrieve the remote socket address from the request. Must only |
| + // be called after the OnURLFetchComplete callback has run and if |
| + // the request has not failed. |
| + virtual net::HostPortPair GetSocketAddress() const = 0; |
| + |
| + // Returns true if the request was delivered through a proxy. Must only |
| + // be called after the OnURLFetchComplete callback has run and the request |
| + // has not failed. |
| + virtual bool WasFetchedViaProxy() const = 0; |
| + |
| + // Start the request. After this is called, you may not change any other |
| + // settings. |
| + virtual void Start() = 0; |
| + |
| + // Restarts the URLFetcher with a new URLRequestContextGetter. |
| + virtual void StartWithRequestContextGetter( |
| + net::URLRequestContextGetter* request_context_getter) = 0; |
| + |
| + // Return the URL that we were asked to fetch. |
| + virtual const GURL& GetOriginalUrl() const = 0; |
| + |
| + // Return the URL that this fetcher is processing. |
| + virtual const GURL& GetUrl() const = 0; |
| + |
| + // The status of the URL fetch. |
| + virtual const net::URLRequestStatus& GetStatus() const = 0; |
| + |
| + // The http response code received. Will return |
| + // URLFetcher::kInvalidHttpResponseCode if an error prevented any response |
| + // from being received. |
| + virtual int GetResponseCode() const = 0; |
| + |
| + // Cookies recieved. |
| + virtual const net::ResponseCookies& GetCookies() const = 0; |
| + |
| + // Return true if any file system operation failed. If so, set |error_code| |
| + // to the error code. File system errors are only possible if user called |
| + // SaveResponseToTemporaryFile(). |
| + virtual bool FileErrorOccurred( |
| + base::PlatformFileError* out_error_code) const = 0; |
| + |
| + // Reports that the received content was malformed. |
| + virtual void ReceivedContentWasMalformed() = 0; |
| + |
| + // Get the response as a string. Return false if the fetcher was not |
| + // set to store the response as a string. |
| + virtual bool GetResponseAsString(std::string* out_response_string) const = 0; |
| + |
| + // Get the path to the file containing the response body. Returns false |
| + // if the response body was not saved to a file. If take_ownership is |
| + // true, caller takes responsibility for the temp file, and it will not |
| + // be removed once the URLFetcher is destroyed. User should not take |
| + // ownership more than once, or call this method after taking ownership. |
| + virtual bool GetResponseAsFilePath(bool take_ownership, |
| + FilePath* out_response_path) const = 0; |
| +}; |
| + |
| +} // namespace content |
| + |
| +#endif // CONTENT_PUBLIC_COMMON_URL_FETCHER_H_ |
| Property changes on: content\public\common\url_fetcher.h |
| ___________________________________________________________________ |
| Added: svn:eol-style |
| + LF |