| 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 #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/base/auth.h" | 10 #include "net/base/auth.h" |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 77 // This contains the ciphersuite used to fetch the resource as well as the | 77 // This contains the ciphersuite used to fetch the resource as well as the |
| 78 // protocol version, compression method and whether SSLv3 fallback was used. | 78 // protocol version, compression method and whether SSLv3 fallback was used. |
| 79 RESPONSE_INFO_HAS_SSL_CONNECTION_STATUS = 1 << 16, | 79 RESPONSE_INFO_HAS_SSL_CONNECTION_STATUS = 1 << 16, |
| 80 | 80 |
| 81 // This bit is set if the response info has protocol version. | 81 // This bit is set if the response info has protocol version. |
| 82 RESPONSE_INFO_HAS_NPN_NEGOTIATED_PROTOCOL = 1 << 17, | 82 RESPONSE_INFO_HAS_NPN_NEGOTIATED_PROTOCOL = 1 << 17, |
| 83 | 83 |
| 84 // This bit is set if the response info has connection info. | 84 // This bit is set if the response info has connection info. |
| 85 RESPONSE_INFO_HAS_CONNECTION_INFO = 1 << 18, | 85 RESPONSE_INFO_HAS_CONNECTION_INFO = 1 << 18, |
| 86 | 86 |
| 87 // This bit is set if the request has http authentication. |
| 88 RESPONSE_INFO_USE_HTTP_AUTHENTICATION = 1 << 19, |
| 89 |
| 87 // TODO(darin): Add other bits to indicate alternate request methods. | 90 // TODO(darin): Add other bits to indicate alternate request methods. |
| 88 // For now, we don't support storing those. | 91 // For now, we don't support storing those. |
| 89 }; | 92 }; |
| 90 | 93 |
| 91 HttpResponseInfo::HttpResponseInfo() | 94 HttpResponseInfo::HttpResponseInfo() |
| 92 : was_cached(false), | 95 : was_cached(false), |
| 93 server_data_unavailable(false), | 96 server_data_unavailable(false), |
| 94 was_fetched_via_spdy(false), | 97 was_fetched_via_spdy(false), |
| 95 was_npn_negotiated(false), | 98 was_npn_negotiated(false), |
| 96 was_fetched_via_proxy(false), | 99 was_fetched_via_proxy(false), |
| 100 did_use_http_auth(false), |
| 97 connection_info(CONNECTION_INFO_UNKNOWN) { | 101 connection_info(CONNECTION_INFO_UNKNOWN) { |
| 98 } | 102 } |
| 99 | 103 |
| 100 HttpResponseInfo::HttpResponseInfo(const HttpResponseInfo& rhs) | 104 HttpResponseInfo::HttpResponseInfo(const HttpResponseInfo& rhs) |
| 101 : was_cached(rhs.was_cached), | 105 : was_cached(rhs.was_cached), |
| 102 server_data_unavailable(rhs.server_data_unavailable), | 106 server_data_unavailable(rhs.server_data_unavailable), |
| 103 was_fetched_via_spdy(rhs.was_fetched_via_spdy), | 107 was_fetched_via_spdy(rhs.was_fetched_via_spdy), |
| 104 was_npn_negotiated(rhs.was_npn_negotiated), | 108 was_npn_negotiated(rhs.was_npn_negotiated), |
| 105 was_fetched_via_proxy(rhs.was_fetched_via_proxy), | 109 was_fetched_via_proxy(rhs.was_fetched_via_proxy), |
| 110 did_use_http_auth(rhs.did_use_http_auth), |
| 106 socket_address(rhs.socket_address), | 111 socket_address(rhs.socket_address), |
| 107 npn_negotiated_protocol(rhs.npn_negotiated_protocol), | 112 npn_negotiated_protocol(rhs.npn_negotiated_protocol), |
| 108 connection_info(rhs.connection_info), | 113 connection_info(rhs.connection_info), |
| 109 request_time(rhs.request_time), | 114 request_time(rhs.request_time), |
| 110 response_time(rhs.response_time), | 115 response_time(rhs.response_time), |
| 111 auth_challenge(rhs.auth_challenge), | 116 auth_challenge(rhs.auth_challenge), |
| 112 cert_request_info(rhs.cert_request_info), | 117 cert_request_info(rhs.cert_request_info), |
| 113 ssl_info(rhs.ssl_info), | 118 ssl_info(rhs.ssl_info), |
| 114 headers(rhs.headers), | 119 headers(rhs.headers), |
| 115 vary_data(rhs.vary_data), | 120 vary_data(rhs.vary_data), |
| 116 metadata(rhs.metadata) { | 121 metadata(rhs.metadata) { |
| 117 } | 122 } |
| 118 | 123 |
| 119 HttpResponseInfo::~HttpResponseInfo() { | 124 HttpResponseInfo::~HttpResponseInfo() { |
| 120 } | 125 } |
| 121 | 126 |
| 122 HttpResponseInfo& HttpResponseInfo::operator=(const HttpResponseInfo& rhs) { | 127 HttpResponseInfo& HttpResponseInfo::operator=(const HttpResponseInfo& rhs) { |
| 123 was_cached = rhs.was_cached; | 128 was_cached = rhs.was_cached; |
| 124 server_data_unavailable = rhs.server_data_unavailable; | 129 server_data_unavailable = rhs.server_data_unavailable; |
| 125 was_fetched_via_spdy = rhs.was_fetched_via_spdy; | 130 was_fetched_via_spdy = rhs.was_fetched_via_spdy; |
| 126 was_npn_negotiated = rhs.was_npn_negotiated; | 131 was_npn_negotiated = rhs.was_npn_negotiated; |
| 127 was_fetched_via_proxy = rhs.was_fetched_via_proxy; | 132 was_fetched_via_proxy = rhs.was_fetched_via_proxy; |
| 133 did_use_http_auth = rhs.did_use_http_auth; |
| 128 socket_address = rhs.socket_address; | 134 socket_address = rhs.socket_address; |
| 129 npn_negotiated_protocol = rhs.npn_negotiated_protocol; | 135 npn_negotiated_protocol = rhs.npn_negotiated_protocol; |
| 130 request_time = rhs.request_time; | 136 request_time = rhs.request_time; |
| 131 response_time = rhs.response_time; | 137 response_time = rhs.response_time; |
| 132 auth_challenge = rhs.auth_challenge; | 138 auth_challenge = rhs.auth_challenge; |
| 133 cert_request_info = rhs.cert_request_info; | 139 cert_request_info = rhs.cert_request_info; |
| 134 ssl_info = rhs.ssl_info; | 140 ssl_info = rhs.ssl_info; |
| 135 headers = rhs.headers; | 141 headers = rhs.headers; |
| 136 vary_data = rhs.vary_data; | 142 vary_data = rhs.vary_data; |
| 137 metadata = rhs.metadata; | 143 metadata = rhs.metadata; |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 236 } | 242 } |
| 237 | 243 |
| 238 was_fetched_via_spdy = (flags & RESPONSE_INFO_WAS_SPDY) != 0; | 244 was_fetched_via_spdy = (flags & RESPONSE_INFO_WAS_SPDY) != 0; |
| 239 | 245 |
| 240 was_npn_negotiated = (flags & RESPONSE_INFO_WAS_NPN) != 0; | 246 was_npn_negotiated = (flags & RESPONSE_INFO_WAS_NPN) != 0; |
| 241 | 247 |
| 242 was_fetched_via_proxy = (flags & RESPONSE_INFO_WAS_PROXY) != 0; | 248 was_fetched_via_proxy = (flags & RESPONSE_INFO_WAS_PROXY) != 0; |
| 243 | 249 |
| 244 *response_truncated = (flags & RESPONSE_INFO_TRUNCATED) != 0; | 250 *response_truncated = (flags & RESPONSE_INFO_TRUNCATED) != 0; |
| 245 | 251 |
| 252 did_use_http_auth = (flags & RESPONSE_INFO_USE_HTTP_AUTHENTICATION) != 0; |
| 253 |
| 246 return true; | 254 return true; |
| 247 } | 255 } |
| 248 | 256 |
| 249 void HttpResponseInfo::Persist(Pickle* pickle, | 257 void HttpResponseInfo::Persist(Pickle* pickle, |
| 250 bool skip_transient_headers, | 258 bool skip_transient_headers, |
| 251 bool response_truncated) const { | 259 bool response_truncated) const { |
| 252 int flags = RESPONSE_INFO_VERSION; | 260 int flags = RESPONSE_INFO_VERSION; |
| 253 if (ssl_info.is_valid()) { | 261 if (ssl_info.is_valid()) { |
| 254 flags |= RESPONSE_INFO_HAS_CERT; | 262 flags |= RESPONSE_INFO_HAS_CERT; |
| 255 flags |= RESPONSE_INFO_HAS_CERT_STATUS; | 263 flags |= RESPONSE_INFO_HAS_CERT_STATUS; |
| 256 if (ssl_info.security_bits != -1) | 264 if (ssl_info.security_bits != -1) |
| 257 flags |= RESPONSE_INFO_HAS_SECURITY_BITS; | 265 flags |= RESPONSE_INFO_HAS_SECURITY_BITS; |
| 258 if (ssl_info.connection_status != 0) | 266 if (ssl_info.connection_status != 0) |
| 259 flags |= RESPONSE_INFO_HAS_SSL_CONNECTION_STATUS; | 267 flags |= RESPONSE_INFO_HAS_SSL_CONNECTION_STATUS; |
| 260 } | 268 } |
| 261 if (vary_data.is_valid()) | 269 if (vary_data.is_valid()) |
| 262 flags |= RESPONSE_INFO_HAS_VARY_DATA; | 270 flags |= RESPONSE_INFO_HAS_VARY_DATA; |
| 263 if (response_truncated) | 271 if (response_truncated) |
| 264 flags |= RESPONSE_INFO_TRUNCATED; | 272 flags |= RESPONSE_INFO_TRUNCATED; |
| 265 if (was_fetched_via_spdy) | 273 if (was_fetched_via_spdy) |
| 266 flags |= RESPONSE_INFO_WAS_SPDY; | 274 flags |= RESPONSE_INFO_WAS_SPDY; |
| 267 if (was_npn_negotiated) { | 275 if (was_npn_negotiated) { |
| 268 flags |= RESPONSE_INFO_WAS_NPN; | 276 flags |= RESPONSE_INFO_WAS_NPN; |
| 269 flags |= RESPONSE_INFO_HAS_NPN_NEGOTIATED_PROTOCOL; | 277 flags |= RESPONSE_INFO_HAS_NPN_NEGOTIATED_PROTOCOL; |
| 270 } | 278 } |
| 271 if (was_fetched_via_proxy) | 279 if (was_fetched_via_proxy) |
| 272 flags |= RESPONSE_INFO_WAS_PROXY; | 280 flags |= RESPONSE_INFO_WAS_PROXY; |
| 273 if (connection_info != CONNECTION_INFO_UNKNOWN) | 281 if (connection_info != CONNECTION_INFO_UNKNOWN) |
| 274 flags |= RESPONSE_INFO_HAS_CONNECTION_INFO; | 282 flags |= RESPONSE_INFO_HAS_CONNECTION_INFO; |
| 283 if (did_use_http_auth) |
| 284 flags |= RESPONSE_INFO_USE_HTTP_AUTHENTICATION; |
| 275 | 285 |
| 276 pickle->WriteInt(flags); | 286 pickle->WriteInt(flags); |
| 277 pickle->WriteInt64(request_time.ToInternalValue()); | 287 pickle->WriteInt64(request_time.ToInternalValue()); |
| 278 pickle->WriteInt64(response_time.ToInternalValue()); | 288 pickle->WriteInt64(response_time.ToInternalValue()); |
| 279 | 289 |
| 280 net::HttpResponseHeaders::PersistOptions persist_options = | 290 net::HttpResponseHeaders::PersistOptions persist_options = |
| 281 net::HttpResponseHeaders::PERSIST_RAW; | 291 net::HttpResponseHeaders::PERSIST_RAW; |
| 282 | 292 |
| 283 if (skip_transient_headers) { | 293 if (skip_transient_headers) { |
| 284 persist_options = | 294 persist_options = |
| (...skipping 23 matching lines...) Expand all Loading... |
| 308 pickle->WriteUInt16(socket_address.port()); | 318 pickle->WriteUInt16(socket_address.port()); |
| 309 | 319 |
| 310 if (was_npn_negotiated) | 320 if (was_npn_negotiated) |
| 311 pickle->WriteString(npn_negotiated_protocol); | 321 pickle->WriteString(npn_negotiated_protocol); |
| 312 | 322 |
| 313 if (connection_info != CONNECTION_INFO_UNKNOWN) | 323 if (connection_info != CONNECTION_INFO_UNKNOWN) |
| 314 pickle->WriteInt(static_cast<int>(connection_info)); | 324 pickle->WriteInt(static_cast<int>(connection_info)); |
| 315 } | 325 } |
| 316 | 326 |
| 317 } // namespace net | 327 } // namespace net |
| OLD | NEW |