// Copyright 2014 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.

#ifndef SYNC_ENGINE_UPDATE_HANDLER_H_
#define SYNC_ENGINE_UPDATE_HANDLER_H_

#include <vector>

#include "sync/base/sync_export.h"
#include "sync/internal_api/public/util/syncer_error.h"

namespace sync_pb {
class DataTypeContext;
class DataTypeProgressMarker;
class SyncEntity;
}

typedef std::vector<const sync_pb::SyncEntity*> SyncEntityList;

namespace syncer {

namespace sessions {
class StatusController;
}

class ModelSafeWorker;

// This class represents an entity that can request, receive, and apply updates
// from the sync server.
class SYNC_EXPORT UpdateHandler {
 public:
  UpdateHandler();
  virtual ~UpdateHandler() = 0;

  // Returns true if initial sync was performed for this type.
  virtual bool IsInitialSyncEnded() const = 0;

  // Fills the given parameter with the stored progress marker for this type.
  virtual void GetDownloadProgress(
      sync_pb::DataTypeProgressMarker* progress_marker) const = 0;

  // Fills |context| with the per-client datatype context, if one exists. Clears
  // |context| otherwise.
  virtual void GetDataTypeContext(sync_pb::DataTypeContext* context) const = 0;

  // Processes the contents of a GetUpdates response message.
  //
  // Should be invoked with the progress marker and set of SyncEntities from a
  // single GetUpdates response message.  The progress marker's type must match
  // this update handler's type, and the set of SyncEntities must include all
  // entities of this type found in the response message.
  //
  // In this context, "applicable_updates" means the set of updates belonging to
  // this type.
  //
  // Returns SYNCER_OK if the all data was processed successfully, a syncer
  // error otherwise.
  virtual SyncerError ProcessGetUpdatesResponse(
      const sync_pb::DataTypeProgressMarker& progress_marker,
      const sync_pb::DataTypeContext& mutated_context,
      const SyncEntityList& applicable_updates,
      sessions::StatusController* status) = 0;

  // Called at the end of a non-configure GetUpdates loop to apply any unapplied
  // updates.
  virtual void ApplyUpdates(sessions::StatusController* status) = 0;

  // Called at the end of a configure GetUpdates loop to perform any required
  // post-initial-download update application.
  virtual void PassiveApplyUpdates(sessions::StatusController* status) = 0;
};

}  // namespace syncer

#endif  // SYNC_ENGINE_UPDATE_HANDLER_H_
