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. 4 // 5 // An UpdateApplicator is used to iterate over a number of unapplied updates, 6 // applying them to the client using the given syncer session. 7 // 8 // UpdateApplicator might resemble an iterator, but it actually keeps retrying 9 // failed updates until no remaining updates can be successfully applied. 10 11 #ifndef SYNC_ENGINE_UPDATE_APPLICATOR_H_ 12 #define SYNC_ENGINE_UPDATE_APPLICATOR_H_ 13 14 #include <vector> 15 16 #include "base/basictypes.h" 17 #include "base/port.h" 18 #include "sync/internal_api/public/engine/model_safe_worker.h" 19 #include "sync/syncable/syncable_id.h" 20 #include "sync/sessions/status_controller.h" 21 22 namespace syncer { 23 24 namespace sessions { 25 class StatusController; 26 } 27 28 namespace syncable { 29 class WriteTransaction; 30 class Entry; 31 } 32 33 class ConflictResolver; 34 class Cryptographer; 35 36 class UpdateApplicator { 37 public: 38 UpdateApplicator(Cryptographer* cryptographer); 39 ~UpdateApplicator(); 40 41 // Attempt to apply the specified updates. 42 void AttemptApplications(syncable::WriteTransaction* trans, 43 const std::vector<int64>& handles); 44 updates_applied()45 int updates_applied() { 46 return updates_applied_; 47 } 48 encryption_conflicts()49 int encryption_conflicts() { 50 return encryption_conflicts_; 51 } 52 hierarchy_conflicts()53 int hierarchy_conflicts() { 54 return hierarchy_conflicts_; 55 } 56 simple_conflict_ids()57 const std::set<syncable::Id>& simple_conflict_ids() { 58 return simple_conflict_ids_; 59 } 60 61 private: 62 // If true, AttemptOneApplication will skip over |entry| and return true. 63 bool SkipUpdate(const syncable::Entry& entry); 64 65 // Used to decrypt sensitive sync nodes. 66 Cryptographer* cryptographer_; 67 68 DISALLOW_COPY_AND_ASSIGN(UpdateApplicator); 69 70 int updates_applied_; 71 int encryption_conflicts_; 72 int hierarchy_conflicts_; 73 std::set<syncable::Id> simple_conflict_ids_; 74 }; 75 76 } // namespace syncer 77 78 #endif // SYNC_ENGINE_UPDATE_APPLICATOR_H_ 79