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

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: Separate out NetworkStateHandlerImpl, address feedback Created 8 years, 1 month 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 base::ListValue* watched_service_list = service_list->DeepCopy();
196 stub_properties_.Set(flimflam::kServicesProperty, service_list);
197 stub_properties_.Set(flimflam::kServiceWatchListProperty,
198 watched_service_list);
199
200 // Stub Technologies
201 base::ListValue* available_list = new base::ListValue;
202 available_list->Append(
203 base::Value::CreateStringValue(flimflam::kTypeEthernet));
204 available_list->Append(
205 base::Value::CreateStringValue(flimflam::kTypeWifi));
206 available_list->Append(
207 base::Value::CreateStringValue(flimflam::kTypeCellular));
208 stub_properties_.Set(flimflam::kAvailableTechnologiesProperty,
209 available_list);
210
211 base::ListValue* enabled_list = new base::ListValue;
212 enabled_list->Append(
213 base::Value::CreateStringValue(flimflam::kTypeEthernet));
214 enabled_list->Append(
215 base::Value::CreateStringValue(flimflam::kTypeWifi));
216 enabled_list->Append(
217 base::Value::CreateStringValue(flimflam::kTypeCellular));
218 stub_properties_.Set(flimflam::kEnabledTechnologiesProperty, enabled_list);
183 } 219 }
184 220
185 virtual ~ShillManagerClientStubImpl() {} 221 virtual ~ShillManagerClientStubImpl() {}
186 222
187 ////////////////////////////////// 223 //////////////////////////////////
188 // ShillManagerClient overrides. 224 // ShillManagerClient overrides.
189 virtual void AddPropertyChangedObserver( 225 virtual void AddPropertyChangedObserver(
190 ShillPropertyChangedObserver* observer) OVERRIDE {} 226 ShillPropertyChangedObserver* observer) OVERRIDE {
227 observer_list_.AddObserver(observer);
228 }
191 229
192 virtual void RemovePropertyChangedObserver( 230 virtual void RemovePropertyChangedObserver(
193 ShillPropertyChangedObserver* observer) OVERRIDE {} 231 ShillPropertyChangedObserver* observer) OVERRIDE {
232 observer_list_.RemoveObserver(observer);
233 }
194 234
195 // ShillManagerClient override. 235 // ShillManagerClient override.
196 virtual void GetProperties(const DictionaryValueCallback& callback) OVERRIDE { 236 virtual void GetProperties(const DictionaryValueCallback& callback) OVERRIDE {
197 MessageLoop::current()->PostTask( 237 MessageLoop::current()->PostTask(
198 FROM_HERE, base::Bind( 238 FROM_HERE, base::Bind(
199 &ShillManagerClientStubImpl::PassStubProperties, 239 &ShillManagerClientStubImpl::PassStubProperties,
200 weak_ptr_factory_.GetWeakPtr(), 240 weak_ptr_factory_.GetWeakPtr(),
201 callback)); 241 callback));
202 } 242 }
203 243
204 // ShillManagerClient override. 244 // ShillManagerClient override.
205 virtual base::DictionaryValue* CallGetPropertiesAndBlock() OVERRIDE { 245 virtual base::DictionaryValue* CallGetPropertiesAndBlock() OVERRIDE {
206 return new base::DictionaryValue; 246 return stub_properties_.DeepCopy();
207 } 247 }
208 248
209 // ShillManagerClient override. 249 // ShillManagerClient override.
210 virtual void SetProperty(const std::string& name, 250 virtual void SetProperty(const std::string& name,
211 const base::Value& value, 251 const base::Value& value,
212 const base::Closure& callback, 252 const base::Closure& callback,
213 const ErrorCallback& error_callback) OVERRIDE { 253 const ErrorCallback& error_callback) OVERRIDE {
214 stub_properties_.Set(name, value.DeepCopy()); 254 stub_properties_.Set(name, value.DeepCopy());
215 MessageLoop::current()->PostTask(FROM_HERE, callback); 255 MessageLoop::current()->PostTask(FROM_HERE, callback);
216 } 256 }
217 257
218 // ShillManagerClient override. 258 // ShillManagerClient override.
219 virtual void RequestScan(const std::string& type, 259 virtual void RequestScan(const std::string& type,
220 const base::Closure& callback, 260 const base::Closure& callback,
221 const ErrorCallback& error_callback) OVERRIDE { 261 const ErrorCallback& error_callback) OVERRIDE {
222 MessageLoop::current()->PostTask(FROM_HERE, callback); 262 MessageLoop::current()->PostTask(FROM_HERE, callback);
263 const int kScanDelaySeconds = 3;
264 MessageLoop::current()->PostDelayedTask(
265 FROM_HERE,
266 base::Bind(&ShillManagerClientStubImpl::NotifyObserversPropertyChanged,
267 weak_ptr_factory_.GetWeakPtr(),
268 flimflam::kServicesProperty),
269 base::TimeDelta::FromSeconds(kScanDelaySeconds));
223 } 270 }
224 271
225 // ShillManagerClient override. 272 // ShillManagerClient override.
226 virtual void EnableTechnology( 273 virtual void EnableTechnology(
227 const std::string& type, 274 const std::string& type,
228 const base::Closure& callback, 275 const base::Closure& callback,
229 const ErrorCallback& error_callback) OVERRIDE { 276 const ErrorCallback& error_callback) OVERRIDE {
277 base::ListValue* enabled_list;
278 if (!stub_properties_.GetListWithoutPathExpansion(
279 flimflam::kEnabledTechnologiesProperty, &enabled_list)) {
280 MessageLoop::current()->PostTask(
281 FROM_HERE,
282 base::Bind(error_callback, "StubError", "Property not found"));
283 return;
284 }
230 MessageLoop::current()->PostTask(FROM_HERE, callback); 285 MessageLoop::current()->PostTask(FROM_HERE, callback);
286 enabled_list->AppendIfNotPresent(new base::StringValue(type));
287 MessageLoop::current()->PostTask(
288 FROM_HERE,
289 base::Bind(&ShillManagerClientStubImpl::NotifyObserversPropertyChanged,
290 weak_ptr_factory_.GetWeakPtr(),
291 flimflam::kEnabledTechnologiesProperty));
231 } 292 }
232 293
233 // ShillManagerClient override. 294 // ShillManagerClient override.
234 virtual void DisableTechnology( 295 virtual void DisableTechnology(
235 const std::string& type, 296 const std::string& type,
236 const base::Closure& callback, 297 const base::Closure& callback,
237 const ErrorCallback& error_callback) OVERRIDE { 298 const ErrorCallback& error_callback) OVERRIDE {
299 base::ListValue* enabled_list;
300 if (!stub_properties_.GetListWithoutPathExpansion(
301 flimflam::kEnabledTechnologiesProperty, &enabled_list)) {
302 MessageLoop::current()->PostTask(
303 FROM_HERE,
304 base::Bind(error_callback, "StubError", "Property not found"));
305 return;
306 }
238 MessageLoop::current()->PostTask(FROM_HERE, callback); 307 MessageLoop::current()->PostTask(FROM_HERE, callback);
308 enabled_list->Remove(base::StringValue(type), NULL);
309 MessageLoop::current()->PostTask(
310 FROM_HERE,
311 base::Bind(&ShillManagerClientStubImpl::NotifyObserversPropertyChanged,
312 weak_ptr_factory_.GetWeakPtr(),
313 flimflam::kEnabledTechnologiesProperty));
239 } 314 }
240 315
241 // ShillManagerClient override. 316 // ShillManagerClient override.
242 virtual void ConfigureService( 317 virtual void ConfigureService(
243 const base::DictionaryValue& properties, 318 const base::DictionaryValue& properties,
244 const base::Closure& callback, 319 const base::Closure& callback,
245 const ErrorCallback& error_callback) OVERRIDE { 320 const ErrorCallback& error_callback) OVERRIDE {
246 MessageLoop::current()->PostTask(FROM_HERE, callback); 321 MessageLoop::current()->PostTask(FROM_HERE, callback);
247 } 322 }
248 323
249 // ShillManagerClient override. 324 // ShillManagerClient override.
250 virtual void GetService( 325 virtual void GetService(
251 const base::DictionaryValue& properties, 326 const base::DictionaryValue& properties,
252 const ObjectPathCallback& callback, 327 const ObjectPathCallback& callback,
253 const ErrorCallback& error_callback) OVERRIDE { 328 const ErrorCallback& error_callback) OVERRIDE {
254 MessageLoop::current()->PostTask(FROM_HERE, 329 MessageLoop::current()->PostTask(
255 base::Bind(callback, 330 FROM_HERE, base::Bind(callback, dbus::ObjectPath()));
256 dbus::ObjectPath()));
257 } 331 }
258 332
259 private: 333 private:
260 void PassStubProperties(const DictionaryValueCallback& callback) const { 334 void PassStubProperties(const DictionaryValueCallback& callback) const {
261 callback.Run(DBUS_METHOD_CALL_SUCCESS, stub_properties_); 335 callback.Run(DBUS_METHOD_CALL_SUCCESS, stub_properties_);
262 } 336 }
263 337
338 void NotifyObserversPropertyChanged(const std::string& property) {
339 base::Value* value;
340 if (!stub_properties_.GetWithoutPathExpansion(property, &value)) {
341 LOG(ERROR) << "Notify for unknown property: " << property;
342 return;
343 }
344 FOR_EACH_OBSERVER(ShillPropertyChangedObserver,
345 observer_list_,
346 OnPropertyChanged(property, *value));
347 }
348
264 base::DictionaryValue stub_properties_; 349 base::DictionaryValue stub_properties_;
350 ObserverList<ShillPropertyChangedObserver> observer_list_;
265 351
266 // Note: This should remain the last member so it'll be destroyed and 352 // Note: This should remain the last member so it'll be destroyed and
267 // invalidate its weak pointers before any other members are destroyed. 353 // invalidate its weak pointers before any other members are destroyed.
268 base::WeakPtrFactory<ShillManagerClientStubImpl> weak_ptr_factory_; 354 base::WeakPtrFactory<ShillManagerClientStubImpl> weak_ptr_factory_;
269 355
270 DISALLOW_COPY_AND_ASSIGN(ShillManagerClientStubImpl); 356 DISALLOW_COPY_AND_ASSIGN(ShillManagerClientStubImpl);
271 }; 357 };
272 358
273 } // namespace 359 } // namespace
274 360
275 ShillManagerClient::ShillManagerClient() {} 361 ShillManagerClient::ShillManagerClient() {}
276 362
277 ShillManagerClient::~ShillManagerClient() {} 363 ShillManagerClient::~ShillManagerClient() {}
278 364
279 // static 365 // static
280 ShillManagerClient* ShillManagerClient::Create( 366 ShillManagerClient* ShillManagerClient::Create(
281 DBusClientImplementationType type, 367 DBusClientImplementationType type,
282 dbus::Bus* bus) { 368 dbus::Bus* bus) {
283 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) 369 if (type == REAL_DBUS_CLIENT_IMPLEMENTATION)
284 return new ShillManagerClientImpl(bus); 370 return new ShillManagerClientImpl(bus);
285 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); 371 DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type);
286 return new ShillManagerClientStubImpl(); 372 return new ShillManagerClientStubImpl();
287 } 373 }
288 374
289 } // namespace chromeos 375 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698