| 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..090bf7d79740e3aed851a4d40ce564b622b45aea 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);
|
| + return;
|
| + }
|
| + callbacks->didCreateFileWriter(
|
| + new WebFileWriterImpl(path, client, main_thread_loop), file_info.size);
|
| +}
|
| +
|
| 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(
|
|
|