1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_SYNC_GLUE_BACKEND_DATA_TYPE_CONFIGURER_H_
6 #define CHROME_BROWSER_SYNC_GLUE_BACKEND_DATA_TYPE_CONFIGURER_H_
10 #include "base/callback.h"
11 #include "sync/internal_api/public/base/model_type.h"
12 #include "sync/internal_api/public/configure_reason.h"
14 namespace browser_sync {
16 // The DataTypeConfigurer interface abstracts out the action of
17 // configuring a set of new data types and cleaning up after a set of
18 // removed data types.
19 class BackendDataTypeConfigurer {
21 enum DataTypeConfigState {
22 CONFIGURE_ACTIVE, // Actively being configured. Data of such types
23 // will be downloaded if not present locally.
24 CONFIGURE_INACTIVE, // Already configured or to be configured in future.
25 // Data of such types is left as it is, no
26 // downloading or purging.
27 CONFIGURE_CLEAN, // Actively being configured but requiring unapply
28 // and GetUpdates first (e.g. for persistence errors).
29 DISABLED, // Not syncing. Disabled by user.
30 FATAL, // Not syncing due to unrecoverable error.
31 CRYPTO, // Not syncing due to a cryptographer error.
33 typedef std::map<syncer::ModelType, DataTypeConfigState>
34 DataTypeConfigStateMap;
36 // Configures sync for data types in config_state_map according to the states.
37 // |ready_task| is called on the same thread as ConfigureDataTypes
38 // is called when configuration is done with the set of data types
39 // that succeeded/failed configuration (i.e., configuration succeeded iff
40 // the failed set is empty).
42 // TODO(akalin): Use a Delegate class with
43 // OnConfigureSuccess/OnConfigureFailure/OnConfigureRetry instead of
44 // a pair of callbacks. The awkward part is handling when
45 // SyncBackendHost calls ConfigureDataTypes on itself to configure
47 virtual void ConfigureDataTypes(
48 syncer::ConfigureReason reason,
49 const DataTypeConfigStateMap& config_state_map,
50 const base::Callback<void(syncer::ModelTypeSet,
51 syncer::ModelTypeSet)>& ready_task,
52 const base::Callback<void()>& retry_callback) = 0;
54 // Return model types in |state_map| that match |state|.
55 static syncer::ModelTypeSet GetDataTypesInState(
56 DataTypeConfigState state, const DataTypeConfigStateMap& state_map);
58 // Set state of |types| in |state_map| to |state|.
59 static void SetDataTypesState(DataTypeConfigState state,
60 syncer::ModelTypeSet types,
61 DataTypeConfigStateMap* state_map);
64 virtual ~BackendDataTypeConfigurer() {}
67 } // namespace browser_sync
69 #endif // CHROME_BROWSER_SYNC_GLUE_BACKEND_DATA_TYPE_CONFIGURER_H_