| Index: net/http/http_cache_transaction.h | 
| diff --git a/net/http/http_cache_transaction.h b/net/http/http_cache_transaction.h | 
| index 51c0db70256cbd31505ca20ffba6486ab4c36aad..6811dd44d9c6028b56eac5f612e031ecff1e1547 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,9 @@ class HttpCache::Transaction : public HttpTransaction { | 
| STATE_PARTIAL_HEADERS_RECEIVED, | 
| STATE_CACHE_READ_METADATA, | 
| STATE_CACHE_READ_METADATA_COMPLETE, | 
| +    STATE_HEADERS_PHASE_CANNOT_PROCEED, | 
| +    STATE_FINISH_HEADERS, | 
| +    STATE_FINISH_HEADERS_COMPLETE, | 
|  | 
| // These states are entered from Read/AddTruncatedFlag. | 
| STATE_NETWORK_READ, | 
| @@ -288,6 +295,9 @@ class HttpCache::Transaction : public HttpTransaction { | 
| int DoPartialHeadersReceived(); | 
| int DoCacheReadMetadata(); | 
| int DoCacheReadMetadataComplete(int result); | 
| +  int DoHeadersPhaseCannotProceed(); | 
| +  int DoFinishHeaders(int result); | 
| +  int DoFinishHeadersComplete(int result); | 
| int DoNetworkRead(); | 
| int DoNetworkReadComplete(int result); | 
| int DoCacheReadData(); | 
| @@ -430,7 +440,12 @@ class HttpCache::Transaction : public HttpTransaction { | 
| void SyncCacheEntryStatusToResponse(); | 
| void RecordHistograms(); | 
|  | 
| -  // Called to signal completion of asynchronous IO. | 
| +  // Called to signal completion of asynchronous IO. Note that this callback is | 
| +  // used in the conventional sense where one layer calls the callback of the | 
| +  // layer above it e.g. this callback gets called from the network transaction | 
| +  // layer. In addition, it is also used for HttpCache layer to let this | 
| +  // transaction know when it is out of a queued state in ActiveEntry and can | 
| +  // continue its processing. | 
| void OnIOComplete(int result); | 
|  | 
| // When in a DoLoop, use this to set the next state as it verifies that the | 
| @@ -456,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. | 
|  |