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, |