Chromium Code Reviews| Index: net/http/http_cache_transaction.cc |
| =================================================================== |
| --- net/http/http_cache_transaction.cc (revision 93058) |
| +++ net/http/http_cache_transaction.cc (working copy) |
| @@ -113,6 +113,7 @@ |
| invalid_range_(false), |
| truncated_(false), |
| is_sparse_(false), |
| + range_requested_(false), |
| handling_206_(false), |
| cache_pending_(false), |
| done_reading_(false), |
| @@ -675,13 +676,18 @@ |
| return ERR_CACHE_MISS; |
| if (mode_ == NONE) { |
| - if (partial_.get()) |
| + if (partial_.get()) { |
| partial_->RestoreHeaders(&custom_request_->extra_headers); |
| + partial_.reset(); |
| + } |
| next_state_ = STATE_SEND_REQUEST; |
| } else { |
| next_state_ = STATE_INIT_ENTRY; |
| } |
| + // This is only set if we have something to do with the response. |
| + range_requested_ = (partial_.get() != NULL); |
| + |
| return OK; |
| } |
| @@ -711,7 +717,7 @@ |
| if (IsCertificateError(result)) { |
| const HttpResponseInfo* response = network_trans_->GetResponseInfo(); |
| // If we get a certificate error, then there is a certificate in ssl_info, |
| - // so GetResponseInfo() should never returns NULL here. |
| + // so GetResponseInfo() should never return NULL here. |
| DCHECK(response); |
| response_.ssl_info = response->ssl_info; |
| } else if (result == ERR_SSL_CLIENT_AUTH_CERT_NEEDED) { |
| @@ -1272,19 +1278,19 @@ |
| int HttpCache::Transaction::DoCacheQueryData() { |
| next_state_ = STATE_CACHE_QUERY_DATA_COMPLETE; |
| - // Balanced in ValidateEntryHeadersAndContinue. |
| + // Balanced in DoCacheQueryDataComplete. |
|
gavinp
2011/07/21 22:11:23
So these were just plain wrong? Good catch. And
rvargas (doing something else)
2011/07/21 23:05:18
Left behind by some refactor.
|
| cache_callback_->AddRef(); |
| return entry_->disk_entry->ReadyForSparseIO(cache_callback_); |
| } |
| int HttpCache::Transaction::DoCacheQueryDataComplete(int result) { |
| DCHECK_EQ(OK, result); |
| - // Balance the AddRef from BeginPartialCacheValidation. |
| + // Balance the AddRef from DoCacheQueryData. |
| cache_callback_->Release(); |
| if (!cache_) |
| return ERR_UNEXPECTED; |
| - return ValidateEntryHeadersAndContinue(true); |
| + return ValidateEntryHeadersAndContinue(); |
| } |
| int HttpCache::Transaction::DoCacheReadData() { |
| @@ -1565,8 +1571,7 @@ |
| !truncated_) |
| return BeginCacheValidation(); |
| - bool byte_range_requested = partial_.get() != NULL; |
| - if (byte_range_requested) { |
| + if (range_requested_) { |
| next_state_ = STATE_CACHE_QUERY_DATA; |
| return OK; |
| } |
| @@ -1578,19 +1583,18 @@ |
| request_ = custom_request_.get(); |
| } |
| - return ValidateEntryHeadersAndContinue(false); |
| + return ValidateEntryHeadersAndContinue(); |
| } |
| // This should only be called once per request. |
| -int HttpCache::Transaction::ValidateEntryHeadersAndContinue( |
| - bool byte_range_requested) { |
| +int HttpCache::Transaction::ValidateEntryHeadersAndContinue() { |
| DCHECK(mode_ == READ_WRITE); |
| if (!partial_->UpdateFromStoredHeaders(response_.headers, entry_->disk_entry, |
| truncated_)) { |
| // The stored data cannot be used. Get rid of it and restart this request. |
| // We need to also reset the |truncated_| flag as a new entry is created. |
| - DoomPartialEntry(!byte_range_requested); |
| + DoomPartialEntry(!range_requested_); |
| mode_ = WRITE; |
| truncated_ = false; |
| next_state_ = STATE_INIT_ENTRY; |
| @@ -1832,18 +1836,18 @@ |
| return true; |
| } |
| + if (response_code == 200 && !reading_ && !is_sparse_) { |
| + // The server is sending the whole resource, and we can save it. |
| + DCHECK((truncated_ && !partial_->IsLastRange()) || range_requested_); |
| + partial_.reset(); |
| + truncated_ = false; |
| + return true; |
| + } |
| + |
| // 304 is not expected here, but we'll spare the entry (unless it was |
| // truncated). |
| - if (truncated_) { |
| - if (!reading_ && response_code == 200) { |
| - // The server is sending the whole resource, and we can save it. |
| - DCHECK(!partial_->IsLastRange()); |
| - partial_.reset(); |
| - truncated_ = false; |
| - return true; |
| - } |
| + if (truncated_) |
| failure = true; |
| - } |
| } |
| if (failure) { |