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

Side by Side Diff: base/files/file_proxy.cc

Issue 238383003: Revert of Base: Make FileProxy automaticaly close the file on a worker thread. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/files/file_proxy.h ('k') | base/files/file_proxy_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/files/file_proxy.h" 5 #include "base/files/file_proxy.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/files/file.h" 10 #include "base/files/file.h"
11 #include "base/location.h" 11 #include "base/location.h"
12 #include "base/message_loop/message_loop_proxy.h" 12 #include "base/message_loop/message_loop_proxy.h"
13 #include "base/task_runner.h" 13 #include "base/task_runner.h"
14 #include "base/task_runner_util.h" 14 #include "base/task_runner_util.h"
15 15
16 namespace {
17
18 void FileDeleter(base::File file) {
19 }
20
21 } // namespace
22
23 namespace base { 16 namespace base {
24 17
25 class FileHelper { 18 class FileHelper {
26 public: 19 public:
27 FileHelper(FileProxy* proxy, File file) 20 FileHelper(FileProxy* proxy, File file)
28 : file_(file.Pass()), 21 : file_(file.Pass()),
29 error_(File::FILE_ERROR_FAILED), 22 proxy_(AsWeakPtr(proxy)),
30 task_runner_(proxy->task_runner()), 23 error_(File::FILE_ERROR_FAILED) {
31 proxy_(AsWeakPtr(proxy)) {
32 } 24 }
33 25
34 void PassFile() { 26 void PassFile() {
35 if (proxy_) 27 if (proxy_)
36 proxy_->SetFile(file_.Pass()); 28 proxy_->SetFile(file_.Pass());
37 else if (file_.IsValid())
38 task_runner_->PostTask(FROM_HERE, Bind(&FileDeleter, Passed(&file_)));
39 } 29 }
40 30
41 protected: 31 protected:
42 File file_; 32 File file_;
33 WeakPtr<FileProxy> proxy_;
43 File::Error error_; 34 File::Error error_;
44 35
45 private: 36 private:
46 scoped_refptr<TaskRunner> task_runner_;
47 WeakPtr<FileProxy> proxy_;
48 DISALLOW_COPY_AND_ASSIGN(FileHelper); 37 DISALLOW_COPY_AND_ASSIGN(FileHelper);
49 }; 38 };
50 39
51 namespace { 40 namespace {
52 41
53 class GenericFileHelper : public FileHelper { 42 class GenericFileHelper : public FileHelper {
54 public: 43 public:
55 GenericFileHelper(FileProxy* proxy, File file) 44 GenericFileHelper(FileProxy* proxy, File file)
56 : FileHelper(proxy, file.Pass()) { 45 : FileHelper(proxy, file.Pass()) {
57 } 46 }
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 212
224 private: 213 private:
225 scoped_ptr<char[]> buffer_; 214 scoped_ptr<char[]> buffer_;
226 int bytes_to_write_; 215 int bytes_to_write_;
227 int bytes_written_; 216 int bytes_written_;
228 DISALLOW_COPY_AND_ASSIGN(WriteHelper); 217 DISALLOW_COPY_AND_ASSIGN(WriteHelper);
229 }; 218 };
230 219
231 } // namespace 220 } // namespace
232 221
222 FileProxy::FileProxy() : task_runner_(NULL) {
223 }
224
233 FileProxy::FileProxy(TaskRunner* task_runner) : task_runner_(task_runner) { 225 FileProxy::FileProxy(TaskRunner* task_runner) : task_runner_(task_runner) {
234 } 226 }
235 227
236 FileProxy::~FileProxy() { 228 FileProxy::~FileProxy() {
237 if (file_.IsValid())
238 task_runner_->PostTask(FROM_HERE, Bind(&FileDeleter, Passed(&file_)));
239 } 229 }
240 230
241 bool FileProxy::CreateOrOpen(const FilePath& file_path, 231 bool FileProxy::CreateOrOpen(const FilePath& file_path,
242 uint32 file_flags, 232 uint32 file_flags,
243 const StatusCallback& callback) { 233 const StatusCallback& callback) {
244 DCHECK(!file_.IsValid()); 234 DCHECK(!file_.IsValid());
245 CreateOrOpenHelper* helper = new CreateOrOpenHelper(this, File()); 235 CreateOrOpenHelper* helper = new CreateOrOpenHelper(this, File());
246 return task_runner_->PostTaskAndReply( 236 return task_runner_->PostTaskAndReply(
247 FROM_HERE, 237 FROM_HERE,
248 Bind(&CreateOrOpenHelper::RunWork, Unretained(helper), file_path, 238 Bind(&CreateOrOpenHelper::RunWork, Unretained(helper), file_path,
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 Bind(&GenericFileHelper::Flush, Unretained(helper)), 336 Bind(&GenericFileHelper::Flush, Unretained(helper)),
347 Bind(&GenericFileHelper::Reply, Owned(helper), callback)); 337 Bind(&GenericFileHelper::Reply, Owned(helper), callback));
348 } 338 }
349 339
350 void FileProxy::SetFile(File file) { 340 void FileProxy::SetFile(File file) {
351 DCHECK(!file_.IsValid()); 341 DCHECK(!file_.IsValid());
352 file_ = file.Pass(); 342 file_ = file.Pass();
353 } 343 }
354 344
355 } // namespace base 345 } // namespace base
OLDNEW
« no previous file with comments | « base/files/file_proxy.h ('k') | base/files/file_proxy_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698