Chromium Code Reviews| 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_; |