OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 #include "net/http/http_response_info.h" | 5 #include "net/http/http_response_info.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/pickle.h" | 8 #include "base/pickle.h" |
9 #include "base/time.h" | 9 #include "base/time.h" |
10 #include "net/http/http_response_headers.h" | 10 #include "net/http/http_response_headers.h" |
(...skipping 29 matching lines...) Expand all Loading... |
40 | 40 |
41 // This bit is set if the response was received via SPDY. | 41 // This bit is set if the response was received via SPDY. |
42 RESPONSE_INFO_WAS_SPDY = 1 << 13, | 42 RESPONSE_INFO_WAS_SPDY = 1 << 13, |
43 | 43 |
44 // This bit is set if the request has NPN negotiated. | 44 // This bit is set if the request has NPN negotiated. |
45 RESPONSE_INFO_WAS_NPN = 1 << 14, | 45 RESPONSE_INFO_WAS_NPN = 1 << 14, |
46 | 46 |
47 // This bit is set if the request was fetched via an explicit proxy. | 47 // This bit is set if the request was fetched via an explicit proxy. |
48 RESPONSE_INFO_WAS_PROXY = 1 << 15, | 48 RESPONSE_INFO_WAS_PROXY = 1 << 15, |
49 | 49 |
| 50 // This bit is set if response could use alternate protocol. However, browser |
| 51 // will ingore the alternate protocol if spdy is not enabled. |
| 52 RESPONSE_INFO_WAS_ALTERNATE_PROTOCOL_AVAILABLE = 1 << 16, |
| 53 |
50 // TODO(darin): Add other bits to indicate alternate request methods. | 54 // TODO(darin): Add other bits to indicate alternate request methods. |
51 // For now, we don't support storing those. | 55 // For now, we don't support storing those. |
52 }; | 56 }; |
53 | 57 |
54 HttpResponseInfo::HttpResponseInfo() | 58 HttpResponseInfo::HttpResponseInfo() |
55 : was_cached(false), | 59 : was_cached(false), |
56 was_fetched_via_spdy(false), | 60 was_fetched_via_spdy(false), |
57 was_npn_negotiated(false), | 61 was_npn_negotiated(false), |
| 62 was_alternate_protocol_available(false), |
58 was_fetched_via_proxy(false) { | 63 was_fetched_via_proxy(false) { |
59 } | 64 } |
60 | 65 |
61 HttpResponseInfo::~HttpResponseInfo() { | 66 HttpResponseInfo::~HttpResponseInfo() { |
62 } | 67 } |
63 | 68 |
64 bool HttpResponseInfo::InitFromPickle(const Pickle& pickle, | 69 bool HttpResponseInfo::InitFromPickle(const Pickle& pickle, |
65 bool* response_truncated) { | 70 bool* response_truncated) { |
66 void* iter = NULL; | 71 void* iter = NULL; |
67 | 72 |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 // read vary-data | 117 // read vary-data |
113 if (flags & RESPONSE_INFO_HAS_VARY_DATA) { | 118 if (flags & RESPONSE_INFO_HAS_VARY_DATA) { |
114 if (!vary_data.InitFromPickle(pickle, &iter)) | 119 if (!vary_data.InitFromPickle(pickle, &iter)) |
115 return false; | 120 return false; |
116 } | 121 } |
117 | 122 |
118 was_fetched_via_spdy = (flags & RESPONSE_INFO_WAS_SPDY) != 0; | 123 was_fetched_via_spdy = (flags & RESPONSE_INFO_WAS_SPDY) != 0; |
119 | 124 |
120 was_npn_negotiated = (flags & RESPONSE_INFO_WAS_NPN) != 0; | 125 was_npn_negotiated = (flags & RESPONSE_INFO_WAS_NPN) != 0; |
121 | 126 |
| 127 was_alternate_protocol_available = |
| 128 (flags & RESPONSE_INFO_WAS_ALTERNATE_PROTOCOL_AVAILABLE) != 0; |
| 129 |
122 was_fetched_via_proxy = (flags & RESPONSE_INFO_WAS_PROXY) != 0; | 130 was_fetched_via_proxy = (flags & RESPONSE_INFO_WAS_PROXY) != 0; |
123 | 131 |
124 *response_truncated = (flags & RESPONSE_INFO_TRUNCATED) ? true : false; | 132 *response_truncated = (flags & RESPONSE_INFO_TRUNCATED) ? true : false; |
125 | 133 |
126 return true; | 134 return true; |
127 } | 135 } |
128 | 136 |
129 void HttpResponseInfo::Persist(Pickle* pickle, | 137 void HttpResponseInfo::Persist(Pickle* pickle, |
130 bool skip_transient_headers, | 138 bool skip_transient_headers, |
131 bool response_truncated) const { | 139 bool response_truncated) const { |
132 int flags = RESPONSE_INFO_VERSION; | 140 int flags = RESPONSE_INFO_VERSION; |
133 if (ssl_info.cert) { | 141 if (ssl_info.cert) { |
134 flags |= RESPONSE_INFO_HAS_CERT; | 142 flags |= RESPONSE_INFO_HAS_CERT; |
135 flags |= RESPONSE_INFO_HAS_CERT_STATUS; | 143 flags |= RESPONSE_INFO_HAS_CERT_STATUS; |
136 } | 144 } |
137 if (ssl_info.security_bits != -1) | 145 if (ssl_info.security_bits != -1) |
138 flags |= RESPONSE_INFO_HAS_SECURITY_BITS; | 146 flags |= RESPONSE_INFO_HAS_SECURITY_BITS; |
139 if (vary_data.is_valid()) | 147 if (vary_data.is_valid()) |
140 flags |= RESPONSE_INFO_HAS_VARY_DATA; | 148 flags |= RESPONSE_INFO_HAS_VARY_DATA; |
141 if (response_truncated) | 149 if (response_truncated) |
142 flags |= RESPONSE_INFO_TRUNCATED; | 150 flags |= RESPONSE_INFO_TRUNCATED; |
143 if (was_fetched_via_spdy) | 151 if (was_fetched_via_spdy) |
144 flags |= RESPONSE_INFO_WAS_SPDY; | 152 flags |= RESPONSE_INFO_WAS_SPDY; |
145 if (was_npn_negotiated) | 153 if (was_npn_negotiated) |
146 flags |= RESPONSE_INFO_WAS_NPN; | 154 flags |= RESPONSE_INFO_WAS_NPN; |
| 155 if (was_alternate_protocol_available) |
| 156 flags |= RESPONSE_INFO_WAS_ALTERNATE_PROTOCOL_AVAILABLE; |
147 if (was_fetched_via_proxy) | 157 if (was_fetched_via_proxy) |
148 flags |= RESPONSE_INFO_WAS_PROXY; | 158 flags |= RESPONSE_INFO_WAS_PROXY; |
149 | 159 |
150 pickle->WriteInt(flags); | 160 pickle->WriteInt(flags); |
151 pickle->WriteInt64(request_time.ToInternalValue()); | 161 pickle->WriteInt64(request_time.ToInternalValue()); |
152 pickle->WriteInt64(response_time.ToInternalValue()); | 162 pickle->WriteInt64(response_time.ToInternalValue()); |
153 | 163 |
154 net::HttpResponseHeaders::PersistOptions persist_options = | 164 net::HttpResponseHeaders::PersistOptions persist_options = |
155 net::HttpResponseHeaders::PERSIST_RAW; | 165 net::HttpResponseHeaders::PERSIST_RAW; |
156 | 166 |
(...skipping 13 matching lines...) Expand all Loading... |
170 pickle->WriteInt(ssl_info.cert_status); | 180 pickle->WriteInt(ssl_info.cert_status); |
171 } | 181 } |
172 if (ssl_info.security_bits != -1) | 182 if (ssl_info.security_bits != -1) |
173 pickle->WriteInt(ssl_info.security_bits); | 183 pickle->WriteInt(ssl_info.security_bits); |
174 | 184 |
175 if (vary_data.is_valid()) | 185 if (vary_data.is_valid()) |
176 vary_data.Persist(pickle); | 186 vary_data.Persist(pickle); |
177 } | 187 } |
178 | 188 |
179 } // namespace net | 189 } // namespace net |
OLD | NEW |