Index: net/http/http_cache_transaction.h |
diff --git a/net/http/http_cache_transaction.h b/net/http/http_cache_transaction.h |
index 30f3ec408d59dd3297e2bd7b4013980f633074e3..a9edd1b534dedf7db594a56f65422b901f068274 100644 |
--- a/net/http/http_cache_transaction.h |
+++ b/net/http/http_cache_transaction.h |
@@ -212,15 +212,14 @@ class HttpCache::Transaction : public HttpTransaction { |
STATE_CACHE_READ_METADATA, |
STATE_CACHE_READ_METADATA_COMPLETE, |
- // These states are entered from Read/AddTruncatedFlag. |
+ // These states are entered from Read. |
+ STATE_SWITCH_TO_NETWORK, |
STATE_NETWORK_READ, |
STATE_NETWORK_READ_COMPLETE, |
STATE_CACHE_READ_DATA, |
STATE_CACHE_READ_DATA_COMPLETE, |
STATE_CACHE_WRITE_DATA, |
STATE_CACHE_WRITE_DATA_COMPLETE, |
- STATE_CACHE_WRITE_TRUNCATED_RESPONSE, |
- STATE_CACHE_WRITE_TRUNCATED_RESPONSE_COMPLETE |
}; |
// Used for categorizing transactions for reporting in histograms. Patterns |
@@ -284,14 +283,13 @@ class HttpCache::Transaction : public HttpTransaction { |
int DoPartialHeadersReceived(); |
int DoCacheReadMetadata(); |
int DoCacheReadMetadataComplete(int result); |
+ int DoSwitchToNetwork(); |
int DoNetworkRead(); |
int DoNetworkReadComplete(int result); |
int DoCacheReadData(); |
int DoCacheReadDataComplete(int result); |
int DoCacheWriteData(int num_bytes); |
int DoCacheWriteDataComplete(int result); |
- int DoCacheWriteTruncatedResponse(); |
- int DoCacheWriteTruncatedResponseComplete(int result); |
// These functions are involved in a field trial testing storing certificates |
// in seperate entries from the HttpResponseInfo. |
@@ -366,17 +364,25 @@ class HttpCache::Transaction : public HttpTransaction { |
const CompletionCallback& callback); |
// Called to write response_ to the cache entry. |truncated| indicates if the |
- // entry should be marked as incomplete. |
- int WriteResponseInfoToEntry(bool truncated); |
+ // entry should be marked as incomplete. Returns ERR_IO_PENDING if an |
+ // operation is pending. Once |callback| is invoked, the caller should call |
+ // OnWriteResponseInfoToEntryComplete() with the result to complete the |
+ // write operation. |
+ int WriteResponseInfoToEntry(bool truncated, |
+ const CompletionCallback& callback); |
// Helper function, should be called with result of WriteResponseInfoToEntry |
// (or the result of the callback, when WriteResponseInfoToEntry returns |
- // ERR_IO_PENDING). Calls DoneWritingToEntry if |result| is not the right |
- // number of bytes. It is expected that the state that calls this will |
- // return whatever net error code this function returns, which currently |
- // is always "OK". |
+ // ERR_IO_PENDING). Calls ReleaseCacheEntry() to doom the entry if the number |
+ // of bytes written is less than expected. It is expected that the state that |
+ // calls this will return whatever net error code this function returns, which |
+ // currently is always "OK". |
int OnWriteResponseInfoToEntryComplete(int result); |
+ // Releases the cache entry. The |entry_state| parameter specifies the state |
+ // of the entry following the release. |
+ void ReleaseCacheEntry(EntryState entry_state); |
+ |
// Called when we are done writing to the cache entry. |
void DoneWritingToEntry(bool success); |
@@ -405,6 +411,8 @@ class HttpCache::Transaction : public HttpTransaction { |
// between the byte range request and the cached entry. |
int DoRestartPartialRequest(); |
+ void OnCacheReleaseComplete(const base::Closure& closure, int result); |
+ |
// Resets the relavant internal state to remove traces of internal processing |
// related to range requests. Deletes |partial_| if |delete_object| is true. |
void ResetPartialState(bool delete_object); |
@@ -424,6 +432,25 @@ class HttpCache::Transaction : public HttpTransaction { |
// Called to signal completion of asynchronous IO. |
void OnIOComplete(int result); |
+ // Abandons a cache entry. |
+ // |
+ // This should be called when the transaction abnormally terminates writing to |
+ // a cache entry. Once called, the cache entry could be either retained or |
+ // truncated or destroyed depending on whether the full response entity was |
+ // written to the cache or whether the partial cache entry can be fulfiled |
+ // later by resuming the network request. |
+ // |
+ // If any asynchronous operations are pending, returns ERR_IO_PENDING and |
+ // invokes |callback| when the opearations are complete. entry_ is always |
+ // released upon completion. |
+ // |
+ // If |callback| is empty, then releases the cache entry synchronously. It is |
+ // possible for the cache entry to be in an indeterminate state in this case. |
+ int AbandonCacheEntry(const CompletionCallback& callback); |
+ |
+ // Called to signal IO completion for AbandonCacheEntry(). |
+ void OnAbandonCacheEntryIOComplete(int result); |
+ |
State next_state_; |
const HttpRequestInfo* request_; |
RequestPriority priority_; |
@@ -444,18 +471,20 @@ class HttpCache::Transaction : public HttpTransaction { |
std::string cache_key_; |
Mode mode_; |
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. |
- bool is_sparse_; // The data is stored in sparse byte ranges. |
+ bool invalid_range_; // We may bypass the cache for this request. |
+ bool truncated_; // We don't have all the response data. |
+ bool is_sparse_; // The data is stored in sparse byte ranges. |
bool range_requested_; // The user requested a byte range. |
- bool handling_206_; // We must deal with this 206 response. |
- bool cache_pending_; // We are waiting for the HttpCache. |
- bool done_reading_; // All available data was read. |
- bool vary_mismatch_; // The request doesn't match the stored vary data. |
+ bool handling_206_; // We must deal with this 206 response. |
+ bool cache_pending_; // We are waiting for the HttpCache. |
+ bool done_reading_; // All available data was written to the cache entry. |
+ bool vary_mismatch_; // The request doesn't match the stored vary data. |
bool couldnt_conditionalize_request_; |
+ bool stopped_caching_; // Avoid further writes to the cache. |
bool bypass_lock_for_test_; // A test is exercising the cache lock. |
bool fail_conditionalization_for_test_; // Fail ConditionalizeRequest. |
scoped_refptr<IOBuffer> read_buf_; |
+ int read_buf_len_; |
int io_buf_len_; |
int read_offset_; |
int effective_load_flags_; |
@@ -464,6 +493,9 @@ class HttpCache::Transaction : public HttpTransaction { |
UploadProgress final_upload_progress_; |
CompletionCallback io_callback_; |
+ // Completion callback for AbandonCacheEntry(). |
+ CompletionCallback abandon_cache_entry_callback_; |
+ |
// Members used to track data for histograms. |
TransactionPattern transaction_pattern_; |
base::TimeTicks entry_lock_waiting_since_; |