Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(187)

Side by Side Diff: net/url_request/url_request_http_job.h

Issue 12701011: [Net] Propagate priority changes from URLRequest to HttpTransaction (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix leaks Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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_REQUEST_HTTP_JOB_H_ 5 #ifndef NET_URL_REQUEST_URL_REQUEST_HTTP_JOB_H_
6 #define NET_URL_REQUEST_URL_REQUEST_HTTP_JOB_H_ 6 #define NET_URL_REQUEST_URL_REQUEST_HTTP_JOB_H_
7 7
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/compiler_specific.h" 11 #include "base/compiler_specific.h"
12 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
13 #include "base/memory/weak_ptr.h" 13 #include "base/memory/weak_ptr.h"
14 #include "base/time.h" 14 #include "base/time.h"
15 #include "net/base/auth.h" 15 #include "net/base/auth.h"
16 #include "net/base/completion_callback.h" 16 #include "net/base/completion_callback.h"
17 #include "net/base/net_export.h"
17 #include "net/cookies/cookie_store.h" 18 #include "net/cookies/cookie_store.h"
18 #include "net/http/http_request_info.h" 19 #include "net/http/http_request_info.h"
19 #include "net/url_request/url_request_job.h" 20 #include "net/url_request/url_request_job.h"
20 #include "net/url_request/url_request_throttler_entry_interface.h" 21 #include "net/url_request/url_request_throttler_entry_interface.h"
21 22
22 namespace net { 23 namespace net {
23 24
24 class HttpResponseHeaders; 25 class HttpResponseHeaders;
25 class HttpResponseInfo; 26 class HttpResponseInfo;
26 class HttpTransaction; 27 class HttpTransaction;
27 class HttpUserAgentSettings; 28 class HttpUserAgentSettings;
28 class UploadDataStream; 29 class UploadDataStream;
29 class URLRequestContext; 30 class URLRequestContext;
30 31
31 // A URLRequestJob subclass that is built on top of HttpTransaction. It 32 // A URLRequestJob subclass that is built on top of HttpTransaction. It
32 // provides an implementation for both HTTP and HTTPS. 33 // provides an implementation for both HTTP and HTTPS.
33 class URLRequestHttpJob : public URLRequestJob { 34 class NET_EXPORT_PRIVATE URLRequestHttpJob : public URLRequestJob {
34 public: 35 public:
35 static URLRequestJob* Factory(URLRequest* request, 36 static URLRequestJob* Factory(URLRequest* request,
36 NetworkDelegate* network_delegate, 37 NetworkDelegate* network_delegate,
37 const std::string& scheme); 38 const std::string& scheme);
38 39
39 protected: 40 protected:
40 URLRequestHttpJob(URLRequest* request, 41 URLRequestHttpJob(URLRequest* request,
41 NetworkDelegate* network_delegate, 42 NetworkDelegate* network_delegate,
42 const HttpUserAgentSettings* http_user_agent_settings); 43 const HttpUserAgentSettings* http_user_agent_settings);
43 44
45 virtual ~URLRequestHttpJob();
46
47 // Overridden from URLRequestJob:
48 virtual void SetPriority(RequestPriority priority) OVERRIDE;
49 virtual void Start() OVERRIDE;
50 virtual void Kill() OVERRIDE;
51
52 RequestPriority priority() const {
53 return priority_;
54 }
55
56 private:
57 enum CompletionCause {
58 ABORTED,
59 FINISHED
60 };
61
62 typedef base::RefCountedData<bool> SharedBoolean;
63
64 class HttpFilterContext;
65 class HttpTransactionDelegateImpl;
66
44 // Shadows URLRequestJob's version of this method so we can grab cookies. 67 // Shadows URLRequestJob's version of this method so we can grab cookies.
45 void NotifyHeadersComplete(); 68 void NotifyHeadersComplete();
46 69
47 // Shadows URLRequestJob's method so we can record histograms. 70 // Shadows URLRequestJob's method so we can record histograms.
48 void NotifyDone(const URLRequestStatus& status); 71 void NotifyDone(const URLRequestStatus& status);
49 72
50 void DestroyTransaction(); 73 void DestroyTransaction();
51 74
52 void AddExtraHeaders(); 75 void AddExtraHeaders();
53 void AddCookieHeaderAndStart(); 76 void AddCookieHeaderAndStart();
(...skipping 12 matching lines...) Expand all
66 void OnStartCompleted(int result); 89 void OnStartCompleted(int result);
67 void OnReadCompleted(int result); 90 void OnReadCompleted(int result);
68 void NotifyBeforeSendHeadersCallback(int result); 91 void NotifyBeforeSendHeadersCallback(int result);
69 92
70 void RestartTransactionWithAuth(const AuthCredentials& credentials); 93 void RestartTransactionWithAuth(const AuthCredentials& credentials);
71 94
72 // Overridden from URLRequestJob: 95 // Overridden from URLRequestJob:
73 virtual void SetUpload(UploadDataStream* upload) OVERRIDE; 96 virtual void SetUpload(UploadDataStream* upload) OVERRIDE;
74 virtual void SetExtraRequestHeaders( 97 virtual void SetExtraRequestHeaders(
75 const HttpRequestHeaders& headers) OVERRIDE; 98 const HttpRequestHeaders& headers) OVERRIDE;
76 virtual void Start() OVERRIDE;
77 virtual void Kill() OVERRIDE;
78 virtual LoadState GetLoadState() const OVERRIDE; 99 virtual LoadState GetLoadState() const OVERRIDE;
79 virtual UploadProgress GetUploadProgress() const OVERRIDE; 100 virtual UploadProgress GetUploadProgress() const OVERRIDE;
80 virtual bool GetMimeType(std::string* mime_type) const OVERRIDE; 101 virtual bool GetMimeType(std::string* mime_type) const OVERRIDE;
81 virtual bool GetCharset(std::string* charset) OVERRIDE; 102 virtual bool GetCharset(std::string* charset) OVERRIDE;
82 virtual void GetResponseInfo(HttpResponseInfo* info) OVERRIDE; 103 virtual void GetResponseInfo(HttpResponseInfo* info) OVERRIDE;
83 virtual void GetLoadTimingInfo( 104 virtual void GetLoadTimingInfo(
84 LoadTimingInfo* load_timing_info) const OVERRIDE; 105 LoadTimingInfo* load_timing_info) const OVERRIDE;
85 virtual bool GetResponseCookies(std::vector<std::string>* cookies) OVERRIDE; 106 virtual bool GetResponseCookies(std::vector<std::string>* cookies) OVERRIDE;
86 virtual int GetResponseCode() const OVERRIDE; 107 virtual int GetResponseCode() const OVERRIDE;
87 virtual Filter* SetupFilter() const OVERRIDE; 108 virtual Filter* SetupFilter() const OVERRIDE;
88 virtual bool IsSafeRedirect(const GURL& location) OVERRIDE; 109 virtual bool IsSafeRedirect(const GURL& location) OVERRIDE;
89 virtual bool NeedsAuth() OVERRIDE; 110 virtual bool NeedsAuth() OVERRIDE;
90 virtual void GetAuthChallengeInfo(scoped_refptr<AuthChallengeInfo>*) OVERRIDE; 111 virtual void GetAuthChallengeInfo(scoped_refptr<AuthChallengeInfo>*) OVERRIDE;
91 virtual void SetAuth(const AuthCredentials& credentials) OVERRIDE; 112 virtual void SetAuth(const AuthCredentials& credentials) OVERRIDE;
92 virtual void CancelAuth() OVERRIDE; 113 virtual void CancelAuth() OVERRIDE;
93 virtual void ContinueWithCertificate(X509Certificate* client_cert) OVERRIDE; 114 virtual void ContinueWithCertificate(X509Certificate* client_cert) OVERRIDE;
94 virtual void ContinueDespiteLastError() OVERRIDE; 115 virtual void ContinueDespiteLastError() OVERRIDE;
95 virtual bool ReadRawData(IOBuffer* buf, int buf_size, 116 virtual bool ReadRawData(IOBuffer* buf, int buf_size,
96 int* bytes_read) OVERRIDE; 117 int* bytes_read) OVERRIDE;
97 virtual void StopCaching() OVERRIDE; 118 virtual void StopCaching() OVERRIDE;
98 virtual void DoneReading() OVERRIDE; 119 virtual void DoneReading() OVERRIDE;
99 virtual HostPortPair GetSocketAddress() const OVERRIDE; 120 virtual HostPortPair GetSocketAddress() const OVERRIDE;
100 virtual void NotifyURLRequestDestroyed() OVERRIDE; 121 virtual void NotifyURLRequestDestroyed() OVERRIDE;
101 122
102 HttpRequestInfo request_info_;
103 const HttpResponseInfo* response_info_;
104
105 std::vector<std::string> response_cookies_;
106 size_t response_cookies_save_index_;
107 base::Time response_date_;
108
109 // Auth states for proxy and origin server.
110 AuthState proxy_auth_state_;
111 AuthState server_auth_state_;
112 AuthCredentials auth_credentials_;
113
114 CompletionCallback start_callback_;
115 CompletionCallback notify_before_headers_sent_callback_;
116
117 bool read_in_progress_;
118
119 // An URL for an SDCH dictionary as suggested in a Get-Dictionary HTTP header.
120 GURL sdch_dictionary_url_;
121
122 scoped_ptr<HttpTransaction> transaction_;
123
124 // This is used to supervise traffic and enforce exponential
125 // back-off. May be NULL.
126 scoped_refptr<URLRequestThrottlerEntryInterface> throttling_entry_;
127
128 // Indicated if an SDCH dictionary was advertised, and hence an SDCH
129 // compressed response is expected. We use this to help detect (accidental?)
130 // proxy corruption of a response, which sometimes marks SDCH content as
131 // having no content encoding <oops>.
132 bool sdch_dictionary_advertised_;
133
134 // For SDCH latency experiments, when we are able to do SDCH, we may enable
135 // either an SDCH latency test xor a pass through test. The following bools
136 // indicate what we decided on for this instance.
137 bool sdch_test_activated_; // Advertising a dictionary for sdch.
138 bool sdch_test_control_; // Not even accepting-content sdch.
139
140 // For recording of stats, we need to remember if this is cached content.
141 bool is_cached_content_;
142
143 private:
144 enum CompletionCause {
145 ABORTED,
146 FINISHED
147 };
148
149 typedef base::RefCountedData<bool> SharedBoolean;
150
151 class HttpFilterContext;
152 class HttpTransactionDelegateImpl;
153
154 virtual ~URLRequestHttpJob();
155
156 void RecordTimer(); 123 void RecordTimer();
157 void ResetTimer(); 124 void ResetTimer();
158 125
159 virtual void UpdatePacketReadTimes() OVERRIDE; 126 virtual void UpdatePacketReadTimes() OVERRIDE;
160 void RecordPacketStats(FilterContext::StatisticSelector statistic) const; 127 void RecordPacketStats(FilterContext::StatisticSelector statistic) const;
161 128
162 void RecordCompressionHistograms(); 129 void RecordCompressionHistograms();
163 bool IsCompressibleContent() const; 130 bool IsCompressibleContent() const;
164 131
165 // Starts the transaction if extensions using the webrequest API do not 132 // Starts the transaction if extensions using the webrequest API do not
(...skipping 26 matching lines...) Expand all
192 // of bytes read or, if negative, an error code. 159 // of bytes read or, if negative, an error code.
193 bool ShouldFixMismatchedContentLength(int rv) const; 160 bool ShouldFixMismatchedContentLength(int rv) const;
194 161
195 // Returns the effective response headers, considering that they may be 162 // Returns the effective response headers, considering that they may be
196 // overridden by |override_response_headers_|. 163 // overridden by |override_response_headers_|.
197 HttpResponseHeaders* GetResponseHeaders() const; 164 HttpResponseHeaders* GetResponseHeaders() const;
198 165
199 // Override of the private interface of URLRequestJob. 166 // Override of the private interface of URLRequestJob.
200 virtual void OnDetachRequest() OVERRIDE; 167 virtual void OnDetachRequest() OVERRIDE;
201 168
169 RequestPriority priority_;
170
171 HttpRequestInfo request_info_;
172 const HttpResponseInfo* response_info_;
173
174 std::vector<std::string> response_cookies_;
175 size_t response_cookies_save_index_;
176 base::Time response_date_;
177
178 // Auth states for proxy and origin server.
179 AuthState proxy_auth_state_;
180 AuthState server_auth_state_;
181 AuthCredentials auth_credentials_;
182
183 CompletionCallback start_callback_;
184 CompletionCallback notify_before_headers_sent_callback_;
185
186 bool read_in_progress_;
187
188 // An URL for an SDCH dictionary as suggested in a Get-Dictionary HTTP header.
189 GURL sdch_dictionary_url_;
190
191 scoped_ptr<HttpTransaction> transaction_;
192
193 // This is used to supervise traffic and enforce exponential
194 // back-off. May be NULL.
195 scoped_refptr<URLRequestThrottlerEntryInterface> throttling_entry_;
196
197 // Indicated if an SDCH dictionary was advertised, and hence an SDCH
198 // compressed response is expected. We use this to help detect (accidental?)
199 // proxy corruption of a response, which sometimes marks SDCH content as
200 // having no content encoding <oops>.
201 bool sdch_dictionary_advertised_;
202
203 // For SDCH latency experiments, when we are able to do SDCH, we may enable
204 // either an SDCH latency test xor a pass through test. The following bools
205 // indicate what we decided on for this instance.
206 bool sdch_test_activated_; // Advertising a dictionary for sdch.
207 bool sdch_test_control_; // Not even accepting-content sdch.
208
209 // For recording of stats, we need to remember if this is cached content.
210 bool is_cached_content_;
211
202 base::Time request_creation_time_; 212 base::Time request_creation_time_;
203 213
204 // Data used for statistics gathering. This data is only used for histograms 214 // Data used for statistics gathering. This data is only used for histograms
205 // and is not required. It is only gathered if packet_timing_enabled_ == true. 215 // and is not required. It is only gathered if packet_timing_enabled_ == true.
206 // 216 //
207 // TODO(jar): improve the quality of the gathered info by gathering most times 217 // TODO(jar): improve the quality of the gathered info by gathering most times
208 // at a lower point in the network stack, assuring we have actual packet 218 // at a lower point in the network stack, assuring we have actual packet
209 // boundaries, rather than approximations. Also note that input byte count 219 // boundaries, rather than approximations. Also note that input byte count
210 // as gathered here is post-SSL, and post-cache-fetch, and does not reflect 220 // as gathered here is post-SSL, and post-cache-fetch, and does not reflect
211 // true packet arrival times in such cases. 221 // true packet arrival times in such cases.
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 scoped_ptr<HttpTransactionDelegateImpl> http_transaction_delegate_; 259 scoped_ptr<HttpTransactionDelegateImpl> http_transaction_delegate_;
250 260
251 const HttpUserAgentSettings* http_user_agent_settings_; 261 const HttpUserAgentSettings* http_user_agent_settings_;
252 262
253 DISALLOW_COPY_AND_ASSIGN(URLRequestHttpJob); 263 DISALLOW_COPY_AND_ASSIGN(URLRequestHttpJob);
254 }; 264 };
255 265
256 } // namespace net 266 } // namespace net
257 267
258 #endif // NET_URL_REQUEST_URL_REQUEST_HTTP_JOB_H_ 268 #endif // NET_URL_REQUEST_URL_REQUEST_HTTP_JOB_H_
OLDNEW
« no previous file with comments | « net/url_request/url_request_ftp_job_unittest.cc ('k') | net/url_request/url_request_http_job.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698