Chromium Code Reviews| Index: content/browser/renderer_host/pepper/pepper_file_io_host.cc |
| diff --git a/content/browser/renderer_host/pepper/pepper_file_io_host.cc b/content/browser/renderer_host/pepper/pepper_file_io_host.cc |
| index d9a11b7cc440a3eb2dc011f595e70b53de988957..3b4f864e324e0f9c9404de19e0019236d9512091 100644 |
| --- a/content/browser/renderer_host/pepper/pepper_file_io_host.cc |
| +++ b/content/browser/renderer_host/pepper/pepper_file_io_host.cc |
| @@ -78,6 +78,39 @@ bool FileOpenForWrite(int32_t open_flags) { |
| return (open_flags & (PP_FILEOPENFLAG_WRITE | PP_FILEOPENFLAG_APPEND)) != 0; |
| } |
| +void FileCloser(base::File auto_close) { |
| +} |
| + |
| +class OpenFileAdapter { |
| + public: |
| + OpenFileAdapter(PepperFileIOHost* file_host, |
| + fileapi::FileSystemOperation::OpenFileCallback callback); |
| + |
| + void DidOpenFile(base::File file, |
| + const base::Closure& on_close_callback); |
| + private: |
| + base::WeakPtr<PepperFileIOHost> file_host_; |
| + fileapi::FileSystemOperation::OpenFileCallback callback_; |
| + DISALLOW_COPY_AND_ASSIGN(OpenFileAdapter); |
| +}; |
| + |
| +OpenFileAdapter::OpenFileAdapter( |
| + PepperFileIOHost* file_host, |
| + fileapi::FileSystemOperation::OpenFileCallback callback) |
| + : file_host_(AsWeakPtr(file_host)), |
| + callback_(callback) { |
| +} |
| + |
| +void OpenFileAdapter::DidOpenFile(base::File file, |
| + const base::Closure& on_close_callback) { |
| + if (file_host_) { |
| + callback_.Run(file.Pass(), on_close_callback); |
| + } else { |
| + BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE, |
| + base::Bind(&FileCloser, Passed(&file))); |
|
bbudge
2014/06/03 18:21:53
Shouldn't we call 'on_close_callback' on this path
rvargas (doing something else)
2014/06/03 23:04:54
That is an interesting question.
FileSystemOperat
rvargas (doing something else)
2014/06/03 23:19:58
On second thought, now there is code to invoke the
|
| + } |
| +} |
| + |
| } // namespace |
| PepperFileIOHost::PepperFileIOHost(BrowserPpapiHostImpl* host, |
| @@ -227,12 +260,17 @@ void PepperFileIOHost::GotUIThreadStuffForInternalFileSystems( |
| DCHECK(file_system_host_.get()); |
| DCHECK(file_system_host_->GetFileSystemOperationRunner()); |
| + |
| + OpenFileAdapter* open_adapter(new OpenFileAdapter( |
| + this, |
| + base::Bind(&PepperFileIOHost::DidOpenInternalFile, |
| + weak_factory_.GetWeakPtr(), |
| + reply_context))); |
| + |
| file_system_host_->GetFileSystemOperationRunner()->OpenFile( |
| file_system_url_, |
| platform_file_flags, |
| - base::Bind(&PepperFileIOHost::DidOpenInternalFile, |
| - weak_factory_.GetWeakPtr(), |
| - reply_context)); |
| + base::Bind(&OpenFileAdapter::DidOpenFile, base::Owned(open_adapter))); |
|
bbudge
2014/06/03 18:21:53
Rather than define a new class, could you could de
rvargas (doing something else)
2014/06/03 23:04:54
Done.
|
| } |
| void PepperFileIOHost::DidOpenInternalFile( |