Chromium Code Reviews| Index: chrome/browser/chromeos/cros/network_library.cc |
| diff --git a/chrome/browser/chromeos/cros/network_library.cc b/chrome/browser/chromeos/cros/network_library.cc |
| index 39500dee5f4e0b6672781e3325ee06332f72309a..edbb832a612cff75259da699cfc9d337f0063658 100644 |
| --- a/chrome/browser/chromeos/cros/network_library.cc |
| +++ b/chrome/browser/chromeos/cros/network_library.cc |
| @@ -5,6 +5,9 @@ |
| #include "chrome/browser/chromeos/cros/network_library.h" |
| #include <algorithm> |
| +#include <dbus/dbus-glib.h> |
| +#include <dbus/dbus-gtype-specialized.h> |
| +#include <glib-object.h> |
| #include <map> |
| #include <set> |
| @@ -69,7 +72,7 @@ |
| // the "Services" message which list all visible networks. The handler |
| // rebuilds the network lists without destroying existing Network structures, |
| // then requests neccessary updates to be fetched asynchronously from |
| -// libcros (RequestNetworkServiceInfo). |
| +// libcros (RequestNetworkServiceProperties). |
| // |
| // TODO(stevenjb): Document cellular data plan handlers. |
| // |
| @@ -114,17 +117,17 @@ const char* kAlwaysInRoamingOperators[] = { |
| // Safe string constructor since we can't rely on non NULL pointers |
| // for string values from libcros. |
| -static std::string SafeString(const char* s) { |
| +std::string SafeString(const char* s) { |
| return s ? std::string(s) : std::string(); |
| } |
| // Erase the memory used by a string, then clear it. |
| -static void WipeString(std::string* str) { |
| +void WipeString(std::string* str) { |
| str->assign(str->size(), '\0'); |
| str->clear(); |
| } |
| -static bool EnsureCrosLoaded() { |
| +bool EnsureCrosLoaded() { |
| if (!CrosLibrary::Get()->EnsureLoaded() || |
| !CrosLibrary::Get()->GetNetworkLibrary()->IsCros()) { |
| return false; |
| @@ -135,7 +138,7 @@ static bool EnsureCrosLoaded() { |
| } |
| } |
| -static void ValidateUTF8(const std::string& str, std::string* output) { |
| +void ValidateUTF8(const std::string& str, std::string* output) { |
| output->clear(); |
| for (int32 index = 0; index < static_cast<int32>(str.size()); ++index) { |
| @@ -150,6 +153,136 @@ static void ValidateUTF8(const std::string& str, std::string* output) { |
| } |
| } |
| +//////////////////////////////////////////////////////////////////////////////// |
| +// glib |
| + |
| +Value* ConvertGlibValue(const GValue* gvalue); |
| + |
| +void AppendListElement(const GValue* gvalue, gpointer user_data) { |
| + ListValue* list = static_cast<ListValue*>(user_data); |
| + Value* value = ConvertGlibValue(gvalue); |
| + list->Append(value); |
| +} |
| + |
| +void AppendDictionaryElement(const GValue* keyvalue, |
| + const GValue* gvalue, |
| + gpointer user_data) { |
| + DictionaryValue* dict = static_cast<DictionaryValue*>(user_data); |
| + std::string key(g_value_get_string(keyvalue)); |
| + Value* value = ConvertGlibValue(gvalue); |
| + dict->SetWithoutPathExpansion(key, value); |
| +} |
| + |
| +Value* ConvertGlibValue(const GValue* gvalue) { |
| + if (G_VALUE_HOLDS_STRING(gvalue)) { |
| + return Value::CreateStringValue(g_value_get_string(gvalue)); |
| + } else if (G_VALUE_HOLDS_BOOLEAN(gvalue)) { |
| + return Value::CreateBooleanValue( |
| + static_cast<bool>(g_value_get_boolean(gvalue))); |
| + } else if (G_VALUE_HOLDS_INT(gvalue)) { |
| + return Value::CreateIntegerValue(g_value_get_int(gvalue)); |
| + } else if (G_VALUE_HOLDS_UINT(gvalue)) { |
| + return Value::CreateIntegerValue( |
| + static_cast<int>(g_value_get_uint(gvalue))); |
| + } else if (G_VALUE_HOLDS_UCHAR(gvalue)) { |
| + return Value::CreateIntegerValue( |
| + static_cast<int>(g_value_get_uchar(gvalue))); |
| + } else if (G_VALUE_HOLDS(gvalue, DBUS_TYPE_G_OBJECT_PATH)) { |
| + const char* path = static_cast<const char*>(g_value_get_boxed(gvalue)); |
| + return Value::CreateStringValue(path); |
| + } else if (G_VALUE_HOLDS(gvalue, G_TYPE_STRV)) { |
| + ListValue* list = new ListValue(); |
| + for (GStrv strv = static_cast<GStrv>(g_value_get_boxed(gvalue)); |
| + *strv != NULL; ++strv) { |
| + list->Append(Value::CreateStringValue(*strv)); |
| + } |
| + return list; |
| + } else if (dbus_g_type_is_collection(G_VALUE_TYPE(gvalue))) { |
| + ListValue* list = new ListValue(); |
| + dbus_g_type_collection_value_iterate(gvalue, AppendListElement, list); |
| + return list; |
| + } else if (dbus_g_type_is_map(G_VALUE_TYPE(gvalue))) { |
| + DictionaryValue* dict = new DictionaryValue(); |
| + dbus_g_type_map_value_iterate(gvalue, AppendDictionaryElement, dict); |
| + return dict; |
| + } else if (G_VALUE_HOLDS(gvalue, G_TYPE_VALUE)) { |
| + const GValue* bvalue = static_cast<GValue*>(g_value_get_boxed(gvalue)); |
| + return ConvertGlibValue(bvalue); |
| + } else { |
| + LOG(ERROR) << "Unrecognized Glib value type: " << G_VALUE_TYPE(gvalue); |
| + return Value::CreateNullValue(); |
| + } |
| +} |
| + |
| +DictionaryValue* ConvertGHashTable(GHashTable* ghash) { |
| + DictionaryValue* dict = new DictionaryValue(); |
| + GHashTableIter iter; |
| + gpointer gkey, gvalue; |
| + g_hash_table_iter_init(&iter, ghash); |
| + while (g_hash_table_iter_next(&iter, &gkey, &gvalue)) { |
| + std::string key(static_cast<char*>(gkey)); |
| + Value* value = ConvertGlibValue(static_cast<GValue*>(gvalue)); |
| + dict->SetWithoutPathExpansion(key, value); |
| + } |
| + return dict; |
| +} |
| + |
| +GValue* ConvertBoolToGValue(bool b) { |
| + GValue* gvalue = new GValue(); |
| + g_value_init(gvalue, G_TYPE_BOOLEAN); |
| + g_value_set_boolean(gvalue, b); |
| + return gvalue; |
| +} |
| + |
| +GValue* ConvertIntToGValue(int i) { |
| + // Converting to a 32-bit signed int type in particular, since |
| + // that's what flimflam expects in its DBus API |
|
satorux1
2011/08/29 19:52:47
Not fault of this change, but use of base::Value f
|
| + GValue* gvalue = new GValue(); |
| + g_value_init(gvalue, G_TYPE_INT); |
| + g_value_set_int(gvalue, i); |
| + return gvalue; |
| +} |
| + |
| +GValue* ConvertStringToGValue(const std::string& s) { |
| + GValue* gvalue = new GValue(); |
| + g_value_init(gvalue, G_TYPE_STRING); |
| + g_value_set_string(gvalue, s.c_str()); |
| + return gvalue; |
| +} |
| + |
| +GValue* ConvertValueToGValue(const Value* value) { |
| + switch (value->GetType()) { |
| + case Value::TYPE_BOOLEAN: { |
| + bool out; |
| + if (value->GetAsBoolean(&out)) |
| + return ConvertBoolToGValue(out); |
| + break; |
| + } |
| + case Value::TYPE_INTEGER: { |
| + int out; |
| + if (value->GetAsInteger(&out)) |
| + return ConvertIntToGValue(out); |
| + break; |
| + } |
| + case Value::TYPE_STRING: { |
| + std::string out; |
| + if (value->GetAsString(&out)) |
| + return ConvertStringToGValue(out); |
| + break; |
| + } |
| + case Value::TYPE_NULL: |
| + case Value::TYPE_DOUBLE: |
| + case Value::TYPE_BINARY: |
| + case Value::TYPE_DICTIONARY: |
| + case Value::TYPE_LIST: |
| + // Other Value types shouldn't be passed through this mechanism. |
| + NOTREACHED() << "Unconverted Value of type: " << value->GetType(); |
| + return NULL; |
| + } |
| + NOTREACHED() << "Value conversion failed, type: " << value->GetType(); |
| + return NULL; |
| +} |
| + |
| } // namespace |
| //////////////////////////////////////////////////////////////////////////////// |
| @@ -263,12 +396,14 @@ bool Network::RequiresUserProfile() const { |
| void Network::CopyCredentialsFromRemembered(Network* remembered) { |
| } |
| -void Network::SetValueProperty(const char* prop, Value* val) { |
| +void Network::SetValueProperty(const char* prop, Value* value) { |
| DCHECK(prop); |
| - DCHECK(val); |
| + DCHECK(value); |
| if (!EnsureCrosLoaded()) |
| return; |
| - chromeos::SetNetworkServiceProperty(service_path_.c_str(), prop, val); |
| + scoped_ptr<GValue> gvalue(ConvertValueToGValue(value)); |
| + chromeos::SetNetworkServicePropertyGValue( |
| + service_path_.c_str(), prop, gvalue.get()); |
| } |
| void Network::ClearProperty(const char* prop) { |
| @@ -2987,12 +3122,12 @@ class NetworkLibraryImplCros : public NetworkLibraryImplBase { |
| ////////////////////////////////////////////////////////////////////////////// |
| // Calbacks. |
| static void NetworkStatusChangedHandler( |
| - void* object, const char* path, const char* key, const Value* value); |
| + void* object, const char* path, const char* key, const GValue* value); |
| void UpdateNetworkStatus( |
| const std::string& path, const std::string& key, const Value& value); |
| static void NetworkDevicePropertyChangedHandler( |
| - void* object, const char* path, const char* key, const Value* value); |
| + void* object, const char* path, const char* key, const GValue* gvalue); |
| void UpdateNetworkDeviceStatus( |
| const std::string& path, const std::string& key, const Value& value); |
| @@ -3012,27 +3147,27 @@ class NetworkLibraryImplCros : public NetworkLibraryImplBase { |
| const char* error_message); |
| static void WifiServiceUpdateAndConnect( |
| - void* object, const char* service_path, const Value* info); |
| + void* object, const char* service_path, GHashTable* ghash); |
| static void VPNServiceUpdateAndConnect( |
| - void* object, const char* service_path, const Value* info); |
| + void* object, const char* service_path, GHashTable* ghash); |
| static void NetworkManagerStatusChangedHandler( |
| - void* object, const char* path, const char* key, const Value* value); |
| + void* object, const char* path, const char* key, const GValue* value); |
| static void NetworkManagerUpdate( |
| - void* object, const char* manager_path, const Value* info); |
| + void* object, const char* manager_path, GHashTable* ghash); |
| static void DataPlanUpdateHandler(void* object, |
| const char* modem_service_path, |
| const CellularDataPlanList* dataplan); |
| static void NetworkServiceUpdate( |
| - void* object, const char* service_path, const Value* info); |
| + void* object, const char* service_path, GHashTable* ghash); |
| static void RememberedNetworkServiceUpdate( |
| - void* object, const char* service_path, const Value* info); |
| + void* object, const char* service_path, GHashTable* ghash); |
| static void ProfileUpdate( |
| - void* object, const char* profile_path, const Value* info); |
| + void* object, const char* profile_path, GHashTable* ghash); |
| static void NetworkDeviceUpdate( |
| - void* object, const char* device_path, const Value* info); |
| + void* object, const char* device_path, GHashTable* ghash); |
| private: |
| // This processes all Manager update messages. |
| @@ -3069,11 +3204,11 @@ class NetworkLibraryImplCros : public NetworkLibraryImplBase { |
| NetworkLibrary* cros, const NetworkDevice* device) OVERRIDE {} |
| }; |
| - typedef std::map<std::string, chromeos::PropertyChangeMonitor> |
| - PropertyChangeMonitorMap; |
| + typedef std::map<std::string, chromeos::NetworkPropertiesMonitor> |
| + NetworkPropertiesMonitorMap; |
| // For monitoring network manager status changes. |
| - PropertyChangeMonitor network_manager_monitor_; |
| + NetworkPropertiesMonitor network_manager_monitor_; |
| // For monitoring data plan changes to the connected cellular network. |
| DataPlanUpdateMonitor data_plan_monitor_; |
| @@ -3082,10 +3217,10 @@ class NetworkLibraryImplCros : public NetworkLibraryImplBase { |
| scoped_ptr<NetworkLibraryDeviceObserver> network_device_observer_; |
| // Map of monitored networks. |
| - PropertyChangeMonitorMap montitored_networks_; |
| + NetworkPropertiesMonitorMap montitored_networks_; |
| // Map of monitored devices. |
| - PropertyChangeMonitorMap montitored_devices_; |
| + NetworkPropertiesMonitorMap montitored_devices_; |
| DISALLOW_COPY_AND_ASSIGN(NetworkLibraryImplCros); |
| }; |
| @@ -3100,16 +3235,18 @@ NetworkLibraryImplCros::NetworkLibraryImplCros() |
| NetworkLibraryImplCros::~NetworkLibraryImplCros() { |
| if (network_manager_monitor_) |
| - chromeos::DisconnectPropertyChangeMonitor(network_manager_monitor_); |
| + chromeos::DisconnectNetworkPropertiesMonitor(network_manager_monitor_); |
| if (data_plan_monitor_) |
| chromeos::DisconnectDataPlanUpdateMonitor(data_plan_monitor_); |
| - for (PropertyChangeMonitorMap::iterator iter = montitored_networks_.begin(); |
| + for (NetworkPropertiesMonitorMap::iterator iter = |
| + montitored_networks_.begin(); |
| iter != montitored_networks_.end(); ++iter) { |
| - chromeos::DisconnectPropertyChangeMonitor(iter->second); |
| + chromeos::DisconnectNetworkPropertiesMonitor(iter->second); |
| } |
| - for (PropertyChangeMonitorMap::iterator iter = montitored_devices_.begin(); |
| + for (NetworkPropertiesMonitorMap::iterator iter = |
| + montitored_devices_.begin(); |
| iter != montitored_devices_.end(); ++iter) { |
| - chromeos::DisconnectPropertyChangeMonitor(iter->second); |
| + chromeos::DisconnectNetworkPropertiesMonitor(iter->second); |
| } |
| } |
| @@ -3117,10 +3254,10 @@ void NetworkLibraryImplCros::Init() { |
| // First, get the currently available networks. This data is cached |
| // on the connman side, so the call should be quick. |
| VLOG(1) << "Requesting initial network manager info from libcros."; |
| - chromeos::RequestNetworkManagerInfo(&NetworkManagerUpdate, this); |
| + chromeos::RequestNetworkManagerProperties(&NetworkManagerUpdate, this); |
| network_manager_monitor_ = |
| - chromeos::MonitorNetworkManager(&NetworkManagerStatusChangedHandler, |
| - this); |
| + chromeos::MonitorNetworkManagerProperties( |
| + &NetworkManagerStatusChangedHandler, this); |
| data_plan_monitor_ = |
| chromeos::MonitorCellularDataPlan(&DataPlanUpdateHandler, this); |
| // Always have at least one device obsever so that device updates are |
| @@ -3134,20 +3271,19 @@ void NetworkLibraryImplCros::Init() { |
| void NetworkLibraryImplCros::MonitorNetworkStart( |
| const std::string& service_path) { |
| if (montitored_networks_.find(service_path) == montitored_networks_.end()) { |
| - chromeos::PropertyChangeMonitor monitor = |
| - chromeos::MonitorNetworkService(&NetworkStatusChangedHandler, |
| - service_path.c_str(), |
| - this); |
| + chromeos::NetworkPropertiesMonitor monitor = |
| + chromeos::MonitorNetworkServiceProperties( |
| + &NetworkStatusChangedHandler, service_path.c_str(), this); |
| montitored_networks_[service_path] = monitor; |
| } |
| } |
| void NetworkLibraryImplCros::MonitorNetworkStop( |
| const std::string& service_path) { |
| - PropertyChangeMonitorMap::iterator iter = |
| + NetworkPropertiesMonitorMap::iterator iter = |
| montitored_networks_.find(service_path); |
| if (iter != montitored_networks_.end()) { |
| - chromeos::DisconnectPropertyChangeMonitor(iter->second); |
| + chromeos::DisconnectNetworkPropertiesMonitor(iter->second); |
| montitored_networks_.erase(iter); |
| } |
| } |
| @@ -3155,32 +3291,32 @@ void NetworkLibraryImplCros::MonitorNetworkStop( |
| void NetworkLibraryImplCros::MonitorNetworkDeviceStart( |
| const std::string& device_path) { |
| if (montitored_devices_.find(device_path) == montitored_devices_.end()) { |
| - chromeos::PropertyChangeMonitor monitor = |
| - chromeos::MonitorNetworkDevice(&NetworkDevicePropertyChangedHandler, |
| - device_path.c_str(), |
| - this); |
| + chromeos::NetworkPropertiesMonitor monitor = |
| + chromeos::MonitorNetworkDeviceProperties( |
| + &NetworkDevicePropertyChangedHandler, device_path.c_str(), this); |
| montitored_devices_[device_path] = monitor; |
| } |
| } |
| void NetworkLibraryImplCros::MonitorNetworkDeviceStop( |
| const std::string& device_path) { |
| - PropertyChangeMonitorMap::iterator iter = |
| + NetworkPropertiesMonitorMap::iterator iter = |
| montitored_devices_.find(device_path); |
| if (iter != montitored_devices_.end()) { |
| - chromeos::DisconnectPropertyChangeMonitor(iter->second); |
| + chromeos::DisconnectNetworkPropertiesMonitor(iter->second); |
| montitored_devices_.erase(iter); |
| } |
| } |
| // static callback |
| void NetworkLibraryImplCros::NetworkStatusChangedHandler( |
| - void* object, const char* path, const char* key, const Value* value) { |
| + void* object, const char* path, const char* key, const GValue* gvalue) { |
| NetworkLibraryImplCros* networklib = |
| static_cast<NetworkLibraryImplCros*>(object); |
| DCHECK(networklib); |
| - if (key == NULL || value == NULL || path == NULL || object == NULL) |
| + if (key == NULL || gvalue == NULL || path == NULL || object == NULL) |
| return; |
| + scoped_ptr<Value> value(ConvertGlibValue(gvalue)); |
| networklib->UpdateNetworkStatus(std::string(path), std::string(key), *value); |
| } |
| @@ -3206,12 +3342,13 @@ void NetworkLibraryImplCros::UpdateNetworkStatus( |
| // static callback |
| void NetworkLibraryImplCros::NetworkDevicePropertyChangedHandler( |
| - void* object, const char* path, const char* key, const Value* value) { |
| + void* object, const char* path, const char* key, const GValue* gvalue) { |
| NetworkLibraryImplCros* networklib = |
| static_cast<NetworkLibraryImplCros*>(object); |
| DCHECK(networklib); |
| - if (key == NULL || value == NULL || path == NULL || object == NULL) |
| + if (key == NULL || gvalue == NULL || path == NULL || object == NULL) |
| return; |
| + scoped_ptr<Value> value(ConvertGlibValue(gvalue)); |
| networklib->UpdateNetworkDeviceStatus(std::string(path), |
| std::string(key), |
| *value); |
| @@ -3246,9 +3383,9 @@ void NetworkLibraryImplCros::UpdateNetworkDeviceStatus( |
| NotifyNetworkDeviceChanged(device, index); |
| // If a device's power state changes, new properties may become defined. |
| if (index == PROPERTY_INDEX_POWERED) |
| - chromeos::RequestNetworkDeviceInfo(path.c_str(), |
| - &NetworkDeviceUpdate, |
| - this); |
| + chromeos::RequestNetworkDeviceProperties(path.c_str(), |
| + &NetworkDeviceUpdate, |
| + this); |
| } |
| } |
| @@ -3293,15 +3430,14 @@ void NetworkLibraryImplCros::CallConnectToNetwork(Network* network) { |
| // static callback |
| void NetworkLibraryImplCros::WifiServiceUpdateAndConnect( |
| - void* object, const char* service_path, const Value* info) { |
| + void* object, const char* service_path, GHashTable* ghash) { |
| NetworkLibraryImplCros* networklib = |
| static_cast<NetworkLibraryImplCros*>(object); |
| DCHECK(networklib); |
| - if (service_path && info) { |
| - DCHECK_EQ(info->GetType(), Value::TYPE_DICTIONARY); |
| - const DictionaryValue* dict = static_cast<const DictionaryValue*>(info); |
| + if (service_path && ghash) { |
| + scoped_ptr<DictionaryValue> dict(ConvertGHashTable(ghash)); |
| Network* network = |
| - networklib->ParseNetwork(std::string(service_path), *dict); |
| + networklib->ParseNetwork(std::string(service_path), *(dict.get())); |
| DCHECK_EQ(network->type(), TYPE_WIFI); |
| networklib->ConnectToWifiNetworkUsingConnectData( |
| static_cast<WifiNetwork*>(network)); |
| @@ -3312,24 +3448,24 @@ void NetworkLibraryImplCros::CallRequestWifiNetworkAndConnect( |
| const std::string& ssid, ConnectionSecurity security) { |
| // Asynchronously request service properties and call |
| // WifiServiceUpdateAndConnect. |
| - chromeos::RequestHiddenWifiNetwork(ssid.c_str(), |
| - SecurityToString(security), |
| - WifiServiceUpdateAndConnect, |
| - this); |
| + chromeos::RequestHiddenWifiNetworkProperties( |
| + ssid.c_str(), |
| + SecurityToString(security), |
| + WifiServiceUpdateAndConnect, |
| + this); |
| } |
| // static callback |
| void NetworkLibraryImplCros::VPNServiceUpdateAndConnect( |
| - void* object, const char* service_path, const Value* info) { |
| + void* object, const char* service_path, GHashTable* ghash) { |
| NetworkLibraryImplCros* networklib = |
| static_cast<NetworkLibraryImplCros*>(object); |
| DCHECK(networklib); |
| - if (service_path && info) { |
| + if (service_path && ghash) { |
| VLOG(1) << "Connecting to new VPN Service: " << service_path; |
| - DCHECK_EQ(info->GetType(), Value::TYPE_DICTIONARY); |
| - const DictionaryValue* dict = static_cast<const DictionaryValue*>(info); |
| + scoped_ptr<DictionaryValue> dict(ConvertGHashTable(ghash)); |
| Network* network = |
| - networklib->ParseNetwork(std::string(service_path), *dict); |
| + networklib->ParseNetwork(std::string(service_path), *(dict.get())); |
| DCHECK_EQ(network->type(), TYPE_VPN); |
| networklib->ConnectToVirtualNetworkUsingConnectData( |
| static_cast<VirtualNetwork*>(network)); |
| @@ -3342,11 +3478,12 @@ void NetworkLibraryImplCros::CallRequestVirtualNetworkAndConnect( |
| const std::string& service_name, |
| const std::string& server_hostname, |
| ProviderType provider_type) { |
| - chromeos::RequestVirtualNetwork(service_name.c_str(), |
| - server_hostname.c_str(), |
| - ProviderTypeToString(provider_type), |
| - VPNServiceUpdateAndConnect, |
| - this); |
| + chromeos::RequestVirtualNetworkProperties( |
| + service_name.c_str(), |
| + server_hostname.c_str(), |
| + ProviderTypeToString(provider_type), |
| + VPNServiceUpdateAndConnect, |
| + this); |
| } |
| void NetworkLibraryImplCros::CallDeleteRememberedNetwork( |
| @@ -3489,10 +3626,10 @@ void NetworkLibraryImplCros::SetCellularDataRoamingAllowed(bool new_value) { |
| "w/o cellular device."; |
| return; |
| } |
| - scoped_ptr<Value> value(Value::CreateBooleanValue(new_value)); |
| - chromeos::SetNetworkDeviceProperty(cellular->device_path().c_str(), |
| - kCellularAllowRoamingProperty, |
| - value.get()); |
| + scoped_ptr<GValue> gvalue(ConvertBoolToGValue(new_value)); |
| + chromeos::SetNetworkDevicePropertyGValue(cellular->device_path().c_str(), |
| + kCellularAllowRoamingProperty, |
| + gvalue.get()); |
| } |
| bool NetworkLibraryImplCros::IsCellularAlwaysInRoaming() { |
| @@ -3519,7 +3656,7 @@ void NetworkLibraryImplCros::RequestNetworkScan() { |
| cellular_network()->RefreshDataPlansIfNeeded(); |
| // Make sure all Manager info is up to date. This will also update |
| // remembered networks and visible services. |
| - chromeos::RequestNetworkManagerInfo(&NetworkManagerUpdate, this); |
| + chromeos::RequestNetworkManagerProperties(&NetworkManagerUpdate, this); |
| } |
| bool NetworkLibraryImplCros::GetWifiAccessPoints( |
| @@ -3650,35 +3787,30 @@ void NetworkLibraryImplCros::SetIPConfig(const NetworkIPConfig& ipconfig) { |
| if (ipconfig_static) { |
| // Save any changed details. |
| if (ipconfig.address != ipconfig_static->address) { |
| - scoped_ptr<Value> value(Value::CreateStringValue(ipconfig.address)); |
| - chromeos::SetNetworkIPConfigProperty(ipconfig_static->path, |
| - kAddressProperty, |
| - value.get()); |
| + scoped_ptr<GValue> gvalue(ConvertStringToGValue(ipconfig.address)); |
| + chromeos::SetNetworkIPConfigPropertyGValue( |
| + ipconfig_static->path, kAddressProperty, gvalue.get()); |
| } |
| if (ipconfig.netmask != ipconfig_static->netmask) { |
| - int32 prefixlen = ipconfig.GetPrefixLength(); |
| + int prefixlen = ipconfig.GetPrefixLength(); |
| if (prefixlen == -1) { |
| VLOG(1) << "IP config prefixlen is invalid for netmask " |
| << ipconfig.netmask; |
| } else { |
| - scoped_ptr<Value> value(Value::CreateIntegerValue(prefixlen)); |
| - chromeos::SetNetworkIPConfigProperty(ipconfig_static->path, |
| - kPrefixlenProperty, |
| - value.get()); |
| + scoped_ptr<GValue> gvalue(ConvertIntToGValue(prefixlen)); |
| + chromeos::SetNetworkIPConfigPropertyGValue( |
| + ipconfig_static->path, kPrefixlenProperty, gvalue.get()); |
| } |
| } |
| if (ipconfig.gateway != ipconfig_static->gateway) { |
| - scoped_ptr<Value> value(Value::CreateStringValue(ipconfig.gateway)); |
| - chromeos::SetNetworkIPConfigProperty(ipconfig_static->path, |
| - kGatewayProperty, |
| - value.get()); |
| + scoped_ptr<GValue> gvalue(ConvertStringToGValue(ipconfig.gateway)); |
| + chromeos::SetNetworkIPConfigPropertyGValue( |
| + ipconfig_static->path, kGatewayProperty, gvalue.get()); |
| } |
| if (ipconfig.name_servers != ipconfig_static->name_servers) { |
| - scoped_ptr<Value> value( |
| - Value::CreateStringValue(ipconfig.name_servers)); |
| - chromeos::SetNetworkIPConfigProperty(ipconfig_static->path, |
| - kNameServersProperty, |
| - value.get()); |
| + scoped_ptr<GValue> gvalue(ConvertStringToGValue(ipconfig.name_servers)); |
| + chromeos::SetNetworkIPConfigPropertyGValue( |
| + ipconfig_static->path, kNameServersProperty, gvalue.get()); |
| } |
| // Remove dhcp ip config if there is one. |
| if (ipconfig_dhcp) |
| @@ -3697,11 +3829,12 @@ void NetworkLibraryImplCros::SetIPConfig(const NetworkIPConfig& ipconfig) { |
| // static |
| void NetworkLibraryImplCros::NetworkManagerStatusChangedHandler( |
| - void* object, const char* path, const char* key, const Value* value) { |
| + void* object, const char* path, const char* key, const GValue* gvalue) { |
| NetworkLibraryImplCros* networklib = |
| static_cast<NetworkLibraryImplCros*>(object); |
| DCHECK(networklib); |
| - networklib->NetworkManagerStatusChanged(key, value); |
| + scoped_ptr<Value> value(ConvertGlibValue(gvalue)); |
| + networklib->NetworkManagerStatusChanged(key, value.get()); |
| } |
| // This processes all Manager update messages. |
| @@ -3797,18 +3930,17 @@ void NetworkLibraryImplCros::NetworkManagerStatusChanged( |
| // static |
| void NetworkLibraryImplCros::NetworkManagerUpdate( |
| - void* object, const char* manager_path, const Value* info) { |
| + void* object, const char* manager_path, GHashTable* ghash) { |
| NetworkLibraryImplCros* networklib = |
| static_cast<NetworkLibraryImplCros*>(object); |
| DCHECK(networklib); |
| - if (!info) { |
| + if (!ghash) { |
| LOG(ERROR) << "Error retrieving manager properties: " << manager_path; |
| return; |
| } |
| VLOG(1) << "Received NetworkManagerUpdate."; |
| - DCHECK_EQ(info->GetType(), Value::TYPE_DICTIONARY); |
| - const DictionaryValue* dict = static_cast<const DictionaryValue*>(info); |
| - networklib->ParseNetworkManager(*dict); |
| + scoped_ptr<DictionaryValue> dict(ConvertGHashTable(ghash)); |
| + networklib->ParseNetworkManager(*(dict.get())); |
| } |
| void NetworkLibraryImplCros::ParseNetworkManager(const DictionaryValue& dict) { |
| @@ -3921,9 +4053,9 @@ void NetworkLibraryImplCros::UpdateNetworkServiceList( |
| // Use update_request map to store network priority. |
| network_update_requests_[service_path] = network_priority_order++; |
| wifi_scanning_ = true; |
| - chromeos::RequestNetworkServiceInfo(service_path.c_str(), |
| - &NetworkServiceUpdate, |
| - this); |
| + chromeos::RequestNetworkServiceProperties(service_path.c_str(), |
| + &NetworkServiceUpdate, |
| + this); |
| } |
| } |
| // Iterate through list of remaining networks that are no longer in the |
| @@ -3966,25 +4098,24 @@ void NetworkLibraryImplCros::UpdateWatchedNetworkServiceList( |
| (*iter)->GetAsString(&service_path); |
| if (!service_path.empty()) { |
| VLOG(1) << "Watched Service: " << service_path; |
| - chromeos::RequestNetworkServiceInfo(service_path.c_str(), |
| - &NetworkServiceUpdate, |
| - this); |
| + chromeos::RequestNetworkServiceProperties(service_path.c_str(), |
| + &NetworkServiceUpdate, |
| + this); |
| } |
| } |
| } |
| // static |
| void NetworkLibraryImplCros::NetworkServiceUpdate( |
| - void* object, const char* service_path, const Value* info) { |
| + void* object, const char* service_path, GHashTable* ghash) { |
| NetworkLibraryImplCros* networklib = |
| static_cast<NetworkLibraryImplCros*>(object); |
| DCHECK(networklib); |
| if (service_path) { |
| - if (!info) |
| + if (!ghash) |
| return; // Network no longer in visible list, ignore. |
| - DCHECK_EQ(info->GetType(), Value::TYPE_DICTIONARY); |
| - const DictionaryValue* dict = static_cast<const DictionaryValue*>(info); |
| - networklib->ParseNetwork(std::string(service_path), *dict); |
| + scoped_ptr<DictionaryValue> dict(ConvertGHashTable(ghash)); |
| + networklib->ParseNetwork(std::string(service_path), *(dict.get())); |
| } |
| } |
| @@ -4077,7 +4208,7 @@ void NetworkLibraryImplCros::UpdateRememberedNetworks( |
| void NetworkLibraryImplCros::RequestRememberedNetworksUpdate() { |
| VLOG(1) << "RequestRememberedNetworksUpdate"; |
| // Delete all remembered networks. We delete them because |
| - // RequestNetworkProfile is asynchronous and may invoke |
| + // RequestNetworkProfileProperties is asynchronous and may invoke |
| // UpdateRememberedServiceList multiple times (once per profile). |
| // We can do this safely because we do not save any local state for |
| // remembered networks. This list updates infrequently. |
| @@ -4089,24 +4220,23 @@ void NetworkLibraryImplCros::RequestRememberedNetworksUpdate() { |
| iter != profile_list_.end(); ++iter) { |
| NetworkProfile& profile = *iter; |
| VLOG(1) << " Requesting Profile: " << profile.path; |
| - chromeos::RequestNetworkProfile( |
| + chromeos::RequestNetworkProfileProperties( |
| profile.path.c_str(), &ProfileUpdate, this); |
| } |
| } |
| // static |
| void NetworkLibraryImplCros::ProfileUpdate( |
| - void* object, const char* profile_path, const Value* info) { |
| + void* object, const char* profile_path, GHashTable* ghash) { |
| NetworkLibraryImplCros* networklib = |
| static_cast<NetworkLibraryImplCros*>(object); |
| DCHECK(networklib); |
| - if (!info) { |
| + if (!ghash) { |
| LOG(ERROR) << "Error retrieving profile: " << profile_path; |
| return; |
| } |
| VLOG(1) << "Received ProfileUpdate for: " << profile_path; |
| - DCHECK_EQ(info->GetType(), Value::TYPE_DICTIONARY); |
| - const DictionaryValue* dict = static_cast<const DictionaryValue*>(info); |
| + scoped_ptr<DictionaryValue> dict(ConvertGHashTable(ghash)); |
| ListValue* entries(NULL); |
| dict->GetList(kEntriesProperty, &entries); |
| DCHECK(entries); |
| @@ -4141,27 +4271,28 @@ void NetworkLibraryImplCros::UpdateRememberedServiceList( |
| // Add service to profile list. |
| profile.services.insert(service_path); |
| // Request update for remembered network. |
| - chromeos::RequestNetworkProfileEntry(profile_path, |
| - service_path.c_str(), |
| - &RememberedNetworkServiceUpdate, |
| - this); |
| + chromeos::RequestNetworkProfileEntryProperties( |
| + profile_path, |
| + service_path.c_str(), |
| + &RememberedNetworkServiceUpdate, |
| + this); |
| } |
| } |
| // static |
| void NetworkLibraryImplCros::RememberedNetworkServiceUpdate( |
| - void* object, const char* service_path, const Value* info) { |
| + void* object, const char* service_path, GHashTable* ghash) { |
| NetworkLibraryImplCros* networklib = |
| static_cast<NetworkLibraryImplCros*>(object); |
| DCHECK(networklib); |
| if (service_path) { |
| - if (!info) { |
| + if (!ghash) { |
| // Remembered network no longer exists. |
| networklib->DeleteRememberedNetwork(std::string(service_path)); |
| } else { |
| - DCHECK_EQ(info->GetType(), Value::TYPE_DICTIONARY); |
| - const DictionaryValue* dict = static_cast<const DictionaryValue*>(info); |
| - networklib->ParseRememberedNetwork(std::string(service_path), *dict); |
| + scoped_ptr<DictionaryValue> dict(ConvertGHashTable(ghash)); |
| + networklib->ParseRememberedNetwork( |
| + std::string(service_path), *(dict.get())); |
| } |
| } |
| } |
| @@ -4204,11 +4335,12 @@ Network* NetworkLibraryImplCros::ParseRememberedNetwork( |
| VLOG(1) << "Requesting VPN: " << vpn->name() |
| << " Server: " << vpn->server_hostname() |
| << " Type: " << provider_type; |
| - chromeos::RequestVirtualNetwork(vpn->name().c_str(), |
| - vpn->server_hostname().c_str(), |
| - provider_type.c_str(), |
| - NetworkServiceUpdate, |
| - this); |
| + chromeos::RequestVirtualNetworkProperties( |
| + vpn->name().c_str(), |
| + vpn->server_hostname().c_str(), |
| + provider_type.c_str(), |
| + NetworkServiceUpdate, |
| + this); |
| } |
| } |
| @@ -4236,9 +4368,9 @@ void NetworkLibraryImplCros::UpdateNetworkDeviceList(const ListValue* devices) { |
| device_map_[device_path] = found->second; |
| old_device_map.erase(found); |
| } |
| - chromeos::RequestNetworkDeviceInfo(device_path.c_str(), |
| - &NetworkDeviceUpdate, |
| - this); |
| + chromeos::RequestNetworkDeviceProperties(device_path.c_str(), |
| + &NetworkDeviceUpdate, |
| + this); |
| } |
| } |
| // Delete any old devices that no longer exist. |
| @@ -4252,18 +4384,17 @@ void NetworkLibraryImplCros::UpdateNetworkDeviceList(const ListValue* devices) { |
| // static |
| void NetworkLibraryImplCros::NetworkDeviceUpdate( |
| - void* object, const char* device_path, const Value* info) { |
| + void* object, const char* device_path, GHashTable* ghash) { |
| NetworkLibraryImplCros* networklib = |
| static_cast<NetworkLibraryImplCros*>(object); |
| DCHECK(networklib); |
| if (device_path) { |
| - if (!info) { |
| + if (!ghash) { |
| // device no longer exists. |
| networklib->DeleteDevice(std::string(device_path)); |
| } else { |
| - DCHECK_EQ(info->GetType(), Value::TYPE_DICTIONARY); |
| - const DictionaryValue* dict = static_cast<const DictionaryValue*>(info); |
| - networklib->ParseNetworkDevice(std::string(device_path), *dict); |
| + scoped_ptr<DictionaryValue> dict(ConvertGHashTable(ghash)); |
| + networklib->ParseNetworkDevice(std::string(device_path), *(dict.get())); |
| } |
| } |
| } |