// 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 COMPONENTS_SYNC_DRIVER_LOCAL_DEVICE_INFO_PROVIDER_H_
#define COMPONENTS_SYNC_DRIVER_LOCAL_DEVICE_INFO_PROVIDER_H_

#include <string>
#include "base/callback_list.h"

namespace sync_driver {

class DeviceInfo;

// Interface for providing sync specific informaiton about the
// local device.
class LocalDeviceInfoProvider {
 public:
  typedef base::CallbackList<void(void)>::Subscription Subscription;

  virtual ~LocalDeviceInfoProvider() {}

  // Returns sync's representation of the local device info;
  // NULL if the device info is unavailable.
  // The returned object is fully owned by LocalDeviceInfoProvider (must not
  // be freed by the caller). It remains valid until LocalDeviceInfoProvider
  // is destroyed.
  virtual const DeviceInfo* GetLocalDeviceInfo() const = 0;

  // Returns a GUID string used for creation of the machine tag for
  // this local session; an empty sting if LocalDeviceInfoProvider hasn't been
  // initialized yet.
  virtual std::string GetLocalSyncCacheGUID() const = 0;

  // Starts initializing local device info.
  virtual void Initialize(
      const std::string& cache_guid,
      const std::string& signin_scoped_device_id) = 0;

  // Registers a callback to be called when local device info becomes available.
  // The callback will remain registered until the
  // returned Subscription is destroyed, which must occur before the
  // CallbackList is destroyed.
  virtual scoped_ptr<Subscription> RegisterOnInitializedCallback(
      const base::Closure& callback) = 0;
};

}  // namespace sync_driver

#endif  // COMPONENTS_SYNC_DRIVER_LOCAL_DEVICE_INFO_PROVIDER_H_
