blob: 5099e2caa6979f42c3551871f75d8b66b32f55c0 [file] [log] [blame]
Regan Hsu1f1aa4c2017-08-02 02:05:231// Copyright 2017 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef COMPONENTS_CRYPTAUTH_REMOTE_DEVICE_PROVIDER_H_
6#define COMPONENTS_CRYPTAUTH_REMOTE_DEVICE_PROVIDER_H_
7
Regan Hsu9fc97cc2017-09-08 03:13:518#include "base/observer_list.h"
Regan Hsu1f1aa4c2017-08-02 02:05:239#include "components/cryptauth/remote_device.h"
10
11namespace cryptauth {
12
Regan Hsu1f1aa4c2017-08-02 02:05:2313// This class generates and caches RemoteDevice objects when associated metadata
14// has been synced, and updates this cache when a new sync occurs.
Regan Hsu9fc97cc2017-09-08 03:13:5115class RemoteDeviceProvider {
Regan Hsu1f1aa4c2017-08-02 02:05:2316 public:
17 class Observer {
18 public:
19 virtual void OnSyncDeviceListChanged() {}
20
21 protected:
Kyle Horimotocdfd4cb7c22017-12-06 00:47:5522 virtual ~Observer() = default;
Regan Hsu1f1aa4c2017-08-02 02:05:2323 };
24
Regan Hsu9fc97cc2017-09-08 03:13:5125 RemoteDeviceProvider();
Regan Hsu9fc97cc2017-09-08 03:13:5126 virtual ~RemoteDeviceProvider();
Regan Hsu1f1aa4c2017-08-02 02:05:2327
Kyle Horimotocdfd4cb7c22017-12-06 00:47:5528 void AddObserver(Observer* observer);
29 void RemoveObserver(Observer* observer);
Regan Hsu1f1aa4c2017-08-02 02:05:2330
31 // Returns a list of all RemoteDevices that have been synced.
Kyle Horimotocdfd4cb7c22017-12-06 00:47:5532 virtual const cryptauth::RemoteDeviceList& GetSyncedDevices() const = 0;
33
34 protected:
35 void NotifyObserversDeviceListChanged();
Regan Hsu1f1aa4c2017-08-02 02:05:2336
37 private:
Regan Hsu1f1aa4c2017-08-02 02:05:2338 base::ObserverList<Observer> observers_;
Regan Hsu1f1aa4c2017-08-02 02:05:2339};
40
41} // namespace cryptauth
42
43#endif // COMPONENTS_CRYPTAUTH_REMOTE_DEVICE_PROVIDER_H_