Commit 106884e8 authored by Thomas Guilbert's avatar Thomas Guilbert Committed by Chromium LUCI CQ

Convert SyncFileSystemService.h to OnceCallback

This CL converts SyncFileSystemService::DumpFilesCallback and
SyncFileSystemService::ExtensionStatusMapCallback to base::OnceCallbacks.

Bug: 1152272
Change-Id: Idf277ff8057df61849f5f4ec701f94b8ed0c8a05
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2607651
Commit-Queue: Thomas Guilbert <tguilbert@chromium.org>
Reviewed-by: default avatarVictor Costan <pwnall@chromium.org>
Cr-Commit-Position: refs/heads/master@{#841216}
parent f58c1e5c
...@@ -114,7 +114,7 @@ std::string SyncFileStatusToString(SyncFileStatus sync_file_status) { ...@@ -114,7 +114,7 @@ std::string SyncFileStatusToString(SyncFileStatus sync_file_status) {
void DidGetFileSyncStatusForDump( void DidGetFileSyncStatusForDump(
base::ListValue* files, base::ListValue* files,
size_t* num_results, size_t* num_results,
const SyncFileSystemService::DumpFilesCallback& callback, base::RepeatingCallback<void(const base::ListValue&)> callback,
base::DictionaryValue* file, base::DictionaryValue* file,
SyncStatusCode sync_status_code, SyncStatusCode sync_status_code,
SyncFileStatus sync_file_status) { SyncFileStatus sync_file_status) {
...@@ -129,7 +129,10 @@ void DidGetFileSyncStatusForDump( ...@@ -129,7 +129,10 @@ void DidGetFileSyncStatusForDump(
if (++*num_results < files->GetSize()) if (++*num_results < files->GetSize())
return; return;
callback.Run(*files); // |callback| is backed by a DumpFilesCallback, which should only be called
// once. Move |callback| here to force repeated calls to crash instead of
// silently failing.
std::move(callback).Run(*files);
} }
// We need this indirection because WeakPtr can only be bound to methods // We need this indirection because WeakPtr can only be bound to methods
...@@ -300,13 +303,13 @@ void SyncFileSystemService::InitializeForApp( ...@@ -300,13 +303,13 @@ void SyncFileSystemService::InitializeForApp(
void SyncFileSystemService::GetExtensionStatusMap( void SyncFileSystemService::GetExtensionStatusMap(
ExtensionStatusMapCallback callback) { ExtensionStatusMapCallback callback) {
remote_service_->GetOriginStatusMap(base::AdaptCallbackForRepeating( remote_service_->GetOriginStatusMap(
base::BindOnce(&SyncFileSystemService::DidGetExtensionStatusMap, base::BindOnce(&SyncFileSystemService::DidGetExtensionStatusMap,
AsWeakPtr(), std::move(callback)))); AsWeakPtr(), std::move(callback)));
} }
void SyncFileSystemService::DumpFiles(const GURL& origin, void SyncFileSystemService::DumpFiles(const GURL& origin,
const DumpFilesCallback& callback) { DumpFilesCallback callback) {
DCHECK(!origin.is_empty()); DCHECK(!origin.is_empty());
content::StoragePartition* storage_partition = content::StoragePartition* storage_partition =
...@@ -315,14 +318,14 @@ void SyncFileSystemService::DumpFiles(const GURL& origin, ...@@ -315,14 +318,14 @@ void SyncFileSystemService::DumpFiles(const GURL& origin,
storage_partition->GetFileSystemContext(); storage_partition->GetFileSystemContext();
local_service_->MaybeInitializeFileSystemContext( local_service_->MaybeInitializeFileSystemContext(
origin, file_system_context, origin, file_system_context,
base::Bind(&SyncFileSystemService::DidInitializeFileSystemForDump, base::BindOnce(&SyncFileSystemService::DidInitializeFileSystemForDump,
AsWeakPtr(), origin, callback)); AsWeakPtr(), origin, std::move(callback)));
} }
void SyncFileSystemService::DumpDatabase(const DumpFilesCallback& callback) { void SyncFileSystemService::DumpDatabase(DumpFilesCallback callback) {
remote_service_->DumpDatabase( remote_service_->DumpDatabase(
base::Bind(&SyncFileSystemService::DidDumpDatabase, base::BindOnce(&SyncFileSystemService::DidDumpDatabase, AsWeakPtr(),
AsWeakPtr(), callback)); std::move(callback)));
} }
void SyncFileSystemService::GetFileSyncStatus(const FileSystemURL& url, void SyncFileSystemService::GetFileSyncStatus(const FileSystemURL& url,
...@@ -538,47 +541,40 @@ void SyncFileSystemService::DidRegisterOrigin(const GURL& app_origin, ...@@ -538,47 +541,40 @@ void SyncFileSystemService::DidRegisterOrigin(const GURL& app_origin,
void SyncFileSystemService::DidInitializeFileSystemForDump( void SyncFileSystemService::DidInitializeFileSystemForDump(
const GURL& origin, const GURL& origin,
const DumpFilesCallback& callback, DumpFilesCallback callback,
SyncStatusCode status) { SyncStatusCode status) {
DCHECK(!origin.is_empty()); DCHECK(!origin.is_empty());
if (status != SYNC_STATUS_OK) { if (status != SYNC_STATUS_OK || !remote_service_) {
callback.Run(base::ListValue()); std::move(callback).Run(base::ListValue());
return;
}
if (!remote_service_) {
callback.Run(base::ListValue());
return; return;
} }
remote_service_->DumpFiles( remote_service_->DumpFiles(
origin, origin, base::BindOnce(&SyncFileSystemService::DidDumpFiles, AsWeakPtr(),
base::Bind( origin, std::move(callback)));
&SyncFileSystemService::DidDumpFiles,
AsWeakPtr(),
origin,
callback));
} }
void SyncFileSystemService::DidDumpFiles( void SyncFileSystemService::DidDumpFiles(
const GURL& origin, const GURL& origin,
const DumpFilesCallback& callback, DumpFilesCallback callback,
std::unique_ptr<base::ListValue> dump_files) { std::unique_ptr<base::ListValue> dump_files) {
if (!dump_files || !dump_files->GetSize() || if (!dump_files || !dump_files->GetSize() ||
!local_service_ || !remote_service_) { !local_service_ || !remote_service_) {
callback.Run(base::ListValue()); std::move(callback).Run(base::ListValue());
return; return;
} }
base::ListValue* files = dump_files.get(); base::ListValue* files = dump_files.get();
base::Callback<void(base::DictionaryValue*,
SyncStatusCode, using AccumulateFileSyncStatusCallback = base::RepeatingCallback<void(
SyncFileStatus)> completion_callback = base::DictionaryValue*, SyncStatusCode, SyncFileStatus)>;
base::Bind(&DidGetFileSyncStatusForDump,
base::Owned(dump_files.release()), // |accumulate_callback| should only call |callback| once.
base::Owned(new size_t(0)), AccumulateFileSyncStatusCallback accumulate_callback = base::BindRepeating(
callback); &DidGetFileSyncStatusForDump, base::Owned(dump_files.release()),
base::Owned(new size_t(0)),
base::AdaptCallbackForRepeating(std::move(callback)));
// After all metadata loaded, sync status can be added to each entry. // After all metadata loaded, sync status can be added to each entry.
for (size_t i = 0; i < files->GetSize(); ++i) { for (size_t i = 0; i < files->GetSize(); ++i) {
...@@ -587,30 +583,30 @@ void SyncFileSystemService::DidDumpFiles( ...@@ -587,30 +583,30 @@ void SyncFileSystemService::DidDumpFiles(
if (!files->GetDictionary(i, &file) || if (!files->GetDictionary(i, &file) ||
!file->GetString("path", &path_string)) { !file->GetString("path", &path_string)) {
NOTREACHED(); NOTREACHED();
completion_callback.Run( accumulate_callback.Run(nullptr, SYNC_FILE_ERROR_FAILED,
nullptr, SYNC_FILE_ERROR_FAILED, SYNC_FILE_STATUS_UNKNOWN); SYNC_FILE_STATUS_UNKNOWN);
continue; continue;
} }
base::FilePath file_path = base::FilePath::FromUTF8Unsafe(path_string); base::FilePath file_path = base::FilePath::FromUTF8Unsafe(path_string);
FileSystemURL url = CreateSyncableFileSystemURL(origin, file_path); FileSystemURL url = CreateSyncableFileSystemURL(origin, file_path);
GetFileSyncStatus(url, base::Bind(completion_callback, file)); GetFileSyncStatus(url, base::BindOnce(accumulate_callback, file));
} }
} }
void SyncFileSystemService::DidDumpDatabase( void SyncFileSystemService::DidDumpDatabase(
const DumpFilesCallback& callback, DumpFilesCallback callback,
std::unique_ptr<base::ListValue> list) { std::unique_ptr<base::ListValue> list) {
if (!list) if (!list)
list = base::WrapUnique(new base::ListValue); list = std::make_unique<base::ListValue>();
callback.Run(*list); std::move(callback).Run(*list);
} }
void SyncFileSystemService::DidGetExtensionStatusMap( void SyncFileSystemService::DidGetExtensionStatusMap(
ExtensionStatusMapCallback callback, ExtensionStatusMapCallback callback,
std::unique_ptr<RemoteFileSyncService::OriginStatusMap> status_map) { std::unique_ptr<RemoteFileSyncService::OriginStatusMap> status_map) {
if (!status_map) if (!status_map)
status_map = base::WrapUnique(new RemoteFileSyncService::OriginStatusMap); status_map = std::make_unique<RemoteFileSyncService::OriginStatusMap>();
std::move(callback).Run(*status_map); std::move(callback).Run(*status_map);
} }
......
...@@ -51,10 +51,9 @@ class SyncFileSystemService ...@@ -51,10 +51,9 @@ class SyncFileSystemService
public extensions::ExtensionRegistryObserver, public extensions::ExtensionRegistryObserver,
public base::SupportsWeakPtr<SyncFileSystemService> { public base::SupportsWeakPtr<SyncFileSystemService> {
public: public:
typedef base::Callback<void(const base::ListValue&)> DumpFilesCallback; using DumpFilesCallback = base::OnceCallback<void(const base::ListValue&)>;
typedef base::OnceCallback<void( using ExtensionStatusMapCallback =
const RemoteFileSyncService::OriginStatusMap&)> base::OnceCallback<void(const RemoteFileSyncService::OriginStatusMap&)>;
ExtensionStatusMapCallback;
// KeyedService implementation. // KeyedService implementation.
void Shutdown() override; void Shutdown() override;
...@@ -64,8 +63,8 @@ class SyncFileSystemService ...@@ -64,8 +63,8 @@ class SyncFileSystemService
SyncStatusCallback callback); SyncStatusCallback callback);
void GetExtensionStatusMap(ExtensionStatusMapCallback callback); void GetExtensionStatusMap(ExtensionStatusMapCallback callback);
void DumpFiles(const GURL& origin, const DumpFilesCallback& callback); void DumpFiles(const GURL& origin, DumpFilesCallback callback);
void DumpDatabase(const DumpFilesCallback& callback); void DumpDatabase(DumpFilesCallback callback);
// Returns the file |url|'s sync status. // Returns the file |url|'s sync status.
void GetFileSyncStatus(const storage::FileSystemURL& url, void GetFileSyncStatus(const storage::FileSystemURL& url,
...@@ -111,13 +110,13 @@ class SyncFileSystemService ...@@ -111,13 +110,13 @@ class SyncFileSystemService
SyncStatusCode status); SyncStatusCode status);
void DidInitializeFileSystemForDump(const GURL& app_origin, void DidInitializeFileSystemForDump(const GURL& app_origin,
const DumpFilesCallback& callback, DumpFilesCallback callback,
SyncStatusCode status); SyncStatusCode status);
void DidDumpFiles(const GURL& app_origin, void DidDumpFiles(const GURL& app_origin,
const DumpFilesCallback& callback, DumpFilesCallback callback,
std::unique_ptr<base::ListValue> files); std::unique_ptr<base::ListValue> files);
void DidDumpDatabase(const DumpFilesCallback& callback, void DidDumpDatabase(DumpFilesCallback callback,
std::unique_ptr<base::ListValue> list); std::unique_ptr<base::ListValue> list);
void DidGetExtensionStatusMap( void DidGetExtensionStatusMap(
......
...@@ -29,9 +29,10 @@ void AssignAndQuit(base::RunLoop* run_loop, R* result_out, R result) { ...@@ -29,9 +29,10 @@ void AssignAndQuit(base::RunLoop* run_loop, R* result_out, R result) {
run_loop->Quit(); run_loop->Quit();
} }
template <typename R> base::Callback<void(R)> template <typename R>
AssignAndQuitCallback(base::RunLoop* run_loop, R* result) { base::OnceCallback<void(R)> AssignAndQuitCallback(base::RunLoop* run_loop,
return base::Bind(&AssignAndQuit<R>, run_loop, base::Unretained(result)); R* result) {
return base::BindOnce(&AssignAndQuit<R>, run_loop, base::Unretained(result));
} }
template <typename Arg, typename Param> template <typename Arg, typename Param>
...@@ -42,19 +43,20 @@ void ReceiveResult1(bool* done, Arg* arg_out, Param arg) { ...@@ -42,19 +43,20 @@ void ReceiveResult1(bool* done, Arg* arg_out, Param arg) {
} }
template <typename Arg> template <typename Arg>
base::Callback<void(typename TypeTraits<Arg>::ParamType)> base::OnceCallback<void(typename TypeTraits<Arg>::ParamType)>
CreateResultReceiver(Arg* arg_out) { CreateResultReceiver(Arg* arg_out) {
typedef typename TypeTraits<Arg>::ParamType Param; using Param = typename TypeTraits<Arg>::ParamType;
return base::Bind(&ReceiveResult1<Arg, Param>, return base::BindOnce(&ReceiveResult1<Arg, Param>,
base::Owned(new bool(false)), arg_out); base::Owned(new bool(false)), arg_out);
} }
// Instantiate versions we know callers will need. // Instantiate versions we know callers will need.
template base::Callback<void(SyncStatusCode)> template base::OnceCallback<void(SyncStatusCode)> AssignAndQuitCallback(
AssignAndQuitCallback(base::RunLoop*, SyncStatusCode*); base::RunLoop*,
SyncStatusCode*);
#define INSTANTIATE_RECEIVER(type) \ #define INSTANTIATE_RECEIVER(type) \
template base::Callback<void(type)> CreateResultReceiver(type*) template base::OnceCallback<void(type)> CreateResultReceiver(type*)
INSTANTIATE_RECEIVER(SyncStatusCode); INSTANTIATE_RECEIVER(SyncStatusCode);
INSTANTIATE_RECEIVER(google_apis::DriveApiErrorCode); INSTANTIATE_RECEIVER(google_apis::DriveApiErrorCode);
INSTANTIATE_RECEIVER(std::unique_ptr<RemoteFileSyncService::OriginStatusMap>); INSTANTIATE_RECEIVER(std::unique_ptr<RemoteFileSyncService::OriginStatusMap>);
......
...@@ -52,23 +52,22 @@ void ReceiveResult2(bool* done, ...@@ -52,23 +52,22 @@ void ReceiveResult2(bool* done,
template <typename R> template <typename R>
void AssignAndQuit(base::RunLoop* run_loop, R* result_out, R result); void AssignAndQuit(base::RunLoop* run_loop, R* result_out, R result);
template <typename R> base::Callback<void(R)> template <typename R>
AssignAndQuitCallback(base::RunLoop* run_loop, R* result); base::OnceCallback<void(R)> AssignAndQuitCallback(base::RunLoop* run_loop,
R* result);
template <typename Arg> template <typename Arg>
base::Callback<void(typename TypeTraits<Arg>::ParamType)> base::OnceCallback<void(typename TypeTraits<Arg>::ParamType)>
CreateResultReceiver(Arg* arg_out); CreateResultReceiver(Arg* arg_out);
template <typename Arg1, typename Arg2> template <typename Arg1, typename Arg2>
base::Callback<void(typename TypeTraits<Arg1>::ParamType, base::OnceCallback<void(typename TypeTraits<Arg1>::ParamType,
typename TypeTraits<Arg2>::ParamType)> typename TypeTraits<Arg2>::ParamType)>
CreateResultReceiver(Arg1* arg1_out, CreateResultReceiver(Arg1* arg1_out, Arg2* arg2_out) {
Arg2* arg2_out) { using Param1 = typename TypeTraits<Arg1>::ParamType;
typedef typename TypeTraits<Arg1>::ParamType Param1; using Param2 = typename TypeTraits<Arg2>::ParamType;
typedef typename TypeTraits<Arg2>::ParamType Param2; return base::BindOnce(&ReceiveResult2<Arg1, Arg2, Param1, Param2>,
return base::Bind(&ReceiveResult2<Arg1, Arg2, Param1, Param2>, base::Owned(new bool(false)), arg1_out, arg2_out);
base::Owned(new bool(false)),
arg1_out, arg2_out);
} }
} // namespace sync_file_system } // namespace sync_file_system
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment