// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_SYNC_DRIVER_DATA_TYPE_MANAGER_H__ #define COMPONENTS_SYNC_DRIVER_DATA_TYPE_MANAGER_H__ #include <list> #include <set> #include <string> #include "components/sync_driver/data_type_controller.h" #include "sync/api/sync_error.h" #include "sync/internal_api/public/base/model_type.h" #include "sync/internal_api/public/configure_reason.h" namespace browser_sync { // This interface is for managing the start up and shut down life cycle // of many different syncable data types. class DataTypeManager { public: enum State { STOPPED, // No data types are currently running. DOWNLOAD_PENDING, // Not implemented yet: Waiting for the syncer to // complete the initial download of new data // types. CONFIGURING, // Data types are being started. RETRYING, // Retrying a pending reconfiguration. CONFIGURED, // All enabled data types are running. STOPPING // Data types are being stopped. }; // Update NotifyDone() in data_type_manager_impl.cc if you update // this. enum ConfigureStatus { UNKNOWN = -1, OK, // Configuration finished without error. PARTIAL_SUCCESS, // Some data types had an error while starting up. ABORTED, // Start was aborted by calling Stop() before // all types were started. UNRECOVERABLE_ERROR // We got an unrecoverable error during startup. }; // Note: |errors| is only filled when status is not OK. struct ConfigureResult { ConfigureResult(); ConfigureResult(ConfigureStatus status, syncer::ModelTypeSet requested_types); ConfigureResult(ConfigureStatus status, syncer::ModelTypeSet requested_types, std::map<syncer::ModelType, syncer::SyncError> failed_data_types, syncer::ModelTypeSet unfinished_data_types, syncer::ModelTypeSet needs_crypto); ~ConfigureResult(); ConfigureStatus status; syncer::ModelTypeSet requested_types; // These types encountered a failure in association. std::map<syncer::ModelType, syncer::SyncError> failed_data_types; // List of types that failed to finish loading/associating within our // alloted time period(see |kAssociationTimeOutInSeconds|). We move // forward here and allow these types to continue to load/associate in // the background. syncer::ModelTypeSet unfinished_data_types; // Those types that are unable to start due to the cryptographer not being // ready. syncer::ModelTypeSet needs_crypto; }; virtual ~DataTypeManager() {} // Convert a ConfigureStatus to string for debug purposes. static std::string ConfigureStatusToString(ConfigureStatus status); // Begins asynchronous configuration of data types. Any currently // running data types that are not in the desired_types set will be // stopped. Any stopped data types that are in the desired_types // set will be started. All other data types are left in their // current state. A SYNC_CONFIGURE_START notification will be sent // to the UI thread when configuration is started and a // SYNC_CONFIGURE_DONE notification will be sent (with a // ConfigureResult detail) when configuration is complete. // // Note that you may call Configure() while configuration is in // progress. Configuration will be complete only when the // desired_types supplied in the last call to Configure is achieved. virtual void Configure(syncer::ModelTypeSet desired_types, syncer::ConfigureReason reason) = 0; virtual void PurgeForMigration(syncer::ModelTypeSet undesired_types, syncer::ConfigureReason reason) = 0; // Synchronously stops all registered data types. If called after // Configure() is called but before it finishes, it will abort the // configure and any data types that have been started will be // stopped. virtual void Stop() = 0; // The current state of the data type manager. virtual State state() const = 0; }; } // namespace browser_sync #endif // COMPONENTS_SYNC_DRIVER_DATA_TYPE_MANAGER_H__