Index: chrome/browser/sync_file_system/sync_file_system_service.cc |
diff --git a/chrome/browser/sync_file_system/sync_file_system_service.cc b/chrome/browser/sync_file_system/sync_file_system_service.cc |
index 9f19c7e7a415bf882bbf793ae13024a68d977825..2811457ce12c546e76d2183e12f8efc0f0f65457 100644 |
--- a/chrome/browser/sync_file_system/sync_file_system_service.cc |
+++ b/chrome/browser/sync_file_system/sync_file_system_service.cc |
@@ -132,7 +132,7 @@ void DidGetFileSyncStatusForDump( |
if (++*num_results < files->GetSize()) |
return; |
- callback.Run(files); |
+ callback.Run(*files); |
} |
// We need this indirection because WeakPtr can only be bound to methods |
@@ -508,28 +508,36 @@ void SyncFileSystemService::DidInitializeFileSystemForDump( |
DCHECK(!origin.is_empty()); |
if (status != SYNC_STATUS_OK) { |
- base::ListValue empty_result; |
- callback.Run(&empty_result); |
+ callback.Run(base::ListValue()); |
return; |
} |
- base::ListValue* files = |
- GetRemoteService(origin)->DumpFiles(origin).release(); |
- if (!files) { |
- callback.Run(new base::ListValue); |
- return; |
- } |
+ GetRemoteService(origin)->DumpFiles( |
+ origin, |
+ base::Bind( |
+ &SyncFileSystemService::DidDumpFiles, |
+ AsWeakPtr(), |
+ origin, |
+ callback)); |
+} |
- if (!files->GetSize()) { |
- callback.Run(files); |
+void SyncFileSystemService::DidDumpFiles( |
+ const GURL& origin, |
+ const DumpFilesCallback& callback, |
+ scoped_ptr<base::ListValue> dump_files) { |
+ if (!dump_files || !dump_files->GetSize()) { |
+ callback.Run(base::ListValue()); |
return; |
} |
- base::Callback<void(base::DictionaryValue* file, |
- SyncStatusCode sync_status, |
- SyncFileStatus sync_file_status)> completion_callback = |
- base::Bind(&DidGetFileSyncStatusForDump, base::Owned(files), |
- base::Owned(new size_t(0)), callback); |
+ base::ListValue* files = dump_files.get(); |
+ base::Callback<void(base::DictionaryValue*, |
+ SyncStatusCode, |
+ SyncFileStatus)> completion_callback = |
+ base::Bind(&DidGetFileSyncStatusForDump, |
+ base::Owned(dump_files.release()), |
+ base::Owned(new size_t(0)), |
+ callback); |
// After all metadata loaded, sync status can be added to each entry. |
for (size_t i = 0; i < files->GetSize(); ++i) { |