Chromium Code Reviews| Index: content/child/fileapi/webfilesystem_impl.cc |
| diff --git a/content/child/fileapi/webfilesystem_impl.cc b/content/child/fileapi/webfilesystem_impl.cc |
| index e253a17ccb9a85bebf9f0bb2f1b20499df823087..cd573f6bab1f7b18b9f04bf7bd6f7c1c5d46dfa9 100644 |
| --- a/content/child/fileapi/webfilesystem_impl.cc |
| +++ b/content/child/fileapi/webfilesystem_impl.cc |
| @@ -94,19 +94,6 @@ class CallbacksMap : public WorkerTaskRunner::Observer { |
| DISALLOW_COPY_AND_ASSIGN(CallbacksMap); |
| }; |
| -void DidReadMetadataForCreateFileWriter( |
| - const GURL& path, |
| - WebKit::WebFileWriterClient* client, |
| - WebKit::WebFileSystemCallbacks* callbacks, |
| - const base::PlatformFileInfo& file_info) { |
| - if (file_info.is_directory || file_info.size < 0) { |
| - callbacks->didFail(WebKit::WebFileErrorInvalidState); |
| - return; |
| - } |
| - callbacks->didCreateFileWriter(new WebFileWriterImpl(path, client), |
| - file_info.size); |
| -} |
| - |
| void DidReceiveSnapshotFile(int request_id) { |
| if (ChildThread::current()) |
| ChildThread::current()->Send( |
| @@ -195,6 +182,37 @@ void ReadDirectoryCallbackAdapater( |
| MakeTuple(file_system_entries, has_more)); |
| } |
| +void CreateFileWriterCallbackAdapter( |
| + int thread_id, int callbacks_id, |
| + base::MessageLoopProxy* main_thread_loop, |
| + const GURL& path, |
| + WebKit::WebFileWriterClient* client, |
| + const base::PlatformFileInfo& file_info) { |
| + if (thread_id != CurrentWorkerId()) { |
| + WorkerTaskRunner::Instance()->PostTask( |
| + thread_id, |
| + base::Bind(&CreateFileWriterCallbackAdapter, |
| + thread_id, callbacks_id, |
| + make_scoped_refptr(main_thread_loop), |
| + path, client, file_info)); |
| + return; |
| + } |
| + |
| + if (!CallbacksMap::Get()) |
| + return; |
| + |
| + WebFileSystemCallbacks* callbacks = |
| + CallbacksMap::Get()->GetAndUnregisterCallbacks(callbacks_id); |
| + DCHECK(callbacks); |
| + |
| + if (file_info.is_directory || file_info.size < 0) { |
| + callbacks->didFail(WebKit::WebFileErrorInvalidState); |
| + } else { |
| + callbacks->didCreateFileWriter( |
| + new WebFileWriterImpl(path, client, main_thread_loop), file_info.size); |
| + } |
|
michaeln
2013/07/29 21:29:18
nit: the original conditional blocks were slightly
kinuko
2013/07/30 08:31:58
Done.
|
| +} |
| + |
| void CreateSnapshotFileCallbackAdapter( |
| int thread_id, int callbacks_id, |
| base::MessageLoopProxy* main_thread_loop, |
| @@ -368,22 +386,23 @@ void WebFileSystemImpl::readDirectory( |
| WebKit::WebFileWriter* WebFileSystemImpl::createFileWriter( |
| const WebURL& path, WebKit::WebFileWriterClient* client) { |
| - return new WebFileWriterImpl(GURL(path), client); |
| + return new WebFileWriterImpl(GURL(path), client, main_thread_loop_.get()); |
| } |
| void WebFileSystemImpl::createFileWriter( |
| const WebURL& path, |
| WebKit::WebFileWriterClient* client, |
| WebKit::WebFileSystemCallbacks* callbacks) { |
| - // TODO(kinuko): Convert this method to use bridge model. (crbug.com/257349) |
| - DCHECK(main_thread_loop_->RunsTasksOnCurrentThread()); |
| - FileSystemDispatcher* dispatcher = |
| - ChildThread::current()->file_system_dispatcher(); |
| - dispatcher->ReadMetadata( |
| - GURL(path), |
| - base::Bind(&DidReadMetadataForCreateFileWriter, |
| - GURL(path), client, callbacks), |
| - base::Bind(&FileStatusCallbackAdapter, callbacks)); |
| + int callbacks_id = CallbacksMap::GetOrCreate()->RegisterCallbacks(callbacks); |
| + CallDispatcherOnMainThread( |
| + main_thread_loop_.get(), |
| + &FileSystemDispatcher::ReadMetadata, |
| + MakeTuple(GURL(path), |
| + base::Bind(&CreateFileWriterCallbackAdapter, |
| + CurrentWorkerId(), callbacks_id, main_thread_loop_, |
| + GURL(path), client), |
| + base::Bind(&StatusCallbackAdapter, |
| + CurrentWorkerId(), callbacks_id))); |
| } |
| void WebFileSystemImpl::createSnapshotFileAndReadMetadata( |