diff options
author | rvargas@google.com <rvargas@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-04 00:55:17 +0000 |
---|---|---|
committer | rvargas@google.com <rvargas@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-04 00:55:17 +0000 |
commit | ab3e58a2ed17a8c6d5901c4b5dcb7875c681932d (patch) | |
tree | d03bd011409afccf2651d5d21b82869645bbbb3e /net/http/http_cache_transaction.h | |
parent | ac13caa4245194b330c78bbc4d7ce11d99efb0a7 (diff) | |
download | chromium_src-ab3e58a2ed17a8c6d5901c4b5dcb7875c681932d.zip chromium_src-ab3e58a2ed17a8c6d5901c4b5dcb7875c681932d.tar.gz chromium_src-ab3e58a2ed17a8c6d5901c4b5dcb7875c681932d.tar.bz2 |
Http cache: First pass to move the HttpCache::Transaction to a sate machine.
This CL only implements the states that are related to
current asynchronous operations.
BUG=26729
TEST=current unit tests.
Review URL: http://codereview.chromium.org/410005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@33760 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/http/http_cache_transaction.h')
-rw-r--r-- | net/http/http_cache_transaction.h | 78 |
1 files changed, 49 insertions, 29 deletions
diff --git a/net/http/http_cache_transaction.h b/net/http/http_cache_transaction.h index 69b785c..0b7e517 100644 --- a/net/http/http_cache_transaction.h +++ b/net/http/http_cache_transaction.h @@ -94,6 +94,34 @@ class HttpCache::Transaction : public HttpTransaction { bool initialized; }; + enum State { + STATE_NONE, + STATE_START_REQUEST, + STATE_SEND_REQUEST, + STATE_SEND_REQUEST_COMPLETE, + STATE_NETWORK_READ, + STATE_NETWORK_READ_COMPLETE, + STATE_OPEN_ENTRY, + STATE_OPEN_ENTRY_COMPLETE, + STATE_CREATE_ENTRY, + STATE_CREATE_ENTRY_COMPLETE, + STATE_DOOM_ENTRY, + STATE_DOOM_ENTRY_COMPLETE, + STATE_ADD_TO_ENTRY, + STATE_ADD_TO_ENTRY_COMPLETE, + STATE_ENTRY_AVAILABLE, + STATE_CACHE_READ_RESPONSE, + STATE_CACHE_READ_RESPONSE_COMPLETE, + STATE_CACHE_WRITE_RESPONSE, + STATE_CACHE_WRITE_RESPONSE_COMPLETE, + STATE_CACHE_QUERY_DATA, + STATE_CACHE_QUERY_DATA_COMPLETE, + STATE_CACHE_READ_DATA, + STATE_CACHE_READ_DATA_COMPLETE, + STATE_CACHE_WRITE_DATA, + STATE_CACHE_WRITE_DATA_COMPLETE + }; + // This is a helper function used to trigger a completion callback. It may // only be called if callback_ is non-null. void DoCallback(int rv); @@ -101,6 +129,21 @@ class HttpCache::Transaction : public HttpTransaction { // This will trigger the completion callback if appropriate. int HandleResult(int rv); + // Runs the state transition loop. + int DoLoop(int result); + + // Each of these methods corresponds to a State value. + int DoSendRequest(); + int DoSendRequestComplete(int result); + int DoNetworkRead(); + int DoNetworkReadComplete(int result); + int DoCacheReadData(); + int DoCacheReadDataComplete(int result); + int DoCacheQueryData(); + int DoCacheQueryDataComplete(int result); + int DoCacheWriteData(int num_bytes); + int DoCacheWriteDataComplete(int result); + // Sets request_ and fields derived from it. void SetRequest(LoadLog* load_log, const HttpRequestInfo* request); @@ -199,16 +242,10 @@ class HttpCache::Transaction : public HttpTransaction { // the control object (partial_). void DoomPartialEntry(bool delete_object); - // Performs the needed work after receiving data from the network. - int DoNetworkReadCompleted(int result); - // Performs the needed work after receiving data from the network, when // working with range requests. int DoPartialNetworkReadCompleted(int result); - // Performs the needed work after receiving data from the cache. - int DoCacheReadCompleted(int result); - // Performs the needed work after receiving data from the cache, when // working with range requests. int DoPartialCacheReadCompleted(int result); @@ -216,23 +253,12 @@ class HttpCache::Transaction : public HttpTransaction { // Performs the needed work after writing data to the cache. int DoCacheWriteCompleted(int result); - // Called to signal completion of the network transaction's Start method: - void OnNetworkInfoAvailable(int result); - - // Called to signal completion of the network transaction's Read method: - void OnNetworkReadCompleted(int result); + // Called to signal completion of asynchronous IO. + void OnIOComplete(int result); - // Called to signal completion of the cache's ReadData method: - void OnCacheReadCompleted(int result); - - // Called to signal completion of the cache's WriteData method: - void OnCacheWriteCompleted(int result); - - // Called to signal completion of the cache entry's ReadyForSparseIO method: - void OnCacheEntryReady(int result); - - scoped_refptr<LoadLog> load_log_; + State next_state_; const HttpRequestInfo* request_; + scoped_refptr<LoadLog> load_log_; scoped_ptr<HttpRequestInfo> custom_request_; // If extra_headers specified a "if-modified-since" or "if-none-match", // |external_validation_| contains the value of those headers. @@ -255,14 +281,8 @@ class HttpCache::Transaction : public HttpTransaction { int effective_load_flags_; scoped_ptr<PartialData> partial_; // We are dealing with range requests. uint64 final_upload_progress_; - CompletionCallbackImpl<Transaction> network_info_callback_; - CompletionCallbackImpl<Transaction> network_read_callback_; - scoped_refptr<CancelableCompletionCallback<Transaction> > - cache_read_callback_; - scoped_refptr<CancelableCompletionCallback<Transaction> > - cache_write_callback_; - scoped_refptr<CancelableCompletionCallback<Transaction> > - entry_ready_callback_; + CompletionCallbackImpl<Transaction> network_callback_; + scoped_refptr<CancelableCompletionCallback<Transaction> > cache_callback_; }; } // namespace net |