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 CONTENT_COMMON_NET_URL_FETCHER_CORE_H_ | 5 #ifndef CONTENT_COMMON_NET_URL_FETCHER_CORE_H_ |
6 #define CONTENT_COMMON_NET_URL_FETCHER_CORE_H_ | 6 #define CONTENT_COMMON_NET_URL_FETCHER_CORE_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include <set> | 9 #include <set> |
10 #include <string> | 10 #include <string> |
11 | 11 |
12 #include "base/basictypes.h" | 12 #include "base/basictypes.h" |
13 #include "base/callback_forward.h" | |
14 #include "base/compiler_specific.h" | 13 #include "base/compiler_specific.h" |
15 #include "base/debug/stack_trace.h" | 14 #include "base/debug/stack_trace.h" |
16 #include "base/file_path.h" | 15 #include "base/file_path.h" |
17 #include "base/lazy_instance.h" | 16 #include "base/lazy_instance.h" |
18 #include "base/memory/ref_counted.h" | 17 #include "base/memory/ref_counted.h" |
19 #include "base/memory/scoped_ptr.h" | 18 #include "base/memory/scoped_ptr.h" |
20 #include "base/memory/weak_ptr.h" | 19 #include "base/memory/weak_ptr.h" |
21 #include "base/platform_file.h" | 20 #include "base/platform_file.h" |
22 #include "base/supports_user_data.h" | |
23 #include "base/timer.h" | 21 #include "base/timer.h" |
24 #include "content/public/common/url_fetcher.h" | 22 #include "content/public/common/url_fetcher.h" |
25 #include "googleurl/src/gurl.h" | 23 #include "googleurl/src/gurl.h" |
26 #include "net/base/host_port_pair.h" | 24 #include "net/base/host_port_pair.h" |
27 #include "net/http/http_request_headers.h" | 25 #include "net/http/http_request_headers.h" |
| 26 #include "net/url_request/url_fetcher.h" |
28 #include "net/url_request/url_request.h" | 27 #include "net/url_request/url_request.h" |
29 #include "net/url_request/url_request_status.h" | 28 #include "net/url_request/url_request_status.h" |
30 | 29 |
31 namespace base { | 30 namespace base { |
32 class MessageLoopProxy; | 31 class MessageLoopProxy; |
33 } // namespace base | 32 } // namespace base |
34 | 33 |
35 namespace net { | 34 namespace net { |
36 class HttpResponseHeaders; | 35 class HttpResponseHeaders; |
37 class IOBuffer; | 36 class IOBuffer; |
38 class URLRequestContextGetter; | 37 class URLRequestContextGetter; |
39 class URLRequestThrottlerEntryInterface; | 38 class URLRequestThrottlerEntryInterface; |
40 } // namespace net | 39 } // namespace net |
41 | 40 |
42 namespace content { | 41 namespace content { |
43 | 42 |
44 class URLFetcherDelegate; | 43 class URLFetcherDelegate; |
45 | 44 |
46 class URLFetcherCore | 45 class URLFetcherCore |
47 : public base::RefCountedThreadSafe<URLFetcherCore>, | 46 : public base::RefCountedThreadSafe<URLFetcherCore>, |
48 public net::URLRequest::Delegate { | 47 public net::URLRequest::Delegate { |
49 public: | 48 public: |
50 // Used by SetURLRequestUserData. The callback should make a fresh | |
51 // Data* object every time it's called. | |
52 typedef base::Callback<base::SupportsUserData::Data*()> CreateDataCallback; | |
53 | |
54 URLFetcherCore(URLFetcher* fetcher, | 49 URLFetcherCore(URLFetcher* fetcher, |
55 const GURL& original_url, | 50 const GURL& original_url, |
56 URLFetcher::RequestType request_type, | 51 URLFetcher::RequestType request_type, |
57 URLFetcherDelegate* d); | 52 URLFetcherDelegate* d); |
58 | 53 |
59 // Starts the load. It's important that this not happen in the constructor | 54 // Starts the load. It's important that this not happen in the constructor |
60 // because it causes the IO thread to begin AddRef()ing and Release()ing | 55 // because it causes the IO thread to begin AddRef()ing and Release()ing |
61 // us. If our caller hasn't had time to fully construct us and take a | 56 // us. If our caller hasn't had time to fully construct us and take a |
62 // reference, the IO thread could interrupt things, run a task, Release() | 57 // reference, the IO thread could interrupt things, run a task, Release() |
63 // us, and destroy us, leaving the caller with an already-destroyed object | 58 // us, and destroy us, leaving the caller with an already-destroyed object |
(...skipping 16 matching lines...) Expand all Loading... |
80 void AppendChunkToUpload(const std::string& data, bool is_last_chunk); | 75 void AppendChunkToUpload(const std::string& data, bool is_last_chunk); |
81 // |flags| are flags to apply to the load operation--these should be | 76 // |flags| are flags to apply to the load operation--these should be |
82 // one or more of the LOAD_* flags defined in net/base/load_flags.h. | 77 // one or more of the LOAD_* flags defined in net/base/load_flags.h. |
83 void SetLoadFlags(int load_flags); | 78 void SetLoadFlags(int load_flags); |
84 int GetLoadFlags() const; | 79 int GetLoadFlags() const; |
85 void SetReferrer(const std::string& referrer); | 80 void SetReferrer(const std::string& referrer); |
86 void SetExtraRequestHeaders(const std::string& extra_request_headers); | 81 void SetExtraRequestHeaders(const std::string& extra_request_headers); |
87 void AddExtraRequestHeader(const std::string& header_line); | 82 void AddExtraRequestHeader(const std::string& header_line); |
88 void GetExtraRequestHeaders(net::HttpRequestHeaders* headers) const; | 83 void GetExtraRequestHeaders(net::HttpRequestHeaders* headers) const; |
89 void SetRequestContext(net::URLRequestContextGetter* request_context_getter); | 84 void SetRequestContext(net::URLRequestContextGetter* request_context_getter); |
| 85 // Set the URL that should be consulted for the third-party cookie |
| 86 // blocking policy. |
90 void SetFirstPartyForCookies(const GURL& first_party_for_cookies); | 87 void SetFirstPartyForCookies(const GURL& first_party_for_cookies); |
91 // Whenever a URLRequest object is created, SetUserData() will be | 88 // Set the key and data callback that is used when setting the user |
92 // called on it with the given key and the result of the given | 89 // data on any URLRequest objects this object creates. |
93 // callback. | |
94 void SetURLRequestUserData( | 90 void SetURLRequestUserData( |
95 const void* key, const CreateDataCallback& create_data_callback); | 91 const void* key, |
| 92 const net::URLFetcher::CreateDataCallback& create_data_callback); |
96 void SetAutomaticallyRetryOn5xx(bool retry); | 93 void SetAutomaticallyRetryOn5xx(bool retry); |
97 void SetMaxRetries(int max_retries); | 94 void SetMaxRetries(int max_retries); |
98 int GetMaxRetries() const; | 95 int GetMaxRetries() const; |
99 base::TimeDelta GetBackoffDelay() const; | 96 base::TimeDelta GetBackoffDelay() const; |
100 void SaveResponseToFileAtPath( | 97 void SaveResponseToFileAtPath( |
101 const FilePath& file_path, | 98 const FilePath& file_path, |
102 scoped_refptr<base::MessageLoopProxy> file_message_loop_proxy); | 99 scoped_refptr<base::MessageLoopProxy> file_message_loop_proxy); |
103 void SaveResponseToTemporaryFile( | 100 void SaveResponseToTemporaryFile( |
104 scoped_refptr<base::MessageLoopProxy> file_message_loop_proxy); | 101 scoped_refptr<base::MessageLoopProxy> file_message_loop_proxy); |
105 net::HttpResponseHeaders* GetResponseHeaders() const; | 102 net::HttpResponseHeaders* GetResponseHeaders() const; |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
318 int response_code_; // HTTP status code for the request | 315 int response_code_; // HTTP status code for the request |
319 std::string data_; // Results of the request, when we are | 316 std::string data_; // Results of the request, when we are |
320 // storing the response as a string. | 317 // storing the response as a string. |
321 scoped_refptr<net::IOBuffer> buffer_; | 318 scoped_refptr<net::IOBuffer> buffer_; |
322 // Read buffer | 319 // Read buffer |
323 scoped_refptr<net::URLRequestContextGetter> request_context_getter_; | 320 scoped_refptr<net::URLRequestContextGetter> request_context_getter_; |
324 // Cookie/cache info for the request | 321 // Cookie/cache info for the request |
325 GURL first_party_for_cookies_; // The first party URL for the request | 322 GURL first_party_for_cookies_; // The first party URL for the request |
326 // The user data to add to each newly-created URLRequest. | 323 // The user data to add to each newly-created URLRequest. |
327 const void* url_request_data_key_; | 324 const void* url_request_data_key_; |
328 CreateDataCallback url_request_create_data_callback_; | 325 net::URLFetcher::CreateDataCallback url_request_create_data_callback_; |
329 net::ResponseCookies cookies_; // Response cookies | 326 net::ResponseCookies cookies_; // Response cookies |
330 net::HttpRequestHeaders extra_request_headers_; | 327 net::HttpRequestHeaders extra_request_headers_; |
331 scoped_refptr<net::HttpResponseHeaders> response_headers_; | 328 scoped_refptr<net::HttpResponseHeaders> response_headers_; |
332 bool was_fetched_via_proxy_; | 329 bool was_fetched_via_proxy_; |
333 net::HostPortPair socket_address_; | 330 net::HostPortPair socket_address_; |
334 | 331 |
335 std::string upload_content_; // HTTP POST payload | 332 std::string upload_content_; // HTTP POST payload |
336 std::string upload_content_type_; // MIME type of POST payload | 333 std::string upload_content_type_; // MIME type of POST payload |
337 std::string referrer_; // HTTP Referer header value | 334 std::string referrer_; // HTTP Referer header value |
338 bool is_chunked_upload_; // True if using chunked transfer encoding | 335 bool is_chunked_upload_; // True if using chunked transfer encoding |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
399 base::debug::StackTrace stack_trace_; | 396 base::debug::StackTrace stack_trace_; |
400 | 397 |
401 static base::LazyInstance<Registry> g_registry; | 398 static base::LazyInstance<Registry> g_registry; |
402 | 399 |
403 DISALLOW_COPY_AND_ASSIGN(URLFetcherCore); | 400 DISALLOW_COPY_AND_ASSIGN(URLFetcherCore); |
404 }; | 401 }; |
405 | 402 |
406 } // namespace content | 403 } // namespace content |
407 | 404 |
408 #endif // CONTENT_COMMON_NET_URL_FETCHER_CORE_H_ | 405 #endif // CONTENT_COMMON_NET_URL_FETCHER_CORE_H_ |
OLD | NEW |