| 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..fcdbbcc4d2ccc4445dd15efb223acb072637edde 100644
|
| --- a/net/http/http_cache_transaction.h
|
| +++ b/net/http/http_cache_transaction.h
|
| @@ -164,6 +164,10 @@ class HttpCache::Transaction : public HttpTransaction {
|
| int ResumeNetworkStart() override;
|
| void GetConnectionAttempts(ConnectionAttempts* out) const override;
|
|
|
| + // Invoked when parallel validation cannot proceed due to response failure
|
| + // and this transaction needs to be restarted.
|
| + void SetValidatingCannotProceed();
|
| +
|
| // Returns the estimate of dynamically allocated memory in bytes.
|
| size_t EstimateMemoryUsage() const;
|
|
|
| @@ -220,6 +224,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 +253,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 +293,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 +423,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.
|
| @@ -457,6 +473,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 +486,9 @@ 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.
|
| + // Parallel validation cannot proceed due to response failure, restart the
|
| + // transaction.
|
| + bool validating_cannot_proceed_;
|
| scoped_refptr<IOBuffer> read_buf_;
|
| int io_buf_len_;
|
| int read_offset_;
|
|
|