15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROMEOS_DBUS_SHILL_DEVICE_CLIENT_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROMEOS_DBUS_SHILL_DEVICE_CLIENT_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/chromeos_export.h"
13424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chromeos/dbus/dbus_client.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chromeos/dbus/shill_client_helper.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Value;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DictionaryValue;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace base
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dbus {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ObjectPath;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace dbus
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chromeos {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ShillPropertyChangedObserver;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ShillDeviceClient is used to communicate with the Shill Device service.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// All methods should be called from the origin thread which initializes the
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// DBusThreadManager instance.
36424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)class CHROMEOS_EXPORT ShillDeviceClient : public DBusClient {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef ShillClientHelper::PropertyChangedHandler PropertyChangedHandler;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef ShillClientHelper::DictionaryValueCallback DictionaryValueCallback;
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  typedef ShillClientHelper::StringCallback StringCallback;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef ShillClientHelper::ErrorCallback ErrorCallback;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Interface for setting up devices for testing.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Accessed through GetTestInterface(), only implemented in the Stub Impl.
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  class TestInterface {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   public:
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual void AddDevice(const std::string& device_path,
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           const std::string& type,
4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                           const std::string& name) = 0;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual void RemoveDevice(const std::string& device_path) = 0;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    virtual void ClearDevices() = 0;
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    virtual void SetDeviceProperty(const std::string& device_path,
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   const std::string& name,
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   const base::Value& value) = 0;
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    virtual std::string GetDevicePathForType(const std::string& type) = 0;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)   protected:
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    virtual ~TestInterface() {}
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ShillDeviceClient();
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Factory function, creates a new instance which is owned by the caller.
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // For normal usage, access the singleton via DBusThreadManager::Get().
65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  static ShillDeviceClient* Create();
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Adds a property changed |observer| for the device at |device_path|.
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void AddPropertyChangedObserver(
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const dbus::ObjectPath& device_path,
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ShillPropertyChangedObserver* observer) = 0;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Removes a property changed |observer| for the device at |device_path|.
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RemovePropertyChangedObserver(
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const dbus::ObjectPath& device_path,
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ShillPropertyChangedObserver* observer) = 0;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Calls GetProperties method.
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |callback| is called after the method call finishes.
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void GetProperties(const dbus::ObjectPath& device_path,
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             const DictionaryValueCallback& callback) = 0;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Calls ProposeScan method.
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |callback| is called after the method call finishes.
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ProposeScan(const dbus::ObjectPath& device_path,
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           const VoidDBusMethodCallback& callback) = 0;
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Calls SetProperty method.
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |callback| is called after the method call finishes.
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetProperty(const dbus::ObjectPath& device_path,
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           const std::string& name,
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           const base::Value& value,
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           const base::Closure& callback,
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           const ErrorCallback& error_callback) = 0;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Calls ClearProperty method.
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |callback| is called after the method call finishes.
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ClearProperty(const dbus::ObjectPath& device_path,
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             const std::string& name,
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             const VoidDBusMethodCallback& callback) = 0;
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Calls AddIPConfig method.
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |callback| is called after the method call finishes.
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void AddIPConfig(const dbus::ObjectPath& device_path,
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           const std::string& method,
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                           const ObjectPathDBusMethodCallback& callback) = 0;
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Calls the RequirePin method.
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |callback| is called after the method call finishes.
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void RequirePin(const dbus::ObjectPath& device_path,
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const std::string& pin,
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          bool require,
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const base::Closure& callback,
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const ErrorCallback& error_callback) = 0;
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Calls the EnterPin method.
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |callback| is called after the method call finishes.
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void EnterPin(const dbus::ObjectPath& device_path,
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        const std::string& pin,
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        const base::Closure& callback,
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        const ErrorCallback& error_callback) = 0;
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Calls the UnblockPin method.
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |callback| is called after the method call finishes.
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void UnblockPin(const dbus::ObjectPath& device_path,
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const std::string& puk,
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const std::string& pin,
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const base::Closure& callback,
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const ErrorCallback& error_callback) = 0;
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Calls the ChangePin method.
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |callback| is called after the method call finishes.
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ChangePin(const dbus::ObjectPath& device_path,
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         const std::string& old_pin,
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         const std::string& new_pin,
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         const base::Closure& callback,
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         const ErrorCallback& error_callback) = 0;
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Calls the Register method.
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |callback| is called after the method call finishes.
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void Register(const dbus::ObjectPath& device_path,
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        const std::string& network_id,
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        const base::Closure& callback,
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        const ErrorCallback& error_callback) = 0;
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Calls the SetCarrier method.
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // |callback| is called after the method call finishes.
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetCarrier(const dbus::ObjectPath& device_path,
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const std::string& carrier,
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const base::Closure& callback,
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          const ErrorCallback& error_callback) = 0;
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Calls the Reset method.
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // |callback| is called after the method call finishes.
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void Reset(const dbus::ObjectPath& device_path,
1555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                     const base::Closure& callback,
1565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                     const ErrorCallback& error_callback) = 0;
1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Calls the PerformTDLSOperation method.
1595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // |callback| is called after the method call finishes.
1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void PerformTDLSOperation(const dbus::ObjectPath& device_path,
1615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                    const std::string& operation,
1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                    const std::string& peer,
1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                    const StringCallback& callback,
1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                    const ErrorCallback& error_callback) = 0;
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Returns an interface for testing (stub only), or returns NULL.
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual TestInterface* GetTestInterface() = 0;
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
170424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  friend class ShillDeviceClientTest;
171424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create() should be used instead.
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ShillDeviceClient();
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ShillDeviceClient);
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chromeos
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROMEOS_DBUS_SHILL_DEVICE_CLIENT_H_
182