| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #ifndef NET_URL_REQUEST_URL_FETCHER_CORE_H_ | 5 #ifndef NET_URL_REQUEST_URL_FETCHER_CORE_H_ |
| 6 #define NET_URL_REQUEST_URL_FETCHER_CORE_H_ | 6 #define NET_URL_REQUEST_URL_FETCHER_CORE_H_ |
| 7 | 7 |
| 8 #include <set> | 8 #include <set> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 | 29 |
| 30 namespace net { | 30 namespace net { |
| 31 class DrainableIOBuffer; | 31 class DrainableIOBuffer; |
| 32 class HttpResponseHeaders; | 32 class HttpResponseHeaders; |
| 33 class IOBuffer; | 33 class IOBuffer; |
| 34 class URLFetcherDelegate; | 34 class URLFetcherDelegate; |
| 35 class URLFetcherResponseWriter; | 35 class URLFetcherResponseWriter; |
| 36 class URLRequestContextGetter; | 36 class URLRequestContextGetter; |
| 37 class URLRequestThrottlerEntryInterface; | 37 class URLRequestThrottlerEntryInterface; |
| 38 | 38 |
| 39 class URLFetcherCore | 39 class URLFetcherCore : public base::RefCountedThreadSafe<URLFetcherCore>, |
| 40 : public base::RefCountedThreadSafe<URLFetcherCore>, | 40 public URLRequest::Delegate { |
| 41 public URLRequest::Delegate { | |
| 42 public: | 41 public: |
| 43 URLFetcherCore(URLFetcher* fetcher, | 42 URLFetcherCore(URLFetcher* fetcher, |
| 44 const GURL& original_url, | 43 const GURL& original_url, |
| 45 URLFetcher::RequestType request_type, | 44 URLFetcher::RequestType request_type, |
| 46 URLFetcherDelegate* d); | 45 URLFetcherDelegate* d); |
| 47 | 46 |
| 48 // Starts the load. It's important that this not happen in the constructor | 47 // Starts the load. It's important that this not happen in the constructor |
| 49 // because it causes the IO thread to begin AddRef()ing and Release()ing | 48 // because it causes the IO thread to begin AddRef()ing and Release()ing |
| 50 // us. If our caller hasn't had time to fully construct us and take a | 49 // us. If our caller hasn't had time to fully construct us and take a |
| 51 // reference, the IO thread could interrupt things, run a task, Release() | 50 // reference, the IO thread could interrupt things, run a task, Release() |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 119 void ReceivedContentWasMalformed(); | 118 void ReceivedContentWasMalformed(); |
| 120 bool GetResponseAsString(std::string* out_response_string) const; | 119 bool GetResponseAsString(std::string* out_response_string) const; |
| 121 bool GetResponseAsFilePath(bool take_ownership, | 120 bool GetResponseAsFilePath(bool take_ownership, |
| 122 base::FilePath* out_response_path); | 121 base::FilePath* out_response_path); |
| 123 | 122 |
| 124 // Overridden from URLRequest::Delegate: | 123 // Overridden from URLRequest::Delegate: |
| 125 virtual void OnReceivedRedirect(URLRequest* request, | 124 virtual void OnReceivedRedirect(URLRequest* request, |
| 126 const GURL& new_url, | 125 const GURL& new_url, |
| 127 bool* defer_redirect) OVERRIDE; | 126 bool* defer_redirect) OVERRIDE; |
| 128 virtual void OnResponseStarted(URLRequest* request) OVERRIDE; | 127 virtual void OnResponseStarted(URLRequest* request) OVERRIDE; |
| 129 virtual void OnReadCompleted(URLRequest* request, | 128 virtual void OnReadCompleted(URLRequest* request, int bytes_read) OVERRIDE; |
| 130 int bytes_read) OVERRIDE; | |
| 131 virtual void OnCertificateRequested( | 129 virtual void OnCertificateRequested( |
| 132 URLRequest* request, | 130 URLRequest* request, |
| 133 SSLCertRequestInfo* cert_request_info) OVERRIDE; | 131 SSLCertRequestInfo* cert_request_info) OVERRIDE; |
| 134 | 132 |
| 135 URLFetcherDelegate* delegate() const { return delegate_; } | 133 URLFetcherDelegate* delegate() const { return delegate_; } |
| 136 static void CancelAll(); | 134 static void CancelAll(); |
| 137 static int GetNumFetcherCores(); | 135 static int GetNumFetcherCores(); |
| 138 static void SetEnableInterceptionForTests(bool enabled); | 136 static void SetEnableInterceptionForTests(bool enabled); |
| 139 static void SetIgnoreCertificateRequests(bool ignored); | 137 static void SetIgnoreCertificateRequests(bool ignored); |
| 140 | 138 |
| 141 private: | 139 private: |
| 142 friend class base::RefCountedThreadSafe<URLFetcherCore>; | 140 friend class base::RefCountedThreadSafe<URLFetcherCore>; |
| 143 | 141 |
| 144 class Registry { | 142 class Registry { |
| 145 public: | 143 public: |
| 146 Registry(); | 144 Registry(); |
| 147 ~Registry(); | 145 ~Registry(); |
| 148 | 146 |
| 149 void AddURLFetcherCore(URLFetcherCore* core); | 147 void AddURLFetcherCore(URLFetcherCore* core); |
| 150 void RemoveURLFetcherCore(URLFetcherCore* core); | 148 void RemoveURLFetcherCore(URLFetcherCore* core); |
| 151 | 149 |
| 152 void CancelAll(); | 150 void CancelAll(); |
| 153 | 151 |
| 154 int size() const { | 152 int size() const { return fetchers_.size(); } |
| 155 return fetchers_.size(); | |
| 156 } | |
| 157 | 153 |
| 158 private: | 154 private: |
| 159 std::set<URLFetcherCore*> fetchers_; | 155 std::set<URLFetcherCore*> fetchers_; |
| 160 | 156 |
| 161 DISALLOW_COPY_AND_ASSIGN(Registry); | 157 DISALLOW_COPY_AND_ASSIGN(Registry); |
| 162 }; | 158 }; |
| 163 | 159 |
| 164 virtual ~URLFetcherCore(); | 160 virtual ~URLFetcherCore(); |
| 165 | 161 |
| 166 // Wrapper functions that allow us to ensure actions happen on the right | 162 // Wrapper functions that allow us to ensure actions happen on the right |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 198 // Read response bytes from the request. | 194 // Read response bytes from the request. |
| 199 void ReadResponse(); | 195 void ReadResponse(); |
| 200 | 196 |
| 201 // Notify Delegate about the progress of upload/download. | 197 // Notify Delegate about the progress of upload/download. |
| 202 void InformDelegateUploadProgress(); | 198 void InformDelegateUploadProgress(); |
| 203 void InformDelegateUploadProgressInDelegateThread(int64 current, int64 total); | 199 void InformDelegateUploadProgressInDelegateThread(int64 current, int64 total); |
| 204 void InformDelegateDownloadProgress(); | 200 void InformDelegateDownloadProgress(); |
| 205 void InformDelegateDownloadProgressInDelegateThread(int64 current, | 201 void InformDelegateDownloadProgressInDelegateThread(int64 current, |
| 206 int64 total); | 202 int64 total); |
| 207 | 203 |
| 208 URLFetcher* fetcher_; // Corresponding fetcher object | 204 URLFetcher* fetcher_; // Corresponding fetcher object |
| 209 GURL original_url_; // The URL we were asked to fetch | 205 GURL original_url_; // The URL we were asked to fetch |
| 210 GURL url_; // The URL we eventually wound up at | 206 GURL url_; // The URL we eventually wound up at |
| 211 URLFetcher::RequestType request_type_; // What type of request is this? | 207 URLFetcher::RequestType request_type_; // What type of request is this? |
| 212 URLRequestStatus status_; // Status of the request | 208 URLRequestStatus status_; // Status of the request |
| 213 URLFetcherDelegate* delegate_; // Object to notify on completion | 209 URLFetcherDelegate* delegate_; // Object to notify on completion |
| 214 // Task runner for the creating thread. Used to interact with the delegate. | 210 // Task runner for the creating thread. Used to interact with the delegate. |
| 215 scoped_refptr<base::SingleThreadTaskRunner> delegate_task_runner_; | 211 scoped_refptr<base::SingleThreadTaskRunner> delegate_task_runner_; |
| 216 // Task runner for network operations. | 212 // Task runner for network operations. |
| 217 scoped_refptr<base::SingleThreadTaskRunner> network_task_runner_; | 213 scoped_refptr<base::SingleThreadTaskRunner> network_task_runner_; |
| 218 // Task runner for upload file access. | 214 // Task runner for upload file access. |
| 219 scoped_refptr<base::TaskRunner> upload_file_task_runner_; | 215 scoped_refptr<base::TaskRunner> upload_file_task_runner_; |
| 220 scoped_ptr<URLRequest> request_; // The actual request this wraps | 216 scoped_ptr<URLRequest> request_; // The actual request this wraps |
| 221 int load_flags_; // Flags for the load operation | 217 int load_flags_; // Flags for the load operation |
| 222 int response_code_; // HTTP status code for the request | 218 int response_code_; // HTTP status code for the request |
| 223 scoped_refptr<IOBuffer> buffer_; | 219 scoped_refptr<IOBuffer> buffer_; |
| 224 // Read buffer | 220 // Read buffer |
| 225 scoped_refptr<URLRequestContextGetter> request_context_getter_; | 221 scoped_refptr<URLRequestContextGetter> request_context_getter_; |
| 226 // Cookie/cache info for the request | 222 // Cookie/cache info for the request |
| 227 GURL first_party_for_cookies_; // The first party URL for the request | 223 GURL first_party_for_cookies_; // The first party URL for the request |
| 228 // The user data to add to each newly-created URLRequest. | 224 // The user data to add to each newly-created URLRequest. |
| 229 const void* url_request_data_key_; | 225 const void* url_request_data_key_; |
| 230 URLFetcher::CreateDataCallback url_request_create_data_callback_; | 226 URLFetcher::CreateDataCallback url_request_create_data_callback_; |
| 231 ResponseCookies cookies_; // Response cookies | 227 ResponseCookies cookies_; // Response cookies |
| 232 HttpRequestHeaders extra_request_headers_; | 228 HttpRequestHeaders extra_request_headers_; |
| 233 scoped_refptr<HttpResponseHeaders> response_headers_; | 229 scoped_refptr<HttpResponseHeaders> response_headers_; |
| 234 bool was_fetched_via_proxy_; | 230 bool was_fetched_via_proxy_; |
| 235 HostPortPair socket_address_; | 231 HostPortPair socket_address_; |
| 236 | 232 |
| 237 bool upload_content_set_; // SetUploadData has been called | 233 bool upload_content_set_; // SetUploadData has been called |
| 238 std::string upload_content_; // HTTP POST payload | 234 std::string upload_content_; // HTTP POST payload |
| 239 base::FilePath upload_file_path_; // Path to file containing POST payload | 235 base::FilePath upload_file_path_; // Path to file containing POST payload |
| 240 uint64 upload_range_offset_; // Offset from the beginning of the file | 236 uint64 upload_range_offset_; // Offset from the beginning of the file |
| 241 // to be uploaded. | 237 // to be uploaded. |
| 242 uint64 upload_range_length_; // The length of the part of file to be | 238 uint64 upload_range_length_; // The length of the part of file to be |
| 243 // uploaded. | 239 // uploaded. |
| 244 std::string upload_content_type_; // MIME type of POST payload | 240 std::string upload_content_type_; // MIME type of POST payload |
| 245 std::string referrer_; // HTTP Referer header value and policy | 241 std::string referrer_; // HTTP Referer header value and policy |
| 246 URLRequest::ReferrerPolicy referrer_policy_; | 242 URLRequest::ReferrerPolicy referrer_policy_; |
| 247 bool is_chunked_upload_; // True if using chunked transfer encoding | 243 bool is_chunked_upload_; // True if using chunked transfer encoding |
| 248 | 244 |
| 249 // Used to determine how long to wait before making a request or doing a | 245 // Used to determine how long to wait before making a request or doing a |
| 250 // retry. | 246 // retry. |
| 251 // | 247 // |
| 252 // Both of them can only be accessed on the IO thread. | 248 // Both of them can only be accessed on the IO thread. |
| 253 // | 249 // |
| 254 // We need not only the throttler entry for |original_URL|, but also | 250 // We need not only the throttler entry for |original_URL|, but also |
| 255 // the one for |url|. For example, consider the case that URL A | 251 // the one for |url|. For example, consider the case that URL A |
| 256 // redirects to URL B, for which the server returns a 500 | 252 // redirects to URL B, for which the server returns a 500 |
| 257 // response. In this case, the exponential back-off release time of | 253 // response. In this case, the exponential back-off release time of |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 316 base::debug::StackTrace stack_trace_; | 312 base::debug::StackTrace stack_trace_; |
| 317 | 313 |
| 318 static base::LazyInstance<Registry> g_registry; | 314 static base::LazyInstance<Registry> g_registry; |
| 319 | 315 |
| 320 DISALLOW_COPY_AND_ASSIGN(URLFetcherCore); | 316 DISALLOW_COPY_AND_ASSIGN(URLFetcherCore); |
| 321 }; | 317 }; |
| 322 | 318 |
| 323 } // namespace net | 319 } // namespace net |
| 324 | 320 |
| 325 #endif // NET_URL_REQUEST_URL_FETCHER_CORE_H_ | 321 #endif // NET_URL_REQUEST_URL_FETCHER_CORE_H_ |
| OLD | NEW |