syncable_service.h revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
1// Copyright 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.
4
5#ifndef SYNC_API_SYNCABLE_SERVICE_H_
6#define SYNC_API_SYNCABLE_SERVICE_H_
7
8#include <vector>
9
10#include "base/callback.h"
11#include "base/compiler_specific.h"
12#include "base/memory/scoped_ptr.h"
13#include "base/memory/weak_ptr.h"
14#include "sync/api/sync_change_processor.h"
15#include "sync/api/sync_data.h"
16#include "sync/api/sync_error.h"
17#include "sync/api/sync_merge_result.h"
18#include "sync/base/sync_export.h"
19#include "sync/internal_api/public/base/model_type.h"
20
21namespace syncer {
22
23class SyncErrorFactory;
24
25// TODO(zea): remove SupportsWeakPtr in favor of having all SyncableService
26// implementers provide a way of getting a weak pointer to themselves.
27// See crbug.com/100114.
28class SYNC_EXPORT SyncableService
29    : public SyncChangeProcessor,
30      public base::SupportsWeakPtr<SyncableService> {
31 public:
32  // A StartSyncFlare is useful when your SyncableService has a need for sync
33  // to start ASAP, typically because a local change event has occurred but
34  // MergeDataAndStartSyncing hasn't been called yet, meaning you don't have a
35  // SyncChangeProcessor. The sync subsystem will respond soon after invoking
36  // Run() on your flare by calling MergeDataAndStartSyncing. The ModelType
37  // parameter is included so that the recieving end can track usage and timing
38  // statistics, make optimizations or tradeoffs by type, etc.
39  typedef base::Callback<void(ModelType)> StartSyncFlare;
40
41  // Informs the service to begin syncing the specified synced datatype |type|.
42  // The service should then merge |initial_sync_data| into it's local data,
43  // calling |sync_processor|'s ProcessSyncChanges as necessary to reconcile the
44  // two. After this, the SyncableService's local data should match the server
45  // data, and the service should be ready to receive and process any further
46  // SyncChange's as they occur.
47  // Returns: a SyncMergeResult whose error field reflects whether an error
48  //          was encountered while merging the two models. The merge result
49  //          may also contain optional merge statistics.
50  virtual SyncMergeResult MergeDataAndStartSyncing(
51      ModelType type,
52      const SyncDataList& initial_sync_data,
53      scoped_ptr<SyncChangeProcessor> sync_processor,
54      scoped_ptr<SyncErrorFactory> error_handler) = 0;
55
56  // Stop syncing the specified type and reset state.
57  virtual void StopSyncing(ModelType type) = 0;
58
59  // Fills a list of SyncData from the local data. This should create an up
60  // to date representation of the SyncableService's view of that datatype, and
61  // should match/be a subset of the server's view of that datatype.
62  virtual SyncDataList GetAllSyncData(ModelType type) const = 0;
63
64  // SyncChangeProcessor interface.
65  // Process a list of new SyncChanges and update the local data as necessary.
66  // Returns: A default SyncError (IsSet() == false) if no errors were
67  //          encountered, and a filled SyncError (IsSet() == true)
68  //          otherwise.
69  virtual SyncError ProcessSyncChanges(
70      const tracked_objects::Location& from_here,
71      const SyncChangeList& change_list) OVERRIDE = 0;
72
73 protected:
74  virtual ~SyncableService();
75};
76
77}  // namespace syncer
78
79#endif  // SYNC_API_SYNCABLE_SERVICE_H_
80