Chromium Code Reviews| Index: components/sync/driver/directory_data_type_controller.cc |
| diff --git a/components/sync/driver/directory_data_type_controller.cc b/components/sync/driver/directory_data_type_controller.cc |
| index 2a4c332c65080980be45b1425dd8f1bdbe41fc7d..a6a98e2d7bc9cb7b9745bcbb135aaa3d2a2a70d1 100644 |
| --- a/components/sync/driver/directory_data_type_controller.cc |
| +++ b/components/sync/driver/directory_data_type_controller.cc |
| @@ -4,14 +4,19 @@ |
| #include "components/sync/driver/directory_data_type_controller.h" |
| +#include "components/sync/core/user_share.h" |
| #include "components/sync/driver/backend_data_type_configurer.h" |
| +#include "components/sync/driver/sync_service.h" |
| +#include "components/sync/syncable/syncable_read_transaction.h" |
| namespace sync_driver { |
| DirectoryDataTypeController::DirectoryDataTypeController( |
| const scoped_refptr<base::SingleThreadTaskRunner>& ui_thread, |
| - const base::Closure& error_callback) |
| - : DataTypeController(ui_thread, error_callback) {} |
| + const base::Closure& error_callback, |
| + SyncClient* sync_client) |
| + : DataTypeController(ui_thread, error_callback), |
| + sync_client_(sync_client) {} |
| DirectoryDataTypeController::~DirectoryDataTypeController() {} |
| @@ -22,6 +27,25 @@ bool DirectoryDataTypeController::ShouldLoadModelBeforeConfigure() const { |
| return false; |
| } |
| +void DirectoryDataTypeController::GetAllNodes( |
| + scoped_refptr<base::SequencedTaskRunner> task_runner, |
| + const AllNodesCallback& callback) { |
| + ScopedVector<base::ListValue> node_lists; |
| + std::vector<syncer::ModelType> types_vector; |
| + types_vector.push_back(type()); |
| + if (state() == DataTypeController::DISABLED) { |
| + node_lists.push_back(new base::ListValue()); |
| + } else { |
| + node_lists.push_back( |
| + GetAllNodesForTypeFromDirectory( |
| + type(), |
| + sync_client_->GetSyncService()->GetUserShare()->directory.get()) |
| + .release()); |
| + } |
| + task_runner->PostTask( |
| + FROM_HERE, base::Bind(callback, types_vector, base::Passed(&node_lists))); |
| +} |
| + |
| void DirectoryDataTypeController::RegisterWithBackend( |
| BackendDataTypeConfigurer* configurer) {} |
| @@ -38,4 +62,16 @@ void DirectoryDataTypeController::DeactivateDataType( |
| configurer->DeactivateDirectoryDataType(type()); |
| } |
| +// static |
| +std::unique_ptr<base::ListValue> |
| +DirectoryDataTypeController::GetAllNodesForTypeFromDirectory( |
| + syncer::ModelType type, |
| + syncer::syncable::Directory* directory) { |
| + DCHECK(!directory); |
| + syncer::syncable::ReadTransaction trans(FROM_HERE, directory); |
| + std::unique_ptr<base::ListValue> nodes( |
| + directory->GetNodeDetailsForType(&trans, type)); |
| + return nodes; |
|
maxbogue
2016/08/25 23:38:59
nit: you could probably just do "return base::Wrap
Gang Wu
2016/08/26 16:48:04
Done.
|
| +} |
| + |
| } // namespace sync_driver |