| Index: base/files/file_proxy.cc
|
| diff --git a/base/files/file_proxy.cc b/base/files/file_proxy.cc
|
| index b517761cf0cc4c0f7baae959e454ae5745f10a4c..fa04d7c44e883aaebf3eef1c068839244aae3d96 100644
|
| --- a/base/files/file_proxy.cc
|
| +++ b/base/files/file_proxy.cc
|
| @@ -13,27 +13,38 @@
|
| #include "base/task_runner.h"
|
| #include "base/task_runner_util.h"
|
|
|
| +namespace {
|
| +
|
| +void FileDeleter(base::File file) {
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| namespace base {
|
|
|
| class FileHelper {
|
| public:
|
| FileHelper(FileProxy* proxy, File file)
|
| : file_(file.Pass()),
|
| - proxy_(AsWeakPtr(proxy)),
|
| - error_(File::FILE_ERROR_FAILED) {
|
| + error_(File::FILE_ERROR_FAILED),
|
| + task_runner_(proxy->task_runner()),
|
| + proxy_(AsWeakPtr(proxy)) {
|
| }
|
|
|
| void PassFile() {
|
| if (proxy_)
|
| proxy_->SetFile(file_.Pass());
|
| + else if (file_.IsValid())
|
| + task_runner_->PostTask(FROM_HERE, Bind(&FileDeleter, Passed(&file_)));
|
| }
|
|
|
| protected:
|
| File file_;
|
| - WeakPtr<FileProxy> proxy_;
|
| File::Error error_;
|
|
|
| private:
|
| + scoped_refptr<TaskRunner> task_runner_;
|
| + WeakPtr<FileProxy> proxy_;
|
| DISALLOW_COPY_AND_ASSIGN(FileHelper);
|
| };
|
|
|
| @@ -219,13 +230,12 @@ class WriteHelper : public FileHelper {
|
|
|
| } // namespace
|
|
|
| -FileProxy::FileProxy() : task_runner_(NULL) {
|
| -}
|
| -
|
| FileProxy::FileProxy(TaskRunner* task_runner) : task_runner_(task_runner) {
|
| }
|
|
|
| FileProxy::~FileProxy() {
|
| + if (file_.IsValid())
|
| + task_runner_->PostTask(FROM_HERE, Bind(&FileDeleter, Passed(&file_)));
|
| }
|
|
|
| bool FileProxy::CreateOrOpen(const FilePath& file_path,
|
|
|