Home | History | Annotate | Download | only in dbus
      1 // Copyright (c) 2012 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_SHILL_PROFILE_CLIENT_H_
      6 #define CHROMEOS_DBUS_SHILL_PROFILE_CLIENT_H_
      7 
      8 #include <string>
      9 
     10 #include "base/basictypes.h"
     11 #include "base/callback.h"
     12 #include "chromeos/chromeos_export.h"
     13 #include "chromeos/dbus/dbus_client.h"
     14 #include "chromeos/dbus/shill_client_helper.h"
     15 
     16 namespace base {
     17 
     18 class Value;
     19 class DictionaryValue;
     20 
     21 }  // namespace base
     22 
     23 namespace dbus {
     24 
     25 class ObjectPath;
     26 
     27 }  // namespace dbus
     28 
     29 namespace chromeos {
     30 
     31 class ShillPropertyChangedObserver;
     32 
     33 // ShillProfileClient is used to communicate with the Shill Profile
     34 // service.  All methods should be called from the origin thread which
     35 // initializes the DBusThreadManager instance.
     36 class CHROMEOS_EXPORT ShillProfileClient : public DBusClient {
     37  public:
     38   typedef ShillClientHelper::PropertyChangedHandler PropertyChangedHandler;
     39   typedef ShillClientHelper::DictionaryValueCallbackWithoutStatus
     40       DictionaryValueCallbackWithoutStatus;
     41   typedef ShillClientHelper::ErrorCallback ErrorCallback;
     42 
     43   // Interface for setting up services for testing. Accessed through
     44   // GetTestInterface(), only implemented in the stub implementation.
     45   // TODO(stevenjb): remove dependencies on entry_path -> service_path
     46   // mappings in some of the TestInterface implementations.
     47   class TestInterface {
     48    public:
     49     virtual void AddProfile(const std::string& profile_path,
     50                             const std::string& userhash) = 0;
     51 
     52     // Adds an entry to the profile only. |entry_path| corresponds to a
     53     // 'service_path' and a corresponding entry will be added to
     54     // ShillManagerClient ServiceCompleteList. No checking or updating of
     55     // ShillServiceClient is performed.
     56     virtual void AddEntry(const std::string& profile_path,
     57                           const std::string& entry_path,
     58                           const base::DictionaryValue& properties) = 0;
     59 
     60     // Adds a service to the profile, copying properties from the
     61     // ShillServiceClient entry matching |service_path|. Returns false if no
     62     // Service entry exists or if a Profile entry already exists. Also sets
     63     // the Profile property of the service in ShillServiceClient.
     64     virtual bool AddService(const std::string& profile_path,
     65                             const std::string& service_path) = 0;
     66 
     67     // Copies properties from the ShillServiceClient entry matching
     68     // |service_path| to the profile entry matching |profile_path|. Returns
     69     // false if no Service entry exits or if no Profile entry exists.
     70     virtual bool UpdateService(const std::string& profile_path,
     71                                const std::string& service_path) = 0;
     72 
     73     // Sets |profiles| to the current list of profile paths.
     74     virtual void GetProfilePaths(std::vector<std::string>* profiles) = 0;
     75 
     76     // Sets |properties| to the entry for |service_path|, sets |profile_path|
     77     // to the path of the profile with the entry, and returns true if the
     78     // service exists in any profile.
     79     virtual bool GetService(const std::string& service_path,
     80                             std::string* profile_path,
     81                             base::DictionaryValue* properties) = 0;
     82 
     83     // Remove all profile entries.
     84     virtual void ClearProfiles() = 0;
     85 
     86    protected:
     87     virtual ~TestInterface() {}
     88   };
     89 
     90   virtual ~ShillProfileClient();
     91 
     92   // Factory function, creates a new instance which is owned by the caller.
     93   // For normal usage, access the singleton via DBusThreadManager::Get().
     94   static ShillProfileClient* Create();
     95 
     96   // Returns the shared profile path.
     97   static std::string GetSharedProfilePath();
     98 
     99   // Adds a property changed |observer| for the profile at |profile_path|.
    100   virtual void AddPropertyChangedObserver(
    101       const dbus::ObjectPath& profile_path,
    102       ShillPropertyChangedObserver* observer) = 0;
    103 
    104   // Removes a property changed |observer| for the profile at |profile_path|.
    105   virtual void RemovePropertyChangedObserver(
    106       const dbus::ObjectPath& profile_path,
    107       ShillPropertyChangedObserver* observer) = 0;
    108 
    109   // Calls GetProperties method.
    110   // |callback| is called after the method call succeeds.
    111   virtual void GetProperties(
    112       const dbus::ObjectPath& profile_path,
    113       const DictionaryValueCallbackWithoutStatus& callback,
    114       const ErrorCallback& error_callback) = 0;
    115 
    116   // Calls GetEntry method.
    117   // |callback| is called after the method call succeeds.
    118   virtual void GetEntry(const dbus::ObjectPath& profile_path,
    119                         const std::string& entry_path,
    120                         const DictionaryValueCallbackWithoutStatus& callback,
    121                         const ErrorCallback& error_callback) = 0;
    122 
    123   // Calls DeleteEntry method.
    124   // |callback| is called after the method call succeeds.
    125   virtual void DeleteEntry(const dbus::ObjectPath& profile_path,
    126                            const std::string& entry_path,
    127                            const base::Closure& callback,
    128                            const ErrorCallback& error_callback) = 0;
    129 
    130   // Returns an interface for testing (stub only), or returns NULL.
    131   virtual TestInterface* GetTestInterface() = 0;
    132 
    133  protected:
    134   friend class ShillProfileClientTest;
    135 
    136   // Create() should be used instead.
    137   ShillProfileClient();
    138 
    139  private:
    140   DISALLOW_COPY_AND_ASSIGN(ShillProfileClient);
    141 };
    142 
    143 }  // namespace chromeos
    144 
    145 #endif  // CHROMEOS_DBUS_SHILL_PROFILE_CLIENT_H_
    146