Index: chromeos/dbus/fake_shill_service_client.cc |
diff --git a/chromeos/dbus/fake_shill_service_client.cc b/chromeos/dbus/fake_shill_service_client.cc |
index ef4ffe6e5d055036b3d89332433dba7d31019927..da3a810d913e0f7eaf27d84b05abd724b5db1381 100644 |
--- a/chromeos/dbus/fake_shill_service_client.cc |
+++ b/chromeos/dbus/fake_shill_service_client.cc |
@@ -13,6 +13,7 @@ |
#include "chromeos/dbus/dbus_thread_manager.h" |
#include "chromeos/dbus/shill_device_client.h" |
#include "chromeos/dbus/shill_manager_client.h" |
+#include "chromeos/dbus/shill_profile_client.h" |
#include "chromeos/dbus/shill_property_changed_observer.h" |
#include "chromeos/network/shill_property_util.h" |
#include "dbus/bus.h" |
@@ -309,12 +310,14 @@ void FakeShillServiceClient::AddService(const std::string& service_path, |
const std::string& state, |
bool add_to_visible_list, |
bool add_to_watch_list) { |
- AddServiceWithIPConfig(service_path, name, type, state, "", |
+ AddServiceWithIPConfig(service_path, "" /* guid */, name, |
+ type, state, "" /* ipconfig_path */, |
add_to_visible_list, add_to_watch_list); |
} |
void FakeShillServiceClient::AddServiceWithIPConfig( |
const std::string& service_path, |
+ const std::string& guid, |
const std::string& name, |
const std::string& type, |
const std::string& state, |
@@ -330,27 +333,59 @@ void FakeShillServiceClient::AddServiceWithIPConfig( |
base::DictionaryValue* properties = |
GetModifiableServiceProperties(service_path, true); |
connect_behavior_.erase(service_path); |
+ |
+ std::string profile_path; |
+ base::DictionaryValue profile_properties; |
+ if (DBusThreadManager::Get()->GetShillProfileClient()->GetTestInterface()-> |
+ GetService(service_path, &profile_path, &profile_properties)) { |
+ properties->SetWithoutPathExpansion( |
+ shill::kProfileProperty, |
+ new base::StringValue(profile_path)); |
+ } |
+ |
+ // If |guid| is provided, set Service.GUID to that. Otherwise if a GUID is |
+ // stored in a profile entry, use that. Otherwise leave it blank. Shill does |
+ // not enforce a valid guid, we do that at the NetworkStateHandler layer. |
+ std::string guid_to_set = guid; |
+ if (guid_to_set.empty()) { |
+ profile_properties.GetStringWithoutPathExpansion( |
+ shill::kGuidProperty, &guid_to_set); |
+ } |
+ if (!guid_to_set.empty()) { |
+ properties->SetWithoutPathExpansion(shill::kGuidProperty, |
+ new base::StringValue(guid_to_set)); |
+ } |
shill_property_util::SetSSID(name, properties); |
properties->SetWithoutPathExpansion( |
shill::kNameProperty, |
- base::Value::CreateStringValue(name)); |
+ new base::StringValue(name)); |
properties->SetWithoutPathExpansion( |
shill::kDeviceProperty, |
- base::Value::CreateStringValue(device_path)); |
+ new base::StringValue(device_path)); |
properties->SetWithoutPathExpansion( |
shill::kTypeProperty, |
- base::Value::CreateStringValue(type)); |
+ new base::StringValue(type)); |
properties->SetWithoutPathExpansion( |
shill::kStateProperty, |
- base::Value::CreateStringValue(state)); |
+ new base::StringValue(state)); |
if (!ipconfig_path.empty()) { |
properties->SetWithoutPathExpansion( |
shill::kIPConfigProperty, |
- base::Value::CreateStringValue(ipconfig_path)); |
+ new base::StringValue(ipconfig_path)); |
+ } |
+ if (type == shill::kTypeWifi) { |
+ properties->SetWithoutPathExpansion( |
+ shill::kSecurityProperty, |
+ new base::StringValue(shill::kSecurityNone)); |
} |
DBusThreadManager::Get()->GetShillManagerClient()->GetTestInterface()-> |
SortManagerServices(); |
+ |
+ if (!profile_path.empty()) { |
+ DBusThreadManager::Get()->GetShillProfileClient()->GetTestInterface()-> |
+ UpdateService(profile_path, service_path); |
+ } |
} |
void FakeShillServiceClient::RemoveService(const std::string& service_path) { |
@@ -390,6 +425,24 @@ bool FakeShillServiceClient::SetServiceProperty(const std::string& service_path, |
dict->MergeDictionary(&new_properties); |
+ // Add or update the profile entry. |
+ if (property == shill::kProfileProperty) { |
+ std::string profile_path; |
+ if (value.GetAsString(&profile_path)) { |
+ DBusThreadManager::Get()->GetShillProfileClient()->GetTestInterface()-> |
+ AddService(profile_path, service_path); |
+ } else { |
+ LOG(ERROR) << "Profile value is not a String!"; |
+ } |
+ } else { |
+ std::string profile_path; |
+ if (dict->GetStringWithoutPathExpansion( |
+ shill::kProfileProperty, &profile_path) && !profile_path.empty()) { |
+ DBusThreadManager::Get()->GetShillProfileClient()->GetTestInterface()-> |
+ UpdateService(profile_path, service_path); |
+ } |
+ } |
+ |
// Notify the Manager if the state changed (affects DefaultService). |
if (property == shill::kStateProperty) { |
std::string state; |
@@ -503,7 +556,7 @@ void FakeShillServiceClient::SetOtherServicesOffline( |
continue; |
properties->SetWithoutPathExpansion( |
shill::kStateProperty, |
- base::Value::CreateStringValue(shill::kStateIdle)); |
+ new base::StringValue(shill::kStateIdle)); |
} |
} |