diff options
Diffstat (limited to 'webkit/common/blob/scoped_file.h')
| -rw-r--r-- | webkit/common/blob/scoped_file.h | 93 |
1 files changed, 2 insertions, 91 deletions
diff --git a/webkit/common/blob/scoped_file.h b/webkit/common/blob/scoped_file.h index 78e592e..027ab3b 100644 --- a/webkit/common/blob/scoped_file.h +++ b/webkit/common/blob/scoped_file.h @@ -1,94 +1,5 @@ -// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Copyright 2014 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. -#ifndef WEBKIT_COMMON_BLOB_SCOPED_FILE_H_ -#define WEBKIT_COMMON_BLOB_SCOPED_FILE_H_ - -#include <map> - -#include "base/callback_forward.h" -#include "base/files/file_path.h" -#include "base/memory/ref_counted.h" -#include "base/move.h" -#include "webkit/common/storage_common_export.h" - -namespace base { -class TaskRunner; -} - -namespace storage { - -// A scoped reference for a FilePath that can optionally schedule the file -// to be deleted and/or to notify a consumer when it is going to be scoped out. -// This class supports move semantics, i.e. consumers can call Pass() to -// pass the ownership of ScopedFile. -// -// TODO(kinuko): Probably this can be moved under base or somewhere more -// common place. -class STORAGE_COMMON_EXPORT ScopedFile { - // To support destructive assignment from an l-value assignment. - // This provides Pass() method which creates an r-value for the current - // instance. (See base/move.h for details) - MOVE_ONLY_TYPE_FOR_CPP_03(ScopedFile, RValue) - - public: - typedef base::Callback<void(const base::FilePath&)> ScopeOutCallback; - typedef std::pair<ScopeOutCallback, scoped_refptr<base::TaskRunner> > - ScopeOutCallbackPair; - typedef std::vector<ScopeOutCallbackPair> ScopeOutCallbackList; - - enum ScopeOutPolicy { - DELETE_ON_SCOPE_OUT, - DONT_DELETE_ON_SCOPE_OUT, - }; - - ScopedFile(); - - // |file_task_runner| is used to schedule a file deletion if |policy| - // is DELETE_ON_SCOPE_OUT. - ScopedFile(const base::FilePath& path, - ScopeOutPolicy policy, - const scoped_refptr<base::TaskRunner>& file_task_runner); - - // Move constructor and operator. The data of r-value will be transfered - // in a destructive way. (See base/move.h) - ScopedFile(RValue other); - ScopedFile& operator=(RValue rhs) { - MoveFrom(*rhs.object); - return *this; - } - - ~ScopedFile(); - - // The |callback| is fired on |callback_runner| when the final reference - // of this instance is released. - // If release policy is DELETE_ON_SCOPE_OUT the - // callback task(s) is/are posted before the deletion is scheduled. - void AddScopeOutCallback(const ScopeOutCallback& callback, - base::TaskRunner* callback_runner); - - // The full file path. - const base::FilePath& path() const { return path_; } - - // Releases the file. After calling this, this instance will hold - // an empty file path and scoping out won't make any file deletion - // or callback dispatch. (If an owned pointer is attached to any of - // callbacks the pointer will be deleted.) - base::FilePath Release(); - - void Reset(); - - private: - // Performs destructive move from |other| to this. - void MoveFrom(ScopedFile& other); - - base::FilePath path_; - ScopeOutPolicy scope_out_policy_; - scoped_refptr<base::TaskRunner> file_task_runner_; - ScopeOutCallbackList scope_out_callbacks_; -}; - -} // namespace storage - -#endif // WEBKIT_COMMON_BLOB_SCOPED_FILE_H_ +#include "storage/common/blob/scoped_file.h" |
