Chromium Code Reviews| 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/url_request/url_request_http_job.h" | 5 #include "net/url_request/url_request_http_job.h" |
| 6 | 6 |
| 7 #include "base/base_switches.h" | 7 #include "base/base_switches.h" |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/bind_helpers.h" | 9 #include "base/bind_helpers.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 59 static const char kAvailDictionaryHeader[] = "Avail-Dictionary"; | 59 static const char kAvailDictionaryHeader[] = "Avail-Dictionary"; |
| 60 | 60 |
| 61 namespace { | 61 namespace { |
| 62 | 62 |
| 63 // True if the request method is "safe" (per section 4.2.1 of RFC 7231). | 63 // True if the request method is "safe" (per section 4.2.1 of RFC 7231). |
| 64 bool IsMethodSafe(const std::string& method) { | 64 bool IsMethodSafe(const std::string& method) { |
| 65 return method == "GET" || method == "HEAD" || method == "OPTIONS" || | 65 return method == "GET" || method == "HEAD" || method == "OPTIONS" || |
| 66 method == "TRACE"; | 66 method == "TRACE"; |
| 67 } | 67 } |
| 68 | 68 |
| 69 // Logs whether the CookieStore used for this request matches the | |
| 70 // ChannelIDService used when establishing the connection that this request is | |
| 71 // sent over. This logging is only done for requests to accounts.google.com, and | |
| 72 // only for requests where Channel ID was sent when establishing the connection. | |
| 69 void LogChannelIDAndCookieStores(const GURL& url, | 73 void LogChannelIDAndCookieStores(const GURL& url, |
| 70 const net::URLRequestContext* context, | 74 const net::URLRequestContext* context, |
| 71 const net::SSLInfo& ssl_info) { | 75 const net::SSLInfo& ssl_info) { |
| 72 if (url.host() != "accounts.google.com" || !ssl_info.channel_id_sent) | 76 if (url.host() != "accounts.google.com" || !ssl_info.channel_id_sent) |
| 73 return; | 77 return; |
| 74 // This enum is used for an UMA histogram - don't reuse or renumber entries. | 78 // This enum is used for an UMA histogram - don't reuse or renumber entries. |
| 75 enum { | 79 enum { |
| 76 // Value 0 was removed (CID_EPHEMERAL_COOKIE_EPHEMERAL) | 80 // Value 0 was removed (CID_EPHEMERAL_COOKIE_EPHEMERAL) |
| 81 // ChannelIDStore is ephemeral, but CookieStore is persistent. | |
| 77 CID_EPHEMERAL_COOKIE_PERSISTENT = 1, | 82 CID_EPHEMERAL_COOKIE_PERSISTENT = 1, |
| 83 // ChannelIDStore is persistent, but CookieStore is ephemeral. | |
| 78 CID_PERSISTENT_COOKIE_EPHEMERAL = 2, | 84 CID_PERSISTENT_COOKIE_EPHEMERAL = 2, |
| 79 // Value 3 was removed (CID_PERSISTENT_COOKIE_PERSISTENT) | 85 // Value 3 was removed (CID_PERSISTENT_COOKIE_PERSISTENT) |
| 86 // There is no CookieStore for this request. | |
| 80 NO_COOKIE_STORE = 4, | 87 NO_COOKIE_STORE = 4, |
| 88 // There is no ChannelIDStore for this request. This should never happen, | |
| 89 // because we only log if Channel ID was sent. | |
| 81 NO_CHANNEL_ID_STORE = 5, | 90 NO_CHANNEL_ID_STORE = 5, |
| 91 // A case where the CookieStore is persistent and the ChannelIDStore is | |
| 92 // ephemeral, but it has been identified as not being a problem. | |
| 82 KNOWN_MISMATCH = 6, | 93 KNOWN_MISMATCH = 6, |
| 94 // Both stores are ephemeral, and the ChannelIDService used when | |
| 95 // establishing the connection is the same one that the CookieStore was | |
| 96 // created to be used with. | |
| 83 EPHEMERAL_MATCH = 7, | 97 EPHEMERAL_MATCH = 7, |
| 98 // Both stores are ephemeral, but a different CookieStore should have been | |
| 99 // used on this request. | |
| 84 EPHEMERAL_MISMATCH = 8, | 100 EPHEMERAL_MISMATCH = 8, |
| 101 // Both stores are persistent, and the ChannelIDService used when | |
| 102 // establishing the connection is the same one that the CookieStore was | |
| 103 // created to be used with. | |
| 85 PERSISTENT_MATCH = 9, | 104 PERSISTENT_MATCH = 9, |
| 105 // Both stores are persistent, but a different CookieStore should have been | |
| 106 // used on this request. | |
| 86 PERSISTENT_MISMATCH = 10, | 107 PERSISTENT_MISMATCH = 10, |
| 108 // Both stores are ephemeral, but it was never recorded in the CookieStore | |
| 109 // which ChannelIDService it was created for, so it is unknown whether the | |
| 110 // stores match. | |
| 111 EPHEMERAL_UNKNOWN = 11, | |
| 112 // Both stores are persistent, but it was never recorded in the CookieStore | |
| 113 // which ChannelIDService it was created for, so it is unknown whether the | |
| 114 // stores match. | |
| 115 PERSISTENT_UNKNOWN = 12, | |
| 87 EPHEMERALITY_MAX | 116 EPHEMERALITY_MAX |
| 88 } ephemerality; | 117 } ephemerality; |
| 89 const net::HttpNetworkSession::Params* params = | 118 const net::HttpNetworkSession::Params* params = |
| 90 context->GetNetworkSessionParams(); | 119 context->GetNetworkSessionParams(); |
| 91 net::CookieStore* cookie_store = context->cookie_store(); | 120 net::CookieStore* cookie_store = context->cookie_store(); |
| 92 if (params == nullptr || params->channel_id_service == nullptr) { | 121 if (params == nullptr || params->channel_id_service == nullptr) { |
| 93 ephemerality = NO_CHANNEL_ID_STORE; | 122 ephemerality = NO_CHANNEL_ID_STORE; |
| 94 } else if (cookie_store == nullptr) { | 123 } else if (cookie_store == nullptr) { |
| 95 ephemerality = NO_COOKIE_STORE; | 124 ephemerality = NO_COOKIE_STORE; |
| 96 } else if (params->channel_id_service->GetChannelIDStore()->IsEphemeral()) { | 125 } else if (params->channel_id_service->GetChannelIDStore()->IsEphemeral()) { |
| 97 if (cookie_store->IsEphemeral()) { | 126 if (cookie_store->IsEphemeral()) { |
| 98 if (context->channel_id_service() && | 127 if (cookie_store->GetChannelIDServiceID() == -1) { |
| 99 params->channel_id_service->GetUniqueID() == | 128 ephemerality = EPHEMERAL_UNKNOWN; |
| 100 context->channel_id_service()->GetUniqueID()) { | 129 } else if (cookie_store->GetChannelIDServiceID() == |
| 130 params->channel_id_service->GetUniqueID()) { | |
| 101 ephemerality = EPHEMERAL_MATCH; | 131 ephemerality = EPHEMERAL_MATCH; |
| 102 } else { | 132 } else { |
| 133 DCHECK(false); | |
|
mmenke
2016/03/29 20:14:25
nit: These should all be NOTREACHED()
| |
| 103 ephemerality = EPHEMERAL_MISMATCH; | 134 ephemerality = EPHEMERAL_MISMATCH; |
| 104 } | 135 } |
| 105 } else if (context->has_known_mismatched_cookie_store()) { | 136 } else if (context->has_known_mismatched_cookie_store()) { |
| 106 ephemerality = KNOWN_MISMATCH; | 137 ephemerality = KNOWN_MISMATCH; |
| 107 } else { | 138 } else { |
| 139 DCHECK(false); | |
| 108 ephemerality = CID_EPHEMERAL_COOKIE_PERSISTENT; | 140 ephemerality = CID_EPHEMERAL_COOKIE_PERSISTENT; |
| 109 } | 141 } |
| 110 } else if (cookie_store->IsEphemeral()) { | 142 } else if (cookie_store->IsEphemeral()) { |
| 143 DCHECK(false); | |
| 111 ephemerality = CID_PERSISTENT_COOKIE_EPHEMERAL; | 144 ephemerality = CID_PERSISTENT_COOKIE_EPHEMERAL; |
| 112 } else if (context->channel_id_service() && | 145 } else if (cookie_store->GetChannelIDServiceID() == -1) { |
| 113 params->channel_id_service->GetUniqueID() == | 146 ephemerality = PERSISTENT_UNKNOWN; |
| 114 context->channel_id_service()->GetUniqueID()) { | 147 } else if (cookie_store->GetChannelIDServiceID() == |
| 148 params->channel_id_service->GetUniqueID()) { | |
| 115 ephemerality = PERSISTENT_MATCH; | 149 ephemerality = PERSISTENT_MATCH; |
| 116 } else { | 150 } else { |
| 151 DCHECK(false); | |
| 117 ephemerality = PERSISTENT_MISMATCH; | 152 ephemerality = PERSISTENT_MISMATCH; |
| 118 } | 153 } |
| 119 UMA_HISTOGRAM_ENUMERATION("Net.TokenBinding.StoreEphemerality", ephemerality, | 154 UMA_HISTOGRAM_ENUMERATION("Net.TokenBinding.StoreEphemerality", ephemerality, |
| 120 EPHEMERALITY_MAX); | 155 EPHEMERALITY_MAX); |
| 121 } | 156 } |
| 122 | 157 |
| 123 } // namespace | 158 } // namespace |
| 124 | 159 |
| 125 namespace net { | 160 namespace net { |
| 126 | 161 |
| (...skipping 1495 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1622 return override_response_headers_.get() ? | 1657 return override_response_headers_.get() ? |
| 1623 override_response_headers_.get() : | 1658 override_response_headers_.get() : |
| 1624 transaction_->GetResponseInfo()->headers.get(); | 1659 transaction_->GetResponseInfo()->headers.get(); |
| 1625 } | 1660 } |
| 1626 | 1661 |
| 1627 void URLRequestHttpJob::NotifyURLRequestDestroyed() { | 1662 void URLRequestHttpJob::NotifyURLRequestDestroyed() { |
| 1628 awaiting_callback_ = false; | 1663 awaiting_callback_ = false; |
| 1629 } | 1664 } |
| 1630 | 1665 |
| 1631 } // namespace net | 1666 } // namespace net |
| OLD | NEW |