// Copyright 2015 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 COMPONENTS_CRYPTAUTH_CRYPTAUTH_GCM_MANAGER_H_
#define COMPONENTS_CRYPTAUTH_CRYPTAUTH_GCM_MANAGER_H_

#include <string>

class PrefRegistrySimple;

namespace cryptauth {

// Interface for the manager controlling GCM registrations and handling GCM push
// messages for CryptAuth. CryptAuth sends GCM messages to request the local
// device to re-enroll to get the freshest device state, and to notify the
// local device to resync the remote device list when this list changes.
class CryptAuthGCMManager {
 public:
  class Observer {
   public:
    virtual ~Observer();

    // Called when a gcm registration attempt finishes with the |success| of the
    // attempt.
    virtual void OnGCMRegistrationResult(bool success);

    // Called when a GCM message is received to re-enroll the device with
    // CryptAuth.
    virtual void OnReenrollMessage();

    // Called when a GCM message is received to sync down new devices from
    // CryptAuth.
    virtual void OnResyncMessage();
  };

  virtual ~CryptAuthGCMManager() {}

  // Registers the prefs used by the manager to the given |pref_service|.
  static void RegisterPrefs(PrefRegistrySimple* registry);

  // Starts listening to incoming GCM messages. If GCM registration is completed
  // after this function is called, then messages will also be handled properly.
  virtual void StartListening() = 0;

  // Begins registration with GCM. The Observer::OnGCMRegistrationResult()
  // observer function will be called when registration completes.
  virtual void RegisterWithGCM() = 0;

  // Returns the GCM registration id received from the last successful
  // registration. If registration has not been performed, then an empty string
  // will be returned.
  virtual std::string GetRegistrationId() = 0;

  // Adds an observer.
  virtual void AddObserver(Observer* observer) = 0;

  // Removes an observer.
  virtual void RemoveObserver(Observer* observer) = 0;
};

}  // namespace cryptauth

#endif  // COMPONENTS_CRYPTAUTH_CRYPTAUTH_GCM_MANAGER_H_
