| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/webui/options/chromeos/internet_options_handler.h" | 5 #include "chrome/browser/ui/webui/options/chromeos/internet_options_handler.h" |
| 6 | 6 |
| 7 #include <ctype.h> | 7 #include <ctype.h> |
| 8 | 8 |
| 9 #include <map> | 9 #include <map> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 #include "chrome/browser/chromeos/options/network_property_ui_data.h" | 24 #include "chrome/browser/chromeos/options/network_property_ui_data.h" |
| 25 #include "chrome/browser/chromeos/settings/cros_settings.h" | 25 #include "chrome/browser/chromeos/settings/cros_settings.h" |
| 26 #include "chrome/browser/chromeos/sim_dialog_delegate.h" | 26 #include "chrome/browser/chromeos/sim_dialog_delegate.h" |
| 27 #include "chrome/browser/chromeos/ui/choose_mobile_network_dialog.h" | 27 #include "chrome/browser/chromeos/ui/choose_mobile_network_dialog.h" |
| 28 #include "chrome/browser/chromeos/ui/mobile_config_ui.h" | 28 #include "chrome/browser/chromeos/ui/mobile_config_ui.h" |
| 29 #include "chrome/browser/chromeos/ui_proxy_config_service.h" | 29 #include "chrome/browser/chromeos/ui_proxy_config_service.h" |
| 30 #include "chrome/browser/profiles/profile.h" | 30 #include "chrome/browser/profiles/profile.h" |
| 31 #include "chrome/browser/ui/webui/chromeos/mobile_setup_dialog.h" | 31 #include "chrome/browser/ui/webui/chromeos/mobile_setup_dialog.h" |
| 32 #include "chrome/browser/ui/webui/options/chromeos/internet_options_handler_stri
ngs.h" | 32 #include "chrome/browser/ui/webui/options/chromeos/internet_options_handler_stri
ngs.h" |
| 33 #include "chromeos/chromeos_switches.h" | 33 #include "chromeos/chromeos_switches.h" |
| 34 #include "chromeos/login/login_state.h" |
| 34 #include "chromeos/network/device_state.h" | 35 #include "chromeos/network/device_state.h" |
| 35 #include "chromeos/network/managed_network_configuration_handler.h" | 36 #include "chromeos/network/managed_network_configuration_handler.h" |
| 36 #include "chromeos/network/network_configuration_handler.h" | 37 #include "chromeos/network/network_configuration_handler.h" |
| 37 #include "chromeos/network/network_connection_handler.h" | 38 #include "chromeos/network/network_connection_handler.h" |
| 38 #include "chromeos/network/network_device_handler.h" | 39 #include "chromeos/network/network_device_handler.h" |
| 39 #include "chromeos/network/network_event_log.h" | 40 #include "chromeos/network/network_event_log.h" |
| 40 #include "chromeos/network/network_ip_config.h" | 41 #include "chromeos/network/network_ip_config.h" |
| 41 #include "chromeos/network/network_profile.h" | 42 #include "chromeos/network/network_profile.h" |
| 42 #include "chromeos/network/network_profile_handler.h" | 43 #include "chromeos/network/network_profile_handler.h" |
| 43 #include "chromeos/network/network_state.h" | 44 #include "chromeos/network/network_state.h" |
| (...skipping 18 matching lines...) Expand all Loading... |
| 62 namespace options { | 63 namespace options { |
| 63 | 64 |
| 64 namespace { | 65 namespace { |
| 65 | 66 |
| 66 // Keys for the network description dictionary passed to the web ui. Make sure | 67 // Keys for the network description dictionary passed to the web ui. Make sure |
| 67 // to keep the strings in sync with what the JavaScript side uses. | 68 // to keep the strings in sync with what the JavaScript side uses. |
| 68 const char kNetworkInfoKeyIconURL[] = "iconURL"; | 69 const char kNetworkInfoKeyIconURL[] = "iconURL"; |
| 69 const char kNetworkInfoKeyServicePath[] = "servicePath"; | 70 const char kNetworkInfoKeyServicePath[] = "servicePath"; |
| 70 const char kNetworkInfoKeyPolicyManaged[] = "policyManaged"; | 71 const char kNetworkInfoKeyPolicyManaged[] = "policyManaged"; |
| 71 | 72 |
| 72 // These are keys for getting IP information from the web ui. | |
| 73 const char kIpConfigAddress[] = "address"; | |
| 74 const char kIpConfigPrefixLength[] = "prefixLength"; | |
| 75 const char kIpConfigNetmask[] = "netmask"; | |
| 76 const char kIpConfigGateway[] = "gateway"; | |
| 77 const char kIpConfigNameServers[] = "nameServers"; | |
| 78 const char kIpConfigAutoConfig[] = "ipAutoConfig"; | |
| 79 const char kIpConfigWebProxyAutoDiscoveryUrl[] = "webProxyAutoDiscoveryUrl"; | |
| 80 | |
| 81 // These are types of name server selections from the web ui. | 73 // These are types of name server selections from the web ui. |
| 82 const char kNameServerTypeAutomatic[] = "automatic"; | 74 const char kNameServerTypeAutomatic[] = "automatic"; |
| 83 const char kNameServerTypeGoogle[] = "google"; | 75 const char kNameServerTypeGoogle[] = "google"; |
| 84 const char kNameServerTypeUser[] = "user"; | |
| 85 | |
| 86 // These are dictionary names used to send data to the web ui. | |
| 87 const char kDictionaryIpConfig[] = "ipconfig"; | |
| 88 const char kDictionaryStaticIp[] = "staticIP"; | |
| 89 const char kDictionarySavedIp[] = "savedIP"; | |
| 90 | 76 |
| 91 // Google public name servers (DNS). | 77 // Google public name servers (DNS). |
| 92 const char kGoogleNameServers[] = "8.8.4.4,8.8.8.8"; | 78 const char kGoogleNameServers[] = "8.8.4.4,8.8.8.8"; |
| 93 | 79 |
| 94 // Functions we call in JavaScript. | 80 // Functions we call in JavaScript. |
| 95 const char kRefreshNetworkDataFunction[] = | 81 const char kRefreshNetworkDataFunction[] = |
| 96 "options.network.NetworkList.refreshNetworkData"; | 82 "options.network.NetworkList.refreshNetworkData"; |
| 97 const char kSetDefaultNetworkIconsFunction[] = | 83 const char kSetDefaultNetworkIconsFunction[] = |
| 98 "options.network.NetworkList.setDefaultNetworkIcons"; | 84 "options.network.NetworkList.setDefaultNetworkIcons"; |
| 99 const char kShowDetailedInfoFunction[] = | 85 const char kShowDetailedInfoFunction[] = |
| (...skipping 26 matching lines...) Expand all Loading... |
| 126 // These are strings used to communicate with JavaScript. | 112 // These are strings used to communicate with JavaScript. |
| 127 const char kTagActivate[] = "activate"; | 113 const char kTagActivate[] = "activate"; |
| 128 const char kTagAddConnection[] = "add"; | 114 const char kTagAddConnection[] = "add"; |
| 129 const char kTagCarrierSelectFlag[] = "showCarrierSelect"; | 115 const char kTagCarrierSelectFlag[] = "showCarrierSelect"; |
| 130 const char kTagCarrierUrl[] = "carrierUrl"; | 116 const char kTagCarrierUrl[] = "carrierUrl"; |
| 131 const char kTagCellularAvailable[] = "cellularAvailable"; | 117 const char kTagCellularAvailable[] = "cellularAvailable"; |
| 132 const char kTagCellularEnabled[] = "cellularEnabled"; | 118 const char kTagCellularEnabled[] = "cellularEnabled"; |
| 133 const char kTagCellularSupportsScan[] = "cellularSupportsScan"; | 119 const char kTagCellularSupportsScan[] = "cellularSupportsScan"; |
| 134 const char kTagConfigure[] = "configure"; | 120 const char kTagConfigure[] = "configure"; |
| 135 const char kTagConnect[] = "connect"; | 121 const char kTagConnect[] = "connect"; |
| 136 const char kTagControlledBy[] = "controlledBy"; | |
| 137 const char kTagDeviceConnected[] = "deviceConnected"; | 122 const char kTagDeviceConnected[] = "deviceConnected"; |
| 138 const char kTagDisconnect[] = "disconnect"; | 123 const char kTagDisconnect[] = "disconnect"; |
| 139 const char kTagErrorMessage[] = "errorMessage"; | 124 const char kTagErrorMessage[] = "errorMessage"; |
| 140 const char kTagForget[] = "forget"; | 125 const char kTagForget[] = "forget"; |
| 141 const char kTagNameServersGoogle[] = "nameServersGoogle"; | |
| 142 const char kTagNameServerType[] = "nameServerType"; | |
| 143 const char kTagOptions[] = "options"; | 126 const char kTagOptions[] = "options"; |
| 144 const char kTagPolicy[] = "policy"; | |
| 145 const char kTagRecommended[] = "recommended"; | |
| 146 const char kTagRecommendedValue[] = "recommendedValue"; | |
| 147 const char kTagRemembered[] = "remembered"; | 127 const char kTagRemembered[] = "remembered"; |
| 148 const char kTagRememberedList[] = "rememberedList"; | 128 const char kTagRememberedList[] = "rememberedList"; |
| 149 const char kTagCarriers[] = "carriers"; | 129 const char kTagCarriers[] = "carriers"; |
| 150 const char kTagCurrentCarrierIndex[] = "currentCarrierIndex"; | 130 const char kTagCurrentCarrierIndex[] = "currentCarrierIndex"; |
| 151 const char kTagShared[] = "shared"; | 131 const char kTagShared[] = "shared"; |
| 152 const char kTagShowActivateButton[] = "showActivateButton"; | 132 const char kTagShowActivateButton[] = "showActivateButton"; |
| 153 const char kTagShowViewAccountButton[] = "showViewAccountButton"; | 133 const char kTagShowViewAccountButton[] = "showViewAccountButton"; |
| 154 const char kTagTrue[] = "true"; | 134 const char kTagTrue[] = "true"; |
| 155 const char kTagValue[] = "value"; | |
| 156 const char kTagVpnList[] = "vpnList"; | 135 const char kTagVpnList[] = "vpnList"; |
| 157 const char kTagWifiAvailable[] = "wifiAvailable"; | 136 const char kTagWifiAvailable[] = "wifiAvailable"; |
| 158 const char kTagWifiEnabled[] = "wifiEnabled"; | 137 const char kTagWifiEnabled[] = "wifiEnabled"; |
| 159 const char kTagWimaxAvailable[] = "wimaxAvailable"; | 138 const char kTagWimaxAvailable[] = "wimaxAvailable"; |
| 160 const char kTagWimaxEnabled[] = "wimaxEnabled"; | 139 const char kTagWimaxEnabled[] = "wimaxEnabled"; |
| 161 const char kTagWiredList[] = "wiredList"; | 140 const char kTagWiredList[] = "wiredList"; |
| 162 const char kTagWirelessList[] = "wirelessList"; | 141 const char kTagWirelessList[] = "wirelessList"; |
| 163 | 142 |
| 164 const int kPreferredPriority = 1; | 143 const int kPreferredPriority = 1; |
| 165 | 144 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 208 | 187 |
| 209 std::string icon_url = ui::network_icon::GetImageUrlForNetwork( | 188 std::string icon_url = ui::network_icon::GetImageUrlForNetwork( |
| 210 network, ui::network_icon::ICON_TYPE_LIST, icon_scale_factor); | 189 network, ui::network_icon::ICON_TYPE_LIST, icon_scale_factor); |
| 211 | 190 |
| 212 network_info->SetString(kNetworkInfoKeyIconURL, icon_url); | 191 network_info->SetString(kNetworkInfoKeyIconURL, icon_url); |
| 213 network_info->SetString(kNetworkInfoKeyServicePath, network->path()); | 192 network_info->SetString(kNetworkInfoKeyServicePath, network->path()); |
| 214 | 193 |
| 215 return network_info.release(); | 194 return network_info.release(); |
| 216 } | 195 } |
| 217 | 196 |
| 218 // Pulls IP information out of a shill service properties dictionary. If | |
| 219 // |static_ip| is true, then it fetches "StaticIP.*" properties. If not, then it | |
| 220 // fetches "SavedIP.*" properties. Caller must take ownership of returned | |
| 221 // dictionary. If non-NULL, |ip_parameters_set| returns a count of the number | |
| 222 // of IP routing parameters that get set. | |
| 223 base::DictionaryValue* BuildIPInfoDictionary( | |
| 224 const base::DictionaryValue& shill_properties, | |
| 225 bool static_ip, | |
| 226 int* routing_parameters_set) { | |
| 227 std::string address_key; | |
| 228 std::string prefix_len_key; | |
| 229 std::string gateway_key; | |
| 230 std::string name_servers_key; | |
| 231 if (static_ip) { | |
| 232 address_key = shill::kStaticIPAddressProperty; | |
| 233 prefix_len_key = shill::kStaticIPPrefixlenProperty; | |
| 234 gateway_key = shill::kStaticIPGatewayProperty; | |
| 235 name_servers_key = shill::kStaticIPNameServersProperty; | |
| 236 } else { | |
| 237 address_key = shill::kSavedIPAddressProperty; | |
| 238 prefix_len_key = shill::kSavedIPPrefixlenProperty; | |
| 239 gateway_key = shill::kSavedIPGatewayProperty; | |
| 240 name_servers_key = shill::kSavedIPNameServersProperty; | |
| 241 } | |
| 242 | |
| 243 scoped_ptr<base::DictionaryValue> ip_info_dict(new base::DictionaryValue); | |
| 244 std::string address; | |
| 245 int routing_parameters = 0; | |
| 246 if (shill_properties.GetStringWithoutPathExpansion(address_key, &address)) { | |
| 247 ip_info_dict->SetString(kIpConfigAddress, address); | |
| 248 VLOG(2) << "Found " << address_key << ": " << address; | |
| 249 routing_parameters++; | |
| 250 } | |
| 251 int prefix_len = -1; | |
| 252 if (shill_properties.GetIntegerWithoutPathExpansion( | |
| 253 prefix_len_key, &prefix_len)) { | |
| 254 ip_info_dict->SetInteger(kIpConfigPrefixLength, prefix_len); | |
| 255 std::string netmask = network_util::PrefixLengthToNetmask(prefix_len); | |
| 256 ip_info_dict->SetString(kIpConfigNetmask, netmask); | |
| 257 VLOG(2) << "Found " << prefix_len_key << ": " | |
| 258 << prefix_len << " (" << netmask << ")"; | |
| 259 routing_parameters++; | |
| 260 } | |
| 261 std::string gateway; | |
| 262 if (shill_properties.GetStringWithoutPathExpansion(gateway_key, &gateway)) { | |
| 263 ip_info_dict->SetString(kIpConfigGateway, gateway); | |
| 264 VLOG(2) << "Found " << gateway_key << ": " << gateway; | |
| 265 routing_parameters++; | |
| 266 } | |
| 267 if (routing_parameters_set) | |
| 268 *routing_parameters_set = routing_parameters; | |
| 269 | |
| 270 std::string name_servers; | |
| 271 if (shill_properties.GetStringWithoutPathExpansion( | |
| 272 name_servers_key, &name_servers)) { | |
| 273 ip_info_dict->SetString(kIpConfigNameServers, name_servers); | |
| 274 VLOG(2) << "Found " << name_servers_key << ": " << name_servers; | |
| 275 } | |
| 276 | |
| 277 return ip_info_dict.release(); | |
| 278 } | |
| 279 | |
| 280 // Decorate pref value as CoreOptionsHandler::CreateValueForPref() does and | |
| 281 // store it under |key| in |settings|. Takes ownership of |value|. | |
| 282 void SetValueDictionary(const char* key, | |
| 283 base::Value* value, | |
| 284 const NetworkPropertyUIData& ui_data, | |
| 285 base::DictionaryValue* settings) { | |
| 286 base::DictionaryValue* dict = new base::DictionaryValue(); | |
| 287 // DictionaryValue::Set() takes ownership of |value|. | |
| 288 dict->Set(kTagValue, value); | |
| 289 settings->Set(key, dict); | |
| 290 | |
| 291 const base::Value* recommended_value = ui_data.default_value(); | |
| 292 if (ui_data.IsManaged()) | |
| 293 dict->SetString(kTagControlledBy, kTagPolicy); | |
| 294 else if (recommended_value && recommended_value->Equals(value)) | |
| 295 dict->SetString(kTagControlledBy, kTagRecommended); | |
| 296 | |
| 297 if (recommended_value) | |
| 298 dict->Set(kTagRecommendedValue, recommended_value->DeepCopy()); | |
| 299 } | |
| 300 | |
| 301 const char* GetOncPolicyString(::onc::ONCSource onc_source) { | |
| 302 if (onc_source == ::onc::ONC_SOURCE_DEVICE_POLICY) | |
| 303 return ::onc::kAugmentationDevicePolicy; | |
| 304 return ::onc::kAugmentationUserPolicy; | |
| 305 } | |
| 306 | |
| 307 const char* GetOncEditableString(::onc::ONCSource onc_source) { | |
| 308 if (onc_source == ::onc::ONC_SOURCE_DEVICE_POLICY) | |
| 309 return ::onc::kAugmentationDeviceEditable; | |
| 310 return ::onc::kAugmentationUserEditable; | |
| 311 } | |
| 312 | |
| 313 const char* GetOncSettingString(::onc::ONCSource onc_source) { | |
| 314 if (onc_source == ::onc::ONC_SOURCE_DEVICE_POLICY) | |
| 315 return ::onc::kAugmentationSharedSetting; | |
| 316 return ::onc::kAugmentationUserSetting; | |
| 317 } | |
| 318 | |
| 319 // Creates a GetManagedProperties style dictionary and adds it to |settings|. | |
| 320 // |default_value| represents either the recommended value if |recommended| | |
| 321 // is true, or the enforced value if |recommended| is false. |settings_dict_key| | |
| 322 // is expected to be an ONC key with no '.' in it. | |
| 323 // Note(stevenjb): This is bridge code until we use GetManagedProperties to | |
| 324 // retrieve Shill properties. | |
| 325 void SetManagedValueDictionaryEx(const char* settings_dict_key, | |
| 326 const base::Value& value, | |
| 327 ::onc::ONCSource onc_source, | |
| 328 bool recommended, | |
| 329 const base::Value* default_value, | |
| 330 base::DictionaryValue* settings_dict) { | |
| 331 base::DictionaryValue* dict = new base::DictionaryValue(); | |
| 332 settings_dict->SetWithoutPathExpansion(settings_dict_key, dict); | |
| 333 | |
| 334 dict->Set(::onc::kAugmentationActiveSetting, value.DeepCopy()); | |
| 335 | |
| 336 if (onc_source == ::onc::ONC_SOURCE_NONE) | |
| 337 return; | |
| 338 | |
| 339 if (recommended) { | |
| 340 // If an ONC property is 'Recommended' it can be edited by the user. | |
| 341 std::string editable = GetOncEditableString(onc_source); | |
| 342 dict->Set(editable, new base::FundamentalValue(true)); | |
| 343 } | |
| 344 if (default_value) { | |
| 345 std::string policy_source = GetOncPolicyString(onc_source); | |
| 346 dict->Set(policy_source, default_value->DeepCopy()); | |
| 347 if (recommended && !value.Equals(default_value)) { | |
| 348 std::string setting_source = GetOncSettingString(onc_source); | |
| 349 dict->Set(setting_source, value.DeepCopy()); | |
| 350 dict->SetString(::onc::kAugmentationEffectiveSetting, setting_source); | |
| 351 } else { | |
| 352 dict->SetString(::onc::kAugmentationEffectiveSetting, policy_source); | |
| 353 } | |
| 354 } | |
| 355 } | |
| 356 | |
| 357 // Wrapper for SetManagedValueDictionaryEx that does the policy lookup. | |
| 358 // Note: We have to pass |onc_key| separately from |settings_dict_key| since | |
| 359 // we might be populating a sub-dictionary in which case |onc_key| will be the | |
| 360 // complete path (e.g. 'VPN.Host') and |settings_dict_key| is the dictionary key | |
| 361 // (e.g. 'Host'). | |
| 362 void SetManagedValueDictionary(const std::string& guid, | |
| 363 const char* settings_dict_key, | |
| 364 const base::Value& value, | |
| 365 const std::string& onc_key, | |
| 366 base::DictionaryValue* settings_dict) { | |
| 367 ::onc::ONCSource onc_source = ::onc::ONC_SOURCE_NONE; | |
| 368 const base::DictionaryValue* onc = | |
| 369 onc::FindPolicyForActiveUser(guid, &onc_source); | |
| 370 DCHECK_EQ(onc == NULL, onc_source == ::onc::ONC_SOURCE_NONE); | |
| 371 const base::Value* default_value = NULL; | |
| 372 bool recommended = false; | |
| 373 if (onc) { | |
| 374 onc->Get(onc_key, &default_value); | |
| 375 recommended = onc::IsRecommendedValue(onc, onc_key); | |
| 376 } | |
| 377 SetManagedValueDictionaryEx(settings_dict_key, | |
| 378 value, | |
| 379 onc_source, | |
| 380 recommended, | |
| 381 default_value, | |
| 382 settings_dict); | |
| 383 } | |
| 384 | |
| 385 // Fills |dictionary| with the configuration details of |vpn|. |onc| is required | |
| 386 // for augmenting the policy-managed information. | |
| 387 void PopulateVPNDetails(const NetworkState* vpn, | |
| 388 const base::DictionaryValue& shill_properties, | |
| 389 base::DictionaryValue* dictionary) { | |
| 390 // Name and Remembered are set in PopulateConnectionDetails(). | |
| 391 // Provider properties are stored in the "Provider" dictionary. | |
| 392 const base::DictionaryValue* shill_provider_properties = NULL; | |
| 393 if (!shill_properties.GetDictionaryWithoutPathExpansion( | |
| 394 shill::kProviderProperty, &shill_provider_properties)) { | |
| 395 LOG(ERROR) << "No provider properties for VPN: " << vpn->path(); | |
| 396 return; | |
| 397 } | |
| 398 base::DictionaryValue* vpn_dictionary; | |
| 399 if (!dictionary->GetDictionary( | |
| 400 ::onc::network_config::kVPN, &vpn_dictionary)) { | |
| 401 vpn_dictionary = new base::DictionaryValue; | |
| 402 dictionary->Set(::onc::network_config::kVPN, vpn_dictionary); | |
| 403 } | |
| 404 | |
| 405 std::string shill_provider_type; | |
| 406 if (!shill_provider_properties->GetStringWithoutPathExpansion( | |
| 407 shill::kTypeProperty, &shill_provider_type)) { | |
| 408 LOG(ERROR) << "Shill VPN has no Provider.Type: " << vpn->path(); | |
| 409 return; | |
| 410 } | |
| 411 std::string onc_provider_type; | |
| 412 onc::TranslateStringToONC( | |
| 413 onc::kVPNTypeTable, shill_provider_type, &onc_provider_type); | |
| 414 vpn_dictionary->SetString(::onc::vpn::kType, onc_provider_type); | |
| 415 | |
| 416 std::string provider_type_key; | |
| 417 std::string username; | |
| 418 if (shill_provider_type == shill::kProviderOpenVpn) { | |
| 419 provider_type_key = ::onc::vpn::kOpenVPN; | |
| 420 shill_provider_properties->GetStringWithoutPathExpansion( | |
| 421 shill::kOpenVPNUserProperty, &username); | |
| 422 } else { | |
| 423 provider_type_key = ::onc::vpn::kL2TP; | |
| 424 shill_provider_properties->GetStringWithoutPathExpansion( | |
| 425 shill::kL2tpIpsecUserProperty, &username); | |
| 426 } | |
| 427 base::DictionaryValue* provider_type_dictionary = new base::DictionaryValue; | |
| 428 vpn_dictionary->Set(provider_type_key, provider_type_dictionary); | |
| 429 provider_type_dictionary->SetString(::onc::vpn::kUsername, username); | |
| 430 | |
| 431 std::string provider_host; | |
| 432 shill_provider_properties->GetStringWithoutPathExpansion( | |
| 433 shill::kHostProperty, &provider_host); | |
| 434 SetManagedValueDictionary( | |
| 435 vpn->guid(), | |
| 436 ::onc::vpn::kHost, | |
| 437 base::StringValue(provider_host), | |
| 438 ::onc::network_config::VpnProperty(::onc::vpn::kHost), | |
| 439 vpn_dictionary); | |
| 440 } | |
| 441 | |
| 442 // Given a list of supported carrier's by the device, return the index of | 197 // Given a list of supported carrier's by the device, return the index of |
| 443 // the carrier the device is currently using. | 198 // the carrier the device is currently using. |
| 444 int FindCurrentCarrierIndex(const base::ListValue* carriers, | 199 int FindCurrentCarrierIndex(const base::ListValue* carriers, |
| 445 const DeviceState* device) { | 200 const DeviceState* device) { |
| 446 DCHECK(carriers); | 201 DCHECK(carriers); |
| 447 DCHECK(device); | 202 DCHECK(device); |
| 448 bool gsm = (device->technology_family() == shill::kTechnologyFamilyGsm); | 203 bool gsm = (device->technology_family() == shill::kTechnologyFamilyGsm); |
| 449 int index = 0; | 204 int index = 0; |
| 450 for (base::ListValue::const_iterator it = carriers->begin(); | 205 for (base::ListValue::const_iterator it = carriers->begin(); |
| 451 it != carriers->end(); ++it, ++index) { | 206 it != carriers->end(); ++it, ++index) { |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 544 // The button will trigger ShowMorePlanInfoCallback() which will open | 299 // The button will trigger ShowMorePlanInfoCallback() which will open |
| 545 // carrier specific portal. | 300 // carrier specific portal. |
| 546 if (cellular->IsConnectedState() || force_show_view_account_button) | 301 if (cellular->IsConnectedState() || force_show_view_account_button) |
| 547 dictionary->SetBoolean(kTagShowViewAccountButton, true); | 302 dictionary->SetBoolean(kTagShowViewAccountButton, true); |
| 548 } | 303 } |
| 549 } | 304 } |
| 550 } | 305 } |
| 551 | 306 |
| 552 scoped_ptr<base::DictionaryValue> PopulateConnectionDetails( | 307 scoped_ptr<base::DictionaryValue> PopulateConnectionDetails( |
| 553 const NetworkState* network, | 308 const NetworkState* network, |
| 554 const base::DictionaryValue& shill_properties) { | 309 const base::DictionaryValue& onc_properties) { |
| 555 // TODO(stevenjb): Once we eliminate all references to Shill properties, | 310 scoped_ptr<base::DictionaryValue> dictionary(onc_properties.DeepCopy()); |
| 556 // we can switch to using managed_network_configuration_handler which | |
| 557 // includes Device properties for Cellular (and skip the call to | |
| 558 // onc::TranslateShillServiceToONCPart). For now we copy them over here. | |
| 559 scoped_ptr<base::DictionaryValue> shill_properties_with_device( | |
| 560 shill_properties.DeepCopy()); | |
| 561 const DeviceState* device = | |
| 562 NetworkHandler::Get()->network_state_handler()->GetDeviceState( | |
| 563 network->device_path()); | |
| 564 if (device) { | |
| 565 shill_properties_with_device->SetWithoutPathExpansion( | |
| 566 shill::kDeviceProperty, device->properties().DeepCopy()); | |
| 567 // Get the hardware MAC address from the DeviceState. | |
| 568 // (Note: this is done in ManagedNetworkConfigurationHandler but not | |
| 569 // in NetworkConfigurationHandler). | |
| 570 if (!device->mac_address().empty()) { | |
| 571 shill_properties_with_device->SetStringWithoutPathExpansion( | |
| 572 shill::kAddressProperty, device->mac_address()); | |
| 573 } | |
| 574 } | |
| 575 scoped_ptr<base::DictionaryValue> dictionary = | |
| 576 onc::TranslateShillServiceToONCPart( | |
| 577 *shill_properties_with_device, &onc::kNetworkWithStateSignature); | |
| 578 | 311 |
| 579 dictionary->SetString(kNetworkInfoKeyServicePath, network->path()); | 312 dictionary->SetString(kNetworkInfoKeyServicePath, network->path()); |
| 580 dictionary->SetString( | 313 dictionary->SetString( |
| 581 kTagErrorMessage, | 314 kTagErrorMessage, |
| 582 ash::network_connect::ErrorString(network->error(), network->path())); | 315 ash::network_connect::ErrorString(network->error(), network->path())); |
| 583 | 316 |
| 584 dictionary->SetBoolean(kTagRemembered, !network->profile_path().empty()); | 317 dictionary->SetBoolean(kTagRemembered, !network->profile_path().empty()); |
| 585 bool shared = !network->IsPrivate(); | 318 bool shared = !network->IsPrivate(); |
| 586 dictionary->SetBoolean(kTagShared, shared); | 319 dictionary->SetBoolean(kTagShared, shared); |
| 587 | 320 |
| 588 const std::string& type = network->type(); | 321 const std::string& type = network->type(); |
| 589 | 322 |
| 590 const NetworkState* connected_network = | 323 const NetworkState* connected_network = |
| 591 NetworkHandler::Get()->network_state_handler()->ConnectedNetworkByType( | 324 NetworkHandler::Get()->network_state_handler()->ConnectedNetworkByType( |
| 592 NetworkTypePattern::Primitive(type)); | 325 NetworkTypePattern::Primitive(type)); |
| 593 dictionary->SetBoolean(kTagDeviceConnected, connected_network != NULL); | 326 dictionary->SetBoolean(kTagDeviceConnected, connected_network != NULL); |
| 594 | 327 |
| 595 if (type == shill::kTypeCellular) | 328 if (type == shill::kTypeCellular) |
| 596 PopulateCellularDetails(network, dictionary.get()); | 329 PopulateCellularDetails(network, dictionary.get()); |
| 597 else if (type == shill::kTypeVPN) | |
| 598 PopulateVPNDetails(network, shill_properties, dictionary.get()); | |
| 599 | 330 |
| 600 return dictionary.Pass(); | 331 return dictionary.Pass(); |
| 601 } | 332 } |
| 602 | 333 |
| 603 // Helper methods for SetIPConfigProperties | 334 // Helper methods for SetIPConfigProperties |
| 604 bool AppendPropertyKeyIfPresent(const std::string& key, | 335 bool AppendPropertyKeyIfPresent(const std::string& key, |
| 605 const base::DictionaryValue& old_properties, | 336 const base::DictionaryValue& old_properties, |
| 606 std::vector<std::string>* property_keys) { | 337 std::vector<std::string>* property_keys) { |
| 607 if (old_properties.HasKey(key)) { | 338 if (old_properties.HasKey(key)) { |
| 608 property_keys->push_back(key); | 339 property_keys->push_back(key); |
| (...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 971 } | 702 } |
| 972 | 703 |
| 973 void InternetOptionsHandler::RefreshNetworkData() { | 704 void InternetOptionsHandler::RefreshNetworkData() { |
| 974 base::DictionaryValue dictionary; | 705 base::DictionaryValue dictionary; |
| 975 FillNetworkInfo(&dictionary); | 706 FillNetworkInfo(&dictionary); |
| 976 web_ui()->CallJavascriptFunction(kRefreshNetworkDataFunction, dictionary); | 707 web_ui()->CallJavascriptFunction(kRefreshNetworkDataFunction, dictionary); |
| 977 } | 708 } |
| 978 | 709 |
| 979 void InternetOptionsHandler::UpdateConnectionData( | 710 void InternetOptionsHandler::UpdateConnectionData( |
| 980 const std::string& service_path) { | 711 const std::string& service_path) { |
| 981 NetworkHandler::Get()->network_configuration_handler()->GetProperties( | 712 NetworkHandler::Get() |
| 982 service_path, | 713 ->managed_network_configuration_handler() |
| 983 base::Bind(&InternetOptionsHandler::UpdateConnectionDataCallback, | 714 ->GetManagedProperties( |
| 984 weak_factory_.GetWeakPtr()), | 715 LoginState::Get()->primary_user_hash(), |
| 985 base::Bind(&ShillError, "UpdateConnectionData")); | 716 service_path, |
| 717 base::Bind(&InternetOptionsHandler::UpdateConnectionDataCallback, |
| 718 weak_factory_.GetWeakPtr()), |
| 719 base::Bind(&ShillError, "UpdateConnectionData")); |
| 986 } | 720 } |
| 987 | 721 |
| 988 void InternetOptionsHandler::UpdateConnectionDataCallback( | 722 void InternetOptionsHandler::UpdateConnectionDataCallback( |
| 989 const std::string& service_path, | 723 const std::string& service_path, |
| 990 const base::DictionaryValue& shill_properties) { | 724 const base::DictionaryValue& onc_properties) { |
| 991 const NetworkState* network = GetNetworkState(service_path); | 725 const NetworkState* network = GetNetworkState(service_path); |
| 992 if (!network) | 726 if (!network) |
| 993 return; | 727 return; |
| 994 scoped_ptr<base::DictionaryValue> dictionary = | 728 scoped_ptr<base::DictionaryValue> dictionary = |
| 995 PopulateConnectionDetails(network, shill_properties); | 729 PopulateConnectionDetails(network, onc_properties); |
| 996 web_ui()->CallJavascriptFunction(kUpdateConnectionDataFunction, *dictionary); | 730 web_ui()->CallJavascriptFunction(kUpdateConnectionDataFunction, *dictionary); |
| 997 } | 731 } |
| 998 | 732 |
| 999 void InternetOptionsHandler::UpdateCarrier() { | 733 void InternetOptionsHandler::UpdateCarrier() { |
| 1000 web_ui()->CallJavascriptFunction(kUpdateCarrierFunction); | 734 web_ui()->CallJavascriptFunction(kUpdateCarrierFunction); |
| 1001 } | 735 } |
| 1002 | 736 |
| 1003 void InternetOptionsHandler::DeviceListChanged() { | 737 void InternetOptionsHandler::DeviceListChanged() { |
| 1004 if (!web_ui()) | 738 if (!web_ui()) |
| 1005 return; | 739 return; |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1185 callback = base::Bind(&RequestReconnect, service_path, GetNativeWindow()); | 919 callback = base::Bind(&RequestReconnect, service_path, GetNativeWindow()); |
| 1186 NetworkHandler::Get()->network_device_handler()->RequestRefreshIPConfigs( | 920 NetworkHandler::Get()->network_device_handler()->RequestRefreshIPConfigs( |
| 1187 device_path, | 921 device_path, |
| 1188 callback, | 922 callback, |
| 1189 base::Bind(&ShillError, "RequestRefreshIPConfigs")); | 923 base::Bind(&ShillError, "RequestRefreshIPConfigs")); |
| 1190 } | 924 } |
| 1191 } | 925 } |
| 1192 | 926 |
| 1193 void InternetOptionsHandler::PopulateDictionaryDetailsCallback( | 927 void InternetOptionsHandler::PopulateDictionaryDetailsCallback( |
| 1194 const std::string& service_path, | 928 const std::string& service_path, |
| 1195 const base::DictionaryValue& shill_properties) { | 929 const base::DictionaryValue& onc_properties) { |
| 1196 const NetworkState* network = GetNetworkState(service_path); | 930 const NetworkState* network = GetNetworkState(service_path); |
| 1197 if (!network) { | 931 if (!network) { |
| 1198 LOG(ERROR) << "Network properties not found: " << service_path; | 932 LOG(ERROR) << "Network properties not found: " << service_path; |
| 1199 return; | 933 return; |
| 1200 } | 934 } |
| 1201 | 935 |
| 1202 details_path_ = service_path; | 936 details_path_ = service_path; |
| 1203 | 937 |
| 1204 scoped_ptr<base::DictionaryValue> dictionary = | 938 scoped_ptr<base::DictionaryValue> dictionary = |
| 1205 PopulateConnectionDetails(network, shill_properties); | 939 PopulateConnectionDetails(network, onc_properties); |
| 1206 | 940 |
| 1207 ::onc::ONCSource onc_source = ::onc::ONC_SOURCE_NONE; | |
| 1208 const base::DictionaryValue* onc = | |
| 1209 onc::FindPolicyForActiveUser(network->guid(), &onc_source); | |
| 1210 const NetworkPropertyUIData property_ui_data(onc_source); | |
| 1211 | |
| 1212 // IP config | |
| 1213 scoped_ptr<base::DictionaryValue> ipconfig_dhcp(new base::DictionaryValue); | |
| 1214 ipconfig_dhcp->SetString(kIpConfigAddress, network->ip_address()); | |
| 1215 ipconfig_dhcp->SetString(kIpConfigNetmask, network->GetNetmask()); | |
| 1216 ipconfig_dhcp->SetString(kIpConfigGateway, network->gateway()); | |
| 1217 std::string ipconfig_name_servers = network->GetDnsServersAsString(); | |
| 1218 ipconfig_dhcp->SetString(kIpConfigNameServers, ipconfig_name_servers); | |
| 1219 ipconfig_dhcp->SetString(kIpConfigWebProxyAutoDiscoveryUrl, | |
| 1220 network->web_proxy_auto_discovery_url().spec()); | |
| 1221 SetValueDictionary(kDictionaryIpConfig, | |
| 1222 ipconfig_dhcp.release(), | |
| 1223 property_ui_data, | |
| 1224 dictionary.get()); | |
| 1225 | |
| 1226 std::string name_server_type = kNameServerTypeAutomatic; | |
| 1227 int automatic_ip_config = 0; | |
| 1228 scoped_ptr<base::DictionaryValue> static_ip_dict( | |
| 1229 BuildIPInfoDictionary(shill_properties, true, &automatic_ip_config)); | |
| 1230 dictionary->SetBoolean(kIpConfigAutoConfig, automatic_ip_config == 0); | |
| 1231 DCHECK(automatic_ip_config == 3 || automatic_ip_config == 0) | |
| 1232 << "UI doesn't support automatic specification of individual " | |
| 1233 << "static IP parameters."; | |
| 1234 scoped_ptr<base::DictionaryValue> saved_ip_dict( | |
| 1235 BuildIPInfoDictionary(shill_properties, false, NULL)); | |
| 1236 dictionary->Set(kDictionarySavedIp, saved_ip_dict.release()); | |
| 1237 | |
| 1238 // Determine what kind of name server setting we have by comparing the | |
| 1239 // StaticIP and Google values with the ipconfig values. | |
| 1240 std::string static_ip_nameservers; | |
| 1241 static_ip_dict->GetString(kIpConfigNameServers, &static_ip_nameservers); | |
| 1242 if (!static_ip_nameservers.empty() && | |
| 1243 static_ip_nameservers == ipconfig_name_servers) { | |
| 1244 name_server_type = kNameServerTypeUser; | |
| 1245 } | |
| 1246 if (ipconfig_name_servers == kGoogleNameServers) { | |
| 1247 name_server_type = kNameServerTypeGoogle; | |
| 1248 } | |
| 1249 SetValueDictionary(kDictionaryStaticIp, | |
| 1250 static_ip_dict.release(), | |
| 1251 property_ui_data, | |
| 1252 dictionary.get()); | |
| 1253 | |
| 1254 dictionary->SetString(kTagNameServerType, name_server_type); | |
| 1255 dictionary->SetString(kTagNameServersGoogle, kGoogleNameServers); | |
| 1256 | |
| 1257 int priority = 0; | |
| 1258 shill_properties.GetIntegerWithoutPathExpansion( | |
| 1259 shill::kPriorityProperty, &priority); | |
| 1260 SetManagedValueDictionary(network->guid(), | |
| 1261 ::onc::network_config::kPriority, | |
| 1262 base::FundamentalValue(priority), | |
| 1263 ::onc::network_config::kPriority, | |
| 1264 dictionary.get()); | |
| 1265 | |
| 1266 std::string onc_path_to_auto_connect; | |
| 1267 if (network->Matches(NetworkTypePattern::WiFi())) { | 941 if (network->Matches(NetworkTypePattern::WiFi())) { |
| 1268 content::RecordAction( | 942 content::RecordAction( |
| 1269 base::UserMetricsAction("Options_NetworkShowDetailsWifi")); | 943 base::UserMetricsAction("Options_NetworkShowDetailsWifi")); |
| 1270 if (network->IsConnectedState()) { | 944 if (network->IsConnectedState()) { |
| 1271 content::RecordAction( | 945 content::RecordAction( |
| 1272 base::UserMetricsAction("Options_NetworkShowDetailsWifiConnected")); | 946 base::UserMetricsAction("Options_NetworkShowDetailsWifiConnected")); |
| 1273 } | 947 } |
| 1274 onc_path_to_auto_connect = | |
| 1275 ::onc::network_config::WifiProperty(::onc::wifi::kAutoConnect); | |
| 1276 } else if (network->Matches(NetworkTypePattern::VPN())) { | 948 } else if (network->Matches(NetworkTypePattern::VPN())) { |
| 1277 content::RecordAction( | 949 content::RecordAction( |
| 1278 base::UserMetricsAction("Options_NetworkShowDetailsVPN")); | 950 base::UserMetricsAction("Options_NetworkShowDetailsVPN")); |
| 1279 if (network->IsConnectedState()) { | 951 if (network->IsConnectedState()) { |
| 1280 content::RecordAction( | 952 content::RecordAction( |
| 1281 base::UserMetricsAction("Options_NetworkShowDetailsVPNConnected")); | 953 base::UserMetricsAction("Options_NetworkShowDetailsVPNConnected")); |
| 1282 } | 954 } |
| 1283 onc_path_to_auto_connect = ::onc::network_config::VpnProperty( | |
| 1284 ::onc::vpn::kAutoConnect); | |
| 1285 } else if (network->Matches(NetworkTypePattern::Cellular())) { | 955 } else if (network->Matches(NetworkTypePattern::Cellular())) { |
| 1286 content::RecordAction( | 956 content::RecordAction( |
| 1287 base::UserMetricsAction("Options_NetworkShowDetailsCellular")); | 957 base::UserMetricsAction("Options_NetworkShowDetailsCellular")); |
| 1288 if (network->IsConnectedState()) { | 958 if (network->IsConnectedState()) { |
| 1289 content::RecordAction(base::UserMetricsAction( | 959 content::RecordAction(base::UserMetricsAction( |
| 1290 "Options_NetworkShowDetailsCellularConnected")); | 960 "Options_NetworkShowDetailsCellularConnected")); |
| 1291 } | 961 } |
| 1292 } | 962 } |
| 1293 | 963 |
| 1294 if (!onc_path_to_auto_connect.empty()) { | |
| 1295 bool auto_connect = false; | |
| 1296 shill_properties.GetBooleanWithoutPathExpansion( | |
| 1297 shill::kAutoConnectProperty, &auto_connect); | |
| 1298 | |
| 1299 base::FundamentalValue auto_connect_value(auto_connect); | |
| 1300 ::onc::ONCSource auto_connect_onc_source = onc_source; | |
| 1301 | |
| 1302 DCHECK_EQ(onc == NULL, onc_source == ::onc::ONC_SOURCE_NONE); | |
| 1303 bool auto_connect_recommended = | |
| 1304 auto_connect_onc_source != ::onc::ONC_SOURCE_NONE && | |
| 1305 onc::IsRecommendedValue(onc, onc_path_to_auto_connect); | |
| 1306 // If a policy exists, |auto_connect_default_value| will contain either a | |
| 1307 // recommended value (if |auto_connect_recommended| is true) or an enforced | |
| 1308 // value (if |auto_connect_recommended| is false). | |
| 1309 const base::Value* auto_connect_default_value = NULL; | |
| 1310 if (onc) | |
| 1311 onc->Get(onc_path_to_auto_connect, &auto_connect_default_value); | |
| 1312 | |
| 1313 // Autoconnect can be controlled by the GlobalNetworkConfiguration of the | |
| 1314 // ONC policy. | |
| 1315 if (auto_connect_onc_source == ::onc::ONC_SOURCE_NONE && | |
| 1316 onc::PolicyAllowsOnlyPolicyNetworksToAutoconnect( | |
| 1317 network->IsPrivate())) { | |
| 1318 auto_connect_recommended = false; | |
| 1319 auto_connect_onc_source = network->IsPrivate() | |
| 1320 ? ::onc::ONC_SOURCE_USER_POLICY | |
| 1321 : ::onc::ONC_SOURCE_DEVICE_POLICY; | |
| 1322 if (auto_connect) { | |
| 1323 LOG(WARNING) << "Policy prevents autoconnect, but value is True."; | |
| 1324 auto_connect_value = base::FundamentalValue(false); | |
| 1325 } | |
| 1326 } | |
| 1327 SetManagedValueDictionaryEx(shill::kAutoConnectProperty, | |
| 1328 auto_connect_value, | |
| 1329 auto_connect_onc_source, | |
| 1330 auto_connect_recommended, | |
| 1331 auto_connect_default_value, | |
| 1332 dictionary.get()); | |
| 1333 } | |
| 1334 | |
| 1335 // Show details dialog | 964 // Show details dialog |
| 1336 web_ui()->CallJavascriptFunction(kShowDetailedInfoFunction, *dictionary); | 965 web_ui()->CallJavascriptFunction(kShowDetailedInfoFunction, *dictionary); |
| 1337 } | 966 } |
| 1338 | 967 |
| 1339 gfx::NativeWindow InternetOptionsHandler::GetNativeWindow() const { | 968 gfx::NativeWindow InternetOptionsHandler::GetNativeWindow() const { |
| 1340 return web_ui()->GetWebContents()->GetTopLevelNativeWindow(); | 969 return web_ui()->GetWebContents()->GetTopLevelNativeWindow(); |
| 1341 } | 970 } |
| 1342 | 971 |
| 1343 float InternetOptionsHandler::GetScaleFactor() const { | 972 float InternetOptionsHandler::GetScaleFactor() const { |
| 1344 return web_ui()->GetDeviceScaleFactor(); | 973 return web_ui()->GetDeviceScaleFactor(); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1369 // Process commands that do not require an existing network. | 998 // Process commands that do not require an existing network. |
| 1370 if (command == kTagAddConnection) { | 999 if (command == kTagAddConnection) { |
| 1371 AddConnection(type); | 1000 AddConnection(type); |
| 1372 } else if (command == kTagForget) { | 1001 } else if (command == kTagForget) { |
| 1373 NetworkHandler::Get()->network_configuration_handler()-> | 1002 NetworkHandler::Get()->network_configuration_handler()-> |
| 1374 RemoveConfiguration( | 1003 RemoveConfiguration( |
| 1375 service_path, | 1004 service_path, |
| 1376 base::Bind(&base::DoNothing), | 1005 base::Bind(&base::DoNothing), |
| 1377 base::Bind(&ShillError, "NetworkCommand: " + command)); | 1006 base::Bind(&ShillError, "NetworkCommand: " + command)); |
| 1378 } else if (command == kTagOptions) { | 1007 } else if (command == kTagOptions) { |
| 1379 NetworkHandler::Get()->network_configuration_handler()->GetProperties( | 1008 NetworkHandler::Get() |
| 1380 service_path, | 1009 ->managed_network_configuration_handler() |
| 1381 base::Bind(&InternetOptionsHandler::PopulateDictionaryDetailsCallback, | 1010 ->GetManagedProperties( |
| 1382 weak_factory_.GetWeakPtr()), | 1011 LoginState::Get()->primary_user_hash(), |
| 1383 base::Bind(&ShillError, "NetworkCommand: " + command)); | 1012 service_path, |
| 1013 base::Bind( |
| 1014 &InternetOptionsHandler::PopulateDictionaryDetailsCallback, |
| 1015 weak_factory_.GetWeakPtr()), |
| 1016 base::Bind(&ShillError, "NetworkCommand: " + command)); |
| 1384 } else if (command == kTagConnect) { | 1017 } else if (command == kTagConnect) { |
| 1385 const NetworkState* network = GetNetworkState(service_path); | 1018 const NetworkState* network = GetNetworkState(service_path); |
| 1386 if (network && network->type() == shill::kTypeWifi) | 1019 if (network && network->type() == shill::kTypeWifi) |
| 1387 content::RecordAction( | 1020 content::RecordAction( |
| 1388 base::UserMetricsAction("Options_NetworkConnectToWifi")); | 1021 base::UserMetricsAction("Options_NetworkConnectToWifi")); |
| 1389 else if (network && network->type() == shill::kTypeVPN) | 1022 else if (network && network->type() == shill::kTypeVPN) |
| 1390 content::RecordAction( | 1023 content::RecordAction( |
| 1391 base::UserMetricsAction("Options_NetworkConnectToVPN")); | 1024 base::UserMetricsAction("Options_NetworkConnectToVPN")); |
| 1392 ash::network_connect::ConnectToNetwork(service_path, GetNativeWindow()); | 1025 ash::network_connect::ConnectToNetwork(service_path, GetNativeWindow()); |
| 1393 } else if (command == kTagDisconnect) { | 1026 } else if (command == kTagDisconnect) { |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1524 dictionary->SetBoolean( | 1157 dictionary->SetBoolean( |
| 1525 kTagWimaxAvailable, | 1158 kTagWimaxAvailable, |
| 1526 handler->IsTechnologyAvailable(NetworkTypePattern::Wimax())); | 1159 handler->IsTechnologyAvailable(NetworkTypePattern::Wimax())); |
| 1527 dictionary->SetBoolean( | 1160 dictionary->SetBoolean( |
| 1528 kTagWimaxEnabled, | 1161 kTagWimaxEnabled, |
| 1529 handler->IsTechnologyEnabled(NetworkTypePattern::Wimax())); | 1162 handler->IsTechnologyEnabled(NetworkTypePattern::Wimax())); |
| 1530 } | 1163 } |
| 1531 | 1164 |
| 1532 } // namespace options | 1165 } // namespace options |
| 1533 } // namespace chromeos | 1166 } // namespace chromeos |
| OLD | NEW |