| OLD | NEW |
| 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 Loading... |
| 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 |
| OLD | NEW |