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 // A class that watches the syncer and attempts to resolve any conflicts that
8 #ifndef SYNC_ENGINE_CONFLICT_RESOLVER_H_
9 #define SYNC_ENGINE_CONFLICT_RESOLVER_H_
13 #include "base/basictypes.h"
14 #include "base/gtest_prod_util.h"
15 #include "sync/engine/syncer_types.h"
21 class WriteTransaction
;
22 } // namespace syncable
27 class StatusController
;
28 } // namespace sessions
30 class ConflictResolver
{
31 friend class SyncerTest
;
32 FRIEND_TEST_ALL_PREFIXES(SyncerTest
,
33 ConflictResolverMergeOverwritesLocalEntry
);
35 // Enumeration of different conflict resolutions. Used for histogramming.
36 enum SimpleConflictResolutions
{
37 OVERWRITE_LOCAL
, // Resolved by overwriting local changes.
38 OVERWRITE_SERVER
, // Resolved by overwriting server changes.
39 UNDELETE
, // Resolved by undeleting local item.
40 IGNORE_ENCRYPTION
, // Resolved by ignoring an encryption-only server
42 NIGORI_MERGE
, // Resolved by merging nigori nodes.
43 CHANGES_MATCH
, // Resolved by ignoring both local and server
44 // changes because they matched.
45 CONFLICT_RESOLUTION_SIZE
,
50 // Called by the syncer at the end of a update/commit cycle.
51 // Returns true if the syncer should try to apply its updates again.
52 void ResolveConflicts(syncable::WriteTransaction
* trans
,
53 const Cryptographer
* cryptographer
,
54 const std::set
<syncable::Id
>& simple_conflict_ids
,
55 sessions::StatusController
* status
);
58 void ProcessSimpleConflict(
59 syncable::WriteTransaction
* trans
,
60 const syncable::Id
& id
,
61 const Cryptographer
* cryptographer
,
62 sessions::StatusController
* status
);
64 DISALLOW_COPY_AND_ASSIGN(ConflictResolver
);
69 #endif // SYNC_ENGINE_CONFLICT_RESOLVER_H_