| Index: net/disk_cache/simple/simple_entry_impl.cc
|
| diff --git a/net/disk_cache/simple/simple_entry_impl.cc b/net/disk_cache/simple/simple_entry_impl.cc
|
| index 22cbc956972cfc096089ca9021cd23100eb288bb..541fa346a25155cb4608fdbd2187973dce4a6871 100644
|
| --- a/net/disk_cache/simple/simple_entry_impl.cc
|
| +++ b/net/disk_cache/simple/simple_entry_impl.cc
|
| @@ -34,7 +34,7 @@ using base::Time;
|
| using base::WorkerPool;
|
|
|
| // static
|
| -int SimpleEntryImpl::OpenEntry(const scoped_refptr<SimpleIndex>& index,
|
| +int SimpleEntryImpl::OpenEntry(SimpleIndex* index,
|
| const FilePath& path,
|
| const std::string& key,
|
| Entry** entry,
|
| @@ -58,7 +58,7 @@ int SimpleEntryImpl::OpenEntry(const scoped_refptr<SimpleIndex>& index,
|
| }
|
|
|
| // static
|
| -int SimpleEntryImpl::CreateEntry(const scoped_refptr<SimpleIndex>& index,
|
| +int SimpleEntryImpl::CreateEntry(SimpleIndex* index,
|
| const FilePath& path,
|
| const std::string& key,
|
| Entry** entry,
|
| @@ -77,7 +77,7 @@ int SimpleEntryImpl::CreateEntry(const scoped_refptr<SimpleIndex>& index,
|
| }
|
|
|
| // static
|
| -int SimpleEntryImpl::DoomEntry(const scoped_refptr<SimpleIndex>& index,
|
| +int SimpleEntryImpl::DoomEntry(SimpleIndex* index,
|
| const FilePath& path,
|
| const std::string& key,
|
| const CompletionCallback& callback) {
|
| @@ -143,7 +143,8 @@ int SimpleEntryImpl::ReadData(int index,
|
| CHECK(false);
|
| }
|
| synchronous_entry_in_use_by_worker_ = true;
|
| - index_->UseIfExists(key_);
|
| + if (index_)
|
| + index_->UseIfExists(key_);
|
| SynchronousOperationCallback sync_operation_callback =
|
| base::Bind(&SimpleEntryImpl::EntryOperationComplete,
|
| this, callback);
|
| @@ -168,7 +169,8 @@ int SimpleEntryImpl::WriteData(int index,
|
| CHECK(false);
|
| }
|
| synchronous_entry_in_use_by_worker_ = true;
|
| - index_->UseIfExists(key_);
|
| + if (index_)
|
| + index_->UseIfExists(key_);
|
| SynchronousOperationCallback sync_operation_callback =
|
| base::Bind(&SimpleEntryImpl::EntryOperationComplete,
|
| this, callback);
|
| @@ -230,11 +232,11 @@ int SimpleEntryImpl::ReadyForSparseIO(const CompletionCallback& callback) {
|
| return net::ERR_FAILED;
|
| }
|
|
|
| -SimpleEntryImpl::SimpleEntryImpl(const scoped_refptr<SimpleIndex>& index,
|
| - const base::FilePath& path,
|
| +SimpleEntryImpl::SimpleEntryImpl(SimpleIndex* index,
|
| + const FilePath& path,
|
| const std::string& key)
|
| - : constructor_thread_(base::MessageLoopProxy::current()),
|
| - index_(index),
|
| + : constructor_thread_(MessageLoopProxy::current()),
|
| + index_(index->AsWeakPtr()),
|
| path_(path),
|
| key_(key),
|
| synchronous_entry_(NULL),
|
| @@ -264,17 +266,20 @@ void SimpleEntryImpl::CreationOperationComplete(
|
| if (!sync_entry) {
|
| completion_callback.Run(net::ERR_FAILED);
|
| // If OpenEntry failed, we must remove it from our index.
|
| - index_->Remove(key_);
|
| + if (index_)
|
| + index_->Remove(key_);
|
| // The reference held by the Callback calling us will go out of scope and
|
| // delete |this| on leaving this scope.
|
| return;
|
| }
|
| - // Adding a reference to self will keep |this| alive after the scope of our
|
| - // Callback calling us is destroyed.
|
| + // The Backend interface requires us to return |this|, and keep the Entry
|
| + // alive until Entry::Close(). Adding a reference to self will keep |this|
|
| + // alive after the scope of the Callback calling us is destroyed.
|
| AddRef(); // Balanced in Close().
|
| synchronous_entry_ = sync_entry;
|
| SetSynchronousData();
|
| - index_->Insert(key_);
|
| + if (index_)
|
| + index_->Insert(key_);
|
| *out_entry = this;
|
| completion_callback.Run(net::OK);
|
| }
|
| @@ -287,11 +292,13 @@ void SimpleEntryImpl::EntryOperationComplete(
|
| DCHECK(synchronous_entry_in_use_by_worker_);
|
| synchronous_entry_in_use_by_worker_ = false;
|
| SetSynchronousData();
|
| - if (result >= 0) {
|
| - index_->UpdateEntrySize(synchronous_entry_->key(),
|
| - synchronous_entry_->GetFileSize());
|
| - } else {
|
| - index_->Remove(synchronous_entry_->key());
|
| + if (index_) {
|
| + if (result >= 0) {
|
| + index_->UpdateEntrySize(synchronous_entry_->key(),
|
| + synchronous_entry_->GetFileSize());
|
| + } else {
|
| + index_->Remove(synchronous_entry_->key());
|
| + }
|
| }
|
| completion_callback.Run(result);
|
| }
|
|
|