1// Copyright (c) 2013 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 CHROMEOS_DBUS_FAKE_NFC_MANAGER_CLIENT_H_
6#define CHROMEOS_DBUS_FAKE_NFC_MANAGER_CLIENT_H_
7
8#include <set>
9#include <string>
10
11#include "base/observer_list.h"
12#include "chromeos/chromeos_export.h"
13#include "chromeos/dbus/nfc_manager_client.h"
14#include "dbus/property.h"
15
16namespace chromeos {
17
18// FakeNfcManagerClient simulates the behavior of the NFC Daemon manager object
19// and is used both in test cases in place of a mock and on the Linux desktop.
20class CHROMEOS_EXPORT FakeNfcManagerClient : public NfcManagerClient {
21 public:
22  struct Properties : public NfcManagerClient::Properties {
23    explicit Properties(const PropertyChangedCallback& callback);
24    virtual ~Properties();
25
26    // dbus::PropertySet overrides.
27    virtual void Get(dbus::PropertyBase* property,
28                     dbus::PropertySet::GetCallback callback) OVERRIDE;
29    virtual void GetAll() OVERRIDE;
30    virtual void Set(dbus::PropertyBase* property,
31                     dbus::PropertySet::SetCallback callback) OVERRIDE;
32  };
33
34  FakeNfcManagerClient();
35  virtual ~FakeNfcManagerClient();
36
37  // NfcManagerClient overrides.
38  virtual void Init(dbus::Bus* bus) OVERRIDE;
39  virtual void AddObserver(Observer* observer) OVERRIDE;
40  virtual void RemoveObserver(Observer* observer) OVERRIDE;
41  virtual Properties* GetProperties() OVERRIDE;
42
43  // Methods to simulate adapters getting added and removed.
44  void AddAdapter(const std::string& adapter_path);
45  void RemoveAdapter(const std::string& adapter_path);
46
47  // Default path of an adapter that is simulated for testing.
48  static const char kDefaultAdapterPath[];
49
50 private:
51  // Property callback passed when we create Properties* structures.
52  void OnPropertyChanged(const std::string& property_name);
53
54  // List of observers interested in event notifications.
55  ObserverList<Observer> observers_;
56
57  // Set containing the currently simulated adapters.
58  std::set<dbus::ObjectPath> adapters_;
59
60  // Fake properties object. This gets updated whenever AddAdapter or
61  // RemoveAdapter gets called.
62  scoped_ptr<Properties> properties_;
63
64  DISALLOW_COPY_AND_ASSIGN(FakeNfcManagerClient);
65};
66
67}  // namespace chromeos
68
69#endif  // CHROMEOS_DBUS_FAKE_NFC_MANAGER_CLIENT_H_
70