summaryrefslogtreecommitdiffstats
path: root/sync
diff options
context:
space:
mode:
Diffstat (limited to 'sync')
-rw-r--r--sync/api/model_type_service.h15
1 files changed, 13 insertions, 2 deletions
diff --git a/sync/api/model_type_service.h b/sync/api/model_type_service.h
index 950060e..bba4211 100644
--- a/sync/api/model_type_service.h
+++ b/sync/api/model_type_service.h
@@ -38,8 +38,19 @@ class SYNC_EXPORT ModelTypeService {
// model type store.
virtual scoped_ptr<MetadataChangeList> CreateMetadataChangeList() = 0;
- // Perform the initial merge of data from the sync server. Should only need
- // to be called when sync is first turned on, not on every restart.
+ // Perform the initial merge between local and sync data. This should only be
+ // called when a data type is first enabled to start syncing, and there is no
+ // sync metadata. Best effort should be made to match local and sync data. The
+ // keys in the |entity_data_map| will have been created via GetClientTag(...),
+ // and if a local and sync data should match/merge but disagree on tags, the
+ // service should use the sync data's tag. Any local pieces of data that are
+ // not present in sync should immediately be Put(...) to the processor before
+ // returning. The same MetadataChangeList that was passed into this function
+ // can be passed to Put(...) calls. Delete(...) can also be called but should
+ // not be needed for most model types. Durable storage writes, if not able to
+ // combine all change atomically, should save the metadata after the data
+ // changes, so that this merge will be re-driven by sync if is not completely
+ // saved during the current run.
virtual syncer::SyncError MergeSyncData(
scoped_ptr<MetadataChangeList> metadata_change_list,
EntityDataMap entity_data_map) = 0;