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

Unified Diff: content/child/fileapi/webfilesystem_impl.cc

Issue 893233002: fileapi: Use standard task-runner to run the fileapi callbacks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 5 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | content/child/fileapi/webfilewriter_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/child/fileapi/webfilesystem_impl.cc
diff --git a/content/child/fileapi/webfilesystem_impl.cc b/content/child/fileapi/webfilesystem_impl.cc
index f41377fb4f0702b832f266c678ea425a814b7aa4..c791e8d01ace8378c2d6b0ee99b8b1a172910fdf 100644
--- a/content/child/fileapi/webfilesystem_impl.cc
+++ b/content/child/fileapi/webfilesystem_impl.cc
@@ -10,12 +10,12 @@
#include "base/message_loop/message_loop_proxy.h"
#include "base/strings/utf_string_conversions.h"
#include "base/synchronization/waitable_event.h"
+#include "base/thread_task_runner_handle.h"
#include "base/threading/thread_local.h"
#include "content/child/child_thread_impl.h"
#include "content/child/file_info_util.h"
#include "content/child/fileapi/file_system_dispatcher.h"
#include "content/child/fileapi/webfilewriter_impl.h"
-#include "content/child/worker_task_runner.h"
#include "content/common/fileapi/file_system_messages.h"
#include "storage/common/fileapi/directory_entry.h"
#include "storage/common/fileapi/file_system_util.h"
@@ -91,10 +91,6 @@ void DidReceiveSnapshotFile(int request_id) {
new FileSystemHostMsg_DidReceiveSnapshotFile(request_id));
}
-int CurrentWorkerId() {
- return WorkerTaskRunner::Instance()->CurrentWorkerId();
-}
-
template <typename Method, typename Params>
void CallDispatcherOnMainThread(
const scoped_refptr<base::SingleThreadTaskRunner>& main_thread_task_runner,
@@ -191,35 +187,37 @@ void RunCallbacks(
callback.Run(&callbacks);
}
-void DispatchResultsClosure(int thread_id, int callbacks_id,
- WaitableCallbackResults* waitable_results,
- const base::Closure& results_closure) {
- if (thread_id != CurrentWorkerId()) {
- if (waitable_results) {
- // If someone is waiting, this should result in running the closure.
- waitable_results->AddResultsAndSignal(results_closure);
- // In case no one is waiting, post a task to run the closure.
- WorkerTaskRunner::Instance()->PostTask(
- thread_id,
- base::Bind(&WaitableCallbackResults::Run,
- make_scoped_refptr(waitable_results)));
- return;
- }
- WorkerTaskRunner::Instance()->PostTask(thread_id, results_closure);
+void DispatchResultsClosure(
+ const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
+ int callbacks_id,
+ WaitableCallbackResults* waitable_results,
+ const base::Closure& results_closure) {
+ if (task_runner->BelongsToCurrentThread()) {
+ results_closure.Run();
return;
}
- results_closure.Run();
+
+ if (waitable_results) {
+ // If someone is waiting, this should result in running the closure.
+ waitable_results->AddResultsAndSignal(results_closure);
+ // In case no one is waiting, post a task to run the closure.
+ task_runner->PostTask(FROM_HERE,
+ base::Bind(&WaitableCallbackResults::Run,
+ make_scoped_refptr(waitable_results)));
+ return;
+ }
+ task_runner->PostTask(FROM_HERE, results_closure);
}
void CallbackFileSystemCallbacks(
- int thread_id, int callbacks_id,
+ const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
+ int callbacks_id,
WaitableCallbackResults* waitable_results,
const base::Callback<void(WebFileSystemCallbacks*)>& callback,
CallbacksUnregisterMode callbacksunregister_mode) {
- DispatchResultsClosure(
- thread_id, callbacks_id, waitable_results,
- base::Bind(&RunCallbacks, callbacks_id, callback,
- callbacksunregister_mode));
+ DispatchResultsClosure(task_runner, callbacks_id, waitable_results,
+ base::Bind(&RunCallbacks, callbacks_id, callback,
+ callbacksunregister_mode));
}
//-----------------------------------------------------------------------------
@@ -228,64 +226,67 @@ void CallbackFileSystemCallbacks(
// if necessary.
void OpenFileSystemCallbackAdapter(
- int thread_id, int callbacks_id,
+ const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
+ int callbacks_id,
WaitableCallbackResults* waitable_results,
- const std::string& name, const GURL& root) {
+ const std::string& name,
+ const GURL& root) {
CallbackFileSystemCallbacks(
- thread_id, callbacks_id, waitable_results,
+ task_runner, callbacks_id, waitable_results,
base::Bind(&DidOpenFileSystem, base::UTF8ToUTF16(name), root),
UNREGISTER_CALLBACKS);
}
-void ResolveURLCallbackAdapter(int thread_id,
- int callbacks_id,
- WaitableCallbackResults* waitable_results,
- const storage::FileSystemInfo& info,
- const base::FilePath& file_path,
- bool is_directory) {
+void ResolveURLCallbackAdapter(
+ const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
+ int callbacks_id,
+ WaitableCallbackResults* waitable_results,
+ const storage::FileSystemInfo& info,
+ const base::FilePath& file_path,
+ bool is_directory) {
base::FilePath normalized_path(
storage::VirtualPath::GetNormalizedFilePath(file_path));
CallbackFileSystemCallbacks(
- thread_id, callbacks_id, waitable_results,
+ task_runner, callbacks_id, waitable_results,
base::Bind(&DidResolveURL, base::UTF8ToUTF16(info.name), info.root_url,
- info.mount_type,
- normalized_path.AsUTF16Unsafe(), is_directory),
+ info.mount_type, normalized_path.AsUTF16Unsafe(),
+ is_directory),
UNREGISTER_CALLBACKS);
}
-void StatusCallbackAdapter(int thread_id, int callbacks_id,
- WaitableCallbackResults* waitable_results,
- base::File::Error error) {
+void StatusCallbackAdapter(
+ const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
+ int callbacks_id,
+ WaitableCallbackResults* waitable_results,
+ base::File::Error error) {
if (error == base::File::FILE_OK) {
- CallbackFileSystemCallbacks(
- thread_id, callbacks_id, waitable_results,
- base::Bind(&DidSucceed),
- UNREGISTER_CALLBACKS);
+ CallbackFileSystemCallbacks(task_runner, callbacks_id, waitable_results,
+ base::Bind(&DidSucceed), UNREGISTER_CALLBACKS);
} else {
- CallbackFileSystemCallbacks(
- thread_id, callbacks_id, waitable_results,
- base::Bind(&DidFail, error),
- UNREGISTER_CALLBACKS);
+ CallbackFileSystemCallbacks(task_runner, callbacks_id, waitable_results,
+ base::Bind(&DidFail, error),
+ UNREGISTER_CALLBACKS);
}
}
-void ReadMetadataCallbackAdapter(int thread_id, int callbacks_id,
- WaitableCallbackResults* waitable_results,
- const base::File::Info& file_info) {
- CallbackFileSystemCallbacks(
- thread_id, callbacks_id, waitable_results,
- base::Bind(&DidReadMetadata, file_info),
- UNREGISTER_CALLBACKS);
+void ReadMetadataCallbackAdapter(
+ const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
+ int callbacks_id,
+ WaitableCallbackResults* waitable_results,
+ const base::File::Info& file_info) {
+ CallbackFileSystemCallbacks(task_runner, callbacks_id, waitable_results,
+ base::Bind(&DidReadMetadata, file_info),
+ UNREGISTER_CALLBACKS);
}
void ReadDirectoryCallbackAdapter(
- int thread_id,
+ const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
int callbacks_id,
WaitableCallbackResults* waitable_results,
const std::vector<storage::DirectoryEntry>& entries,
bool has_more) {
CallbackFileSystemCallbacks(
- thread_id, callbacks_id, waitable_results,
+ task_runner, callbacks_id, waitable_results,
base::Bind(&DidReadDirectory, entries, has_more),
has_more ? DO_NOT_UNREGISTER_CALLBACKS : UNREGISTER_CALLBACKS);
}
@@ -317,14 +318,15 @@ void DidCreateFileWriter(
}
void CreateFileWriterCallbackAdapter(
- int thread_id, int callbacks_id,
+ const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
+ int callbacks_id,
WaitableCallbackResults* waitable_results,
const scoped_refptr<base::SingleThreadTaskRunner>& main_thread_task_runner,
const GURL& path,
blink::WebFileWriterClient* client,
const base::File::Info& file_info) {
DispatchResultsClosure(
- thread_id, callbacks_id, waitable_results,
+ task_runner, callbacks_id, waitable_results,
base::Bind(&DidCreateFileWriter, callbacks_id, path, client,
main_thread_task_runner, file_info));
}
@@ -355,14 +357,15 @@ void DidCreateSnapshotFile(
}
void CreateSnapshotFileCallbackAdapter(
- int thread_id, int callbacks_id,
+ const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
+ int callbacks_id,
WaitableCallbackResults* waitable_results,
const scoped_refptr<base::SingleThreadTaskRunner>& main_thread_task_runner,
const base::File::Info& file_info,
const base::FilePath& platform_path,
int request_id) {
DispatchResultsClosure(
- thread_id, callbacks_id, waitable_results,
+ task_runner, callbacks_id, waitable_results,
base::Bind(&DidCreateSnapshotFile, callbacks_id, main_thread_task_runner,
file_info, platform_path, request_id));
}
@@ -413,17 +416,14 @@ void WebFileSystemImpl::openFileSystem(
scoped_refptr<WaitableCallbackResults> waitable_results =
MaybeCreateWaitableResults(callbacks, callbacks_id);
CallDispatcherOnMainThread(
- main_thread_task_runner_,
- &FileSystemDispatcher::OpenFileSystem,
+ main_thread_task_runner_, &FileSystemDispatcher::OpenFileSystem,
MakeTuple(GURL(storage_partition),
static_cast<storage::FileSystemType>(type),
base::Bind(&OpenFileSystemCallbackAdapter,
- CurrentWorkerId(),
- callbacks_id,
+ base::ThreadTaskRunnerHandle::Get(), callbacks_id,
waitable_results),
base::Bind(&StatusCallbackAdapter,
- CurrentWorkerId(),
- callbacks_id,
+ base::ThreadTaskRunnerHandle::Get(), callbacks_id,
waitable_results)),
waitable_results.get());
}
@@ -435,13 +435,14 @@ void WebFileSystemImpl::resolveURL(
scoped_refptr<WaitableCallbackResults> waitable_results =
MaybeCreateWaitableResults(callbacks, callbacks_id);
CallDispatcherOnMainThread(
- main_thread_task_runner_,
- &FileSystemDispatcher::ResolveURL,
+ main_thread_task_runner_, &FileSystemDispatcher::ResolveURL,
MakeTuple(GURL(filesystem_url),
base::Bind(&ResolveURLCallbackAdapter,
- CurrentWorkerId(), callbacks_id, waitable_results),
+ base::ThreadTaskRunnerHandle::Get(), callbacks_id,
+ waitable_results),
base::Bind(&StatusCallbackAdapter,
- CurrentWorkerId(), callbacks_id, waitable_results)),
+ base::ThreadTaskRunnerHandle::Get(), callbacks_id,
+ waitable_results)),
waitable_results.get());
}
@@ -453,13 +454,11 @@ void WebFileSystemImpl::deleteFileSystem(
scoped_refptr<WaitableCallbackResults> waitable_results =
MaybeCreateWaitableResults(callbacks, callbacks_id);
CallDispatcherOnMainThread(
- main_thread_task_runner_,
- &FileSystemDispatcher::DeleteFileSystem,
+ main_thread_task_runner_, &FileSystemDispatcher::DeleteFileSystem,
MakeTuple(GURL(storage_partition),
static_cast<storage::FileSystemType>(type),
base::Bind(&StatusCallbackAdapter,
- CurrentWorkerId(),
- callbacks_id,
+ base::ThreadTaskRunnerHandle::Get(), callbacks_id,
waitable_results)),
waitable_results.get());
}
@@ -472,11 +471,11 @@ void WebFileSystemImpl::move(
scoped_refptr<WaitableCallbackResults> waitable_results =
MaybeCreateWaitableResults(callbacks, callbacks_id);
CallDispatcherOnMainThread(
- main_thread_task_runner_,
- &FileSystemDispatcher::Move,
+ main_thread_task_runner_, &FileSystemDispatcher::Move,
MakeTuple(GURL(src_path), GURL(dest_path),
base::Bind(&StatusCallbackAdapter,
- CurrentWorkerId(), callbacks_id, waitable_results)),
+ base::ThreadTaskRunnerHandle::Get(), callbacks_id,
+ waitable_results)),
waitable_results.get());
}
@@ -488,11 +487,11 @@ void WebFileSystemImpl::copy(
scoped_refptr<WaitableCallbackResults> waitable_results =
MaybeCreateWaitableResults(callbacks, callbacks_id);
CallDispatcherOnMainThread(
- main_thread_task_runner_,
- &FileSystemDispatcher::Copy,
+ main_thread_task_runner_, &FileSystemDispatcher::Copy,
MakeTuple(GURL(src_path), GURL(dest_path),
base::Bind(&StatusCallbackAdapter,
- CurrentWorkerId(), callbacks_id, waitable_results)),
+ base::ThreadTaskRunnerHandle::Get(), callbacks_id,
+ waitable_results)),
waitable_results.get());
}
@@ -503,11 +502,11 @@ void WebFileSystemImpl::remove(
scoped_refptr<WaitableCallbackResults> waitable_results =
MaybeCreateWaitableResults(callbacks, callbacks_id);
CallDispatcherOnMainThread(
- main_thread_task_runner_,
- &FileSystemDispatcher::Remove,
+ main_thread_task_runner_, &FileSystemDispatcher::Remove,
MakeTuple(GURL(path), false /* recursive */,
base::Bind(&StatusCallbackAdapter,
- CurrentWorkerId(), callbacks_id, waitable_results)),
+ base::ThreadTaskRunnerHandle::Get(), callbacks_id,
+ waitable_results)),
waitable_results.get());
}
@@ -518,11 +517,11 @@ void WebFileSystemImpl::removeRecursively(
scoped_refptr<WaitableCallbackResults> waitable_results =
MaybeCreateWaitableResults(callbacks, callbacks_id);
CallDispatcherOnMainThread(
- main_thread_task_runner_,
- &FileSystemDispatcher::Remove,
+ main_thread_task_runner_, &FileSystemDispatcher::Remove,
MakeTuple(GURL(path), true /* recursive */,
base::Bind(&StatusCallbackAdapter,
- CurrentWorkerId(), callbacks_id, waitable_results)),
+ base::ThreadTaskRunnerHandle::Get(), callbacks_id,
+ waitable_results)),
waitable_results.get());
}
@@ -533,13 +532,13 @@ void WebFileSystemImpl::readMetadata(
scoped_refptr<WaitableCallbackResults> waitable_results =
MaybeCreateWaitableResults(callbacks, callbacks_id);
CallDispatcherOnMainThread(
- main_thread_task_runner_,
- &FileSystemDispatcher::ReadMetadata,
- MakeTuple(GURL(path),
- base::Bind(&ReadMetadataCallbackAdapter,
- CurrentWorkerId(), callbacks_id, waitable_results),
+ main_thread_task_runner_, &FileSystemDispatcher::ReadMetadata,
+ MakeTuple(GURL(path), base::Bind(&ReadMetadataCallbackAdapter,
+ base::ThreadTaskRunnerHandle::Get(),
+ callbacks_id, waitable_results),
base::Bind(&StatusCallbackAdapter,
- CurrentWorkerId(), callbacks_id, waitable_results)),
+ base::ThreadTaskRunnerHandle::Get(), callbacks_id,
+ waitable_results)),
waitable_results.get());
}
@@ -551,11 +550,11 @@ void WebFileSystemImpl::createFile(
scoped_refptr<WaitableCallbackResults> waitable_results =
MaybeCreateWaitableResults(callbacks, callbacks_id);
CallDispatcherOnMainThread(
- main_thread_task_runner_,
- &FileSystemDispatcher::CreateFile,
+ main_thread_task_runner_, &FileSystemDispatcher::CreateFile,
MakeTuple(GURL(path), exclusive,
base::Bind(&StatusCallbackAdapter,
- CurrentWorkerId(), callbacks_id, waitable_results)),
+ base::ThreadTaskRunnerHandle::Get(), callbacks_id,
+ waitable_results)),
waitable_results.get());
}
@@ -567,11 +566,11 @@ void WebFileSystemImpl::createDirectory(
scoped_refptr<WaitableCallbackResults> waitable_results =
MaybeCreateWaitableResults(callbacks, callbacks_id);
CallDispatcherOnMainThread(
- main_thread_task_runner_,
- &FileSystemDispatcher::CreateDirectory,
+ main_thread_task_runner_, &FileSystemDispatcher::CreateDirectory,
MakeTuple(GURL(path), exclusive, false /* recursive */,
base::Bind(&StatusCallbackAdapter,
- CurrentWorkerId(), callbacks_id, waitable_results)),
+ base::ThreadTaskRunnerHandle::Get(), callbacks_id,
+ waitable_results)),
waitable_results.get());
}
@@ -582,11 +581,11 @@ void WebFileSystemImpl::fileExists(
scoped_refptr<WaitableCallbackResults> waitable_results =
MaybeCreateWaitableResults(callbacks, callbacks_id);
CallDispatcherOnMainThread(
- main_thread_task_runner_,
- &FileSystemDispatcher::Exists,
+ main_thread_task_runner_, &FileSystemDispatcher::Exists,
MakeTuple(GURL(path), false /* directory */,
base::Bind(&StatusCallbackAdapter,
- CurrentWorkerId(), callbacks_id, waitable_results)),
+ base::ThreadTaskRunnerHandle::Get(), callbacks_id,
+ waitable_results)),
waitable_results.get());
}
@@ -597,11 +596,11 @@ void WebFileSystemImpl::directoryExists(
scoped_refptr<WaitableCallbackResults> waitable_results =
MaybeCreateWaitableResults(callbacks, callbacks_id);
CallDispatcherOnMainThread(
- main_thread_task_runner_,
- &FileSystemDispatcher::Exists,
+ main_thread_task_runner_, &FileSystemDispatcher::Exists,
MakeTuple(GURL(path), true /* directory */,
base::Bind(&StatusCallbackAdapter,
- CurrentWorkerId(), callbacks_id, waitable_results)),
+ base::ThreadTaskRunnerHandle::Get(), callbacks_id,
+ waitable_results)),
waitable_results.get());
}
@@ -612,13 +611,13 @@ int WebFileSystemImpl::readDirectory(
scoped_refptr<WaitableCallbackResults> waitable_results =
MaybeCreateWaitableResults(callbacks, callbacks_id);
CallDispatcherOnMainThread(
- main_thread_task_runner_,
- &FileSystemDispatcher::ReadDirectory,
- MakeTuple(GURL(path),
- base::Bind(&ReadDirectoryCallbackAdapter,
- CurrentWorkerId(), callbacks_id, waitable_results),
+ main_thread_task_runner_, &FileSystemDispatcher::ReadDirectory,
+ MakeTuple(GURL(path), base::Bind(&ReadDirectoryCallbackAdapter,
+ base::ThreadTaskRunnerHandle::Get(),
+ callbacks_id, waitable_results),
base::Bind(&StatusCallbackAdapter,
- CurrentWorkerId(), callbacks_id, waitable_results)),
+ base::ThreadTaskRunnerHandle::Get(), callbacks_id,
+ waitable_results)),
waitable_results.get());
return callbacks_id;
}
@@ -631,14 +630,15 @@ void WebFileSystemImpl::createFileWriter(
scoped_refptr<WaitableCallbackResults> waitable_results =
MaybeCreateWaitableResults(callbacks, callbacks_id);
CallDispatcherOnMainThread(
- main_thread_task_runner_,
- &FileSystemDispatcher::ReadMetadata,
+ main_thread_task_runner_, &FileSystemDispatcher::ReadMetadata,
MakeTuple(GURL(path),
base::Bind(&CreateFileWriterCallbackAdapter,
- CurrentWorkerId(), callbacks_id, waitable_results,
- main_thread_task_runner_, GURL(path), client),
+ base::ThreadTaskRunnerHandle::Get(), callbacks_id,
+ waitable_results, main_thread_task_runner_,
+ GURL(path), client),
base::Bind(&StatusCallbackAdapter,
- CurrentWorkerId(), callbacks_id, waitable_results)),
+ base::ThreadTaskRunnerHandle::Get(), callbacks_id,
+ waitable_results)),
waitable_results.get());
}
@@ -649,14 +649,14 @@ void WebFileSystemImpl::createSnapshotFileAndReadMetadata(
scoped_refptr<WaitableCallbackResults> waitable_results =
MaybeCreateWaitableResults(callbacks, callbacks_id);
CallDispatcherOnMainThread(
- main_thread_task_runner_,
- &FileSystemDispatcher::CreateSnapshotFile,
+ main_thread_task_runner_, &FileSystemDispatcher::CreateSnapshotFile,
MakeTuple(GURL(path),
base::Bind(&CreateSnapshotFileCallbackAdapter,
- CurrentWorkerId(), callbacks_id, waitable_results,
- main_thread_task_runner_),
+ base::ThreadTaskRunnerHandle::Get(), callbacks_id,
+ waitable_results, main_thread_task_runner_),
base::Bind(&StatusCallbackAdapter,
- CurrentWorkerId(), callbacks_id, waitable_results)),
+ base::ThreadTaskRunnerHandle::Get(), callbacks_id,
+ waitable_results)),
waitable_results.get());
}
« no previous file with comments | « no previous file | content/child/fileapi/webfilewriter_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698