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_PROFILE_CLIENT_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROMEOS_DBUS_SHILL_PROFILE_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)// ShillProfileClient is used to communicate with the Shill Profile 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// service. All methods should be called from the origin thread which 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// initializes the DBusThreadManager instance. 36424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)class CHROMEOS_EXPORT ShillProfileClient : public DBusClient { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef ShillClientHelper::PropertyChangedHandler PropertyChangedHandler; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef ShillClientHelper::DictionaryValueCallbackWithoutStatus 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DictionaryValueCallbackWithoutStatus; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef ShillClientHelper::ErrorCallback ErrorCallback; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Interface for setting up services for testing. Accessed through 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // GetTestInterface(), only implemented in the stub implementation. 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // TODO(stevenjb): remove dependencies on entry_path -> service_path 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // mappings in some of the TestInterface implementations. 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) class TestInterface { 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 49b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) virtual void AddProfile(const std::string& profile_path, 50b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) const std::string& userhash) = 0; 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Adds an entry to the profile only. |entry_path| corresponds to a 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // 'service_path' and a corresponding entry will be added to 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // ShillManagerClient ServiceCompleteList. No checking or updating of 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // ShillServiceClient is performed. 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void AddEntry(const std::string& profile_path, 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& entry_path, 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::DictionaryValue& properties) = 0; 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Adds a service to the profile, copying properties from the 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // ShillServiceClient entry matching |service_path|. Returns false if no 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Service entry exists or if a Profile entry already exists. Also sets 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // the Profile property of the service in ShillServiceClient. 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual bool AddService(const std::string& profile_path, 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string& service_path) = 0; 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Copies properties from the ShillServiceClient entry matching 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // |service_path| to the profile entry matching |profile_path|. Returns 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // false if no Service entry exits or if no Profile entry exists. 70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual bool UpdateService(const std::string& profile_path, 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::string& service_path) = 0; 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Sets |profiles| to the current list of profile paths. 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void GetProfilePaths(std::vector<std::string>* profiles) = 0; 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Sets |properties| to the entry for |service_path|, sets |profile_path| 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // to the path of the profile with the entry, and returns true if the 78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // service exists in any profile. 79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual bool GetService(const std::string& service_path, 80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string* profile_path, 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::DictionaryValue* properties) = 0; 82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Remove all profile entries. 84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void ClearProfiles() = 0; 85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected: 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~TestInterface() {} 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ShillProfileClient(); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Factory function, creates a new instance which is owned by the caller. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For normal usage, access the singleton via DBusThreadManager::Get(). 94a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) static ShillProfileClient* Create(); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 96a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Returns the shared profile path. 97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static std::string GetSharedProfilePath(); 98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds a property changed |observer| for the profile at |profile_path|. 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AddPropertyChangedObserver( 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const dbus::ObjectPath& profile_path, 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShillPropertyChangedObserver* observer) = 0; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Removes a property changed |observer| for the profile at |profile_path|. 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RemovePropertyChangedObserver( 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const dbus::ObjectPath& profile_path, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShillPropertyChangedObserver* observer) = 0; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Calls GetProperties method. 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |callback| is called after the method call succeeds. 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetProperties( 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const dbus::ObjectPath& profile_path, 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const DictionaryValueCallbackWithoutStatus& callback, 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ErrorCallback& error_callback) = 0; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Calls GetEntry method. 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |callback| is called after the method call succeeds. 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void GetEntry(const dbus::ObjectPath& profile_path, 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& entry_path, 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const DictionaryValueCallbackWithoutStatus& callback, 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ErrorCallback& error_callback) = 0; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Calls DeleteEntry method. 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |callback| is called after the method call succeeds. 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DeleteEntry(const dbus::ObjectPath& profile_path, 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& entry_path, 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Closure& callback, 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ErrorCallback& error_callback) = 0; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns an interface for testing (stub only), or returns NULL. 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual TestInterface* GetTestInterface() = 0; 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 134424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) friend class ShillProfileClientTest; 135424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Create() should be used instead. 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShillProfileClient(); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ShillProfileClient); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chromeos 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROMEOS_DBUS_SHILL_PROFILE_CLIENT_H_ 146