Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(831)

Unified Diff: net/http/http_cache_transaction.cc

Issue 2774603003: Doom and create new entry when validation is not a match (Closed)
Patch Set: Used TransitionToState in DoSuccessfulSendRequest Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« net/http/http_cache_transaction.h ('K') | « net/http/http_cache_transaction.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/http/http_cache_transaction.cc
diff --git a/net/http/http_cache_transaction.cc b/net/http/http_cache_transaction.cc
index a02a4ea8d5ed3a4d846aab57f2343b7c65b55f56..9a3c8bef9243065a5cc770d634ced00c7c194f1d 100644
--- a/net/http/http_cache_transaction.cc
+++ b/net/http/http_cache_transaction.cc
@@ -180,6 +180,7 @@ HttpCache::Transaction::Transaction(RequestPriority priority, HttpCache* cache)
handling_206_(false),
cache_pending_(false),
done_reading_(false),
+ done_headers_(false),
vary_mismatch_(false),
couldnt_conditionalize_request_(false),
bypass_lock_for_test_(false),
@@ -1137,9 +1138,13 @@ int HttpCache::Transaction::DoCreateEntryComplete(int result) {
// need an atomic OpenOrCreate() method exposed by the disk cache.
DLOG(WARNING) << "Unable to create cache entry";
mode_ = NONE;
Randy Smith (Not in Mondays) 2017/04/04 21:54:03 I presume this means we're transitioning into a mo
shivanisha 2017/04/07 23:24:13 done
- if (partial_)
- partial_->RestoreHeaders(&custom_request_->extra_headers);
- TransitionToState(STATE_SEND_REQUEST);
+ if (done_headers_) {
+ TransitionToState(STATE_OVERWRITE_CACHED_RESPONSE);
+ } else {
+ if (partial_)
+ partial_->RestoreHeaders(&custom_request_->extra_headers);
+ TransitionToState(STATE_SEND_REQUEST);
+ }
}
return OK;
}
@@ -1207,6 +1212,15 @@ int HttpCache::Transaction::DoAddToEntryComplete(int result) {
// If there is a failure, the cache should have taken care of new_entry_.
new_entry_ = NULL;
+ // If this entry creation was a result of validation not matching, then this
+ // transaction should be the headers_transaction.
+ if (done_headers_) {
+ DCHECK_EQ(result, OK);
+ DCHECK_EQ(entry_->headers_transaction, this);
+ TransitionToState(STATE_OVERWRITE_CACHED_RESPONSE);
+ return OK;
+ }
+
if (result == ERR_CACHE_RACE) {
TransitionToState(STATE_INIT_ENTRY);
return OK;
@@ -1603,10 +1617,10 @@ int HttpCache::Transaction::DoSuccessfulSendRequest() {
mode_ = WRITE;
}
- TransitionToState(STATE_OVERWRITE_CACHED_RESPONSE);
-
- if (!entry_)
+ if (!entry_) {
Randy Smith (Not in Mondays) 2017/04/04 21:54:03 Could this conditional be more succinctly implemen
shivanisha 2017/04/07 23:24:13 N/A now that this code is implemented in DoCacheWr
+ TransitionToState(STATE_OVERWRITE_CACHED_RESPONSE);
return OK;
+ }
// Invalidate any current entry with a successful response if this transaction
// cannot write to this entry.
@@ -1615,10 +1629,12 @@ int HttpCache::Transaction::DoSuccessfulSendRequest() {
DCHECK_EQ(entry_->headers_transaction, this);
cache_->DoneResponseHeaders(entry_, this, false);
entry_ = nullptr;
- mode_ = NONE;
+ TransitionToState(STATE_CREATE_ENTRY);
Randy Smith (Not in Mondays) 2017/04/04 21:54:03 As I understand the logic that follows on from thi
shivanisha 2017/04/07 23:24:13 Note that the state OVERWRITE_CACHED_RESPONSE bein
+ done_headers_ = true;
return OK;
}
+ TransitionToState(STATE_OVERWRITE_CACHED_RESPONSE);
return OK;
}
« net/http/http_cache_transaction.h ('K') | « net/http/http_cache_transaction.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698