Index: webkit/fileapi/file_system_dir_url_request_job.cc |
diff --git a/webkit/fileapi/file_system_dir_url_request_job.cc b/webkit/fileapi/file_system_dir_url_request_job.cc |
index 9fbe27a41573ea99070c3f2e4423c1bf61a57da9..62a13e567fdb71c476ceb5a68fa289675e01d0b7 100644 |
--- a/webkit/fileapi/file_system_dir_url_request_job.cc |
+++ b/webkit/fileapi/file_system_dir_url_request_job.cc |
@@ -41,9 +41,12 @@ static FilePath GetRelativePath(const GURL& url) { |
class FileSystemDirURLRequestJob::CallbackDispatcher |
: public FileSystemCallbackDispatcher { |
public: |
- explicit CallbackDispatcher(FileSystemDirURLRequestJob* job) |
- : job_(job) { |
- DCHECK(job_); |
+ // An instance of this class must be created by Create() |
+ // (so that we do not leak ownerships). |
ericu
2012/01/09 18:44:44
s/ownerships/ownership/ here and elsewhere.
kinuko
2012/01/10 09:48:53
Done.
|
+ static scoped_ptr<FileSystemCallbackDispatcher> Create( |
+ FileSystemDirURLRequestJob* job) { |
+ return scoped_ptr<FileSystemCallbackDispatcher>( |
+ new CallbackDispatcher(job)); |
} |
// fileapi::FileSystemCallbackDispatcher overrides. |
@@ -79,6 +82,10 @@ class FileSystemDirURLRequestJob::CallbackDispatcher |
} |
private: |
+ explicit CallbackDispatcher(FileSystemDirURLRequestJob* job) : job_(job) { |
+ DCHECK(job_); |
+ } |
+ |
// TODO(adamk): Get rid of the need for refcounting here by |
// allowing FileSystemOperations to be cancelled. |
scoped_refptr<FileSystemDirURLRequestJob> job_; |
@@ -175,7 +182,7 @@ void FileSystemDirURLRequestJob::DidReadDirectory( |
} |
FileSystemOperation* FileSystemDirURLRequestJob::GetNewOperation() { |
- return new FileSystemOperation(new CallbackDispatcher(this), |
+ return new FileSystemOperation(CallbackDispatcher::Create(this), |
file_thread_proxy_, |
file_system_context_); |
} |