Home | History | Annotate | Download | only in engine
      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 
     45   int updates_applied() {
     46     return updates_applied_;
     47   }
     48 
     49   int encryption_conflicts() {
     50     return encryption_conflicts_;
     51   }
     52 
     53   int hierarchy_conflicts() {
     54     return hierarchy_conflicts_;
     55   }
     56 
     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