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

Unified Diff: net/http/http_cache_transaction.h

Issue 2721933002: HttpCache::Transaction layer allowing parallel validation (Closed)
Patch Set: Use TransitionToState (Rebased till refs/heads/master@{#459057}) 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
Index: net/http/http_cache_transaction.h
diff --git a/net/http/http_cache_transaction.h b/net/http/http_cache_transaction.h
index a8fca54228e8d8f6cadda6b947e90ab7bf24cd94..907971a255a70fa2b3d2c8677d7a6edb2992b4ec 100644
--- a/net/http/http_cache_transaction.h
+++ b/net/http/http_cache_transaction.h
@@ -163,6 +163,7 @@ class HttpCache::Transaction : public HttpTransaction {
const BeforeHeadersSentCallback& callback) override;
int ResumeNetworkStart() override;
void GetConnectionAttempts(ConnectionAttempts* out) const override;
+ void SetValidatingCannotProceed();
jkarlin 2017/03/23 18:37:38 This isn't an HttpTransaction method (as the above
shivanisha 2017/03/29 03:39:29 Done.
// Returns the estimate of dynamically allocated memory in bytes.
size_t EstimateMemoryUsage() const;
@@ -220,6 +221,8 @@ class HttpCache::Transaction : public HttpTransaction {
STATE_PARTIAL_HEADERS_RECEIVED,
STATE_CACHE_READ_METADATA,
STATE_CACHE_READ_METADATA_COMPLETE,
+ STATE_WAIT_BEFORE_READ,
+ STATE_WAIT_BEFORE_READ_COMPLETE,
// These states are entered from Read/AddTruncatedFlag.
STATE_NETWORK_READ,
@@ -247,6 +250,7 @@ class HttpCache::Transaction : public HttpTransaction {
// Runs the state transition loop. Resets and calls |callback_| on exit,
// unless the return value is ERR_IO_PENDING.
int DoLoop(int result);
+ int DoLoopImpl(int result);
// Each of these methods corresponds to a State value. If there is an
// argument, the value corresponds to the return of the previous state or
@@ -286,6 +290,8 @@ class HttpCache::Transaction : public HttpTransaction {
int DoTruncateCachedMetadata();
int DoTruncateCachedMetadataComplete(int result);
int DoPartialHeadersReceived();
+ int DoWaitBeforeRead();
+ int DoWaitBeforeReadComplete(int result);
int DoCacheReadMetadata();
int DoCacheReadMetadataComplete(int result);
int DoNetworkRead();
@@ -414,6 +420,13 @@ class HttpCache::Transaction : public HttpTransaction {
// |old_network_trans_load_timing_|, which must be NULL when this is called.
void ResetNetworkTransaction();
+ // Since a transaction could be doing validation of request headers in
+ // parallel with another request writing response data to the entry, failure
+ // to write the data might lead to restarting this request. This function
+ // resets all the required variables to be able to restart the transaction's
+ // state machine.
+ void RestartAfterValidationStarted();
+
// Returns true if we should bother attempting to resume this request if it is
// aborted while in progress. If |has_data| is true, the size of the stored
// data is considered for the result.
@@ -450,6 +463,7 @@ class HttpCache::Transaction : public HttpTransaction {
base::WeakPtr<HttpCache> cache_;
HttpCache::ActiveEntry* entry_;
HttpCache::ActiveEntry* new_entry_;
+ bool created_entry_;
std::unique_ptr<HttpTransaction> network_trans_;
CompletionCallback callback_; // Consumer's callback.
HttpResponseInfo response_;
@@ -457,6 +471,7 @@ class HttpCache::Transaction : public HttpTransaction {
const HttpResponseInfo* new_response_;
std::string cache_key_;
Mode mode_;
+ Mode original_mode_; // Used when restarting the transaction.
bool reading_; // We are already reading. Never reverts to false once set.
bool invalid_range_; // We may bypass the cache for this request.
bool truncated_; // We don't have all the response data.
@@ -469,6 +484,7 @@ class HttpCache::Transaction : public HttpTransaction {
bool couldnt_conditionalize_request_;
bool bypass_lock_for_test_; // A test is exercising the cache lock.
bool fail_conditionalization_for_test_; // Fail ConditionalizeRequest.
+ bool validating_cannot_proceed_;
scoped_refptr<IOBuffer> read_buf_;
int io_buf_len_;
int read_offset_;

Powered by Google App Engine
This is Rietveld 408576698