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_HTTP_HTTP_RESPONSE_HEADERS_H_ | 5 #ifndef NET_HTTP_HTTP_RESPONSE_HEADERS_H_ |
6 #define NET_HTTP_HTTP_RESPONSE_HEADERS_H_ | 6 #define NET_HTTP_HTTP_RESPONSE_HEADERS_H_ |
7 | 7 |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 | 10 |
(...skipping 14 matching lines...) Expand all Loading... |
25 class Time; | 25 class Time; |
26 class TimeDelta; | 26 class TimeDelta; |
27 class Value; | 27 class Value; |
28 } | 28 } |
29 | 29 |
30 namespace net { | 30 namespace net { |
31 | 31 |
32 class HttpByteRange; | 32 class HttpByteRange; |
33 class NetLogCaptureMode; | 33 class NetLogCaptureMode; |
34 | 34 |
35 enum ValidationType { | |
36 VALIDATION_NONE, // The resource is fresh. | |
37 VALIDATION_ASYNCHRONOUS, // The resource requires async revalidation. | |
38 VALIDATION_SYNCHRONOUS // The resource requires sync revalidation. | |
39 }; | |
40 | |
41 // HttpResponseHeaders: parses and holds HTTP response headers. | 35 // HttpResponseHeaders: parses and holds HTTP response headers. |
42 class NET_EXPORT HttpResponseHeaders | 36 class NET_EXPORT HttpResponseHeaders |
43 : public base::RefCountedThreadSafe<HttpResponseHeaders> { | 37 : public base::RefCountedThreadSafe<HttpResponseHeaders> { |
44 public: | 38 public: |
45 // Persist options. | 39 // Persist options. |
46 typedef int PersistOptions; | 40 typedef int PersistOptions; |
47 static const PersistOptions PERSIST_RAW = -1; // Raw, unparsed headers. | 41 static const PersistOptions PERSIST_RAW = -1; // Raw, unparsed headers. |
48 static const PersistOptions PERSIST_ALL = 0; // Parsed headers. | 42 static const PersistOptions PERSIST_ALL = 0; // Parsed headers. |
49 static const PersistOptions PERSIST_SANS_COOKIES = 1 << 0; | 43 static const PersistOptions PERSIST_SANS_COOKIES = 1 << 0; |
50 static const PersistOptions PERSIST_SANS_CHALLENGES = 1 << 1; | 44 static const PersistOptions PERSIST_SANS_CHALLENGES = 1 << 1; |
51 static const PersistOptions PERSIST_SANS_HOP_BY_HOP = 1 << 2; | 45 static const PersistOptions PERSIST_SANS_HOP_BY_HOP = 1 << 2; |
52 static const PersistOptions PERSIST_SANS_NON_CACHEABLE = 1 << 3; | 46 static const PersistOptions PERSIST_SANS_NON_CACHEABLE = 1 << 3; |
53 static const PersistOptions PERSIST_SANS_RANGES = 1 << 4; | 47 static const PersistOptions PERSIST_SANS_RANGES = 1 << 4; |
54 static const PersistOptions PERSIST_SANS_SECURITY_STATE = 1 << 5; | 48 static const PersistOptions PERSIST_SANS_SECURITY_STATE = 1 << 5; |
55 | 49 |
56 struct FreshnessLifetimes { | 50 struct FreshnessLifetimes { |
57 // How long the resource will be fresh for. | 51 // How long the resource will be fresh for. |
58 base::TimeDelta freshness; | 52 base::TimeDelta freshness; |
59 // How long after becoming not fresh that the resource will be stale but | |
60 // usable (if async revalidation is enabled). | |
61 base::TimeDelta staleness; | |
62 }; | 53 }; |
63 | 54 |
64 static const char kContentRange[]; | 55 static const char kContentRange[]; |
65 | 56 |
66 // Parses the given raw_headers. raw_headers should be formatted thus: | 57 // Parses the given raw_headers. raw_headers should be formatted thus: |
67 // includes the http status response line, each line is \0-terminated, and | 58 // includes the http status response line, each line is \0-terminated, and |
68 // it's terminated by an empty line (ie, 2 \0s in a row). | 59 // it's terminated by an empty line (ie, 2 \0s in a row). |
69 // (Note that line continuations should have already been joined; | 60 // (Note that line continuations should have already been joined; |
70 // see HttpUtil::AssembleRawHeaders) | 61 // see HttpUtil::AssembleRawHeaders) |
71 // | 62 // |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
203 bool GetCharset(std::string* charset) const; | 194 bool GetCharset(std::string* charset) const; |
204 | 195 |
205 // Returns true if this response corresponds to a redirect. The target | 196 // Returns true if this response corresponds to a redirect. The target |
206 // location of the redirect is optionally returned if location is non-null. | 197 // location of the redirect is optionally returned if location is non-null. |
207 bool IsRedirect(std::string* location) const; | 198 bool IsRedirect(std::string* location) const; |
208 | 199 |
209 // Returns true if the HTTP response code passed in corresponds to a | 200 // Returns true if the HTTP response code passed in corresponds to a |
210 // redirect. | 201 // redirect. |
211 static bool IsRedirectResponseCode(int response_code); | 202 static bool IsRedirectResponseCode(int response_code); |
212 | 203 |
213 // Returns VALIDATION_NONE if the response can be reused without | 204 // Returns false if the response can be reused without validation. true means |
214 // validation. VALIDATION_ASYNCHRONOUS means the response can be re-used, but | |
215 // asynchronous revalidation must be performed. VALIDATION_SYNCHRONOUS means | |
216 // that the result cannot be reused without revalidation. | 205 // that the result cannot be reused without revalidation. |
217 // The result is relative to the current_time parameter, which is | 206 // The result is relative to the current_time parameter, which is |
218 // a parameter to support unit testing. The request_time parameter indicates | 207 // a parameter to support unit testing. The request_time parameter indicates |
219 // the time at which the request was made that resulted in this response, | 208 // the time at which the request was made that resulted in this response, |
220 // which was received at response_time. | 209 // which was received at response_time. |
221 ValidationType RequiresValidation(const base::Time& request_time, | 210 bool RequiresValidation(const base::Time& request_time, |
222 const base::Time& response_time, | 211 const base::Time& response_time, |
223 const base::Time& current_time) const; | 212 const base::Time& current_time) const; |
224 | 213 |
225 // Calculates the amount of time the server claims the response is fresh from | 214 // Calculates the amount of time the server claims the response is fresh from |
226 // the time the response was generated. See section 13.2.4 of RFC 2616. See | 215 // the time the response was generated. See section 13.2.4 of RFC 2616. See |
227 // RequiresValidation for a description of the response_time parameter. See | 216 // RequiresValidation for a description of the response_time parameter. See |
228 // the definition of FreshnessLifetimes above for the meaning of the return | 217 // the definition of FreshnessLifetimes above for the meaning of the return |
229 // value. See RFC 5861 section 3 for the definition of | 218 // value. |
230 // stale-while-revalidate. | |
231 FreshnessLifetimes GetFreshnessLifetimes( | 219 FreshnessLifetimes GetFreshnessLifetimes( |
232 const base::Time& response_time) const; | 220 const base::Time& response_time) const; |
233 | 221 |
234 // Returns the age of the response. See section 13.2.3 of RFC 2616. | 222 // Returns the age of the response. See section 13.2.3 of RFC 2616. |
235 // See RequiresValidation for a description of this method's parameters. | 223 // See RequiresValidation for a description of this method's parameters. |
236 base::TimeDelta GetCurrentAge(const base::Time& request_time, | 224 base::TimeDelta GetCurrentAge(const base::Time& request_time, |
237 const base::Time& response_time, | 225 const base::Time& response_time, |
238 const base::Time& current_time) const; | 226 const base::Time& current_time) const; |
239 | 227 |
240 // The following methods extract values from the response headers. If a | 228 // The following methods extract values from the response headers. If a |
241 // value is not present, or is invalid, then false is returned. Otherwise, | 229 // value is not present, or is invalid, then false is returned. Otherwise, |
242 // true is returned and the out param is assigned to the corresponding value. | 230 // true is returned and the out param is assigned to the corresponding value. |
243 bool GetMaxAgeValue(base::TimeDelta* value) const; | 231 bool GetMaxAgeValue(base::TimeDelta* value) const; |
244 bool GetAgeValue(base::TimeDelta* value) const; | 232 bool GetAgeValue(base::TimeDelta* value) const; |
245 bool GetDateValue(base::Time* value) const; | 233 bool GetDateValue(base::Time* value) const; |
246 bool GetLastModifiedValue(base::Time* value) const; | 234 bool GetLastModifiedValue(base::Time* value) const; |
247 bool GetExpiresValue(base::Time* value) const; | 235 bool GetExpiresValue(base::Time* value) const; |
248 bool GetStaleWhileRevalidateValue(base::TimeDelta* value) const; | |
249 | 236 |
250 // Extracts the time value of a particular header. This method looks for the | 237 // Extracts the time value of a particular header. This method looks for the |
251 // first matching header value and parses its value as a HTTP-date. | 238 // first matching header value and parses its value as a HTTP-date. |
252 bool GetTimeValuedHeader(const std::string& name, base::Time* result) const; | 239 bool GetTimeValuedHeader(const std::string& name, base::Time* result) const; |
253 | 240 |
254 // Determines if this response indicates a keep-alive connection. | 241 // Determines if this response indicates a keep-alive connection. |
255 bool IsKeepAlive() const; | 242 bool IsKeepAlive() const; |
256 | 243 |
257 // Returns true if this response has a strong etag or last-modified header. | 244 // Returns true if this response has a strong etag or last-modified header. |
258 // See section 13.3.3 of RFC 2616. | 245 // See section 13.3.3 of RFC 2616. |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
407 | 394 |
408 // The normalized http version (consistent with what GetStatusLine() returns). | 395 // The normalized http version (consistent with what GetStatusLine() returns). |
409 HttpVersion http_version_; | 396 HttpVersion http_version_; |
410 | 397 |
411 DISALLOW_COPY_AND_ASSIGN(HttpResponseHeaders); | 398 DISALLOW_COPY_AND_ASSIGN(HttpResponseHeaders); |
412 }; | 399 }; |
413 | 400 |
414 } // namespace net | 401 } // namespace net |
415 | 402 |
416 #endif // NET_HTTP_HTTP_RESPONSE_HEADERS_H_ | 403 #endif // NET_HTTP_HTTP_RESPONSE_HEADERS_H_ |
OLD | NEW |