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 // An UpdateApplicator is used to iterate over a number of unapplied updates,
6 // applying them to the client using the given syncer session.
8 // UpdateApplicator might resemble an iterator, but it actually keeps retrying
9 // failed updates until no remaining updates can be successfully applied.
11 #ifndef SYNC_ENGINE_UPDATE_APPLICATOR_H_
12 #define SYNC_ENGINE_UPDATE_APPLICATOR_H_
16 #include "base/basictypes.h"
17 #include "sync/internal_api/public/engine/model_safe_worker.h"
18 #include "sync/syncable/syncable_id.h"
19 #include "sync/sessions/status_controller.h"
24 class StatusController
;
28 class WriteTransaction
;
32 class ConflictResolver
;
35 class UpdateApplicator
{
37 UpdateApplicator(Cryptographer
* cryptographer
);
40 // Attempt to apply the specified updates.
41 void AttemptApplications(syncable::WriteTransaction
* trans
,
42 const std::vector
<int64
>& handles
);
44 int updates_applied() {
45 return updates_applied_
;
48 int encryption_conflicts() {
49 return encryption_conflicts_
;
52 int hierarchy_conflicts() {
53 return hierarchy_conflicts_
;
56 const std::set
<syncable::Id
>& simple_conflict_ids() {
57 return simple_conflict_ids_
;
61 // If true, AttemptOneApplication will skip over |entry| and return true.
62 bool SkipUpdate(const syncable::Entry
& entry
);
64 // Used to decrypt sensitive sync nodes.
65 Cryptographer
* cryptographer_
;
67 DISALLOW_COPY_AND_ASSIGN(UpdateApplicator
);
70 int encryption_conflicts_
;
71 int hierarchy_conflicts_
;
72 std::set
<syncable::Id
> simple_conflict_ids_
;
77 #endif // SYNC_ENGINE_UPDATE_APPLICATOR_H_