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