Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "chrome/browser/chromeos/cros/network_library.h" | 5 #include "chrome/browser/chromeos/cros/network_library.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <dbus/dbus-glib.h> | |
| 9 #include <dbus/dbus-gtype-specialized.h> | |
| 10 #include <glib-object.h> | |
| 8 #include <map> | 11 #include <map> |
| 9 #include <set> | 12 #include <set> |
| 10 | 13 |
| 11 #include "base/i18n/icu_encoding_detection.h" | 14 #include "base/i18n/icu_encoding_detection.h" |
| 12 #include "base/i18n/icu_string_conversions.h" | 15 #include "base/i18n/icu_string_conversions.h" |
| 13 #include "base/i18n/time_formatting.h" | 16 #include "base/i18n/time_formatting.h" |
| 14 #include "base/metrics/histogram.h" | 17 #include "base/metrics/histogram.h" |
| 15 #include "base/stl_util.h" | 18 #include "base/stl_util.h" |
| 16 #include "base/string_number_conversions.h" | 19 #include "base/string_number_conversions.h" |
| 17 #include "base/string_tokenizer.h" | 20 #include "base/string_tokenizer.h" |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 62 // remembered_network_map_, in descending order of preference. | 65 // remembered_network_map_, in descending order of preference. |
| 63 // | 66 // |
| 64 // network_manager_monitor_: a handle to the libcros network Manager handler. | 67 // network_manager_monitor_: a handle to the libcros network Manager handler. |
| 65 // NetworkManagerStatusChanged: This handles all messages from the Manager. | 68 // NetworkManagerStatusChanged: This handles all messages from the Manager. |
| 66 // Messages are parsed here and the appropriate updates are then requested. | 69 // Messages are parsed here and the appropriate updates are then requested. |
| 67 // | 70 // |
| 68 // UpdateNetworkServiceList: This is the primary Manager handler. It handles | 71 // UpdateNetworkServiceList: This is the primary Manager handler. It handles |
| 69 // the "Services" message which list all visible networks. The handler | 72 // the "Services" message which list all visible networks. The handler |
| 70 // rebuilds the network lists without destroying existing Network structures, | 73 // rebuilds the network lists without destroying existing Network structures, |
| 71 // then requests neccessary updates to be fetched asynchronously from | 74 // then requests neccessary updates to be fetched asynchronously from |
| 72 // libcros (RequestNetworkServiceInfo). | 75 // libcros (RequestNetworkServiceProperties). |
| 73 // | 76 // |
| 74 // TODO(stevenjb): Document cellular data plan handlers. | 77 // TODO(stevenjb): Document cellular data plan handlers. |
| 75 // | 78 // |
| 76 // AddNetworkObserver: Adds an observer for a specific network. | 79 // AddNetworkObserver: Adds an observer for a specific network. |
| 77 // UpdateNetworkStatus: This handles changes to a monitored service, typically | 80 // UpdateNetworkStatus: This handles changes to a monitored service, typically |
| 78 // changes to transient states like Strength. (Note: also updates State). | 81 // changes to transient states like Strength. (Note: also updates State). |
| 79 // | 82 // |
| 80 // AddNetworkDeviceObserver: Adds an observer for a specific device. | 83 // AddNetworkDeviceObserver: Adds an observer for a specific device. |
| 81 // Will be called on any device property change. | 84 // Will be called on any device property change. |
| 82 // UpdateNetworkDeviceStatus: Handles changes to a monitored device, like | 85 // UpdateNetworkDeviceStatus: Handles changes to a monitored device, like |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 107 // to be able to connect to any network. | 110 // to be able to connect to any network. |
| 108 const char* kAlwaysInRoamingOperators[] = { | 111 const char* kAlwaysInRoamingOperators[] = { |
| 109 "CUBIC" | 112 "CUBIC" |
| 110 }; | 113 }; |
| 111 | 114 |
| 112 //////////////////////////////////////////////////////////////////////////////// | 115 //////////////////////////////////////////////////////////////////////////////// |
| 113 // Misc. | 116 // Misc. |
| 114 | 117 |
| 115 // Safe string constructor since we can't rely on non NULL pointers | 118 // Safe string constructor since we can't rely on non NULL pointers |
| 116 // for string values from libcros. | 119 // for string values from libcros. |
| 117 static std::string SafeString(const char* s) { | 120 std::string SafeString(const char* s) { |
| 118 return s ? std::string(s) : std::string(); | 121 return s ? std::string(s) : std::string(); |
| 119 } | 122 } |
| 120 | 123 |
| 121 // Erase the memory used by a string, then clear it. | 124 // Erase the memory used by a string, then clear it. |
| 122 static void WipeString(std::string* str) { | 125 void WipeString(std::string* str) { |
| 123 str->assign(str->size(), '\0'); | 126 str->assign(str->size(), '\0'); |
| 124 str->clear(); | 127 str->clear(); |
| 125 } | 128 } |
| 126 | 129 |
| 127 static bool EnsureCrosLoaded() { | 130 bool EnsureCrosLoaded() { |
| 128 if (!CrosLibrary::Get()->EnsureLoaded() || | 131 if (!CrosLibrary::Get()->EnsureLoaded() || |
| 129 !CrosLibrary::Get()->GetNetworkLibrary()->IsCros()) { | 132 !CrosLibrary::Get()->GetNetworkLibrary()->IsCros()) { |
| 130 return false; | 133 return false; |
| 131 } else { | 134 } else { |
| 132 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)) | 135 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)) |
| 133 << "chromeos_network calls made from non UI thread!"; | 136 << "chromeos_network calls made from non UI thread!"; |
| 134 return true; | 137 return true; |
| 135 } | 138 } |
| 136 } | 139 } |
| 137 | 140 |
| 138 static void ValidateUTF8(const std::string& str, std::string* output) { | 141 void ValidateUTF8(const std::string& str, std::string* output) { |
| 139 output->clear(); | 142 output->clear(); |
| 140 | 143 |
| 141 for (int32 index = 0; index < static_cast<int32>(str.size()); ++index) { | 144 for (int32 index = 0; index < static_cast<int32>(str.size()); ++index) { |
| 142 uint32 code_point_out; | 145 uint32 code_point_out; |
| 143 bool is_unicode_char = base::ReadUnicodeCharacter(str.c_str(), str.size(), | 146 bool is_unicode_char = base::ReadUnicodeCharacter(str.c_str(), str.size(), |
| 144 &index, &code_point_out); | 147 &index, &code_point_out); |
| 145 if (is_unicode_char && (code_point_out >= 0x20)) | 148 if (is_unicode_char && (code_point_out >= 0x20)) |
| 146 base::WriteUnicodeCharacter(code_point_out, output); | 149 base::WriteUnicodeCharacter(code_point_out, output); |
| 147 else | 150 else |
| 148 // Puts REPLACEMENT CHARACTER (U+FFFD) if character is not readable UTF-8 | 151 // Puts REPLACEMENT CHARACTER (U+FFFD) if character is not readable UTF-8 |
| 149 base::WriteUnicodeCharacter(0xFFFD, output); | 152 base::WriteUnicodeCharacter(0xFFFD, output); |
| 150 } | 153 } |
| 151 } | 154 } |
| 152 | 155 |
| 156 //////////////////////////////////////////////////////////////////////////////// | |
| 157 // glib | |
| 158 | |
| 159 Value* ConvertGlibValue(const GValue* gvalue); | |
| 160 | |
| 161 void AppendListElement(const GValue* gvalue, gpointer user_data) { | |
| 162 ListValue* list = static_cast<ListValue*>(user_data); | |
| 163 Value* value = ConvertGlibValue(gvalue); | |
| 164 list->Append(value); | |
| 165 } | |
| 166 | |
| 167 void AppendDictionaryElement(const GValue* keyvalue, | |
| 168 const GValue* gvalue, | |
| 169 gpointer user_data) { | |
| 170 DictionaryValue* dict = static_cast<DictionaryValue*>(user_data); | |
| 171 std::string key(g_value_get_string(keyvalue)); | |
| 172 Value* value = ConvertGlibValue(gvalue); | |
| 173 dict->SetWithoutPathExpansion(key, value); | |
| 174 } | |
| 175 | |
| 176 Value* ConvertGlibValue(const GValue* gvalue) { | |
| 177 if (G_VALUE_HOLDS_STRING(gvalue)) { | |
| 178 return Value::CreateStringValue(g_value_get_string(gvalue)); | |
| 179 } else if (G_VALUE_HOLDS_BOOLEAN(gvalue)) { | |
| 180 return Value::CreateBooleanValue( | |
| 181 static_cast<bool>(g_value_get_boolean(gvalue))); | |
| 182 } else if (G_VALUE_HOLDS_INT(gvalue)) { | |
| 183 return Value::CreateIntegerValue(g_value_get_int(gvalue)); | |
| 184 } else if (G_VALUE_HOLDS_UINT(gvalue)) { | |
| 185 return Value::CreateIntegerValue( | |
| 186 static_cast<int>(g_value_get_uint(gvalue))); | |
| 187 } else if (G_VALUE_HOLDS_UCHAR(gvalue)) { | |
| 188 return Value::CreateIntegerValue( | |
| 189 static_cast<int>(g_value_get_uchar(gvalue))); | |
| 190 } else if (G_VALUE_HOLDS(gvalue, DBUS_TYPE_G_OBJECT_PATH)) { | |
| 191 const char* path = static_cast<const char*>(g_value_get_boxed(gvalue)); | |
| 192 return Value::CreateStringValue(path); | |
| 193 } else if (G_VALUE_HOLDS(gvalue, G_TYPE_STRV)) { | |
| 194 ListValue* list = new ListValue(); | |
| 195 for (GStrv strv = static_cast<GStrv>(g_value_get_boxed(gvalue)); | |
| 196 *strv != NULL; ++strv) { | |
| 197 list->Append(Value::CreateStringValue(*strv)); | |
| 198 } | |
| 199 return list; | |
| 200 } else if (dbus_g_type_is_collection(G_VALUE_TYPE(gvalue))) { | |
| 201 ListValue* list = new ListValue(); | |
| 202 dbus_g_type_collection_value_iterate(gvalue, AppendListElement, list); | |
| 203 return list; | |
| 204 } else if (dbus_g_type_is_map(G_VALUE_TYPE(gvalue))) { | |
| 205 DictionaryValue* dict = new DictionaryValue(); | |
| 206 dbus_g_type_map_value_iterate(gvalue, AppendDictionaryElement, dict); | |
| 207 return dict; | |
| 208 } else if (G_VALUE_HOLDS(gvalue, G_TYPE_VALUE)) { | |
| 209 const GValue* bvalue = static_cast<GValue*>(g_value_get_boxed(gvalue)); | |
| 210 return ConvertGlibValue(bvalue); | |
| 211 } else { | |
| 212 LOG(ERROR) << "Unrecognized Glib value type: " << G_VALUE_TYPE(gvalue); | |
| 213 return Value::CreateNullValue(); | |
| 214 } | |
| 215 } | |
| 216 | |
| 217 DictionaryValue* ConvertGHashTable(GHashTable* ghash) { | |
| 218 DictionaryValue* dict = new DictionaryValue(); | |
| 219 GHashTableIter iter; | |
| 220 gpointer gkey, gvalue; | |
| 221 g_hash_table_iter_init(&iter, ghash); | |
| 222 while (g_hash_table_iter_next(&iter, &gkey, &gvalue)) { | |
| 223 std::string key(static_cast<char*>(gkey)); | |
| 224 Value* value = ConvertGlibValue(static_cast<GValue*>(gvalue)); | |
| 225 dict->SetWithoutPathExpansion(key, value); | |
| 226 } | |
| 227 return dict; | |
| 228 } | |
| 229 | |
| 230 GValue* ConvertBoolToGValue(bool b) { | |
| 231 GValue* gvalue = new GValue(); | |
| 232 g_value_init(gvalue, G_TYPE_BOOLEAN); | |
| 233 g_value_set_boolean(gvalue, b); | |
| 234 return gvalue; | |
| 235 } | |
| 236 | |
| 237 GValue* ConvertIntToGValue(int i) { | |
| 238 // Converting to a 32-bit signed int type in particular, since | |
| 239 // 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
| |
| 240 GValue* gvalue = new GValue(); | |
| 241 g_value_init(gvalue, G_TYPE_INT); | |
| 242 g_value_set_int(gvalue, i); | |
| 243 return gvalue; | |
| 244 } | |
| 245 | |
| 246 GValue* ConvertStringToGValue(const std::string& s) { | |
| 247 GValue* gvalue = new GValue(); | |
| 248 g_value_init(gvalue, G_TYPE_STRING); | |
| 249 g_value_set_string(gvalue, s.c_str()); | |
| 250 return gvalue; | |
| 251 } | |
| 252 | |
| 253 GValue* ConvertValueToGValue(const Value* value) { | |
| 254 switch (value->GetType()) { | |
| 255 case Value::TYPE_BOOLEAN: { | |
| 256 bool out; | |
| 257 if (value->GetAsBoolean(&out)) | |
| 258 return ConvertBoolToGValue(out); | |
| 259 break; | |
| 260 } | |
| 261 case Value::TYPE_INTEGER: { | |
| 262 int out; | |
| 263 if (value->GetAsInteger(&out)) | |
| 264 return ConvertIntToGValue(out); | |
| 265 break; | |
| 266 } | |
| 267 case Value::TYPE_STRING: { | |
| 268 std::string out; | |
| 269 if (value->GetAsString(&out)) | |
| 270 return ConvertStringToGValue(out); | |
| 271 break; | |
| 272 } | |
| 273 case Value::TYPE_NULL: | |
| 274 case Value::TYPE_DOUBLE: | |
| 275 case Value::TYPE_BINARY: | |
| 276 case Value::TYPE_DICTIONARY: | |
| 277 case Value::TYPE_LIST: | |
| 278 // Other Value types shouldn't be passed through this mechanism. | |
| 279 NOTREACHED() << "Unconverted Value of type: " << value->GetType(); | |
| 280 return NULL; | |
| 281 } | |
| 282 NOTREACHED() << "Value conversion failed, type: " << value->GetType(); | |
| 283 return NULL; | |
| 284 } | |
| 285 | |
| 153 } // namespace | 286 } // namespace |
| 154 | 287 |
| 155 //////////////////////////////////////////////////////////////////////////////// | 288 //////////////////////////////////////////////////////////////////////////////// |
| 156 // FoundCellularNetwork | 289 // FoundCellularNetwork |
| 157 | 290 |
| 158 FoundCellularNetwork::FoundCellularNetwork() {} | 291 FoundCellularNetwork::FoundCellularNetwork() {} |
| 159 | 292 |
| 160 FoundCellularNetwork::~FoundCellularNetwork() {} | 293 FoundCellularNetwork::~FoundCellularNetwork() {} |
| 161 | 294 |
| 162 //////////////////////////////////////////////////////////////////////////////// | 295 //////////////////////////////////////////////////////////////////////////////// |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 256 unique_id_ = name_; | 389 unique_id_ = name_; |
| 257 } | 390 } |
| 258 | 391 |
| 259 bool Network::RequiresUserProfile() const { | 392 bool Network::RequiresUserProfile() const { |
| 260 return false; | 393 return false; |
| 261 } | 394 } |
| 262 | 395 |
| 263 void Network::CopyCredentialsFromRemembered(Network* remembered) { | 396 void Network::CopyCredentialsFromRemembered(Network* remembered) { |
| 264 } | 397 } |
| 265 | 398 |
| 266 void Network::SetValueProperty(const char* prop, Value* val) { | 399 void Network::SetValueProperty(const char* prop, Value* value) { |
| 267 DCHECK(prop); | 400 DCHECK(prop); |
| 268 DCHECK(val); | 401 DCHECK(value); |
| 269 if (!EnsureCrosLoaded()) | 402 if (!EnsureCrosLoaded()) |
| 270 return; | 403 return; |
| 271 chromeos::SetNetworkServiceProperty(service_path_.c_str(), prop, val); | 404 scoped_ptr<GValue> gvalue(ConvertValueToGValue(value)); |
| 405 chromeos::SetNetworkServicePropertyGValue( | |
| 406 service_path_.c_str(), prop, gvalue.get()); | |
| 272 } | 407 } |
| 273 | 408 |
| 274 void Network::ClearProperty(const char* prop) { | 409 void Network::ClearProperty(const char* prop) { |
| 275 DCHECK(prop); | 410 DCHECK(prop); |
| 276 if (!EnsureCrosLoaded()) | 411 if (!EnsureCrosLoaded()) |
| 277 return; | 412 return; |
| 278 chromeos::ClearNetworkServiceProperty(service_path_.c_str(), prop); | 413 chromeos::ClearNetworkServiceProperty(service_path_.c_str(), prop); |
| 279 } | 414 } |
| 280 | 415 |
| 281 void Network::SetStringProperty( | 416 void Network::SetStringProperty( |
| (...skipping 2698 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2980 | 3115 |
| 2981 virtual NetworkIPConfigVector GetIPConfigs( | 3116 virtual NetworkIPConfigVector GetIPConfigs( |
| 2982 const std::string& device_path, | 3117 const std::string& device_path, |
| 2983 std::string* hardware_address, | 3118 std::string* hardware_address, |
| 2984 HardwareAddressFormat format) OVERRIDE; | 3119 HardwareAddressFormat format) OVERRIDE; |
| 2985 virtual void SetIPConfig(const NetworkIPConfig& ipconfig) OVERRIDE; | 3120 virtual void SetIPConfig(const NetworkIPConfig& ipconfig) OVERRIDE; |
| 2986 | 3121 |
| 2987 ////////////////////////////////////////////////////////////////////////////// | 3122 ////////////////////////////////////////////////////////////////////////////// |
| 2988 // Calbacks. | 3123 // Calbacks. |
| 2989 static void NetworkStatusChangedHandler( | 3124 static void NetworkStatusChangedHandler( |
| 2990 void* object, const char* path, const char* key, const Value* value); | 3125 void* object, const char* path, const char* key, const GValue* value); |
| 2991 void UpdateNetworkStatus( | 3126 void UpdateNetworkStatus( |
| 2992 const std::string& path, const std::string& key, const Value& value); | 3127 const std::string& path, const std::string& key, const Value& value); |
| 2993 | 3128 |
| 2994 static void NetworkDevicePropertyChangedHandler( | 3129 static void NetworkDevicePropertyChangedHandler( |
| 2995 void* object, const char* path, const char* key, const Value* value); | 3130 void* object, const char* path, const char* key, const GValue* gvalue); |
| 2996 void UpdateNetworkDeviceStatus( | 3131 void UpdateNetworkDeviceStatus( |
| 2997 const std::string& path, const std::string& key, const Value& value); | 3132 const std::string& path, const std::string& key, const Value& value); |
| 2998 | 3133 |
| 2999 static void PinOperationCallback(void* object, | 3134 static void PinOperationCallback(void* object, |
| 3000 const char* path, | 3135 const char* path, |
| 3001 NetworkMethodErrorType error, | 3136 NetworkMethodErrorType error, |
| 3002 const char* error_message); | 3137 const char* error_message); |
| 3003 | 3138 |
| 3004 static void CellularRegisterCallback(void* object, | 3139 static void CellularRegisterCallback(void* object, |
| 3005 const char* path, | 3140 const char* path, |
| 3006 NetworkMethodErrorType error, | 3141 NetworkMethodErrorType error, |
| 3007 const char* error_message); | 3142 const char* error_message); |
| 3008 | 3143 |
| 3009 static void NetworkConnectCallback(void* object, | 3144 static void NetworkConnectCallback(void* object, |
| 3010 const char* service_path, | 3145 const char* service_path, |
| 3011 NetworkMethodErrorType error, | 3146 NetworkMethodErrorType error, |
| 3012 const char* error_message); | 3147 const char* error_message); |
| 3013 | 3148 |
| 3014 static void WifiServiceUpdateAndConnect( | 3149 static void WifiServiceUpdateAndConnect( |
| 3015 void* object, const char* service_path, const Value* info); | 3150 void* object, const char* service_path, GHashTable* ghash); |
| 3016 static void VPNServiceUpdateAndConnect( | 3151 static void VPNServiceUpdateAndConnect( |
| 3017 void* object, const char* service_path, const Value* info); | 3152 void* object, const char* service_path, GHashTable* ghash); |
| 3018 | 3153 |
| 3019 static void NetworkManagerStatusChangedHandler( | 3154 static void NetworkManagerStatusChangedHandler( |
| 3020 void* object, const char* path, const char* key, const Value* value); | 3155 void* object, const char* path, const char* key, const GValue* value); |
| 3021 static void NetworkManagerUpdate( | 3156 static void NetworkManagerUpdate( |
| 3022 void* object, const char* manager_path, const Value* info); | 3157 void* object, const char* manager_path, GHashTable* ghash); |
| 3023 | 3158 |
| 3024 static void DataPlanUpdateHandler(void* object, | 3159 static void DataPlanUpdateHandler(void* object, |
| 3025 const char* modem_service_path, | 3160 const char* modem_service_path, |
| 3026 const CellularDataPlanList* dataplan); | 3161 const CellularDataPlanList* dataplan); |
| 3027 | 3162 |
| 3028 static void NetworkServiceUpdate( | 3163 static void NetworkServiceUpdate( |
| 3029 void* object, const char* service_path, const Value* info); | 3164 void* object, const char* service_path, GHashTable* ghash); |
| 3030 static void RememberedNetworkServiceUpdate( | 3165 static void RememberedNetworkServiceUpdate( |
| 3031 void* object, const char* service_path, const Value* info); | 3166 void* object, const char* service_path, GHashTable* ghash); |
| 3032 static void ProfileUpdate( | 3167 static void ProfileUpdate( |
| 3033 void* object, const char* profile_path, const Value* info); | 3168 void* object, const char* profile_path, GHashTable* ghash); |
| 3034 static void NetworkDeviceUpdate( | 3169 static void NetworkDeviceUpdate( |
| 3035 void* object, const char* device_path, const Value* info); | 3170 void* object, const char* device_path, GHashTable* ghash); |
| 3036 | 3171 |
| 3037 private: | 3172 private: |
| 3038 // This processes all Manager update messages. | 3173 // This processes all Manager update messages. |
| 3039 void NetworkManagerStatusChanged(const char* key, const Value* value); | 3174 void NetworkManagerStatusChanged(const char* key, const Value* value); |
| 3040 void ParseNetworkManager(const DictionaryValue& dict); | 3175 void ParseNetworkManager(const DictionaryValue& dict); |
| 3041 void UpdateTechnologies(const ListValue* technologies, int* bitfieldp); | 3176 void UpdateTechnologies(const ListValue* technologies, int* bitfieldp); |
| 3042 void UpdateAvailableTechnologies(const ListValue* technologies); | 3177 void UpdateAvailableTechnologies(const ListValue* technologies); |
| 3043 void UpdateEnabledTechnologies(const ListValue* technologies); | 3178 void UpdateEnabledTechnologies(const ListValue* technologies); |
| 3044 void UpdateConnectedTechnologies(const ListValue* technologies); | 3179 void UpdateConnectedTechnologies(const ListValue* technologies); |
| 3045 | 3180 |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 3062 const DictionaryValue& info); | 3197 const DictionaryValue& info); |
| 3063 | 3198 |
| 3064 // Empty device observer to ensure that device property updates are received. | 3199 // Empty device observer to ensure that device property updates are received. |
| 3065 class NetworkLibraryDeviceObserver : public NetworkDeviceObserver { | 3200 class NetworkLibraryDeviceObserver : public NetworkDeviceObserver { |
| 3066 public: | 3201 public: |
| 3067 virtual ~NetworkLibraryDeviceObserver() {} | 3202 virtual ~NetworkLibraryDeviceObserver() {} |
| 3068 virtual void OnNetworkDeviceChanged( | 3203 virtual void OnNetworkDeviceChanged( |
| 3069 NetworkLibrary* cros, const NetworkDevice* device) OVERRIDE {} | 3204 NetworkLibrary* cros, const NetworkDevice* device) OVERRIDE {} |
| 3070 }; | 3205 }; |
| 3071 | 3206 |
| 3072 typedef std::map<std::string, chromeos::PropertyChangeMonitor> | 3207 typedef std::map<std::string, chromeos::NetworkPropertiesMonitor> |
| 3073 PropertyChangeMonitorMap; | 3208 NetworkPropertiesMonitorMap; |
| 3074 | 3209 |
| 3075 // For monitoring network manager status changes. | 3210 // For monitoring network manager status changes. |
| 3076 PropertyChangeMonitor network_manager_monitor_; | 3211 NetworkPropertiesMonitor network_manager_monitor_; |
| 3077 | 3212 |
| 3078 // For monitoring data plan changes to the connected cellular network. | 3213 // For monitoring data plan changes to the connected cellular network. |
| 3079 DataPlanUpdateMonitor data_plan_monitor_; | 3214 DataPlanUpdateMonitor data_plan_monitor_; |
| 3080 | 3215 |
| 3081 // Network device observer. | 3216 // Network device observer. |
| 3082 scoped_ptr<NetworkLibraryDeviceObserver> network_device_observer_; | 3217 scoped_ptr<NetworkLibraryDeviceObserver> network_device_observer_; |
| 3083 | 3218 |
| 3084 // Map of monitored networks. | 3219 // Map of monitored networks. |
| 3085 PropertyChangeMonitorMap montitored_networks_; | 3220 NetworkPropertiesMonitorMap montitored_networks_; |
| 3086 | 3221 |
| 3087 // Map of monitored devices. | 3222 // Map of monitored devices. |
| 3088 PropertyChangeMonitorMap montitored_devices_; | 3223 NetworkPropertiesMonitorMap montitored_devices_; |
| 3089 | 3224 |
| 3090 DISALLOW_COPY_AND_ASSIGN(NetworkLibraryImplCros); | 3225 DISALLOW_COPY_AND_ASSIGN(NetworkLibraryImplCros); |
| 3091 }; | 3226 }; |
| 3092 | 3227 |
| 3093 //////////////////////////////////////////////////////////////////////////// | 3228 //////////////////////////////////////////////////////////////////////////// |
| 3094 | 3229 |
| 3095 NetworkLibraryImplCros::NetworkLibraryImplCros() | 3230 NetworkLibraryImplCros::NetworkLibraryImplCros() |
| 3096 : NetworkLibraryImplBase(), | 3231 : NetworkLibraryImplBase(), |
| 3097 network_manager_monitor_(NULL), | 3232 network_manager_monitor_(NULL), |
| 3098 data_plan_monitor_(NULL) { | 3233 data_plan_monitor_(NULL) { |
| 3099 } | 3234 } |
| 3100 | 3235 |
| 3101 NetworkLibraryImplCros::~NetworkLibraryImplCros() { | 3236 NetworkLibraryImplCros::~NetworkLibraryImplCros() { |
| 3102 if (network_manager_monitor_) | 3237 if (network_manager_monitor_) |
| 3103 chromeos::DisconnectPropertyChangeMonitor(network_manager_monitor_); | 3238 chromeos::DisconnectNetworkPropertiesMonitor(network_manager_monitor_); |
| 3104 if (data_plan_monitor_) | 3239 if (data_plan_monitor_) |
| 3105 chromeos::DisconnectDataPlanUpdateMonitor(data_plan_monitor_); | 3240 chromeos::DisconnectDataPlanUpdateMonitor(data_plan_monitor_); |
| 3106 for (PropertyChangeMonitorMap::iterator iter = montitored_networks_.begin(); | 3241 for (NetworkPropertiesMonitorMap::iterator iter = |
| 3242 montitored_networks_.begin(); | |
| 3107 iter != montitored_networks_.end(); ++iter) { | 3243 iter != montitored_networks_.end(); ++iter) { |
| 3108 chromeos::DisconnectPropertyChangeMonitor(iter->second); | 3244 chromeos::DisconnectNetworkPropertiesMonitor(iter->second); |
| 3109 } | 3245 } |
| 3110 for (PropertyChangeMonitorMap::iterator iter = montitored_devices_.begin(); | 3246 for (NetworkPropertiesMonitorMap::iterator iter = |
| 3247 montitored_devices_.begin(); | |
| 3111 iter != montitored_devices_.end(); ++iter) { | 3248 iter != montitored_devices_.end(); ++iter) { |
| 3112 chromeos::DisconnectPropertyChangeMonitor(iter->second); | 3249 chromeos::DisconnectNetworkPropertiesMonitor(iter->second); |
| 3113 } | 3250 } |
| 3114 } | 3251 } |
| 3115 | 3252 |
| 3116 void NetworkLibraryImplCros::Init() { | 3253 void NetworkLibraryImplCros::Init() { |
| 3117 // First, get the currently available networks. This data is cached | 3254 // First, get the currently available networks. This data is cached |
| 3118 // on the connman side, so the call should be quick. | 3255 // on the connman side, so the call should be quick. |
| 3119 VLOG(1) << "Requesting initial network manager info from libcros."; | 3256 VLOG(1) << "Requesting initial network manager info from libcros."; |
| 3120 chromeos::RequestNetworkManagerInfo(&NetworkManagerUpdate, this); | 3257 chromeos::RequestNetworkManagerProperties(&NetworkManagerUpdate, this); |
| 3121 network_manager_monitor_ = | 3258 network_manager_monitor_ = |
| 3122 chromeos::MonitorNetworkManager(&NetworkManagerStatusChangedHandler, | 3259 chromeos::MonitorNetworkManagerProperties( |
| 3123 this); | 3260 &NetworkManagerStatusChangedHandler, this); |
| 3124 data_plan_monitor_ = | 3261 data_plan_monitor_ = |
| 3125 chromeos::MonitorCellularDataPlan(&DataPlanUpdateHandler, this); | 3262 chromeos::MonitorCellularDataPlan(&DataPlanUpdateHandler, this); |
| 3126 // Always have at least one device obsever so that device updates are | 3263 // Always have at least one device obsever so that device updates are |
| 3127 // always received. | 3264 // always received. |
| 3128 network_device_observer_.reset(new NetworkLibraryDeviceObserver()); | 3265 network_device_observer_.reset(new NetworkLibraryDeviceObserver()); |
| 3129 } | 3266 } |
| 3130 | 3267 |
| 3131 ////////////////////////////////////////////////////////////////////////////// | 3268 ////////////////////////////////////////////////////////////////////////////// |
| 3132 // NetworkLibraryImplBase implementation. | 3269 // NetworkLibraryImplBase implementation. |
| 3133 | 3270 |
| 3134 void NetworkLibraryImplCros::MonitorNetworkStart( | 3271 void NetworkLibraryImplCros::MonitorNetworkStart( |
| 3135 const std::string& service_path) { | 3272 const std::string& service_path) { |
| 3136 if (montitored_networks_.find(service_path) == montitored_networks_.end()) { | 3273 if (montitored_networks_.find(service_path) == montitored_networks_.end()) { |
| 3137 chromeos::PropertyChangeMonitor monitor = | 3274 chromeos::NetworkPropertiesMonitor monitor = |
| 3138 chromeos::MonitorNetworkService(&NetworkStatusChangedHandler, | 3275 chromeos::MonitorNetworkServiceProperties( |
| 3139 service_path.c_str(), | 3276 &NetworkStatusChangedHandler, service_path.c_str(), this); |
| 3140 this); | |
| 3141 montitored_networks_[service_path] = monitor; | 3277 montitored_networks_[service_path] = monitor; |
| 3142 } | 3278 } |
| 3143 } | 3279 } |
| 3144 | 3280 |
| 3145 void NetworkLibraryImplCros::MonitorNetworkStop( | 3281 void NetworkLibraryImplCros::MonitorNetworkStop( |
| 3146 const std::string& service_path) { | 3282 const std::string& service_path) { |
| 3147 PropertyChangeMonitorMap::iterator iter = | 3283 NetworkPropertiesMonitorMap::iterator iter = |
| 3148 montitored_networks_.find(service_path); | 3284 montitored_networks_.find(service_path); |
| 3149 if (iter != montitored_networks_.end()) { | 3285 if (iter != montitored_networks_.end()) { |
| 3150 chromeos::DisconnectPropertyChangeMonitor(iter->second); | 3286 chromeos::DisconnectNetworkPropertiesMonitor(iter->second); |
| 3151 montitored_networks_.erase(iter); | 3287 montitored_networks_.erase(iter); |
| 3152 } | 3288 } |
| 3153 } | 3289 } |
| 3154 | 3290 |
| 3155 void NetworkLibraryImplCros::MonitorNetworkDeviceStart( | 3291 void NetworkLibraryImplCros::MonitorNetworkDeviceStart( |
| 3156 const std::string& device_path) { | 3292 const std::string& device_path) { |
| 3157 if (montitored_devices_.find(device_path) == montitored_devices_.end()) { | 3293 if (montitored_devices_.find(device_path) == montitored_devices_.end()) { |
| 3158 chromeos::PropertyChangeMonitor monitor = | 3294 chromeos::NetworkPropertiesMonitor monitor = |
| 3159 chromeos::MonitorNetworkDevice(&NetworkDevicePropertyChangedHandler, | 3295 chromeos::MonitorNetworkDeviceProperties( |
| 3160 device_path.c_str(), | 3296 &NetworkDevicePropertyChangedHandler, device_path.c_str(), this); |
| 3161 this); | |
| 3162 montitored_devices_[device_path] = monitor; | 3297 montitored_devices_[device_path] = monitor; |
| 3163 } | 3298 } |
| 3164 } | 3299 } |
| 3165 | 3300 |
| 3166 void NetworkLibraryImplCros::MonitorNetworkDeviceStop( | 3301 void NetworkLibraryImplCros::MonitorNetworkDeviceStop( |
| 3167 const std::string& device_path) { | 3302 const std::string& device_path) { |
| 3168 PropertyChangeMonitorMap::iterator iter = | 3303 NetworkPropertiesMonitorMap::iterator iter = |
| 3169 montitored_devices_.find(device_path); | 3304 montitored_devices_.find(device_path); |
| 3170 if (iter != montitored_devices_.end()) { | 3305 if (iter != montitored_devices_.end()) { |
| 3171 chromeos::DisconnectPropertyChangeMonitor(iter->second); | 3306 chromeos::DisconnectNetworkPropertiesMonitor(iter->second); |
| 3172 montitored_devices_.erase(iter); | 3307 montitored_devices_.erase(iter); |
| 3173 } | 3308 } |
| 3174 } | 3309 } |
| 3175 | 3310 |
| 3176 // static callback | 3311 // static callback |
| 3177 void NetworkLibraryImplCros::NetworkStatusChangedHandler( | 3312 void NetworkLibraryImplCros::NetworkStatusChangedHandler( |
| 3178 void* object, const char* path, const char* key, const Value* value) { | 3313 void* object, const char* path, const char* key, const GValue* gvalue) { |
| 3179 NetworkLibraryImplCros* networklib = | 3314 NetworkLibraryImplCros* networklib = |
| 3180 static_cast<NetworkLibraryImplCros*>(object); | 3315 static_cast<NetworkLibraryImplCros*>(object); |
| 3181 DCHECK(networklib); | 3316 DCHECK(networklib); |
| 3182 if (key == NULL || value == NULL || path == NULL || object == NULL) | 3317 if (key == NULL || gvalue == NULL || path == NULL || object == NULL) |
| 3183 return; | 3318 return; |
| 3319 scoped_ptr<Value> value(ConvertGlibValue(gvalue)); | |
| 3184 networklib->UpdateNetworkStatus(std::string(path), std::string(key), *value); | 3320 networklib->UpdateNetworkStatus(std::string(path), std::string(key), *value); |
| 3185 } | 3321 } |
| 3186 | 3322 |
| 3187 void NetworkLibraryImplCros::UpdateNetworkStatus( | 3323 void NetworkLibraryImplCros::UpdateNetworkStatus( |
| 3188 const std::string& path, const std::string& key, const Value& value) { | 3324 const std::string& path, const std::string& key, const Value& value) { |
| 3189 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 3325 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 3190 Network* network = FindNetworkByPath(path); | 3326 Network* network = FindNetworkByPath(path); |
| 3191 if (network) { | 3327 if (network) { |
| 3192 VLOG(2) << "UpdateNetworkStatus: " << network->name() << "." << key; | 3328 VLOG(2) << "UpdateNetworkStatus: " << network->name() << "." << key; |
| 3193 bool prev_connected = network->connected(); | 3329 bool prev_connected = network->connected(); |
| 3194 if (!network->UpdateStatus(key, value, NULL)) { | 3330 if (!network->UpdateStatus(key, value, NULL)) { |
| 3195 LOG(WARNING) << "UpdateNetworkStatus: Error updating: " | 3331 LOG(WARNING) << "UpdateNetworkStatus: Error updating: " |
| 3196 << path << "." << key; | 3332 << path << "." << key; |
| 3197 } | 3333 } |
| 3198 // If we just connected, this may have been added to remembered list. | 3334 // If we just connected, this may have been added to remembered list. |
| 3199 if (!prev_connected && network->connected()) | 3335 if (!prev_connected && network->connected()) |
| 3200 RequestRememberedNetworksUpdate(); | 3336 RequestRememberedNetworksUpdate(); |
| 3201 NotifyNetworkChanged(network); | 3337 NotifyNetworkChanged(network); |
| 3202 // Anything observing the manager needs to know about any service change. | 3338 // Anything observing the manager needs to know about any service change. |
| 3203 NotifyNetworkManagerChanged(false); // Not forced. | 3339 NotifyNetworkManagerChanged(false); // Not forced. |
| 3204 } | 3340 } |
| 3205 } | 3341 } |
| 3206 | 3342 |
| 3207 // static callback | 3343 // static callback |
| 3208 void NetworkLibraryImplCros::NetworkDevicePropertyChangedHandler( | 3344 void NetworkLibraryImplCros::NetworkDevicePropertyChangedHandler( |
| 3209 void* object, const char* path, const char* key, const Value* value) { | 3345 void* object, const char* path, const char* key, const GValue* gvalue) { |
| 3210 NetworkLibraryImplCros* networklib = | 3346 NetworkLibraryImplCros* networklib = |
| 3211 static_cast<NetworkLibraryImplCros*>(object); | 3347 static_cast<NetworkLibraryImplCros*>(object); |
| 3212 DCHECK(networklib); | 3348 DCHECK(networklib); |
| 3213 if (key == NULL || value == NULL || path == NULL || object == NULL) | 3349 if (key == NULL || gvalue == NULL || path == NULL || object == NULL) |
| 3214 return; | 3350 return; |
| 3351 scoped_ptr<Value> value(ConvertGlibValue(gvalue)); | |
| 3215 networklib->UpdateNetworkDeviceStatus(std::string(path), | 3352 networklib->UpdateNetworkDeviceStatus(std::string(path), |
| 3216 std::string(key), | 3353 std::string(key), |
| 3217 *value); | 3354 *value); |
| 3218 } | 3355 } |
| 3219 | 3356 |
| 3220 void NetworkLibraryImplCros::UpdateNetworkDeviceStatus( | 3357 void NetworkLibraryImplCros::UpdateNetworkDeviceStatus( |
| 3221 const std::string& path, const std::string& key, const Value& value) { | 3358 const std::string& path, const std::string& key, const Value& value) { |
| 3222 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 3359 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 3223 NetworkDevice* device = FindNetworkDeviceByPath(path); | 3360 NetworkDevice* device = FindNetworkDeviceByPath(path); |
| 3224 if (device) { | 3361 if (device) { |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 3239 } | 3376 } |
| 3240 } | 3377 } |
| 3241 } else { | 3378 } else { |
| 3242 VLOG(1) << "UpdateNetworkDeviceStatus: Failed to update: " | 3379 VLOG(1) << "UpdateNetworkDeviceStatus: Failed to update: " |
| 3243 << path << "." << key; | 3380 << path << "." << key; |
| 3244 } | 3381 } |
| 3245 // Notify only observers on device property change. | 3382 // Notify only observers on device property change. |
| 3246 NotifyNetworkDeviceChanged(device, index); | 3383 NotifyNetworkDeviceChanged(device, index); |
| 3247 // If a device's power state changes, new properties may become defined. | 3384 // If a device's power state changes, new properties may become defined. |
| 3248 if (index == PROPERTY_INDEX_POWERED) | 3385 if (index == PROPERTY_INDEX_POWERED) |
| 3249 chromeos::RequestNetworkDeviceInfo(path.c_str(), | 3386 chromeos::RequestNetworkDeviceProperties(path.c_str(), |
| 3250 &NetworkDeviceUpdate, | 3387 &NetworkDeviceUpdate, |
| 3251 this); | 3388 this); |
| 3252 } | 3389 } |
| 3253 } | 3390 } |
| 3254 | 3391 |
| 3255 ///////////////////////////////////////////////////////////////////////////// | 3392 ///////////////////////////////////////////////////////////////////////////// |
| 3256 // NetworkLibraryImplBase connect implementation. | 3393 // NetworkLibraryImplBase connect implementation. |
| 3257 | 3394 |
| 3258 // static callback | 3395 // static callback |
| 3259 void NetworkLibraryImplCros::NetworkConnectCallback( | 3396 void NetworkLibraryImplCros::NetworkConnectCallback( |
| 3260 void* object, | 3397 void* object, |
| 3261 const char* service_path, | 3398 const char* service_path, |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 3286 } | 3423 } |
| 3287 | 3424 |
| 3288 void NetworkLibraryImplCros::CallConnectToNetwork(Network* network) { | 3425 void NetworkLibraryImplCros::CallConnectToNetwork(Network* network) { |
| 3289 DCHECK(network); | 3426 DCHECK(network); |
| 3290 chromeos::RequestNetworkServiceConnect(network->service_path().c_str(), | 3427 chromeos::RequestNetworkServiceConnect(network->service_path().c_str(), |
| 3291 NetworkConnectCallback, this); | 3428 NetworkConnectCallback, this); |
| 3292 } | 3429 } |
| 3293 | 3430 |
| 3294 // static callback | 3431 // static callback |
| 3295 void NetworkLibraryImplCros::WifiServiceUpdateAndConnect( | 3432 void NetworkLibraryImplCros::WifiServiceUpdateAndConnect( |
| 3296 void* object, const char* service_path, const Value* info) { | 3433 void* object, const char* service_path, GHashTable* ghash) { |
| 3297 NetworkLibraryImplCros* networklib = | 3434 NetworkLibraryImplCros* networklib = |
| 3298 static_cast<NetworkLibraryImplCros*>(object); | 3435 static_cast<NetworkLibraryImplCros*>(object); |
| 3299 DCHECK(networklib); | 3436 DCHECK(networklib); |
| 3300 if (service_path && info) { | 3437 if (service_path && ghash) { |
| 3301 DCHECK_EQ(info->GetType(), Value::TYPE_DICTIONARY); | 3438 scoped_ptr<DictionaryValue> dict(ConvertGHashTable(ghash)); |
| 3302 const DictionaryValue* dict = static_cast<const DictionaryValue*>(info); | |
| 3303 Network* network = | 3439 Network* network = |
| 3304 networklib->ParseNetwork(std::string(service_path), *dict); | 3440 networklib->ParseNetwork(std::string(service_path), *(dict.get())); |
| 3305 DCHECK_EQ(network->type(), TYPE_WIFI); | 3441 DCHECK_EQ(network->type(), TYPE_WIFI); |
| 3306 networklib->ConnectToWifiNetworkUsingConnectData( | 3442 networklib->ConnectToWifiNetworkUsingConnectData( |
| 3307 static_cast<WifiNetwork*>(network)); | 3443 static_cast<WifiNetwork*>(network)); |
| 3308 } | 3444 } |
| 3309 } | 3445 } |
| 3310 | 3446 |
| 3311 void NetworkLibraryImplCros::CallRequestWifiNetworkAndConnect( | 3447 void NetworkLibraryImplCros::CallRequestWifiNetworkAndConnect( |
| 3312 const std::string& ssid, ConnectionSecurity security) { | 3448 const std::string& ssid, ConnectionSecurity security) { |
| 3313 // Asynchronously request service properties and call | 3449 // Asynchronously request service properties and call |
| 3314 // WifiServiceUpdateAndConnect. | 3450 // WifiServiceUpdateAndConnect. |
| 3315 chromeos::RequestHiddenWifiNetwork(ssid.c_str(), | 3451 chromeos::RequestHiddenWifiNetworkProperties( |
| 3316 SecurityToString(security), | 3452 ssid.c_str(), |
| 3317 WifiServiceUpdateAndConnect, | 3453 SecurityToString(security), |
| 3318 this); | 3454 WifiServiceUpdateAndConnect, |
| 3455 this); | |
| 3319 } | 3456 } |
| 3320 | 3457 |
| 3321 // static callback | 3458 // static callback |
| 3322 void NetworkLibraryImplCros::VPNServiceUpdateAndConnect( | 3459 void NetworkLibraryImplCros::VPNServiceUpdateAndConnect( |
| 3323 void* object, const char* service_path, const Value* info) { | 3460 void* object, const char* service_path, GHashTable* ghash) { |
| 3324 NetworkLibraryImplCros* networklib = | 3461 NetworkLibraryImplCros* networklib = |
| 3325 static_cast<NetworkLibraryImplCros*>(object); | 3462 static_cast<NetworkLibraryImplCros*>(object); |
| 3326 DCHECK(networklib); | 3463 DCHECK(networklib); |
| 3327 if (service_path && info) { | 3464 if (service_path && ghash) { |
| 3328 VLOG(1) << "Connecting to new VPN Service: " << service_path; | 3465 VLOG(1) << "Connecting to new VPN Service: " << service_path; |
| 3329 DCHECK_EQ(info->GetType(), Value::TYPE_DICTIONARY); | 3466 scoped_ptr<DictionaryValue> dict(ConvertGHashTable(ghash)); |
| 3330 const DictionaryValue* dict = static_cast<const DictionaryValue*>(info); | |
| 3331 Network* network = | 3467 Network* network = |
| 3332 networklib->ParseNetwork(std::string(service_path), *dict); | 3468 networklib->ParseNetwork(std::string(service_path), *(dict.get())); |
| 3333 DCHECK_EQ(network->type(), TYPE_VPN); | 3469 DCHECK_EQ(network->type(), TYPE_VPN); |
| 3334 networklib->ConnectToVirtualNetworkUsingConnectData( | 3470 networklib->ConnectToVirtualNetworkUsingConnectData( |
| 3335 static_cast<VirtualNetwork*>(network)); | 3471 static_cast<VirtualNetwork*>(network)); |
| 3336 } else { | 3472 } else { |
| 3337 LOG(WARNING) << "Unable to create VPN Service: " << service_path; | 3473 LOG(WARNING) << "Unable to create VPN Service: " << service_path; |
| 3338 } | 3474 } |
| 3339 } | 3475 } |
| 3340 | 3476 |
| 3341 void NetworkLibraryImplCros::CallRequestVirtualNetworkAndConnect( | 3477 void NetworkLibraryImplCros::CallRequestVirtualNetworkAndConnect( |
| 3342 const std::string& service_name, | 3478 const std::string& service_name, |
| 3343 const std::string& server_hostname, | 3479 const std::string& server_hostname, |
| 3344 ProviderType provider_type) { | 3480 ProviderType provider_type) { |
| 3345 chromeos::RequestVirtualNetwork(service_name.c_str(), | 3481 chromeos::RequestVirtualNetworkProperties( |
| 3346 server_hostname.c_str(), | 3482 service_name.c_str(), |
| 3347 ProviderTypeToString(provider_type), | 3483 server_hostname.c_str(), |
| 3348 VPNServiceUpdateAndConnect, | 3484 ProviderTypeToString(provider_type), |
| 3349 this); | 3485 VPNServiceUpdateAndConnect, |
| 3486 this); | |
| 3350 } | 3487 } |
| 3351 | 3488 |
| 3352 void NetworkLibraryImplCros::CallDeleteRememberedNetwork( | 3489 void NetworkLibraryImplCros::CallDeleteRememberedNetwork( |
| 3353 const std::string& profile_path, | 3490 const std::string& profile_path, |
| 3354 const std::string& service_path) { | 3491 const std::string& service_path) { |
| 3355 chromeos::DeleteServiceFromProfile( | 3492 chromeos::DeleteServiceFromProfile( |
| 3356 profile_path.c_str(), service_path.c_str()); | 3493 profile_path.c_str(), service_path.c_str()); |
| 3357 } | 3494 } |
| 3358 | 3495 |
| 3359 ////////////////////////////////////////////////////////////////////////////// | 3496 ////////////////////////////////////////////////////////////////////////////// |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3482 // but not UI doesn't assume such notification so just ignore result. | 3619 // but not UI doesn't assume such notification so just ignore result. |
| 3483 } | 3620 } |
| 3484 | 3621 |
| 3485 void NetworkLibraryImplCros::SetCellularDataRoamingAllowed(bool new_value) { | 3622 void NetworkLibraryImplCros::SetCellularDataRoamingAllowed(bool new_value) { |
| 3486 const NetworkDevice* cellular = FindCellularDevice(); | 3623 const NetworkDevice* cellular = FindCellularDevice(); |
| 3487 if (!cellular) { | 3624 if (!cellular) { |
| 3488 NOTREACHED() << "Calling SetCellularDataRoamingAllowed method " | 3625 NOTREACHED() << "Calling SetCellularDataRoamingAllowed method " |
| 3489 "w/o cellular device."; | 3626 "w/o cellular device."; |
| 3490 return; | 3627 return; |
| 3491 } | 3628 } |
| 3492 scoped_ptr<Value> value(Value::CreateBooleanValue(new_value)); | 3629 scoped_ptr<GValue> gvalue(ConvertBoolToGValue(new_value)); |
| 3493 chromeos::SetNetworkDeviceProperty(cellular->device_path().c_str(), | 3630 chromeos::SetNetworkDevicePropertyGValue(cellular->device_path().c_str(), |
| 3494 kCellularAllowRoamingProperty, | 3631 kCellularAllowRoamingProperty, |
| 3495 value.get()); | 3632 gvalue.get()); |
| 3496 } | 3633 } |
| 3497 | 3634 |
| 3498 bool NetworkLibraryImplCros::IsCellularAlwaysInRoaming() { | 3635 bool NetworkLibraryImplCros::IsCellularAlwaysInRoaming() { |
| 3499 const NetworkDevice* cellular = FindCellularDevice(); | 3636 const NetworkDevice* cellular = FindCellularDevice(); |
| 3500 if (!cellular) { | 3637 if (!cellular) { |
| 3501 NOTREACHED() << "Calling IsCellularAlwaysInRoaming method " | 3638 NOTREACHED() << "Calling IsCellularAlwaysInRoaming method " |
| 3502 "w/o cellular device."; | 3639 "w/o cellular device."; |
| 3503 return false; | 3640 return false; |
| 3504 } | 3641 } |
| 3505 const std::string& home_provider_name = cellular->home_provider_name(); | 3642 const std::string& home_provider_name = cellular->home_provider_name(); |
| 3506 for (size_t i = 0; i < arraysize(kAlwaysInRoamingOperators); i++) { | 3643 for (size_t i = 0; i < arraysize(kAlwaysInRoamingOperators); i++) { |
| 3507 if (home_provider_name == kAlwaysInRoamingOperators[i]) | 3644 if (home_provider_name == kAlwaysInRoamingOperators[i]) |
| 3508 return true; | 3645 return true; |
| 3509 } | 3646 } |
| 3510 return false; | 3647 return false; |
| 3511 } | 3648 } |
| 3512 | 3649 |
| 3513 void NetworkLibraryImplCros::RequestNetworkScan() { | 3650 void NetworkLibraryImplCros::RequestNetworkScan() { |
| 3514 if (wifi_enabled()) { | 3651 if (wifi_enabled()) { |
| 3515 wifi_scanning_ = true; // Cleared when updates are received. | 3652 wifi_scanning_ = true; // Cleared when updates are received. |
| 3516 chromeos::RequestNetworkScan(kTypeWifi); | 3653 chromeos::RequestNetworkScan(kTypeWifi); |
| 3517 } | 3654 } |
| 3518 if (cellular_network()) | 3655 if (cellular_network()) |
| 3519 cellular_network()->RefreshDataPlansIfNeeded(); | 3656 cellular_network()->RefreshDataPlansIfNeeded(); |
| 3520 // Make sure all Manager info is up to date. This will also update | 3657 // Make sure all Manager info is up to date. This will also update |
| 3521 // remembered networks and visible services. | 3658 // remembered networks and visible services. |
| 3522 chromeos::RequestNetworkManagerInfo(&NetworkManagerUpdate, this); | 3659 chromeos::RequestNetworkManagerProperties(&NetworkManagerUpdate, this); |
| 3523 } | 3660 } |
| 3524 | 3661 |
| 3525 bool NetworkLibraryImplCros::GetWifiAccessPoints( | 3662 bool NetworkLibraryImplCros::GetWifiAccessPoints( |
| 3526 WifiAccessPointVector* result) { | 3663 WifiAccessPointVector* result) { |
| 3527 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 3664 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 3528 DeviceNetworkList* network_list = chromeos::GetDeviceNetworkList(); | 3665 DeviceNetworkList* network_list = chromeos::GetDeviceNetworkList(); |
| 3529 if (network_list == NULL) | 3666 if (network_list == NULL) |
| 3530 return false; | 3667 return false; |
| 3531 result->clear(); | 3668 result->clear(); |
| 3532 result->reserve(network_list->network_size); | 3669 result->reserve(network_list->network_size); |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3643 if (ipconfig_status2) { | 3780 if (ipconfig_status2) { |
| 3644 for (int i = 0; i < ipconfig_status2->size; ++i) { | 3781 for (int i = 0; i < ipconfig_status2->size; ++i) { |
| 3645 if (ipconfig_status2->ips[i].type == chromeos::IPCONFIG_TYPE_IPV4) | 3782 if (ipconfig_status2->ips[i].type == chromeos::IPCONFIG_TYPE_IPV4) |
| 3646 ipconfig_static = &ipconfig_status2->ips[i]; | 3783 ipconfig_static = &ipconfig_status2->ips[i]; |
| 3647 } | 3784 } |
| 3648 } | 3785 } |
| 3649 } | 3786 } |
| 3650 if (ipconfig_static) { | 3787 if (ipconfig_static) { |
| 3651 // Save any changed details. | 3788 // Save any changed details. |
| 3652 if (ipconfig.address != ipconfig_static->address) { | 3789 if (ipconfig.address != ipconfig_static->address) { |
| 3653 scoped_ptr<Value> value(Value::CreateStringValue(ipconfig.address)); | 3790 scoped_ptr<GValue> gvalue(ConvertStringToGValue(ipconfig.address)); |
| 3654 chromeos::SetNetworkIPConfigProperty(ipconfig_static->path, | 3791 chromeos::SetNetworkIPConfigPropertyGValue( |
| 3655 kAddressProperty, | 3792 ipconfig_static->path, kAddressProperty, gvalue.get()); |
| 3656 value.get()); | |
| 3657 } | 3793 } |
| 3658 if (ipconfig.netmask != ipconfig_static->netmask) { | 3794 if (ipconfig.netmask != ipconfig_static->netmask) { |
| 3659 int32 prefixlen = ipconfig.GetPrefixLength(); | 3795 int prefixlen = ipconfig.GetPrefixLength(); |
| 3660 if (prefixlen == -1) { | 3796 if (prefixlen == -1) { |
| 3661 VLOG(1) << "IP config prefixlen is invalid for netmask " | 3797 VLOG(1) << "IP config prefixlen is invalid for netmask " |
| 3662 << ipconfig.netmask; | 3798 << ipconfig.netmask; |
| 3663 } else { | 3799 } else { |
| 3664 scoped_ptr<Value> value(Value::CreateIntegerValue(prefixlen)); | 3800 scoped_ptr<GValue> gvalue(ConvertIntToGValue(prefixlen)); |
| 3665 chromeos::SetNetworkIPConfigProperty(ipconfig_static->path, | 3801 chromeos::SetNetworkIPConfigPropertyGValue( |
| 3666 kPrefixlenProperty, | 3802 ipconfig_static->path, kPrefixlenProperty, gvalue.get()); |
| 3667 value.get()); | |
| 3668 } | 3803 } |
| 3669 } | 3804 } |
| 3670 if (ipconfig.gateway != ipconfig_static->gateway) { | 3805 if (ipconfig.gateway != ipconfig_static->gateway) { |
| 3671 scoped_ptr<Value> value(Value::CreateStringValue(ipconfig.gateway)); | 3806 scoped_ptr<GValue> gvalue(ConvertStringToGValue(ipconfig.gateway)); |
| 3672 chromeos::SetNetworkIPConfigProperty(ipconfig_static->path, | 3807 chromeos::SetNetworkIPConfigPropertyGValue( |
| 3673 kGatewayProperty, | 3808 ipconfig_static->path, kGatewayProperty, gvalue.get()); |
| 3674 value.get()); | |
| 3675 } | 3809 } |
| 3676 if (ipconfig.name_servers != ipconfig_static->name_servers) { | 3810 if (ipconfig.name_servers != ipconfig_static->name_servers) { |
| 3677 scoped_ptr<Value> value( | 3811 scoped_ptr<GValue> gvalue(ConvertStringToGValue(ipconfig.name_servers)); |
| 3678 Value::CreateStringValue(ipconfig.name_servers)); | 3812 chromeos::SetNetworkIPConfigPropertyGValue( |
| 3679 chromeos::SetNetworkIPConfigProperty(ipconfig_static->path, | 3813 ipconfig_static->path, kNameServersProperty, gvalue.get()); |
| 3680 kNameServersProperty, | |
| 3681 value.get()); | |
| 3682 } | 3814 } |
| 3683 // Remove dhcp ip config if there is one. | 3815 // Remove dhcp ip config if there is one. |
| 3684 if (ipconfig_dhcp) | 3816 if (ipconfig_dhcp) |
| 3685 chromeos::RemoveIPConfig(ipconfig_dhcp); | 3817 chromeos::RemoveIPConfig(ipconfig_dhcp); |
| 3686 } | 3818 } |
| 3687 } | 3819 } |
| 3688 | 3820 |
| 3689 if (ipconfig_status) | 3821 if (ipconfig_status) |
| 3690 chromeos::FreeIPConfigStatus(ipconfig_status); | 3822 chromeos::FreeIPConfigStatus(ipconfig_status); |
| 3691 if (ipconfig_status2) | 3823 if (ipconfig_status2) |
| 3692 chromeos::FreeIPConfigStatus(ipconfig_status2); | 3824 chromeos::FreeIPConfigStatus(ipconfig_status2); |
| 3693 } | 3825 } |
| 3694 | 3826 |
| 3695 ///////////////////////////////////////////////////////////////////////////// | 3827 ///////////////////////////////////////////////////////////////////////////// |
| 3696 // Network Manager functions. | 3828 // Network Manager functions. |
| 3697 | 3829 |
| 3698 // static | 3830 // static |
| 3699 void NetworkLibraryImplCros::NetworkManagerStatusChangedHandler( | 3831 void NetworkLibraryImplCros::NetworkManagerStatusChangedHandler( |
| 3700 void* object, const char* path, const char* key, const Value* value) { | 3832 void* object, const char* path, const char* key, const GValue* gvalue) { |
| 3701 NetworkLibraryImplCros* networklib = | 3833 NetworkLibraryImplCros* networklib = |
| 3702 static_cast<NetworkLibraryImplCros*>(object); | 3834 static_cast<NetworkLibraryImplCros*>(object); |
| 3703 DCHECK(networklib); | 3835 DCHECK(networklib); |
| 3704 networklib->NetworkManagerStatusChanged(key, value); | 3836 scoped_ptr<Value> value(ConvertGlibValue(gvalue)); |
| 3837 networklib->NetworkManagerStatusChanged(key, value.get()); | |
| 3705 } | 3838 } |
| 3706 | 3839 |
| 3707 // This processes all Manager update messages. | 3840 // This processes all Manager update messages. |
| 3708 void NetworkLibraryImplCros::NetworkManagerStatusChanged( | 3841 void NetworkLibraryImplCros::NetworkManagerStatusChanged( |
| 3709 const char* key, const Value* value) { | 3842 const char* key, const Value* value) { |
| 3710 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 3843 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 3711 base::TimeTicks start = base::TimeTicks::Now(); | 3844 base::TimeTicks start = base::TimeTicks::Now(); |
| 3712 if (!key) | 3845 if (!key) |
| 3713 return; | 3846 return; |
| 3714 VLOG(1) << "NetworkManagerStatusChanged: KEY=" << key; | 3847 VLOG(1) << "NetworkManagerStatusChanged: KEY=" << key; |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3790 break; | 3923 break; |
| 3791 } | 3924 } |
| 3792 base::TimeDelta delta = base::TimeTicks::Now() - start; | 3925 base::TimeDelta delta = base::TimeTicks::Now() - start; |
| 3793 VLOG(2) << "NetworkManagerStatusChanged: time: " | 3926 VLOG(2) << "NetworkManagerStatusChanged: time: " |
| 3794 << delta.InMilliseconds() << " ms."; | 3927 << delta.InMilliseconds() << " ms."; |
| 3795 HISTOGRAM_TIMES("CROS_NETWORK_UPDATE", delta); | 3928 HISTOGRAM_TIMES("CROS_NETWORK_UPDATE", delta); |
| 3796 } | 3929 } |
| 3797 | 3930 |
| 3798 // static | 3931 // static |
| 3799 void NetworkLibraryImplCros::NetworkManagerUpdate( | 3932 void NetworkLibraryImplCros::NetworkManagerUpdate( |
| 3800 void* object, const char* manager_path, const Value* info) { | 3933 void* object, const char* manager_path, GHashTable* ghash) { |
| 3801 NetworkLibraryImplCros* networklib = | 3934 NetworkLibraryImplCros* networklib = |
| 3802 static_cast<NetworkLibraryImplCros*>(object); | 3935 static_cast<NetworkLibraryImplCros*>(object); |
| 3803 DCHECK(networklib); | 3936 DCHECK(networklib); |
| 3804 if (!info) { | 3937 if (!ghash) { |
| 3805 LOG(ERROR) << "Error retrieving manager properties: " << manager_path; | 3938 LOG(ERROR) << "Error retrieving manager properties: " << manager_path; |
| 3806 return; | 3939 return; |
| 3807 } | 3940 } |
| 3808 VLOG(1) << "Received NetworkManagerUpdate."; | 3941 VLOG(1) << "Received NetworkManagerUpdate."; |
| 3809 DCHECK_EQ(info->GetType(), Value::TYPE_DICTIONARY); | 3942 scoped_ptr<DictionaryValue> dict(ConvertGHashTable(ghash)); |
| 3810 const DictionaryValue* dict = static_cast<const DictionaryValue*>(info); | 3943 networklib->ParseNetworkManager(*(dict.get())); |
| 3811 networklib->ParseNetworkManager(*dict); | |
| 3812 } | 3944 } |
| 3813 | 3945 |
| 3814 void NetworkLibraryImplCros::ParseNetworkManager(const DictionaryValue& dict) { | 3946 void NetworkLibraryImplCros::ParseNetworkManager(const DictionaryValue& dict) { |
| 3815 for (DictionaryValue::key_iterator iter = dict.begin_keys(); | 3947 for (DictionaryValue::key_iterator iter = dict.begin_keys(); |
| 3816 iter != dict.end_keys(); ++iter) { | 3948 iter != dict.end_keys(); ++iter) { |
| 3817 const std::string& key = *iter; | 3949 const std::string& key = *iter; |
| 3818 Value* value; | 3950 Value* value; |
| 3819 bool res = dict.GetWithoutPathExpansion(key, &value); | 3951 bool res = dict.GetWithoutPathExpansion(key, &value); |
| 3820 CHECK(res); | 3952 CHECK(res); |
| 3821 NetworkManagerStatusChanged(key.c_str(), value); | 3953 NetworkManagerStatusChanged(key.c_str(), value); |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3914 AddNetwork(found->second); | 4046 AddNetwork(found->second); |
| 3915 old_network_map.erase(found); | 4047 old_network_map.erase(found); |
| 3916 } | 4048 } |
| 3917 // Always request network updates. | 4049 // Always request network updates. |
| 3918 // TODO(stevenjb): Investigate why we are missing updates then | 4050 // TODO(stevenjb): Investigate why we are missing updates then |
| 3919 // rely on watched network updates and only request updates here for | 4051 // rely on watched network updates and only request updates here for |
| 3920 // new networks. | 4052 // new networks. |
| 3921 // Use update_request map to store network priority. | 4053 // Use update_request map to store network priority. |
| 3922 network_update_requests_[service_path] = network_priority_order++; | 4054 network_update_requests_[service_path] = network_priority_order++; |
| 3923 wifi_scanning_ = true; | 4055 wifi_scanning_ = true; |
| 3924 chromeos::RequestNetworkServiceInfo(service_path.c_str(), | 4056 chromeos::RequestNetworkServiceProperties(service_path.c_str(), |
| 3925 &NetworkServiceUpdate, | 4057 &NetworkServiceUpdate, |
| 3926 this); | 4058 this); |
| 3927 } | 4059 } |
| 3928 } | 4060 } |
| 3929 // Iterate through list of remaining networks that are no longer in the | 4061 // Iterate through list of remaining networks that are no longer in the |
| 3930 // list and delete them or update their status and re-add them to the list. | 4062 // list and delete them or update their status and re-add them to the list. |
| 3931 for (NetworkMap::iterator iter = old_network_map.begin(); | 4063 for (NetworkMap::iterator iter = old_network_map.begin(); |
| 3932 iter != old_network_map.end(); ++iter) { | 4064 iter != old_network_map.end(); ++iter) { |
| 3933 Network* network = iter->second; | 4065 Network* network = iter->second; |
| 3934 VLOG(2) << "Delete Network: " << network->name() | 4066 VLOG(2) << "Delete Network: " << network->name() |
| 3935 << " State = " << network->GetStateString() | 4067 << " State = " << network->GetStateString() |
| 3936 << " connecting = " << network->connecting() | 4068 << " connecting = " << network->connecting() |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 3959 // Existing networks will be updated. There should not be any new networks | 4091 // Existing networks will be updated. There should not be any new networks |
| 3960 // in this list, but if there are they will be added appropriately. | 4092 // in this list, but if there are they will be added appropriately. |
| 3961 void NetworkLibraryImplCros::UpdateWatchedNetworkServiceList( | 4093 void NetworkLibraryImplCros::UpdateWatchedNetworkServiceList( |
| 3962 const ListValue* services) { | 4094 const ListValue* services) { |
| 3963 for (ListValue::const_iterator iter = services->begin(); | 4095 for (ListValue::const_iterator iter = services->begin(); |
| 3964 iter != services->end(); ++iter) { | 4096 iter != services->end(); ++iter) { |
| 3965 std::string service_path; | 4097 std::string service_path; |
| 3966 (*iter)->GetAsString(&service_path); | 4098 (*iter)->GetAsString(&service_path); |
| 3967 if (!service_path.empty()) { | 4099 if (!service_path.empty()) { |
| 3968 VLOG(1) << "Watched Service: " << service_path; | 4100 VLOG(1) << "Watched Service: " << service_path; |
| 3969 chromeos::RequestNetworkServiceInfo(service_path.c_str(), | 4101 chromeos::RequestNetworkServiceProperties(service_path.c_str(), |
| 3970 &NetworkServiceUpdate, | 4102 &NetworkServiceUpdate, |
| 3971 this); | 4103 this); |
| 3972 } | 4104 } |
| 3973 } | 4105 } |
| 3974 } | 4106 } |
| 3975 | 4107 |
| 3976 // static | 4108 // static |
| 3977 void NetworkLibraryImplCros::NetworkServiceUpdate( | 4109 void NetworkLibraryImplCros::NetworkServiceUpdate( |
| 3978 void* object, const char* service_path, const Value* info) { | 4110 void* object, const char* service_path, GHashTable* ghash) { |
| 3979 NetworkLibraryImplCros* networklib = | 4111 NetworkLibraryImplCros* networklib = |
| 3980 static_cast<NetworkLibraryImplCros*>(object); | 4112 static_cast<NetworkLibraryImplCros*>(object); |
| 3981 DCHECK(networklib); | 4113 DCHECK(networklib); |
| 3982 if (service_path) { | 4114 if (service_path) { |
| 3983 if (!info) | 4115 if (!ghash) |
| 3984 return; // Network no longer in visible list, ignore. | 4116 return; // Network no longer in visible list, ignore. |
| 3985 DCHECK_EQ(info->GetType(), Value::TYPE_DICTIONARY); | 4117 scoped_ptr<DictionaryValue> dict(ConvertGHashTable(ghash)); |
| 3986 const DictionaryValue* dict = static_cast<const DictionaryValue*>(info); | 4118 networklib->ParseNetwork(std::string(service_path), *(dict.get())); |
| 3987 networklib->ParseNetwork(std::string(service_path), *dict); | |
| 3988 } | 4119 } |
| 3989 } | 4120 } |
| 3990 | 4121 |
| 3991 // Called from NetworkServiceUpdate and WifiServiceUpdateAndConnect. | 4122 // Called from NetworkServiceUpdate and WifiServiceUpdateAndConnect. |
| 3992 Network* NetworkLibraryImplCros::ParseNetwork( | 4123 Network* NetworkLibraryImplCros::ParseNetwork( |
| 3993 const std::string& service_path, const DictionaryValue& info) { | 4124 const std::string& service_path, const DictionaryValue& info) { |
| 3994 Network* network = FindNetworkByPath(service_path); | 4125 Network* network = FindNetworkByPath(service_path); |
| 3995 if (!network) { | 4126 if (!network) { |
| 3996 NativeNetworkParser parser; | 4127 NativeNetworkParser parser; |
| 3997 network = parser.CreateNetworkFromInfo(service_path, info); | 4128 network = parser.CreateNetworkFromInfo(service_path, info); |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4070 network->SetProfilePath(profile_path); | 4201 network->SetProfilePath(profile_path); |
| 4071 } | 4202 } |
| 4072 user_networks_.clear(); | 4203 user_networks_.clear(); |
| 4073 } | 4204 } |
| 4074 } | 4205 } |
| 4075 } | 4206 } |
| 4076 | 4207 |
| 4077 void NetworkLibraryImplCros::RequestRememberedNetworksUpdate() { | 4208 void NetworkLibraryImplCros::RequestRememberedNetworksUpdate() { |
| 4078 VLOG(1) << "RequestRememberedNetworksUpdate"; | 4209 VLOG(1) << "RequestRememberedNetworksUpdate"; |
| 4079 // Delete all remembered networks. We delete them because | 4210 // Delete all remembered networks. We delete them because |
| 4080 // RequestNetworkProfile is asynchronous and may invoke | 4211 // RequestNetworkProfileProperties is asynchronous and may invoke |
| 4081 // UpdateRememberedServiceList multiple times (once per profile). | 4212 // UpdateRememberedServiceList multiple times (once per profile). |
| 4082 // We can do this safely because we do not save any local state for | 4213 // We can do this safely because we do not save any local state for |
| 4083 // remembered networks. This list updates infrequently. | 4214 // remembered networks. This list updates infrequently. |
| 4084 DeleteRememberedNetworks(); | 4215 DeleteRememberedNetworks(); |
| 4085 // Request remembered networks from each profile. Later entries will | 4216 // Request remembered networks from each profile. Later entries will |
| 4086 // override earlier entries, so default/local entries will override | 4217 // override earlier entries, so default/local entries will override |
| 4087 // user entries (as desired). | 4218 // user entries (as desired). |
| 4088 for (NetworkProfileList::iterator iter = profile_list_.begin(); | 4219 for (NetworkProfileList::iterator iter = profile_list_.begin(); |
| 4089 iter != profile_list_.end(); ++iter) { | 4220 iter != profile_list_.end(); ++iter) { |
| 4090 NetworkProfile& profile = *iter; | 4221 NetworkProfile& profile = *iter; |
| 4091 VLOG(1) << " Requesting Profile: " << profile.path; | 4222 VLOG(1) << " Requesting Profile: " << profile.path; |
| 4092 chromeos::RequestNetworkProfile( | 4223 chromeos::RequestNetworkProfileProperties( |
| 4093 profile.path.c_str(), &ProfileUpdate, this); | 4224 profile.path.c_str(), &ProfileUpdate, this); |
| 4094 } | 4225 } |
| 4095 } | 4226 } |
| 4096 | 4227 |
| 4097 // static | 4228 // static |
| 4098 void NetworkLibraryImplCros::ProfileUpdate( | 4229 void NetworkLibraryImplCros::ProfileUpdate( |
| 4099 void* object, const char* profile_path, const Value* info) { | 4230 void* object, const char* profile_path, GHashTable* ghash) { |
| 4100 NetworkLibraryImplCros* networklib = | 4231 NetworkLibraryImplCros* networklib = |
| 4101 static_cast<NetworkLibraryImplCros*>(object); | 4232 static_cast<NetworkLibraryImplCros*>(object); |
| 4102 DCHECK(networklib); | 4233 DCHECK(networklib); |
| 4103 if (!info) { | 4234 if (!ghash) { |
| 4104 LOG(ERROR) << "Error retrieving profile: " << profile_path; | 4235 LOG(ERROR) << "Error retrieving profile: " << profile_path; |
| 4105 return; | 4236 return; |
| 4106 } | 4237 } |
| 4107 VLOG(1) << "Received ProfileUpdate for: " << profile_path; | 4238 VLOG(1) << "Received ProfileUpdate for: " << profile_path; |
| 4108 DCHECK_EQ(info->GetType(), Value::TYPE_DICTIONARY); | 4239 scoped_ptr<DictionaryValue> dict(ConvertGHashTable(ghash)); |
| 4109 const DictionaryValue* dict = static_cast<const DictionaryValue*>(info); | |
| 4110 ListValue* entries(NULL); | 4240 ListValue* entries(NULL); |
| 4111 dict->GetList(kEntriesProperty, &entries); | 4241 dict->GetList(kEntriesProperty, &entries); |
| 4112 DCHECK(entries); | 4242 DCHECK(entries); |
| 4113 networklib->UpdateRememberedServiceList(profile_path, entries); | 4243 networklib->UpdateRememberedServiceList(profile_path, entries); |
| 4114 } | 4244 } |
| 4115 | 4245 |
| 4116 void NetworkLibraryImplCros::UpdateRememberedServiceList( | 4246 void NetworkLibraryImplCros::UpdateRememberedServiceList( |
| 4117 const char* profile_path, const ListValue* profile_entries) { | 4247 const char* profile_path, const ListValue* profile_entries) { |
| 4118 DCHECK(profile_path); | 4248 DCHECK(profile_path); |
| 4119 VLOG(1) << "UpdateRememberedServiceList for path: " << profile_path; | 4249 VLOG(1) << "UpdateRememberedServiceList for path: " << profile_path; |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 4134 std::string service_path; | 4264 std::string service_path; |
| 4135 (*iter2)->GetAsString(&service_path); | 4265 (*iter2)->GetAsString(&service_path); |
| 4136 if (service_path.empty()) { | 4266 if (service_path.empty()) { |
| 4137 LOG(WARNING) << "Empty service path in profile."; | 4267 LOG(WARNING) << "Empty service path in profile."; |
| 4138 continue; | 4268 continue; |
| 4139 } | 4269 } |
| 4140 VLOG(1) << " Remembered service: " << service_path; | 4270 VLOG(1) << " Remembered service: " << service_path; |
| 4141 // Add service to profile list. | 4271 // Add service to profile list. |
| 4142 profile.services.insert(service_path); | 4272 profile.services.insert(service_path); |
| 4143 // Request update for remembered network. | 4273 // Request update for remembered network. |
| 4144 chromeos::RequestNetworkProfileEntry(profile_path, | 4274 chromeos::RequestNetworkProfileEntryProperties( |
| 4145 service_path.c_str(), | 4275 profile_path, |
| 4146 &RememberedNetworkServiceUpdate, | 4276 service_path.c_str(), |
| 4147 this); | 4277 &RememberedNetworkServiceUpdate, |
| 4278 this); | |
| 4148 } | 4279 } |
| 4149 } | 4280 } |
| 4150 | 4281 |
| 4151 // static | 4282 // static |
| 4152 void NetworkLibraryImplCros::RememberedNetworkServiceUpdate( | 4283 void NetworkLibraryImplCros::RememberedNetworkServiceUpdate( |
| 4153 void* object, const char* service_path, const Value* info) { | 4284 void* object, const char* service_path, GHashTable* ghash) { |
| 4154 NetworkLibraryImplCros* networklib = | 4285 NetworkLibraryImplCros* networklib = |
| 4155 static_cast<NetworkLibraryImplCros*>(object); | 4286 static_cast<NetworkLibraryImplCros*>(object); |
| 4156 DCHECK(networklib); | 4287 DCHECK(networklib); |
| 4157 if (service_path) { | 4288 if (service_path) { |
| 4158 if (!info) { | 4289 if (!ghash) { |
| 4159 // Remembered network no longer exists. | 4290 // Remembered network no longer exists. |
| 4160 networklib->DeleteRememberedNetwork(std::string(service_path)); | 4291 networklib->DeleteRememberedNetwork(std::string(service_path)); |
| 4161 } else { | 4292 } else { |
| 4162 DCHECK_EQ(info->GetType(), Value::TYPE_DICTIONARY); | 4293 scoped_ptr<DictionaryValue> dict(ConvertGHashTable(ghash)); |
| 4163 const DictionaryValue* dict = static_cast<const DictionaryValue*>(info); | 4294 networklib->ParseRememberedNetwork( |
| 4164 networklib->ParseRememberedNetwork(std::string(service_path), *dict); | 4295 std::string(service_path), *(dict.get())); |
| 4165 } | 4296 } |
| 4166 } | 4297 } |
| 4167 } | 4298 } |
| 4168 | 4299 |
| 4169 // Returns NULL if |service_path| refers to a network that is not a | 4300 // Returns NULL if |service_path| refers to a network that is not a |
| 4170 // remembered type. Called from RememberedNetworkServiceUpdate. | 4301 // remembered type. Called from RememberedNetworkServiceUpdate. |
| 4171 Network* NetworkLibraryImplCros::ParseRememberedNetwork( | 4302 Network* NetworkLibraryImplCros::ParseRememberedNetwork( |
| 4172 const std::string& service_path, const DictionaryValue& info) { | 4303 const std::string& service_path, const DictionaryValue& info) { |
| 4173 Network* remembered; | 4304 Network* remembered; |
| 4174 NetworkMap::iterator found = remembered_network_map_.find(service_path); | 4305 NetworkMap::iterator found = remembered_network_map_.find(service_path); |
| (...skipping 22 matching lines...) Expand all Loading... | |
| 4197 | 4328 |
| 4198 if (remembered->type() == TYPE_VPN) { | 4329 if (remembered->type() == TYPE_VPN) { |
| 4199 // VPNs are only stored in profiles. If we don't have a network for it, | 4330 // VPNs are only stored in profiles. If we don't have a network for it, |
| 4200 // request one. | 4331 // request one. |
| 4201 if (!FindNetworkFromRemembered(remembered)) { | 4332 if (!FindNetworkFromRemembered(remembered)) { |
| 4202 VirtualNetwork* vpn = static_cast<VirtualNetwork*>(remembered); | 4333 VirtualNetwork* vpn = static_cast<VirtualNetwork*>(remembered); |
| 4203 std::string provider_type = ProviderTypeToString(vpn->provider_type()); | 4334 std::string provider_type = ProviderTypeToString(vpn->provider_type()); |
| 4204 VLOG(1) << "Requesting VPN: " << vpn->name() | 4335 VLOG(1) << "Requesting VPN: " << vpn->name() |
| 4205 << " Server: " << vpn->server_hostname() | 4336 << " Server: " << vpn->server_hostname() |
| 4206 << " Type: " << provider_type; | 4337 << " Type: " << provider_type; |
| 4207 chromeos::RequestVirtualNetwork(vpn->name().c_str(), | 4338 chromeos::RequestVirtualNetworkProperties( |
| 4208 vpn->server_hostname().c_str(), | 4339 vpn->name().c_str(), |
| 4209 provider_type.c_str(), | 4340 vpn->server_hostname().c_str(), |
| 4210 NetworkServiceUpdate, | 4341 provider_type.c_str(), |
| 4211 this); | 4342 NetworkServiceUpdate, |
| 4343 this); | |
| 4212 } | 4344 } |
| 4213 } | 4345 } |
| 4214 | 4346 |
| 4215 return remembered; | 4347 return remembered; |
| 4216 } | 4348 } |
| 4217 | 4349 |
| 4218 //////////////////////////////////////////////////////////////////////////// | 4350 //////////////////////////////////////////////////////////////////////////// |
| 4219 // NetworkDevice list management functions. | 4351 // NetworkDevice list management functions. |
| 4220 | 4352 |
| 4221 // Update device list, and request associated device updates. | 4353 // Update device list, and request associated device updates. |
| 4222 // |devices| represents a complete list of devices. | 4354 // |devices| represents a complete list of devices. |
| 4223 void NetworkLibraryImplCros::UpdateNetworkDeviceList(const ListValue* devices) { | 4355 void NetworkLibraryImplCros::UpdateNetworkDeviceList(const ListValue* devices) { |
| 4224 NetworkDeviceMap old_device_map = device_map_; | 4356 NetworkDeviceMap old_device_map = device_map_; |
| 4225 device_map_.clear(); | 4357 device_map_.clear(); |
| 4226 VLOG(2) << "Updating Device List."; | 4358 VLOG(2) << "Updating Device List."; |
| 4227 for (ListValue::const_iterator iter = devices->begin(); | 4359 for (ListValue::const_iterator iter = devices->begin(); |
| 4228 iter != devices->end(); ++iter) { | 4360 iter != devices->end(); ++iter) { |
| 4229 std::string device_path; | 4361 std::string device_path; |
| 4230 (*iter)->GetAsString(&device_path); | 4362 (*iter)->GetAsString(&device_path); |
| 4231 if (!device_path.empty()) { | 4363 if (!device_path.empty()) { |
| 4232 NetworkDeviceMap::iterator found = old_device_map.find(device_path); | 4364 NetworkDeviceMap::iterator found = old_device_map.find(device_path); |
| 4233 if (found != old_device_map.end()) { | 4365 if (found != old_device_map.end()) { |
| 4234 VLOG(2) << " Adding existing device: " << device_path; | 4366 VLOG(2) << " Adding existing device: " << device_path; |
| 4235 CHECK(found->second) << "Attempted to add NULL device pointer"; | 4367 CHECK(found->second) << "Attempted to add NULL device pointer"; |
| 4236 device_map_[device_path] = found->second; | 4368 device_map_[device_path] = found->second; |
| 4237 old_device_map.erase(found); | 4369 old_device_map.erase(found); |
| 4238 } | 4370 } |
| 4239 chromeos::RequestNetworkDeviceInfo(device_path.c_str(), | 4371 chromeos::RequestNetworkDeviceProperties(device_path.c_str(), |
| 4240 &NetworkDeviceUpdate, | 4372 &NetworkDeviceUpdate, |
| 4241 this); | 4373 this); |
| 4242 } | 4374 } |
| 4243 } | 4375 } |
| 4244 // Delete any old devices that no longer exist. | 4376 // Delete any old devices that no longer exist. |
| 4245 for (NetworkDeviceMap::iterator iter = old_device_map.begin(); | 4377 for (NetworkDeviceMap::iterator iter = old_device_map.begin(); |
| 4246 iter != old_device_map.end(); ++iter) { | 4378 iter != old_device_map.end(); ++iter) { |
| 4247 DeleteDeviceFromDeviceObserversMap(iter->first); | 4379 DeleteDeviceFromDeviceObserversMap(iter->first); |
| 4248 // Delete device. | 4380 // Delete device. |
| 4249 delete iter->second; | 4381 delete iter->second; |
| 4250 } | 4382 } |
| 4251 } | 4383 } |
| 4252 | 4384 |
| 4253 // static | 4385 // static |
| 4254 void NetworkLibraryImplCros::NetworkDeviceUpdate( | 4386 void NetworkLibraryImplCros::NetworkDeviceUpdate( |
| 4255 void* object, const char* device_path, const Value* info) { | 4387 void* object, const char* device_path, GHashTable* ghash) { |
| 4256 NetworkLibraryImplCros* networklib = | 4388 NetworkLibraryImplCros* networklib = |
| 4257 static_cast<NetworkLibraryImplCros*>(object); | 4389 static_cast<NetworkLibraryImplCros*>(object); |
| 4258 DCHECK(networklib); | 4390 DCHECK(networklib); |
| 4259 if (device_path) { | 4391 if (device_path) { |
| 4260 if (!info) { | 4392 if (!ghash) { |
| 4261 // device no longer exists. | 4393 // device no longer exists. |
| 4262 networklib->DeleteDevice(std::string(device_path)); | 4394 networklib->DeleteDevice(std::string(device_path)); |
| 4263 } else { | 4395 } else { |
| 4264 DCHECK_EQ(info->GetType(), Value::TYPE_DICTIONARY); | 4396 scoped_ptr<DictionaryValue> dict(ConvertGHashTable(ghash)); |
| 4265 const DictionaryValue* dict = static_cast<const DictionaryValue*>(info); | 4397 networklib->ParseNetworkDevice(std::string(device_path), *(dict.get())); |
| 4266 networklib->ParseNetworkDevice(std::string(device_path), *dict); | |
| 4267 } | 4398 } |
| 4268 } | 4399 } |
| 4269 } | 4400 } |
| 4270 | 4401 |
| 4271 void NetworkLibraryImplCros::ParseNetworkDevice(const std::string& device_path, | 4402 void NetworkLibraryImplCros::ParseNetworkDevice(const std::string& device_path, |
| 4272 const DictionaryValue& info) { | 4403 const DictionaryValue& info) { |
| 4273 NetworkDeviceMap::iterator found = device_map_.find(device_path); | 4404 NetworkDeviceMap::iterator found = device_map_.find(device_path); |
| 4274 NetworkDevice* device; | 4405 NetworkDevice* device; |
| 4275 if (found != device_map_.end()) { | 4406 if (found != device_map_.end()) { |
| 4276 device = found->second; | 4407 device = found->second; |
| (...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 4659 return network_library; | 4790 return network_library; |
| 4660 } | 4791 } |
| 4661 | 4792 |
| 4662 ///////////////////////////////////////////////////////////////////////////// | 4793 ///////////////////////////////////////////////////////////////////////////// |
| 4663 | 4794 |
| 4664 } // namespace chromeos | 4795 } // namespace chromeos |
| 4665 | 4796 |
| 4666 // Allows InvokeLater without adding refcounting. This class is a Singleton and | 4797 // Allows InvokeLater without adding refcounting. This class is a Singleton and |
| 4667 // won't be deleted until its last InvokeLater is run. | 4798 // won't be deleted until its last InvokeLater is run. |
| 4668 DISABLE_RUNNABLE_METHOD_REFCOUNT(chromeos::NetworkLibraryImplBase); | 4799 DISABLE_RUNNABLE_METHOD_REFCOUNT(chromeos::NetworkLibraryImplBase); |
| OLD | NEW |