| 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_cache_transaction.h" | 5 #include "net/http/http_cache_transaction.h" |
| 6 | 6 |
| 7 #include "build/build_config.h" | 7 #include "build/build_config.h" |
| 8 | 8 |
| 9 #if defined(OS_POSIX) | 9 #if defined(OS_POSIX) |
| 10 #include <unistd.h> | 10 #include <unistd.h> |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 208 | 208 |
| 209 void RecordOfflineStatus(int load_flags, RequestOfflineStatus status) { | 209 void RecordOfflineStatus(int load_flags, RequestOfflineStatus status) { |
| 210 // Restrict to main frame to keep statistics close to | 210 // Restrict to main frame to keep statistics close to |
| 211 // "would have shown them something useful if offline mode was enabled". | 211 // "would have shown them something useful if offline mode was enabled". |
| 212 if (load_flags & net::LOAD_MAIN_FRAME) { | 212 if (load_flags & net::LOAD_MAIN_FRAME) { |
| 213 UMA_HISTOGRAM_ENUMERATION("HttpCache.OfflineStatus", status, | 213 UMA_HISTOGRAM_ENUMERATION("HttpCache.OfflineStatus", status, |
| 214 OFFLINE_STATUS_MAX_ENTRIES); | 214 OFFLINE_STATUS_MAX_ENTRIES); |
| 215 } | 215 } |
| 216 } | 216 } |
| 217 | 217 |
| 218 // TODO(rvargas): Remove once we get the data. | |
| 219 void RecordVaryHeaderHistogram(const net::HttpResponseInfo* response) { | |
| 220 enum VaryType { | |
| 221 VARY_NOT_PRESENT, | |
| 222 VARY_UA, | |
| 223 VARY_OTHER, | |
| 224 VARY_MAX | |
| 225 }; | |
| 226 VaryType vary = VARY_NOT_PRESENT; | |
| 227 if (response->vary_data.is_valid()) { | |
| 228 vary = VARY_OTHER; | |
| 229 if (response->headers->HasHeaderValue("vary", "user-agent")) | |
| 230 vary = VARY_UA; | |
| 231 } | |
| 232 UMA_HISTOGRAM_ENUMERATION("HttpCache.Vary", vary, VARY_MAX); | |
| 233 } | |
| 234 | |
| 235 void RecordNoStoreHeaderHistogram(int load_flags, | 218 void RecordNoStoreHeaderHistogram(int load_flags, |
| 236 const net::HttpResponseInfo* response) { | 219 const net::HttpResponseInfo* response) { |
| 237 if (load_flags & net::LOAD_MAIN_FRAME) { | 220 if (load_flags & net::LOAD_MAIN_FRAME) { |
| 238 UMA_HISTOGRAM_BOOLEAN( | 221 UMA_HISTOGRAM_BOOLEAN( |
| 239 "Net.MainFrameNoStore", | 222 "Net.MainFrameNoStore", |
| 240 response->headers->HasHeaderValue("cache-control", "no-store")); | 223 response->headers->HasHeaderValue("cache-control", "no-store")); |
| 241 } | 224 } |
| 242 } | 225 } |
| 243 | 226 |
| 244 base::Value* NetLogAsyncRevalidationInfoCallback( | 227 base::Value* NetLogAsyncRevalidationInfoCallback( |
| (...skipping 975 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1220 mode_ = NONE; | 1203 mode_ = NONE; |
| 1221 } | 1204 } |
| 1222 | 1205 |
| 1223 // Invalidate any cached GET with a successful POST. | 1206 // Invalidate any cached GET with a successful POST. |
| 1224 if (!(effective_load_flags_ & LOAD_DISABLE_CACHE) && | 1207 if (!(effective_load_flags_ & LOAD_DISABLE_CACHE) && |
| 1225 request_->method == "POST" && | 1208 request_->method == "POST" && |
| 1226 NonErrorResponse(new_response->headers->response_code())) { | 1209 NonErrorResponse(new_response->headers->response_code())) { |
| 1227 cache_->DoomMainEntryForUrl(request_->url); | 1210 cache_->DoomMainEntryForUrl(request_->url); |
| 1228 } | 1211 } |
| 1229 | 1212 |
| 1230 RecordVaryHeaderHistogram(new_response); | |
| 1231 RecordNoStoreHeaderHistogram(request_->load_flags, new_response); | 1213 RecordNoStoreHeaderHistogram(request_->load_flags, new_response); |
| 1232 | 1214 |
| 1233 if (new_response_->headers->response_code() == 416 && | 1215 if (new_response_->headers->response_code() == 416 && |
| 1234 (request_->method == "GET" || request_->method == "POST")) { | 1216 (request_->method == "GET" || request_->method == "POST")) { |
| 1235 // If there is an active entry it may be destroyed with this transaction. | 1217 // If there is an active entry it may be destroyed with this transaction. |
| 1236 response_ = *new_response_; | 1218 response_ = *new_response_; |
| 1237 return OK; | 1219 return OK; |
| 1238 } | 1220 } |
| 1239 | 1221 |
| 1240 // Are we expecting a response to a conditional query? | 1222 // Are we expecting a response to a conditional query? |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1354 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_CREATE_ENTRY, | 1336 net_log_.EndEventWithNetErrorCode(NetLog::TYPE_HTTP_CACHE_CREATE_ENTRY, |
| 1355 result); | 1337 result); |
| 1356 cache_pending_ = false; | 1338 cache_pending_ = false; |
| 1357 next_state_ = STATE_ADD_TO_ENTRY; | 1339 next_state_ = STATE_ADD_TO_ENTRY; |
| 1358 | 1340 |
| 1359 if (result == ERR_CACHE_RACE) { | 1341 if (result == ERR_CACHE_RACE) { |
| 1360 next_state_ = STATE_INIT_ENTRY; | 1342 next_state_ = STATE_INIT_ENTRY; |
| 1361 return OK; | 1343 return OK; |
| 1362 } | 1344 } |
| 1363 | 1345 |
| 1364 if (result == OK) { | 1346 if (result != OK) { |
| 1365 UMA_HISTOGRAM_BOOLEAN("HttpCache.OpenToCreateRace", false); | |
| 1366 } else { | |
| 1367 UMA_HISTOGRAM_BOOLEAN("HttpCache.OpenToCreateRace", true); | |
| 1368 // We have a race here: Maybe we failed to open the entry and decided to | 1347 // We have a race here: Maybe we failed to open the entry and decided to |
| 1369 // create one, but by the time we called create, another transaction already | 1348 // create one, but by the time we called create, another transaction already |
| 1370 // created the entry. If we want to eliminate this issue, we need an atomic | 1349 // created the entry. If we want to eliminate this issue, we need an atomic |
| 1371 // OpenOrCreate() method exposed by the disk cache. | 1350 // OpenOrCreate() method exposed by the disk cache. |
| 1372 DLOG(WARNING) << "Unable to create cache entry"; | 1351 DLOG(WARNING) << "Unable to create cache entry"; |
| 1373 mode_ = NONE; | 1352 mode_ = NONE; |
| 1374 if (partial_.get()) | 1353 if (partial_.get()) |
| 1375 partial_->RestoreHeaders(&custom_request_->extra_headers); | 1354 partial_->RestoreHeaders(&custom_request_->extra_headers); |
| 1376 next_state_ = STATE_SEND_REQUEST; | 1355 next_state_ = STATE_SEND_REQUEST; |
| 1377 } | 1356 } |
| (...skipping 1571 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2949 | 2928 |
| 2950 void HttpCache::Transaction::OnIOComplete(int result) { | 2929 void HttpCache::Transaction::OnIOComplete(int result) { |
| 2951 // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. | 2930 // TODO(vadimt): Remove ScopedTracker below once crbug.com/422516 is fixed. |
| 2952 tracked_objects::ScopedTracker tracking_profile( | 2931 tracked_objects::ScopedTracker tracking_profile( |
| 2953 FROM_HERE_WITH_EXPLICIT_FUNCTION("422516 Transaction::OnIOComplete")); | 2932 FROM_HERE_WITH_EXPLICIT_FUNCTION("422516 Transaction::OnIOComplete")); |
| 2954 | 2933 |
| 2955 DoLoop(result); | 2934 DoLoop(result); |
| 2956 } | 2935 } |
| 2957 | 2936 |
| 2958 } // namespace net | 2937 } // namespace net |
| OLD | NEW |