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

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

Issue 11192024: Add chromeos::NetworkStateManager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Respond to feedback 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 | Annotate | Revision Log
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_manager_client.h" 5 #include "chromeos/dbus/shill_manager_client.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/chromeos/chromeos_version.h" 8 #include "base/chromeos/chromeos_version.h"
9 #include "base/message_loop.h" 9 #include "base/message_loop.h"
10 #include "base/values.h" 10 #include "base/values.h"
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
162 } 162 }
163 163
164 private: 164 private:
165 dbus::ObjectProxy* proxy_; 165 dbus::ObjectProxy* proxy_;
166 ShillClientHelper helper_; 166 ShillClientHelper helper_;
167 167
168 DISALLOW_COPY_AND_ASSIGN(ShillManagerClientImpl); 168 DISALLOW_COPY_AND_ASSIGN(ShillManagerClientImpl);
169 }; 169 };
170 170
171 // A stub implementation of ShillManagerClient. 171 // A stub implementation of ShillManagerClient.
172 // Implemented: Stub cellular DeviceList entry for SMS testing. 172 // Implemented: Stub devices and services for NetworkStateManager tests.
173 // Implemented: Stub cellular device entry for SMS tests.
173 class ShillManagerClientStubImpl : public ShillManagerClient { 174 class ShillManagerClientStubImpl : public ShillManagerClient {
174 public: 175 public:
175 ShillManagerClientStubImpl() : weak_ptr_factory_(this) { 176 ShillManagerClientStubImpl() : weak_ptr_factory_(this) {
177 // Stub Devices
176 base::ListValue* device_list = new base::ListValue; 178 base::ListValue* device_list = new base::ListValue;
177 // Note: names match Device stub map. 179 // Note: names match Device stub map.
178 const char kStubCellular1[] = "stub_cellular1"; 180 device_list->Append(
179 const char kStubCellular2[] = "stub_cellular2"; 181 base::Value::CreateStringValue("stub_wifi_device1"));
180 device_list->Append(base::Value::CreateStringValue(kStubCellular1)); 182 device_list->Append(
181 device_list->Append(base::Value::CreateStringValue(kStubCellular2)); 183 base::Value::CreateStringValue("stub_cellular_device1"));
184 device_list->Append(
185 base::Value::CreateStringValue("stub_cellular_device2"));
182 stub_properties_.Set(flimflam::kDevicesProperty, device_list); 186 stub_properties_.Set(flimflam::kDevicesProperty, device_list);
187
188 // Stub Services
189 base::ListValue* service_list = new base::ListValue;
190 // Note: names match Service stub map.
191 service_list->Append(base::Value::CreateStringValue("stub_ethernet"));
192 service_list->Append(base::Value::CreateStringValue("stub_wifi1"));
193 service_list->Append(base::Value::CreateStringValue("stub_wifi2"));
194 service_list->Append(base::Value::CreateStringValue("stub_cellular1"));
195 stub_properties_.Set(flimflam::kServicesProperty, service_list);
196
197 // Stub Technologies
198 base::ListValue* available_list = new base::ListValue;
199 available_list->Append(
200 base::Value::CreateStringValue(flimflam::kTypeEthernet));
201 available_list->Append(
202 base::Value::CreateStringValue(flimflam::kTypeWifi));
203 available_list->Append(
204 base::Value::CreateStringValue(flimflam::kTypeCellular));
205 stub_properties_.Set(flimflam::kAvailableTechnologiesProperty,
206 available_list);
207
208 base::ListValue* enabled_list = new base::ListValue;
209 enabled_list->Append(
210 base::Value::CreateStringValue(flimflam::kTypeEthernet));
211 enabled_list->Append(
212 base::Value::CreateStringValue(flimflam::kTypeWifi));
213 enabled_list->Append(
214 base::Value::CreateStringValue(flimflam::kTypeCellular));
215 stub_properties_.Set(flimflam::kEnabledTechnologiesProperty, enabled_list);
183 } 216 }
184 217
185 virtual ~ShillManagerClientStubImpl() {} 218 virtual ~ShillManagerClientStubImpl() {}
186 219
187 ////////////////////////////////// 220 //////////////////////////////////
188 // ShillManagerClient overrides. 221 // ShillManagerClient overrides.
189 virtual void AddPropertyChangedObserver( 222 virtual void AddPropertyChangedObserver(
190 ShillPropertyChangedObserver* observer) OVERRIDE {} 223 ShillPropertyChangedObserver* observer) OVERRIDE {
224 observer_list_.AddObserver(observer);
225 }
191 226
192 virtual void RemovePropertyChangedObserver( 227 virtual void RemovePropertyChangedObserver(
193 ShillPropertyChangedObserver* observer) OVERRIDE {} 228 ShillPropertyChangedObserver* observer) OVERRIDE {
229 observer_list_.RemoveObserver(observer);
230 }
194 231
195 // ShillManagerClient override. 232 // ShillManagerClient override.
196 virtual void GetProperties(const DictionaryValueCallback& callback) OVERRIDE { 233 virtual void GetProperties(const DictionaryValueCallback& callback) OVERRIDE {
197 MessageLoop::current()->PostTask( 234 MessageLoop::current()->PostTask(
198 FROM_HERE, base::Bind( 235 FROM_HERE, base::Bind(
199 &ShillManagerClientStubImpl::PassStubProperties, 236 &ShillManagerClientStubImpl::PassStubProperties,
200 weak_ptr_factory_.GetWeakPtr(), 237 weak_ptr_factory_.GetWeakPtr(),
201 callback)); 238 callback));
202 } 239 }
203 240
204 // ShillManagerClient override. 241 // ShillManagerClient override.
205 virtual base::DictionaryValue* CallGetPropertiesAndBlock() OVERRIDE { 242 virtual base::DictionaryValue* CallGetPropertiesAndBlock() OVERRIDE {
206 return new base::DictionaryValue; 243 return stub_properties_.DeepCopy();
207 } 244 }
208 245
209 // ShillManagerClient override. 246 // ShillManagerClient override.
210 virtual void SetProperty(const std::string& name, 247 virtual void SetProperty(const std::string& name,
211 const base::Value& value, 248 const base::Value& value,
212 const base::Closure& callback, 249 const base::Closure& callback,
213 const ErrorCallback& error_callback) OVERRIDE { 250 const ErrorCallback& error_callback) OVERRIDE {
214 stub_properties_.Set(name, value.DeepCopy()); 251 stub_properties_.Set(name, value.DeepCopy());
215 MessageLoop::current()->PostTask(FROM_HERE, callback); 252 MessageLoop::current()->PostTask(FROM_HERE, callback);
216 } 253 }
217 254
218 // ShillManagerClient override. 255 // ShillManagerClient override.
219 virtual void RequestScan(const std::string& type, 256 virtual void RequestScan(const std::string& type,
220 const base::Closure& callback, 257 const base::Closure& callback,
221 const ErrorCallback& error_callback) OVERRIDE { 258 const ErrorCallback& error_callback) OVERRIDE {
222 MessageLoop::current()->PostTask(FROM_HERE, callback); 259 MessageLoop::current()->PostTask(FROM_HERE, callback);
260 const int kScanDelaySeconds = 3;
261 MessageLoop::current()->PostDelayedTask(
262 FROM_HERE,
263 base::Bind(&ShillManagerClientStubImpl::NotifyObserversPropertyChanged,
264 weak_ptr_factory_.GetWeakPtr(),
265 flimflam::kServicesProperty),
266 base::TimeDelta::FromSeconds(kScanDelaySeconds));
223 } 267 }
224 268
225 // ShillManagerClient override. 269 // ShillManagerClient override.
226 virtual void EnableTechnology( 270 virtual void EnableTechnology(
227 const std::string& type, 271 const std::string& type,
228 const base::Closure& callback, 272 const base::Closure& callback,
229 const ErrorCallback& error_callback) OVERRIDE { 273 const ErrorCallback& error_callback) OVERRIDE {
274 base::ListValue* enabled_list;
275 if (!stub_properties_.GetListWithoutPathExpansion(
276 flimflam::kEnabledTechnologiesProperty, &enabled_list)) {
277 MessageLoop::current()->PostTask(
278 FROM_HERE,
279 base::Bind(error_callback, "StubError", "Property not found"));
280 return;
281 }
230 MessageLoop::current()->PostTask(FROM_HERE, callback); 282 MessageLoop::current()->PostTask(FROM_HERE, callback);
283 enabled_list->AppendIfNotPresent(new base::StringValue(type));
284 MessageLoop::current()->PostTask(
285 FROM_HERE,
286 base::Bind(&ShillManagerClientStubImpl::NotifyObserversPropertyChanged,
287 weak_ptr_factory_.GetWeakPtr(),
288 flimflam::kEnabledTechnologiesProperty));
231 } 289 }
232 290
233 // ShillManagerClient override. 291 // ShillManagerClient override.
234 virtual void DisableTechnology( 292 virtual void DisableTechnology(
235 const std::string& type, 293 const std::string& type,
236 const base::Closure& callback, 294 const base::Closure& callback,
237 const ErrorCallback& error_callback) OVERRIDE { 295 const ErrorCallback& error_callback) OVERRIDE {
296 base::ListValue* enabled_list;
297 if (!stub_properties_.GetListWithoutPathExpansion(
298 flimflam::kEnabledTechnologiesProperty, &enabled_list)) {
299 MessageLoop::current()->PostTask(
300 FROM_HERE,
301 base::Bind(error_callback, "StubError", "Property not found"));
302 return;
303 }
238 MessageLoop::current()->PostTask(FROM_HERE, callback); 304 MessageLoop::current()->PostTask(FROM_HERE, callback);
305 enabled_list->Remove(base::StringValue(type), NULL);
306 MessageLoop::current()->PostTask(
307 FROM_HERE,
308 base::Bind(&ShillManagerClientStubImpl::NotifyObserversPropertyChanged,
309 weak_ptr_factory_.GetWeakPtr(),
310 flimflam::kEnabledTechnologiesProperty));
239 } 311 }
240 312
241 // ShillManagerClient override. 313 // ShillManagerClient override.
242 virtual void ConfigureService( 314 virtual void ConfigureService(
243 const base::DictionaryValue& properties, 315 const base::DictionaryValue& properties,
244 const base::Closure& callback, 316 const base::Closure& callback,
245 const ErrorCallback& error_callback) OVERRIDE { 317 const ErrorCallback& error_callback) OVERRIDE {
246 MessageLoop::current()->PostTask(FROM_HERE, callback); 318 MessageLoop::current()->PostTask(FROM_HERE, callback);
247 } 319 }
248 320
249 // ShillManagerClient override. 321 // ShillManagerClient override.
250 virtual void GetService( 322 virtual void GetService(
251 const base::DictionaryValue& properties, 323 const base::DictionaryValue& properties,
252 const ObjectPathCallback& callback, 324 const ObjectPathCallback& callback,
253 const ErrorCallback& error_callback) OVERRIDE { 325 const ErrorCallback& error_callback) OVERRIDE {
254 MessageLoop::current()->PostTask(FROM_HERE, 326 MessageLoop::current()->PostTask(
255 base::Bind(callback, 327 FROM_HERE, base::Bind(callback, dbus::ObjectPath()));
256 dbus::ObjectPath()));
257 } 328 }
258 329
259 private: 330 private:
260 void PassStubProperties(const DictionaryValueCallback& callback) const { 331 void PassStubProperties(const DictionaryValueCallback& callback) const {
261 callback.Run(DBUS_METHOD_CALL_SUCCESS, stub_properties_); 332 callback.Run(DBUS_METHOD_CALL_SUCCESS, stub_properties_);
262 } 333 }
263 334
335 void NotifyObserversPropertyChanged(const std::string& property) {
336 base::Value* value;
337 if (!stub_properties_.GetWithoutPathExpansion(property, &value)) {
338 LOG(ERROR) << "Notify for unknown property: " << property;
339 return;
340 }
341 FOR_EACH_OBSERVER(ShillPropertyChangedObserver,
342 observer_list_,
343 OnPropertyChanged(property, *value));
344 }
345
264 base::DictionaryValue stub_properties_; 346 base::DictionaryValue stub_properties_;
347 ObserverList<ShillPropertyChangedObserver> observer_list_;
265 348
266 // Note: This should remain the last member so it'll be destroyed and 349 // Note: This should remain the last member so it'll be destroyed and
267 // invalidate its weak pointers before any other members are destroyed. 350 // invalidate its weak pointers before any other members are destroyed.
268 base::WeakPtrFactory<ShillManagerClientStubImpl> weak_ptr_factory_; 351 base::WeakPtrFactory<ShillManagerClientStubImpl> weak_ptr_factory_;
269 352
270 DISALLOW_COPY_AND_ASSIGN(ShillManagerClientStubImpl); 353 DISALLOW_COPY_AND_ASSIGN(ShillManagerClientStubImpl);
271 }; 354 };
272 355
273 } // namespace 356 } // namespace
274 357
275 ShillManagerClient::ShillManagerClient() {} 358 ShillManagerClient::ShillManagerClient() {}
276 359
277 ShillManagerClient::~ShillManagerClient() {} 360 ShillManagerClient::~ShillManagerClient() {}
278 361
279 // static 362 // static
280 ShillManagerClient* ShillManagerClient::Create( 363 ShillManagerClient* ShillManagerClient::Create(
281 DBusClientImplementationType type, 364 DBusClientImplementationType type,
282 dbus::Bus* bus) { 365 dbus::Bus* bus) {
283 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) 366 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION)
284 return new ShillManagerClientImpl(bus); 367 return new ShillManagerClientImpl(bus);
285 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); 368 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type);
286 return new ShillManagerClientStubImpl(); 369 return new ShillManagerClientStubImpl();
287 } 370 }
288 371
289 } // namespace chromeos 372 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698