| Index: webkit/blob/deletable_file_reference.cc
|
| ===================================================================
|
| --- webkit/blob/deletable_file_reference.cc (revision 0)
|
| +++ webkit/blob/deletable_file_reference.cc (revision 0)
|
| @@ -0,0 +1,63 @@
|
| +// Copyright (c) 2010 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/blob/deletable_file_reference.h"
|
| +
|
| +#include <map>
|
| +#include "base/file_util.h"
|
| +#include "base/file_util_proxy.h"
|
| +#include "base/message_loop_proxy.h"
|
| +#include "base/singleton.h"
|
| +
|
| +namespace webkit_blob {
|
| +
|
| +namespace {
|
| +
|
| +typedef std::map<FilePath, DeletableFileReference*> DeleteableFileMap;
|
| +
|
| +DeleteableFileMap* map() {
|
| + return Singleton<DeleteableFileMap>::get();
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +// static
|
| +scoped_refptr<DeletableFileReference> DeletableFileReference::Get(
|
| + const FilePath& path) {
|
| + DeleteableFileMap::iterator found = map()->find(path);
|
| + DeletableFileReference* reference =
|
| + (found == map()->end()) ? NULL : found->second;
|
| + return scoped_refptr<DeletableFileReference>(reference);
|
| +}
|
| +
|
| +// static
|
| +scoped_refptr<DeletableFileReference> DeletableFileReference::GetOrCreate(
|
| + const FilePath& path, base::MessageLoopProxy* file_thread) {
|
| + DCHECK(file_thread);
|
| + typedef std::pair<DeleteableFileMap::iterator, bool> InsertResult;
|
| + InsertResult result = map()->insert(
|
| + DeleteableFileMap::value_type(path, NULL));
|
| + if (result.second == false)
|
| + return scoped_refptr<DeletableFileReference>(result.first->second);
|
| +
|
| + // Wasn't in the map, create a new reference and store the pointer.
|
| + scoped_refptr<DeletableFileReference> reference =
|
| + new DeletableFileReference(path, file_thread);
|
| + result.first->second = reference.get();
|
| + return reference;
|
| +}
|
| +
|
| +DeletableFileReference::DeletableFileReference(
|
| + const FilePath& path, base::MessageLoopProxy* file_thread)
|
| + : path_(path), file_thread_(file_thread) {
|
| + DCHECK(map()->find(path_)->second == NULL);
|
| +}
|
| +
|
| +DeletableFileReference::~DeletableFileReference() {
|
| + DCHECK(map()->find(path_)->second == this);
|
| + map()->erase(path_);
|
| + base::FileUtilProxy::Delete(file_thread_, path_, NULL);
|
| +}
|
| +
|
| +} // namespace webkit_blob
|
|
|
| Property changes on: webkit\blob\deletable_file_reference.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|