15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file.
45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef COMPONENTS_SYNC_DRIVER_DEVICE_INFO_TRACKER_H_
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define COMPONENTS_SYNC_DRIVER_DEVICE_INFO_TRACKER_H_
75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/memory/scoped_vector.h"
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/sync_driver/device_info.h"
115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace sync_driver {
135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Interface for tracking synced DeviceInfo.
155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class DeviceInfoTracker {
165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public:
175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual ~DeviceInfoTracker() {}
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Observer class for listening to device info changes.
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  class Observer {
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)   public:
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    virtual void OnDeviceInfoChange() = 0;
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  };
245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Gets DeviceInfo the synced device with specified client ID.
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Returns an empty scoped_ptr if device with the given |client_id| hasn't
275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // been synced.
285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual scoped_ptr<DeviceInfo> GetDeviceInfo(
295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const std::string& client_id) const = 0;
305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Gets DeviceInfo for all synced devices (including the local one).
315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual ScopedVector<DeviceInfo> GetAllDeviceInfo() const = 0;
325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Registers an observer to be called on syncing any updated DeviceInfo.
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void AddObserver(Observer* observer) = 0;
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Unregisters an observer.
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual void RemoveObserver(Observer* observer) = 0;
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)};
375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}  // namespace sync_driver
395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif  // COMPONENTS_SYNC_DRIVER_DEVICE_INFO_TRACKER_H_
41