• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:
~TestInterface()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