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

Unified Diff: webkit/browser/appcache/appcache_disk_cache.cc

Issue 344493002: Move all remaining appcache-related code to content namespace (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: webkit/browser/appcache/appcache_disk_cache.cc
diff --git a/webkit/browser/appcache/appcache_disk_cache.cc b/webkit/browser/appcache/appcache_disk_cache.cc
deleted file mode 100644
index 9c16f98779e7dc071241f1e2a24460d8fa5ae173..0000000000000000000000000000000000000000
--- a/webkit/browser/appcache/appcache_disk_cache.cc
+++ /dev/null
@@ -1,351 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "webkit/browser/appcache/appcache_disk_cache.h"
-
-#include "base/bind.h"
-#include "base/bind_helpers.h"
-#include "base/files/file_path.h"
-#include "base/logging.h"
-#include "base/stl_util.h"
-#include "base/strings/string_number_conversions.h"
-#include "net/base/cache_type.h"
-#include "net/base/net_errors.h"
-
-namespace appcache {
-
-// A callback shim that provides storage for the 'backend_ptr' value
-// and will delete a resulting ptr if completion occurs after its
-// been canceled.
-class AppCacheDiskCache::CreateBackendCallbackShim
- : public base::RefCounted<CreateBackendCallbackShim> {
- public:
- explicit CreateBackendCallbackShim(AppCacheDiskCache* object)
- : appcache_diskcache_(object) {
- }
-
- void Cancel() {
- appcache_diskcache_ = NULL;
- }
-
- void Callback(int rv) {
- if (appcache_diskcache_)
- appcache_diskcache_->OnCreateBackendComplete(rv);
- }
-
- scoped_ptr<disk_cache::Backend> backend_ptr_; // Accessed directly.
-
- private:
- friend class base::RefCounted<CreateBackendCallbackShim>;
-
- ~CreateBackendCallbackShim() {
- }
-
- AppCacheDiskCache* appcache_diskcache_; // Unowned pointer.
-};
-
-// An implementation of AppCacheDiskCacheInterface::Entry that's a thin
-// wrapper around disk_cache::Entry.
-class AppCacheDiskCache::EntryImpl : public Entry {
- public:
- EntryImpl(disk_cache::Entry* disk_cache_entry,
- AppCacheDiskCache* owner)
- : disk_cache_entry_(disk_cache_entry), owner_(owner) {
- DCHECK(disk_cache_entry);
- DCHECK(owner);
- owner_->AddOpenEntry(this);
- }
-
- // Entry implementation.
- virtual int Read(int index, int64 offset, net::IOBuffer* buf, int buf_len,
- const net::CompletionCallback& callback) OVERRIDE {
- if (offset < 0 || offset > kint32max)
- return net::ERR_INVALID_ARGUMENT;
- if (!disk_cache_entry_)
- return net::ERR_ABORTED;
- return disk_cache_entry_->ReadData(
- index, static_cast<int>(offset), buf, buf_len, callback);
- }
-
- virtual int Write(int index, int64 offset, net::IOBuffer* buf, int buf_len,
- const net::CompletionCallback& callback) OVERRIDE {
- if (offset < 0 || offset > kint32max)
- return net::ERR_INVALID_ARGUMENT;
- if (!disk_cache_entry_)
- return net::ERR_ABORTED;
- const bool kTruncate = true;
- return disk_cache_entry_->WriteData(
- index, static_cast<int>(offset), buf, buf_len, callback, kTruncate);
- }
-
- virtual int64 GetSize(int index) OVERRIDE {
- return disk_cache_entry_ ? disk_cache_entry_->GetDataSize(index) : 0L;
- }
-
- virtual void Close() OVERRIDE {
- if (disk_cache_entry_)
- disk_cache_entry_->Close();
- delete this;
- }
-
- void Abandon() {
- owner_ = NULL;
- disk_cache_entry_->Close();
- disk_cache_entry_ = NULL;
- }
-
- private:
- virtual ~EntryImpl() {
- if (owner_)
- owner_->RemoveOpenEntry(this);
- }
-
- disk_cache::Entry* disk_cache_entry_;
- AppCacheDiskCache* owner_;
-};
-
-// Separate object to hold state for each Create, Delete, or Doom call
-// while the call is in-flight and to produce an EntryImpl upon completion.
-class AppCacheDiskCache::ActiveCall {
- public:
- explicit ActiveCall(AppCacheDiskCache* owner)
- : entry_(NULL),
- owner_(owner),
- entry_ptr_(NULL) {
- }
-
- int CreateEntry(int64 key, Entry** entry,
- const net::CompletionCallback& callback) {
- int rv = owner_->disk_cache()->CreateEntry(
- base::Int64ToString(key), &entry_ptr_,
- base::Bind(&ActiveCall::OnAsyncCompletion, base::Unretained(this)));
- return HandleImmediateReturnValue(rv, entry, callback);
- }
-
- int OpenEntry(int64 key, Entry** entry,
- const net::CompletionCallback& callback) {
- int rv = owner_->disk_cache()->OpenEntry(
- base::Int64ToString(key), &entry_ptr_,
- base::Bind(&ActiveCall::OnAsyncCompletion, base::Unretained(this)));
- return HandleImmediateReturnValue(rv, entry, callback);
- }
-
- int DoomEntry(int64 key, const net::CompletionCallback& callback) {
- int rv = owner_->disk_cache()->DoomEntry(
- base::Int64ToString(key),
- base::Bind(&ActiveCall::OnAsyncCompletion, base::Unretained(this)));
- return HandleImmediateReturnValue(rv, NULL, callback);
- }
-
- private:
- int HandleImmediateReturnValue(int rv, Entry** entry,
- const net::CompletionCallback& callback) {
- if (rv == net::ERR_IO_PENDING) {
- // OnAsyncCompletion will be called later.
- callback_ = callback;
- entry_ = entry;
- owner_->AddActiveCall(this);
- return net::ERR_IO_PENDING;
- }
- if (rv == net::OK && entry)
- *entry = new EntryImpl(entry_ptr_, owner_);
- delete this;
- return rv;
- }
-
- void OnAsyncCompletion(int rv) {
- owner_->RemoveActiveCall(this);
- if (rv == net::OK && entry_)
- *entry_ = new EntryImpl(entry_ptr_, owner_);
- callback_.Run(rv);
- callback_.Reset();
- delete this;
- }
-
- Entry** entry_;
- net::CompletionCallback callback_;
- AppCacheDiskCache* owner_;
- disk_cache::Entry* entry_ptr_;
-};
-
-AppCacheDiskCache::AppCacheDiskCache()
- : is_disabled_(false) {
-}
-
-AppCacheDiskCache::~AppCacheDiskCache() {
- Disable();
-}
-
-int AppCacheDiskCache::InitWithDiskBackend(
- const base::FilePath& disk_cache_directory, int disk_cache_size, bool force,
- base::MessageLoopProxy* cache_thread,
- const net::CompletionCallback& callback) {
- return Init(net::APP_CACHE, disk_cache_directory,
- disk_cache_size, force, cache_thread, callback);
-}
-
-int AppCacheDiskCache::InitWithMemBackend(
- int mem_cache_size, const net::CompletionCallback& callback) {
- return Init(net::MEMORY_CACHE, base::FilePath(), mem_cache_size, false, NULL,
- callback);
-}
-
-void AppCacheDiskCache::Disable() {
- if (is_disabled_)
- return;
-
- is_disabled_ = true;
-
- if (create_backend_callback_.get()) {
- create_backend_callback_->Cancel();
- create_backend_callback_ = NULL;
- OnCreateBackendComplete(net::ERR_ABORTED);
- }
-
- // We need to close open file handles in order to reinitalize the
- // appcache system on the fly. File handles held in both entries and in
- // the main disk_cache::Backend class need to be released.
- for (OpenEntries::const_iterator iter = open_entries_.begin();
- iter != open_entries_.end(); ++iter) {
- (*iter)->Abandon();
- }
- open_entries_.clear();
- disk_cache_.reset();
- STLDeleteElements(&active_calls_);
-}
-
-int AppCacheDiskCache::CreateEntry(int64 key, Entry** entry,
- const net::CompletionCallback& callback) {
- DCHECK(entry);
- DCHECK(!callback.is_null());
- if (is_disabled_)
- return net::ERR_ABORTED;
-
- if (is_initializing()) {
- pending_calls_.push_back(PendingCall(CREATE, key, entry, callback));
- return net::ERR_IO_PENDING;
- }
-
- if (!disk_cache_)
- return net::ERR_FAILED;
-
- return (new ActiveCall(this))->CreateEntry(key, entry, callback);
-}
-
-int AppCacheDiskCache::OpenEntry(int64 key, Entry** entry,
- const net::CompletionCallback& callback) {
- DCHECK(entry);
- DCHECK(!callback.is_null());
- if (is_disabled_)
- return net::ERR_ABORTED;
-
- if (is_initializing()) {
- pending_calls_.push_back(PendingCall(OPEN, key, entry, callback));
- return net::ERR_IO_PENDING;
- }
-
- if (!disk_cache_)
- return net::ERR_FAILED;
-
- return (new ActiveCall(this))->OpenEntry(key, entry, callback);
-}
-
-int AppCacheDiskCache::DoomEntry(int64 key,
- const net::CompletionCallback& callback) {
- DCHECK(!callback.is_null());
- if (is_disabled_)
- return net::ERR_ABORTED;
-
- if (is_initializing()) {
- pending_calls_.push_back(PendingCall(DOOM, key, NULL, callback));
- return net::ERR_IO_PENDING;
- }
-
- if (!disk_cache_)
- return net::ERR_FAILED;
-
- return (new ActiveCall(this))->DoomEntry(key, callback);
-}
-
-AppCacheDiskCache::PendingCall::PendingCall()
- : call_type(CREATE),
- key(0),
- entry(NULL) {
-}
-
-AppCacheDiskCache::PendingCall::PendingCall(PendingCallType call_type,
- int64 key,
- Entry** entry,
- const net::CompletionCallback& callback)
- : call_type(call_type),
- key(key),
- entry(entry),
- callback(callback) {
-}
-
-AppCacheDiskCache::PendingCall::~PendingCall() {}
-
-int AppCacheDiskCache::Init(net::CacheType cache_type,
- const base::FilePath& cache_directory,
- int cache_size, bool force,
- base::MessageLoopProxy* cache_thread,
- const net::CompletionCallback& callback) {
- DCHECK(!is_initializing() && !disk_cache_.get());
- is_disabled_ = false;
- create_backend_callback_ = new CreateBackendCallbackShim(this);
-
-#if defined(APPCACHE_USE_SIMPLE_CACHE)
- const net::BackendType backend_type = net::CACHE_BACKEND_SIMPLE;
-#else
- const net::BackendType backend_type = net::CACHE_BACKEND_DEFAULT;
-#endif
- int rv = disk_cache::CreateCacheBackend(
- cache_type, backend_type, cache_directory, cache_size,
- force, cache_thread, NULL, &(create_backend_callback_->backend_ptr_),
- base::Bind(&CreateBackendCallbackShim::Callback,
- create_backend_callback_));
- if (rv == net::ERR_IO_PENDING)
- init_callback_ = callback;
- else
- OnCreateBackendComplete(rv);
- return rv;
-}
-
-void AppCacheDiskCache::OnCreateBackendComplete(int rv) {
- if (rv == net::OK) {
- disk_cache_ = create_backend_callback_->backend_ptr_.Pass();
- }
- create_backend_callback_ = NULL;
-
- // Invoke our clients callback function.
- if (!init_callback_.is_null()) {
- init_callback_.Run(rv);
- init_callback_.Reset();
- }
-
- // Service pending calls that were queued up while we were initializing.
- for (PendingCalls::const_iterator iter = pending_calls_.begin();
- iter < pending_calls_.end(); ++iter) {
- int rv = net::ERR_FAILED;
- switch (iter->call_type) {
- case CREATE:
- rv = CreateEntry(iter->key, iter->entry, iter->callback);
- break;
- case OPEN:
- rv = OpenEntry(iter->key, iter->entry, iter->callback);
- break;
- case DOOM:
- rv = DoomEntry(iter->key, iter->callback);
- break;
- default:
- NOTREACHED();
- break;
- }
- if (rv != net::ERR_IO_PENDING)
- iter->callback.Run(rv);
- }
- pending_calls_.clear();
-}
-
-} // namespace appcache

Powered by Google App Engine
This is Rietveld 408576698