Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(107)

Side by Side Diff: chromeos/dbus/shill_profile_client.cc

Issue 10949030: This converts the Shill clients to allow propagation of shill errors (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: review changes Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chromeos/dbus/shill_profile_client.h" 5 #include "chromeos/dbus/shill_profile_client.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/message_loop.h" 8 #include "base/message_loop.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "base/values.h" 10 #include "base/values.h"
11 #include "dbus/bus.h" 11 #include "dbus/bus.h"
12 #include "dbus/message.h" 12 #include "dbus/message.h"
13 #include "dbus/object_path.h" 13 #include "dbus/object_path.h"
14 #include "dbus/values_util.h" 14 #include "dbus/values_util.h"
15 #include "third_party/cros_system_api/dbus/service_constants.h" 15 #include "third_party/cros_system_api/dbus/service_constants.h"
16 16
17 namespace chromeos { 17 namespace chromeos {
18 18
19 namespace { 19 namespace {
20 20
21 // The ShillProfileClient implementation. 21 // The ShillProfileClient implementation.
22 class ShillProfileClientImpl : public ShillProfileClient { 22 class ShillProfileClientImpl : public ShillProfileClient {
23 public: 23 public:
24 explicit ShillProfileClientImpl(dbus::Bus* bus); 24 explicit ShillProfileClientImpl(dbus::Bus* bus);
25 25
26 // ShillProfileClient overrides: 26 /////////////////////////////////////
27 // ShillProfileClient overrides.
27 virtual void SetPropertyChangedHandler( 28 virtual void SetPropertyChangedHandler(
28 const dbus::ObjectPath& profile_path, 29 const dbus::ObjectPath& profile_path,
29 const PropertyChangedHandler& handler) OVERRIDE; 30 const PropertyChangedHandler& handler) OVERRIDE;
30 virtual void ResetPropertyChangedHandler( 31 virtual void ResetPropertyChangedHandler(
31 const dbus::ObjectPath& profile_path) OVERRIDE; 32 const dbus::ObjectPath& profile_path) OVERRIDE;
32 virtual void GetProperties(const dbus::ObjectPath& profile_path, 33 virtual void GetProperties(
33 const DictionaryValueCallback& callback) OVERRIDE; 34 const dbus::ObjectPath& profile_path,
35 const DictionaryValueCallbackWithoutStatus& callback,
36 const ErrorCallback& error_callback) OVERRIDE;
34 virtual void GetEntry(const dbus::ObjectPath& profile_path, 37 virtual void GetEntry(const dbus::ObjectPath& profile_path,
35 const std::string& entry_path, 38 const std::string& entry_path,
36 const DictionaryValueCallback& callback) OVERRIDE; 39 const DictionaryValueCallbackWithoutStatus& callback,
40 const ErrorCallback& error_callback) OVERRIDE;
37 virtual void DeleteEntry(const dbus::ObjectPath& profile_path, 41 virtual void DeleteEntry(const dbus::ObjectPath& profile_path,
38 const std::string& entry_path, 42 const std::string& entry_path,
39 const VoidDBusMethodCallback& callback) OVERRIDE; 43 const base::Closure& callback,
44 const ErrorCallback& error_callback) OVERRIDE;
40 45
41 private: 46 private:
42 typedef std::map<std::string, ShillClientHelper*> HelperMap; 47 typedef std::map<std::string, ShillClientHelper*> HelperMap;
43 48
44 // Returns the corresponding ShillClientHelper for the profile. 49 // Returns the corresponding ShillClientHelper for the profile.
45 ShillClientHelper* GetHelper(const dbus::ObjectPath& profile_path); 50 ShillClientHelper* GetHelper(const dbus::ObjectPath& profile_path);
46 51
47 dbus::Bus* bus_; 52 dbus::Bus* bus_;
48 HelperMap helpers_; 53 HelperMap helpers_;
49 STLValueDeleter<HelperMap> helpers_deleter_; 54 STLValueDeleter<HelperMap> helpers_deleter_;
(...skipping 27 matching lines...) Expand all
77 GetHelper(profile_path)->SetPropertyChangedHandler(handler); 82 GetHelper(profile_path)->SetPropertyChangedHandler(handler);
78 } 83 }
79 84
80 void ShillProfileClientImpl::ResetPropertyChangedHandler( 85 void ShillProfileClientImpl::ResetPropertyChangedHandler(
81 const dbus::ObjectPath& profile_path) { 86 const dbus::ObjectPath& profile_path) {
82 GetHelper(profile_path)->ResetPropertyChangedHandler(); 87 GetHelper(profile_path)->ResetPropertyChangedHandler();
83 } 88 }
84 89
85 void ShillProfileClientImpl::GetProperties( 90 void ShillProfileClientImpl::GetProperties(
86 const dbus::ObjectPath& profile_path, 91 const dbus::ObjectPath& profile_path,
87 const DictionaryValueCallback& callback) { 92 const DictionaryValueCallbackWithoutStatus& callback,
93 const ErrorCallback& error_callback) {
88 dbus::MethodCall method_call(flimflam::kFlimflamProfileInterface, 94 dbus::MethodCall method_call(flimflam::kFlimflamProfileInterface,
89 flimflam::kGetPropertiesFunction); 95 flimflam::kGetPropertiesFunction);
90 GetHelper(profile_path)->CallDictionaryValueMethod(&method_call, callback); 96 GetHelper(profile_path)->CallDictionaryValueMethodWithErrorCallback(
97 &method_call, callback, error_callback);
91 } 98 }
92 99
93 void ShillProfileClientImpl::GetEntry( 100 void ShillProfileClientImpl::GetEntry(
94 const dbus::ObjectPath& profile_path, 101 const dbus::ObjectPath& profile_path,
95 const std::string& entry_path, 102 const std::string& entry_path,
96 const DictionaryValueCallback& callback) { 103 const DictionaryValueCallbackWithoutStatus& callback,
104 const ErrorCallback& error_callback) {
97 dbus::MethodCall method_call(flimflam::kFlimflamProfileInterface, 105 dbus::MethodCall method_call(flimflam::kFlimflamProfileInterface,
98 flimflam::kGetEntryFunction); 106 flimflam::kGetEntryFunction);
99 dbus::MessageWriter writer(&method_call); 107 dbus::MessageWriter writer(&method_call);
100 writer.AppendString(entry_path); 108 writer.AppendString(entry_path);
101 GetHelper(profile_path)->CallDictionaryValueMethod(&method_call, callback); 109 GetHelper(profile_path)->CallDictionaryValueMethodWithErrorCallback(
110 &method_call, callback, error_callback);
102 } 111 }
103 112
104 void ShillProfileClientImpl::DeleteEntry( 113 void ShillProfileClientImpl::DeleteEntry(
105 const dbus::ObjectPath& profile_path, 114 const dbus::ObjectPath& profile_path,
106 const std::string& entry_path, 115 const std::string& entry_path,
107 const VoidDBusMethodCallback& callback) { 116 const base::Closure& callback,
117 const ErrorCallback& error_callback) {
108 dbus::MethodCall method_call(flimflam::kFlimflamProfileInterface, 118 dbus::MethodCall method_call(flimflam::kFlimflamProfileInterface,
109 flimflam::kDeleteEntryFunction); 119 flimflam::kDeleteEntryFunction);
110 dbus::MessageWriter writer(&method_call); 120 dbus::MessageWriter writer(&method_call);
111 writer.AppendString(entry_path); 121 writer.AppendString(entry_path);
112 GetHelper(profile_path)->CallVoidMethod(&method_call, callback); 122 GetHelper(profile_path)->CallVoidMethodWithErrorCallback(
123 &method_call, callback, error_callback);
113 } 124 }
114 125
115 // A stub implementation of ShillProfileClient. 126 // A stub implementation of ShillProfileClient.
116 class ShillProfileClientStubImpl : public ShillProfileClient { 127 class ShillProfileClientStubImpl : public ShillProfileClient {
117 public: 128 public:
118 ShillProfileClientStubImpl() : weak_ptr_factory_(this) {} 129 ShillProfileClientStubImpl() : weak_ptr_factory_(this) {}
119 130
120 virtual ~ShillProfileClientStubImpl() {} 131 virtual ~ShillProfileClientStubImpl() {}
121 132
122 // ShillProfileClient override. 133 // ShillProfileClient override.
123 virtual void SetPropertyChangedHandler( 134 virtual void SetPropertyChangedHandler(
124 const dbus::ObjectPath& profile_path, 135 const dbus::ObjectPath& profile_path,
125 const PropertyChangedHandler& handler) OVERRIDE {} 136 const PropertyChangedHandler& handler) OVERRIDE {}
126 137
127 // ShillProfileClient override. 138 // ShillProfileClient override.
128 virtual void ResetPropertyChangedHandler( 139 virtual void ResetPropertyChangedHandler(
129 const dbus::ObjectPath& profile_path) OVERRIDE {} 140 const dbus::ObjectPath& profile_path) OVERRIDE {}
130 141
131 // ShillProfileClient override. 142 virtual void GetProperties(
132 virtual void GetProperties(const dbus::ObjectPath& profile_path, 143 const dbus::ObjectPath& profile_path,
133 const DictionaryValueCallback& callback) OVERRIDE { 144 const DictionaryValueCallbackWithoutStatus& callback,
145 const ErrorCallback& error_callback) OVERRIDE {
134 MessageLoop::current()->PostTask( 146 MessageLoop::current()->PostTask(
135 FROM_HERE, 147 FROM_HERE,
136 base::Bind(&ShillProfileClientStubImpl::PassEmptyDictionaryValue, 148 base::Bind(&ShillProfileClientStubImpl::PassEmptyDictionaryValue,
137 weak_ptr_factory_.GetWeakPtr(), 149 weak_ptr_factory_.GetWeakPtr(),
138 callback)); 150 callback));
139 } 151 }
140 152
141 // ShillProfileClient override. 153 // ShillProfileClient override.
142 virtual void GetEntry(const dbus::ObjectPath& profile_path, 154 virtual void GetEntry(const dbus::ObjectPath& profile_path,
143 const std::string& entry_path, 155 const std::string& entry_path,
144 const DictionaryValueCallback& callback) OVERRIDE { 156 const DictionaryValueCallbackWithoutStatus& callback,
157 const ErrorCallback& error_callback) OVERRIDE {
145 MessageLoop::current()->PostTask( 158 MessageLoop::current()->PostTask(
146 FROM_HERE, 159 FROM_HERE,
147 base::Bind(&ShillProfileClientStubImpl::PassEmptyDictionaryValue, 160 base::Bind(&ShillProfileClientStubImpl::PassEmptyDictionaryValue,
148 weak_ptr_factory_.GetWeakPtr(), 161 weak_ptr_factory_.GetWeakPtr(),
149 callback)); 162 callback));
150 } 163 }
151 164
152 // ShillProfileClient override. 165 // ShillProfileClient override.
153 virtual void DeleteEntry(const dbus::ObjectPath& profile_path, 166 virtual void DeleteEntry(const dbus::ObjectPath& profile_path,
154 const std::string& entry_path, 167 const std::string& entry_path,
155 const VoidDBusMethodCallback& callback) OVERRIDE { 168 const base::Closure& callback,
156 MessageLoop::current()->PostTask(FROM_HERE, 169 const ErrorCallback& error_callback) OVERRIDE {
157 base::Bind(callback, 170 MessageLoop::current()->PostTask(FROM_HERE, callback);
158 DBUS_METHOD_CALL_SUCCESS));
159 } 171 }
160 172
161 private: 173 private:
162 void PassEmptyDictionaryValue(const DictionaryValueCallback& callback) const { 174 void PassEmptyDictionaryValue(
175 const DictionaryValueCallbackWithoutStatus& callback) const {
163 base::DictionaryValue dictionary; 176 base::DictionaryValue dictionary;
164 callback.Run(DBUS_METHOD_CALL_SUCCESS, dictionary); 177 callback.Run(dictionary);
165 } 178 }
166 179
167 // Note: This should remain the last member so it'll be destroyed and 180 // Note: This should remain the last member so it'll be destroyed and
168 // invalidate its weak pointers before any other members are destroyed. 181 // invalidate its weak pointers before any other members are destroyed.
169 base::WeakPtrFactory<ShillProfileClientStubImpl> weak_ptr_factory_; 182 base::WeakPtrFactory<ShillProfileClientStubImpl> weak_ptr_factory_;
170 183
171 DISALLOW_COPY_AND_ASSIGN(ShillProfileClientStubImpl); 184 DISALLOW_COPY_AND_ASSIGN(ShillProfileClientStubImpl);
172 }; 185 };
173 186
174 } // namespace 187 } // namespace
175 188
176 ShillProfileClient::ShillProfileClient() {} 189 ShillProfileClient::ShillProfileClient() {}
177 190
178 ShillProfileClient::~ShillProfileClient() {} 191 ShillProfileClient::~ShillProfileClient() {}
179 192
180 // static 193 // static
181 ShillProfileClient* ShillProfileClient::Create( 194 ShillProfileClient* ShillProfileClient::Create(
182 DBusClientImplementationType type, 195 DBusClientImplementationType type,
183 dbus::Bus* bus) { 196 dbus::Bus* bus) {
184 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) 197 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION)
185 return new ShillProfileClientImpl(bus); 198 return new ShillProfileClientImpl(bus);
186 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); 199 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type);
187 return new ShillProfileClientStubImpl(); 200 return new ShillProfileClientStubImpl();
188 } 201 }
189 202
190 } // namespace chromeos 203 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698