| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| // |
| // An UpdateApplicator is used to iterate over a number of unapplied updates, |
| // applying them to the client using the given syncer session. |
| // |
| // UpdateApplicator might resemble an iterator, but it actually keeps retrying |
| // failed updates until no remaining updates can be successfully applied. |
| |
| #ifndef SYNC_ENGINE_UPDATE_APPLICATOR_H_ |
| #define SYNC_ENGINE_UPDATE_APPLICATOR_H_ |
| |
| #include <stdint.h> |
| |
| #include <set> |
| #include <vector> |
| |
| #include "base/macros.h" |
| #include "sync/internal_api/public/engine/model_safe_worker.h" |
| #include "sync/sessions/status_controller.h" |
| #include "sync/syncable/syncable_id.h" |
| |
| namespace syncer { |
| |
| namespace sessions { |
| class StatusController; |
| } |
| |
| namespace syncable { |
| class WriteTransaction; |
| class Entry; |
| } |
| |
| class ConflictResolver; |
| class Cryptographer; |
| |
| class UpdateApplicator { |
| public: |
| explicit UpdateApplicator(Cryptographer* cryptographer); |
| ~UpdateApplicator(); |
| |
| // Attempt to apply the specified updates. |
| void AttemptApplications(syncable::WriteTransaction* trans, |
| const std::vector<int64_t>& handles); |
| |
| int updates_applied() { |
| return updates_applied_; |
| } |
| |
| int encryption_conflicts() { |
| return encryption_conflicts_; |
| } |
| |
| int hierarchy_conflicts() { |
| return hierarchy_conflicts_; |
| } |
| |
| const std::set<syncable::Id>& simple_conflict_ids() { |
| return simple_conflict_ids_; |
| } |
| |
| private: |
| // If true, AttemptOneApplication will skip over |entry| and return true. |
| bool SkipUpdate(const syncable::Entry& entry); |
| |
| // Used to decrypt sensitive sync nodes. |
| Cryptographer* cryptographer_; |
| |
| int updates_applied_; |
| int encryption_conflicts_; |
| int hierarchy_conflicts_; |
| std::set<syncable::Id> simple_conflict_ids_; |
| |
| DISALLOW_COPY_AND_ASSIGN(UpdateApplicator); |
| }; |
| |
| } // namespace syncer |
| |
| #endif // SYNC_ENGINE_UPDATE_APPLICATOR_H_ |