// 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_SYNC_ENGINE_EVENT_LISTENER_H_
#define SYNC_ENGINE_SYNC_ENGINE_EVENT_LISTENER_H_

#include "base/time/time.h"
#include "sync/base/sync_export.h"
#include "sync/internal_api/public/base/model_type.h"

namespace syncer {

struct SyncProtocolError;
struct SyncCycleEvent;
class ProtocolEvent;

class SYNC_EXPORT SyncEngineEventListener {
 public:
  SyncEngineEventListener();

  // Generated at various points during the sync cycle.
  virtual void OnSyncCycleEvent(const SyncCycleEvent& event) = 0;

  // This event is sent when we receive an actionable error. It is up to
  // the listeners to figure out the action to take using the error sent.
  virtual void OnActionableError(const SyncProtocolError& error) = 0;

  // This event is sent when scheduler decides to wait before next request
  // either because it gets throttled by server or because it backs off after
  // request failure. Retry time is passed in retry_time field of event.
  virtual void OnRetryTimeChanged(base::Time retry_time) = 0;

  // This event is sent when types are throttled or unthrottled.
  virtual void OnThrottledTypesChanged(ModelTypeSet throttled_types) = 0;

  // This event is sent when the server requests a migration.
  virtual void OnMigrationRequested(ModelTypeSet migration_types) = 0;

  // Emits events when sync communicates with the server.
  virtual void OnProtocolEvent(const ProtocolEvent& event) = 0;

 protected:
  virtual ~SyncEngineEventListener();
};

}  // namespace syncer

#endif  // SYNC_ENGINE_SYNC_ENGINE_EVENT_LISTENER_H_
