| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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_stub.h" | 5 #include "chromeos/dbus/shill_manager_client_stub.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/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
| 11 #include "base/values.h" | 11 #include "base/values.h" |
| 12 #include "chromeos/chromeos_switches.h" | 12 #include "chromeos/chromeos_switches.h" |
| 13 #include "chromeos/dbus/dbus_thread_manager.h" | 13 #include "chromeos/dbus/dbus_thread_manager.h" |
| 14 #include "chromeos/dbus/shill_device_client.h" | 14 #include "chromeos/dbus/shill_device_client.h" |
| 15 #include "chromeos/dbus/shill_profile_client.h" |
| 15 #include "chromeos/dbus/shill_property_changed_observer.h" | 16 #include "chromeos/dbus/shill_property_changed_observer.h" |
| 16 #include "chromeos/dbus/shill_service_client.h" | 17 #include "chromeos/dbus/shill_service_client.h" |
| 17 #include "dbus/bus.h" | 18 #include "dbus/bus.h" |
| 18 #include "dbus/message.h" | 19 #include "dbus/message.h" |
| 19 #include "dbus/object_path.h" | 20 #include "dbus/object_path.h" |
| 20 #include "dbus/object_proxy.h" | 21 #include "dbus/object_proxy.h" |
| 21 #include "dbus/values_util.h" | 22 #include "dbus/values_util.h" |
| 22 #include "third_party/cros_system_api/dbus/service_constants.h" | 23 #include "third_party/cros_system_api/dbus/service_constants.h" |
| 23 | 24 |
| 24 namespace chromeos { | 25 namespace chromeos { |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 } | 176 } |
| 176 } | 177 } |
| 177 | 178 |
| 178 void ShillManagerClientStub::ConfigureService( | 179 void ShillManagerClientStub::ConfigureService( |
| 179 const base::DictionaryValue& properties, | 180 const base::DictionaryValue& properties, |
| 180 const ObjectPathCallback& callback, | 181 const ObjectPathCallback& callback, |
| 181 const ErrorCallback& error_callback) { | 182 const ErrorCallback& error_callback) { |
| 182 if (callback.is_null()) | 183 if (callback.is_null()) |
| 183 return; | 184 return; |
| 184 | 185 |
| 185 // For the purposes of this stub, we're going to assume that the GUID property | |
| 186 // is set to the service path because we don't want to re-implement Shill's | |
| 187 // property matching magic here. | |
| 188 ShillServiceClient::TestInterface* service_client = | 186 ShillServiceClient::TestInterface* service_client = |
| 189 DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface(); | 187 DBusThreadManager::Get()->GetShillServiceClient()->GetTestInterface(); |
| 190 | 188 |
| 191 std::string guid; | 189 std::string guid; |
| 192 std::string type; | 190 std::string type; |
| 193 if (!properties.GetString(flimflam::kGuidProperty, &guid) || | 191 if (!properties.GetString(flimflam::kGuidProperty, &guid) || |
| 194 !properties.GetString(flimflam::kTypeProperty, &type)) { | 192 !properties.GetString(flimflam::kTypeProperty, &type)) { |
| 195 // If the properties aren't filled out completely, then just return an empty | 193 // If the properties aren't filled out completely, then just return an empty |
| 196 // object path. | 194 // object path. |
| 197 MessageLoop::current()->PostTask( | 195 MessageLoop::current()->PostTask( |
| 198 FROM_HERE, base::Bind(callback, dbus::ObjectPath())); | 196 FROM_HERE, base::Bind(callback, dbus::ObjectPath())); |
| 199 return; | 197 return; |
| 200 } | 198 } |
| 201 | 199 |
| 200 // For the purposes of this stub, we're going to assume that the GUID property |
| 201 // is set to the service path because we don't want to re-implement Shill's |
| 202 // property matching magic here. |
| 203 std::string service_path = guid; |
| 204 |
| 202 std::string ipconfig_path; | 205 std::string ipconfig_path; |
| 203 properties.GetString(shill::kIPConfigProperty, &ipconfig_path); | 206 properties.GetString(shill::kIPConfigProperty, &ipconfig_path); |
| 204 | 207 |
| 205 // Add the service to the service client stub if not already there. | |
| 206 service_client->AddServiceWithIPConfig(guid, guid, type, flimflam::kStateIdle, | |
| 207 ipconfig_path, true); | |
| 208 | 208 |
| 209 // Merge the new properties with existing properties, if any. | 209 // Merge the new properties with existing properties, if any. |
| 210 scoped_ptr<base::DictionaryValue> merged_properties; | |
| 211 const base::DictionaryValue* existing_properties = | 210 const base::DictionaryValue* existing_properties = |
| 212 service_client->GetServiceProperties(guid); | 211 service_client->GetServiceProperties(service_path); |
| 213 if (existing_properties) { | 212 if (!existing_properties) { |
| 214 merged_properties.reset(existing_properties->DeepCopy()); | 213 // Add a new service to the service client stub because none exists, yet. |
| 215 } else { | 214 service_client->AddServiceWithIPConfig(service_path, guid, type, |
| 216 merged_properties.reset(new base::DictionaryValue); | 215 flimflam::kStateIdle, ipconfig_path, |
| 216 true); // Add service to watch list. |
| 217 existing_properties = service_client->GetServiceProperties(service_path); |
| 217 } | 218 } |
| 219 |
| 220 scoped_ptr<base::DictionaryValue> merged_properties( |
| 221 existing_properties->DeepCopy()); |
| 218 merged_properties->MergeDictionary(&properties); | 222 merged_properties->MergeDictionary(&properties); |
| 219 | 223 |
| 220 // Now set all the properties. | 224 // Now set all the properties. |
| 221 for (base::DictionaryValue::Iterator iter(*merged_properties); | 225 for (base::DictionaryValue::Iterator iter(*merged_properties); |
| 222 !iter.IsAtEnd(); iter.Advance()) { | 226 !iter.IsAtEnd(); iter.Advance()) { |
| 223 service_client->SetServiceProperty(guid, iter.key(), iter.value()); | 227 service_client->SetServiceProperty(service_path, iter.key(), iter.value()); |
| 224 } | 228 } |
| 225 | 229 |
| 230 ShillProfileClient::TestInterface* profile_test = |
| 231 DBusThreadManager::Get()->GetShillProfileClient()->GetTestInterface(); |
| 232 profile_test->AddService(service_path); |
| 233 |
| 226 MessageLoop::current()->PostTask( | 234 MessageLoop::current()->PostTask( |
| 227 FROM_HERE, base::Bind(callback, dbus::ObjectPath(guid))); | 235 FROM_HERE, base::Bind(callback, dbus::ObjectPath(service_path))); |
| 228 } | 236 } |
| 229 | 237 |
| 238 void ShillManagerClientStub::ConfigureServiceForProfile( |
| 239 const dbus::ObjectPath& profile_path, |
| 240 const base::DictionaryValue& properties, |
| 241 const ObjectPathCallback& callback, |
| 242 const ErrorCallback& error_callback) { |
| 243 std::string profile_property; |
| 244 properties.GetStringWithoutPathExpansion(flimflam::kProfileProperty, |
| 245 &profile_property); |
| 246 CHECK(profile_property == profile_path.value()); |
| 247 ConfigureService(properties, callback, error_callback); |
| 248 } |
| 249 |
| 250 |
| 230 void ShillManagerClientStub::GetService( | 251 void ShillManagerClientStub::GetService( |
| 231 const base::DictionaryValue& properties, | 252 const base::DictionaryValue& properties, |
| 232 const ObjectPathCallback& callback, | 253 const ObjectPathCallback& callback, |
| 233 const ErrorCallback& error_callback) { | 254 const ErrorCallback& error_callback) { |
| 234 if (callback.is_null()) | 255 if (callback.is_null()) |
| 235 return; | 256 return; |
| 236 MessageLoop::current()->PostTask( | 257 MessageLoop::current()->PostTask( |
| 237 FROM_HERE, base::Bind(callback, dbus::ObjectPath())); | 258 FROM_HERE, base::Bind(callback, dbus::ObjectPath())); |
| 238 } | 259 } |
| 239 | 260 |
| (...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 569 base::FundamentalValue(false)); | 590 base::FundamentalValue(false)); |
| 570 } | 591 } |
| 571 CallNotifyObserversPropertyChanged(flimflam::kServicesProperty, 0); | 592 CallNotifyObserversPropertyChanged(flimflam::kServicesProperty, 0); |
| 572 CallNotifyObserversPropertyChanged(flimflam::kServiceWatchListProperty, | 593 CallNotifyObserversPropertyChanged(flimflam::kServiceWatchListProperty, |
| 573 0); | 594 0); |
| 574 if (!callback.is_null()) | 595 if (!callback.is_null()) |
| 575 MessageLoop::current()->PostTask(FROM_HERE, callback); | 596 MessageLoop::current()->PostTask(FROM_HERE, callback); |
| 576 } | 597 } |
| 577 | 598 |
| 578 } // namespace chromeos | 599 } // namespace chromeos |
| OLD | NEW |