Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(209)

Side by Side Diff: net/http/http_cache.cc

Issue 193043: Http cache: Don't delete sparse entries when we... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | net/http/http_cache_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/http/http_cache.h" 5 #include "net/http/http_cache.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 const std::string& key() const { return cache_key_; } 246 const std::string& key() const { return cache_key_; }
247 247
248 // Associates this transaction with a cache entry. 248 // Associates this transaction with a cache entry.
249 int AddToEntry(); 249 int AddToEntry();
250 250
251 // Called by the HttpCache when the given disk cache entry becomes accessible 251 // Called by the HttpCache when the given disk cache entry becomes accessible
252 // to the transaction. Returns network error code. 252 // to the transaction. Returns network error code.
253 int EntryAvailable(ActiveEntry* entry); 253 int EntryAvailable(ActiveEntry* entry);
254 254
255 // This transaction is being deleted and we are not done writing to the cache. 255 // This transaction is being deleted and we are not done writing to the cache.
256 // We need to indicate that the response data was truncated. 256 // We need to indicate that the response data was truncated. Returns true on
257 void AddTruncatedFlag(); 257 // success.
258 bool AddTruncatedFlag();
258 259
259 private: 260 private:
260 // This is a helper function used to trigger a completion callback. It may 261 // This is a helper function used to trigger a completion callback. It may
261 // only be called if callback_ is non-null. 262 // only be called if callback_ is non-null.
262 void DoCallback(int rv); 263 void DoCallback(int rv);
263 264
264 // This will trigger the completion callback if appropriate. 265 // This will trigger the completion callback if appropriate.
265 int HandleResult(int rv); 266 int HandleResult(int rv);
266 267
267 // Sets request_ and fields derived from it. 268 // Sets request_ and fields derived from it.
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 uint64 final_upload_progress_; 402 uint64 final_upload_progress_;
402 CompletionCallbackImpl<Transaction> network_info_callback_; 403 CompletionCallbackImpl<Transaction> network_info_callback_;
403 CompletionCallbackImpl<Transaction> network_read_callback_; 404 CompletionCallbackImpl<Transaction> network_read_callback_;
404 scoped_refptr<CancelableCompletionCallback<Transaction> > 405 scoped_refptr<CancelableCompletionCallback<Transaction> >
405 cache_read_callback_; 406 cache_read_callback_;
406 }; 407 };
407 408
408 HttpCache::Transaction::~Transaction() { 409 HttpCache::Transaction::~Transaction() {
409 if (!revoked()) { 410 if (!revoked()) {
410 if (entry_) { 411 if (entry_) {
411 bool cancel_request = reading_ && !partial_.get() && 412 bool cancel_request = reading_ && enable_range_support_;
412 enable_range_support_ && 413 if (cancel_request && !partial_.get())
413 response_.headers->response_code() == 200; 414 cancel_request &= (response_.headers->response_code() == 200);
414 415
415 cache_->DoneWithEntry(entry_, this, cancel_request); 416 cache_->DoneWithEntry(entry_, this, cancel_request);
416 } else { 417 } else {
417 cache_->RemovePendingTransaction(this); 418 cache_->RemovePendingTransaction(this);
418 } 419 }
419 } 420 }
420 421
421 // If there is an outstanding callback, mark it as cancelled so running it 422 // If there is an outstanding callback, mark it as cancelled so running it
422 // does nothing. 423 // does nothing.
423 cache_read_callback_->Cancel(); 424 cache_read_callback_->Cancel();
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 case UPDATE: 713 case UPDATE:
713 rv = BeginExternallyConditionalizedRequest(); 714 rv = BeginExternallyConditionalizedRequest();
714 break; 715 break;
715 default: 716 default:
716 NOTREACHED(); 717 NOTREACHED();
717 rv = ERR_FAILED; 718 rv = ERR_FAILED;
718 } 719 }
719 return rv; 720 return rv;
720 } 721 }
721 722
722 void HttpCache::Transaction::AddTruncatedFlag() { 723 bool HttpCache::Transaction::AddTruncatedFlag() {
723 DCHECK(mode_ & WRITE); 724 DCHECK(mode_ & WRITE);
725
726 // Don't set the flag for sparse entries.
727 if (partial_.get())
728 return true;
729
730 // Double check that there is something worth keeping.
731 if (!entry_->disk_entry->GetDataSize(kResponseContentIndex))
732 return false;
733
724 truncated_ = true; 734 truncated_ = true;
725 WriteResponseInfoToEntry(true); 735 WriteResponseInfoToEntry(true);
736 return true;
726 } 737 }
727 738
728 void HttpCache::Transaction::DoCallback(int rv) { 739 void HttpCache::Transaction::DoCallback(int rv) {
729 DCHECK(rv != ERR_IO_PENDING); 740 DCHECK(rv != ERR_IO_PENDING);
730 DCHECK(callback_); 741 DCHECK(callback_);
731 742
732 // since Run may result in Read being called, clear callback_ up front. 743 // since Run may result in Read being called, clear callback_ up front.
733 CompletionCallback* c = callback_; 744 CompletionCallback* c = callback_;
734 callback_ = NULL; 745 callback_ = NULL;
735 c->Run(rv); 746 c->Run(rv);
(...skipping 1260 matching lines...) Expand 10 before | Expand all | Expand 10 after
1996 2007
1997 if (entry->writer) { 2008 if (entry->writer) {
1998 DCHECK(trans == entry->writer); 2009 DCHECK(trans == entry->writer);
1999 2010
2000 // Assume there was a failure. 2011 // Assume there was a failure.
2001 bool success = false; 2012 bool success = false;
2002 if (cancel) { 2013 if (cancel) {
2003 DCHECK(entry->disk_entry); 2014 DCHECK(entry->disk_entry);
2004 // This is a successful operation in the sense that we want to keep the 2015 // This is a successful operation in the sense that we want to keep the
2005 // entry. 2016 // entry.
2006 success = true; 2017 success = trans->AddTruncatedFlag();
2007 // Double check that there is something worth keeping.
2008 if (!entry->disk_entry->GetDataSize(kResponseContentIndex))
2009 success = false;
2010 trans->AddTruncatedFlag();
2011 } 2018 }
2012 DoneWritingToEntry(entry, success); 2019 DoneWritingToEntry(entry, success);
2013 } else { 2020 } else {
2014 DoneReadingFromEntry(entry, trans); 2021 DoneReadingFromEntry(entry, trans);
2015 } 2022 }
2016 } 2023 }
2017 2024
2018 void HttpCache::DoneWritingToEntry(ActiveEntry* entry, bool success) { 2025 void HttpCache::DoneWritingToEntry(ActiveEntry* entry, bool success) {
2019 DCHECK(entry->readers.empty()); 2026 DCHECK(entry->readers.empty());
2020 2027
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
2120 static_cast<net::HttpNetworkLayer*>(network_layer_.get()); 2127 static_cast<net::HttpNetworkLayer*>(network_layer_.get());
2121 HttpNetworkSession* session = network->GetSession(); 2128 HttpNetworkSession* session = network->GetSession();
2122 if (session) { 2129 if (session) {
2123 session->tcp_socket_pool()->CloseIdleSockets(); 2130 session->tcp_socket_pool()->CloseIdleSockets();
2124 } 2131 }
2125 } 2132 }
2126 2133
2127 //----------------------------------------------------------------------------- 2134 //-----------------------------------------------------------------------------
2128 2135
2129 } // namespace net 2136 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | net/http/http_cache_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698