1// Copyright 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_SHILL_DEVICE_CLIENT_H_
6#define CHROMEOS_DBUS_FAKE_SHILL_DEVICE_CLIENT_H_
7
8#include <string>
9
10#include "base/basictypes.h"
11#include "chromeos/chromeos_export.h"
12#include "chromeos/dbus/shill_device_client.h"
13
14namespace chromeos {
15
16// A fake implementation of ShillDeviceClient.
17// Implemented: Stub cellular device for SMS testing.
18class CHROMEOS_EXPORT FakeShillDeviceClient
19    : public ShillDeviceClient,
20      public ShillDeviceClient::TestInterface {
21 public:
22  FakeShillDeviceClient();
23  virtual ~FakeShillDeviceClient();
24
25  // ShillDeviceClient overrides
26  virtual void Init(dbus::Bus* bus) OVERRIDE;
27  virtual void AddPropertyChangedObserver(
28      const dbus::ObjectPath& device_path,
29      ShillPropertyChangedObserver* observer) OVERRIDE;
30  virtual void RemovePropertyChangedObserver(
31      const dbus::ObjectPath& device_path,
32      ShillPropertyChangedObserver* observer) OVERRIDE;
33  virtual void GetProperties(const dbus::ObjectPath& device_path,
34                             const DictionaryValueCallback& callback) OVERRIDE;
35  virtual void ProposeScan(const dbus::ObjectPath& device_path,
36                           const VoidDBusMethodCallback& callback) OVERRIDE;
37  virtual void SetProperty(const dbus::ObjectPath& device_path,
38                           const std::string& name,
39                           const base::Value& value,
40                           const base::Closure& callback,
41                           const ErrorCallback& error_callback) OVERRIDE;
42  virtual void ClearProperty(const dbus::ObjectPath& device_path,
43                             const std::string& name,
44                             const VoidDBusMethodCallback& callback) OVERRIDE;
45  virtual void AddIPConfig(
46      const dbus::ObjectPath& device_path,
47      const std::string& method,
48      const ObjectPathDBusMethodCallback& callback) OVERRIDE;
49  virtual void RequirePin(const dbus::ObjectPath& device_path,
50                          const std::string& pin,
51                          bool require,
52                          const base::Closure& callback,
53                          const ErrorCallback& error_callback) OVERRIDE;
54  virtual void EnterPin(const dbus::ObjectPath& device_path,
55                        const std::string& pin,
56                        const base::Closure& callback,
57                        const ErrorCallback& error_callback) OVERRIDE;
58  virtual void UnblockPin(const dbus::ObjectPath& device_path,
59                          const std::string& puk,
60                          const std::string& pin,
61                          const base::Closure& callback,
62                          const ErrorCallback& error_callback) OVERRIDE;
63  virtual void ChangePin(const dbus::ObjectPath& device_path,
64                         const std::string& old_pin,
65                         const std::string& new_pin,
66                         const base::Closure& callback,
67                         const ErrorCallback& error_callback) OVERRIDE;
68  virtual void Register(const dbus::ObjectPath& device_path,
69                        const std::string& network_id,
70                        const base::Closure& callback,
71                        const ErrorCallback& error_callback) OVERRIDE;
72  virtual void SetCarrier(const dbus::ObjectPath& device_path,
73                          const std::string& carrier,
74                          const base::Closure& callback,
75                          const ErrorCallback& error_callback) OVERRIDE;
76  virtual void Reset(const dbus::ObjectPath& device_path,
77                     const base::Closure& callback,
78                     const ErrorCallback& error_callback) OVERRIDE;
79  virtual void PerformTDLSOperation(
80      const dbus::ObjectPath& device_path,
81      const std::string& operation,
82      const std::string& peer,
83      const StringCallback& callback,
84      const ErrorCallback& error_callback) OVERRIDE;
85
86  virtual ShillDeviceClient::TestInterface* GetTestInterface() OVERRIDE;
87
88  // ShillDeviceClient::TestInterface overrides.
89  virtual void AddDevice(const std::string& device_path,
90                         const std::string& type,
91                         const std::string& name) OVERRIDE;
92  virtual void RemoveDevice(const std::string& device_path) OVERRIDE;
93  virtual void ClearDevices() OVERRIDE;
94  virtual void SetDeviceProperty(const std::string& device_path,
95                                 const std::string& name,
96                                 const base::Value& value) OVERRIDE;
97  virtual std::string GetDevicePathForType(const std::string& type) OVERRIDE;
98
99  void set_tdls_busy_count(int count) { tdls_busy_count_ = count; }
100
101 private:
102  typedef ObserverList<ShillPropertyChangedObserver> PropertyObserverList;
103
104  void SetDefaultProperties();
105  void PassStubDeviceProperties(const dbus::ObjectPath& device_path,
106                                const DictionaryValueCallback& callback) const;
107
108  // Posts a task to run a void callback with status code |status|.
109  void PostVoidCallback(const VoidDBusMethodCallback& callback,
110                        DBusMethodCallStatus status);
111
112  void NotifyObserversPropertyChanged(const dbus::ObjectPath& device_path,
113                                      const std::string& property);
114  base::DictionaryValue* GetDeviceProperties(const std::string& device_path);
115  PropertyObserverList& GetObserverList(const dbus::ObjectPath& device_path);
116
117  // Dictionary of <device_name, Dictionary>.
118  base::DictionaryValue stub_devices_;
119  // Observer list for each device.
120  std::map<dbus::ObjectPath, PropertyObserverList*> observer_list_;
121
122  int tdls_busy_count_;  // Number of times to return InProgress for TDLS.
123
124  // Note: This should remain the last member so it'll be destroyed and
125  // invalidate its weak pointers before any other members are destroyed.
126  base::WeakPtrFactory<FakeShillDeviceClient> weak_ptr_factory_;
127
128  DISALLOW_COPY_AND_ASSIGN(FakeShillDeviceClient);
129};
130
131}  // namespace chromeos
132
133#endif  // CHROMEOS_DBUS_FAKE_SHILL_DEVICE_CLIENT_H_
134