| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 // This file contains URLFetcher, a wrapper around net::URLRequest that handles | 5 // This file contains URLFetcher, a wrapper around net::URLRequest that handles |
| 6 // low-level details like thread safety, ref counting, and incremental buffer | 6 // low-level details like thread safety, ref counting, and incremental buffer |
| 7 // reading. This is useful for callers who simply want to get the data from a | 7 // reading. This is useful for callers who simply want to get the data from a |
| 8 // URL and don't care about all the nitty-gritty details. | 8 // URL and don't care about all the nitty-gritty details. |
| 9 // | 9 // |
| 10 // NOTE(willchan): Only one "IO" thread is supported for URLFetcher. This is a | 10 // NOTE(willchan): Only one "IO" thread is supported for URLFetcher. This is a |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 60 // interception is explicitly enabled in tests. | 60 // interception is explicitly enabled in tests. |
| 61 | 61 |
| 62 class URLFetcher { | 62 class URLFetcher { |
| 63 public: | 63 public: |
| 64 enum RequestType { | 64 enum RequestType { |
| 65 GET, | 65 GET, |
| 66 POST, | 66 POST, |
| 67 HEAD, | 67 HEAD, |
| 68 }; | 68 }; |
| 69 | 69 |
| 70 // Abstract class used to hold the response body. Delegate generates |
| 71 // an implementation of this interface, and gets a pointer to it when |
| 72 // the fetch is complete. |
| 73 class ResponseBodyContainerInterface { |
| 74 public: |
| 75 // Add bytes to the response body. |
| 76 virtual void Append(char* data, int data_length) = 0; |
| 77 |
| 78 // If the class supports returning the body as a string, return true |
| 79 // and set |out_body| to the response body. Otherwise, return false. |
| 80 virtual bool GetAsString(std::string* out_body) const = 0; |
| 81 }; |
| 82 |
| 70 class Delegate { | 83 class Delegate { |
| 71 public: | 84 public: |
| 72 // This will be called when the URL has been fetched, successfully or not. | 85 // This will be called when the URL has been fetched, successfully or not. |
| 73 // |response_code| is the HTTP response code (200, 404, etc.) if | 86 // |response_code| is the HTTP response code (200, 404, etc.) if |
| 74 // applicable. |url|, |status| and |data| are all valid until the | 87 // applicable. |url|, |status| and |data| are all valid until the |
| 75 // URLFetcher instance is destroyed. | 88 // URLFetcher instance is destroyed. |
| 89 virtual void OnURLFetchCompleteNew( |
| 90 const URLFetcher* source, |
| 91 const GURL& url, |
| 92 const net::URLRequestStatus& status, |
| 93 int response_code, |
| 94 const ResponseCookies& cookies, |
| 95 const ResponseBodyContainerInterface& response_body); |
| 96 |
| 97 // TODO(skerner): To avoid changing existing code, keep the old |
| 98 // method, whre |data| is a string. Once we finalize interface changes, |
| 99 // this will be removed. |
| 76 virtual void OnURLFetchComplete(const URLFetcher* source, | 100 virtual void OnURLFetchComplete(const URLFetcher* source, |
| 77 const GURL& url, | 101 const GURL& url, |
| 78 const net::URLRequestStatus& status, | 102 const net::URLRequestStatus& status, |
| 79 int response_code, | 103 int response_code, |
| 80 const ResponseCookies& cookies, | 104 const ResponseCookies& cookies, |
| 81 const std::string& data) = 0; | 105 const std::string& data) = 0; |
| 82 | 106 |
| 107 // Get a container into which the response body can be written. |
| 108 // Delegate can control how response is held by the choice of the |
| 109 // concrete type this method returns. For example, to process the |
| 110 // response body as it is received, return a class that does |
| 111 // processing on each call to ResponseBodyContainerInterface::Append(). |
| 112 virtual ResponseBodyContainerInterface* CreateResponseBodyContainer(); |
| 113 |
| 83 protected: | 114 protected: |
| 84 virtual ~Delegate() {} | 115 virtual ~Delegate() {} |
| 85 }; | 116 }; |
| 86 | 117 |
| 87 // URLFetcher::Create uses the currently registered Factory to create the | 118 // URLFetcher::Create uses the currently registered Factory to create the |
| 88 // URLFetcher. Factory is intended for testing. | 119 // URLFetcher. Factory is intended for testing. |
| 89 class Factory { | 120 class Factory { |
| 90 public: | 121 public: |
| 91 virtual URLFetcher* CreateURLFetcher(int id, | 122 virtual URLFetcher* CreateURLFetcher(int id, |
| 92 const GURL& url, | 123 const GURL& url, |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 233 base::TimeDelta backoff_delay_; | 264 base::TimeDelta backoff_delay_; |
| 234 // Maximum retries allowed. | 265 // Maximum retries allowed. |
| 235 int max_retries_; | 266 int max_retries_; |
| 236 | 267 |
| 237 static bool g_interception_enabled; | 268 static bool g_interception_enabled; |
| 238 | 269 |
| 239 DISALLOW_COPY_AND_ASSIGN(URLFetcher); | 270 DISALLOW_COPY_AND_ASSIGN(URLFetcher); |
| 240 }; | 271 }; |
| 241 | 272 |
| 242 #endif // CHROME_COMMON_NET_URL_FETCHER_H_ | 273 #endif // CHROME_COMMON_NET_URL_FETCHER_H_ |
| OLD | NEW |