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