15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/webui/options/chromeos/internet_options_handler.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <ctype.h> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "ash/system/chromeos/network/network_connect.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind_helpers.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/browser_process.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/mobile_config.h" 223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/browser/chromeos/net/onc_utils.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/options/network_config_view.h" 2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/chromeos/options/network_property_ui_data.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/chromeos/sim_dialog_delegate.h" 270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/browser/chromeos/ui/choose_mobile_network_dialog.h" 280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/browser/chromeos/ui/mobile_config_ui.h" 29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/chromeos/ui_proxy_config_service.h" 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/profiles/profile.h" 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/ui/webui/chromeos/mobile_setup_dialog.h" 320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/browser/ui/webui/options/chromeos/internet_options_handler_strings.h" 33b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "chromeos/chromeos_switches.h" 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chromeos/login/login_state.h" 357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chromeos/network/device_state.h" 36a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "chromeos/network/managed_network_configuration_handler.h" 377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chromeos/network/network_configuration_handler.h" 387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chromeos/network/network_connection_handler.h" 397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chromeos/network/network_device_handler.h" 407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chromeos/network/network_event_log.h" 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/network_ip_config.h" 427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chromeos/network/network_profile.h" 437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chromeos/network/network_profile_handler.h" 447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chromeos/network/network_state.h" 457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chromeos/network/network_state_handler.h" 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chromeos/network/network_util.h" 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/network/onc/onc_signature.h" 4803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "chromeos/network/onc/onc_translation_tables.h" 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromeos/network/onc/onc_translator.h" 506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromeos/network/onc/onc_utils.h" 514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "components/onc/onc_constants.h" 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_ui.h" 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "grit/ui_chromeos_resources.h" 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/cros_system_api/dbus/service_constants.h" 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/base/webui/web_ui_util.h" 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/chromeos/network/network_icon.h" 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/image/image_skia.h" 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace chromeos { 627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochnamespace options { 637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Keys for the network description dictionary passed to the web ui. Make sure 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// to keep the strings in sync with what the JavaScript side uses. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kNetworkInfoKeyIconURL[] = "iconURL"; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kNetworkInfoKeyPolicyManaged[] = "policyManaged"; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// These are types of name server selections from the web ui. 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kNameServerTypeAutomatic[] = "automatic"; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kNameServerTypeGoogle[] = "google"; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Google public name servers (DNS). 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kGoogleNameServers[] = "8.8.4.4,8.8.8.8"; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Functions we call in JavaScript. 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kRefreshNetworkDataFunction[] = 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "options.network.NetworkList.refreshNetworkData"; 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSetDefaultNetworkIconsFunction[] = 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "options.network.NetworkList.setDefaultNetworkIcons"; 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kSendNetworkDetailsFunction[] = 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci "options.internet.DetailsInternetPage.sendNetworkDetails"; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kShowDetailedInfoFunction[] = 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "options.internet.DetailsInternetPage.showDetailedInfo"; 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kUpdateConnectionDataFunction[] = 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "options.internet.DetailsInternetPage.updateConnectionData"; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kUpdateCarrierFunction[] = 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "options.internet.DetailsInternetPage.updateCarrier"; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// These are used to register message handlers with JavaScript. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kNetworkCommandMessage[] = "networkCommand"; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kSetApnMessage[] = "setApn"; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kSetAutoConnectMessage[] = "setAutoConnect"; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kSetCarrierMessage[] = "setCarrier"; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kSetIPConfigMessage[] = "setIPConfig"; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kSetPreferNetworkMessage[] = "setPreferNetwork"; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kSetServerHostname[] = "setServerHostname"; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kShowMorePlanInfoMessage[] = "showMorePlanInfo"; 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kSimOperationMessage[] = "simOperation"; 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// TODO(stevenjb): Replace these with the matching networkingPrivate methods. 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// crbug.com/279351. 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kDisableNetworkTypeMessage[] = "disableNetworkType"; 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kEnableNetworkTypeMessage[] = "enableNetworkType"; 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kGetManagedPropertiesMessage[] = "getManagedProperties"; 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kRequestNetworkScanMessage[] = "requestNetworkScan"; 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kStartConnectMessage[] = "startConnect"; 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kStartDisconnectMessage[] = "startDisconnect"; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// These are strings used to communicate with JavaScript. 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTagActivate[] = "activate"; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTagAddConnection[] = "add"; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTagCarrierSelectFlag[] = "showCarrierSelect"; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTagCellularAvailable[] = "cellularAvailable"; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTagCellularEnabled[] = "cellularEnabled"; 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kTagCellularSimAbsent[] = "cellularSimAbsent"; 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kTagCellularSimLockType[] = "cellularSimLockType"; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTagCellularSupportsScan[] = "cellularSupportsScan"; 1212385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdochconst char kTagConfigure[] = "configure"; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTagForget[] = "forget"; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTagRememberedList[] = "rememberedList"; 1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kTagShowDetails[] = "showDetails"; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTagShowViewAccountButton[] = "showViewAccountButton"; 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kTagSimOpChangePin[] = "changePin"; 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kTagSimOpConfigure[] = "configure"; 1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kTagSimOpSetLocked[] = "setLocked"; 1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kTagSimOpSetUnlocked[] = "setUnlocked"; 1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kTagSimOpUnlock[] = "unlock"; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTagTrue[] = "true"; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTagVpnList[] = "vpnList"; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTagWifiAvailable[] = "wifiAvailable"; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTagWifiEnabled[] = "wifiEnabled"; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTagWimaxAvailable[] = "wimaxAvailable"; 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTagWimaxEnabled[] = "wimaxEnabled"; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTagWiredList[] = "wiredList"; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTagWirelessList[] = "wirelessList"; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Pseudo-ONC chrome specific properties appended to the ONC dictionary. 1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kTagErrorMessage[] = "errorMessage"; 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kNetworkInfoKeyServicePath[] = "servicePath"; 1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst char kNetworkInfoKeyGUID[] = "GUID"; 1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochconst int kPreferredPriority = 1; 1467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid ShillError(const std::string& function, 1487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& error_name, 1497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch scoped_ptr<base::DictionaryValue> error_data) { 1503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // UpdateConnectionData may send requests for stale services; ignore 1513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // these errors. 1523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (function == "UpdateConnectionData" && 1533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) error_name == network_handler::kDBusFailedError) 1543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return; 1557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NET_LOG_ERROR("Shill Error from InternetOptionsHandler: " + error_name, 1567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch function); 1577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochconst NetworkState* GetNetworkState(const std::string& service_path) { 1607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return NetworkHandler::Get()->network_state_handler()-> 1617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch GetNetworkState(service_path); 1627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid SetNetworkProperty(const std::string& service_path, 1657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& property, 1667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Value* value) { 1677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NET_LOG_EVENT("SetNetworkProperty: " + property, service_path); 1687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::DictionaryValue properties; 169558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch properties.SetWithoutPathExpansion(property, value); 1707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NetworkHandler::Get()->network_configuration_handler()->SetProperties( 1717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch service_path, properties, 1727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&base::DoNothing), 1737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&ShillError, "SetNetworkProperty")); 1747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 176d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Builds a dictionary with network information and an icon used for the 177d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// NetworkList on the settings page. Ownership of the returned pointer is 178d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// transferred to the caller. 179d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)base::DictionaryValue* BuildNetworkDictionary( 180d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const NetworkState* network, 181cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) float icon_scale_factor, 1824e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const PrefService* profile_prefs) { 183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<base::DictionaryValue> network_info = 184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch network_util::TranslateNetworkStateToONC(network); 185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 186f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool has_policy = onc::HasPolicyForNetwork( 187f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) profile_prefs, g_browser_process->local_state(), *network); 188f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) network_info->SetBoolean(kNetworkInfoKeyPolicyManaged, has_policy); 1897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string icon_url = ui::network_icon::GetImageUrlForNetwork( 191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch network, ui::network_icon::ICON_TYPE_LIST, icon_scale_factor); 192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch network_info->SetString(kNetworkInfoKeyIconURL, icon_url); 194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch network_info->SetString(kNetworkInfoKeyServicePath, network->path()); 195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 196d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return network_info.release(); 1977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool ShowViewAccountButton(const NetworkState* cellular) { 2001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (cellular->activation_state() != shill::kActivationStateActivating && 2011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cellular->activation_state() != shill::kActivationStateActivated) 2021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return false; 2030529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 2040529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const DeviceState* device = 2050529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch NetworkHandler::Get()->network_state_handler()->GetDeviceState( 2060529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch cellular->device_path()); 2070529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // If no online payment URL was provided by shill, Check to see if the 2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // MobileConfig carrier indicates that "View Account" should be shown. 2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (cellular->payment_url().empty()) { 2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!device || !MobileConfig::GetInstance()->IsReady()) 2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return false; 2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const MobileConfig::Carrier* carrier = 2141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci MobileConfig::GetInstance()->GetCarrier(device->home_provider_id()); 2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!carrier || !carrier->show_portal_button()) 2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return false; 2170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 2180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!cellular->IsConnectedState()) { 2201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Disconnected LTE networks should show the button if we are online and 2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // the device's MDN is set. This is to enable users to update their plan 2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // if they are out of credits. 2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!NetworkHandler::Get()->network_state_handler()->DefaultNetwork()) 2241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return false; 2251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& technology = cellular->network_technology(); 2261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (technology != shill::kNetworkTechnologyLte && 2271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci technology != shill::kNetworkTechnologyLteAdvanced) 2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return false; 2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string mdn; 2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (device) { 2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci device->properties().GetStringWithoutPathExpansion(shill::kMdnProperty, 2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &mdn); 2330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (mdn.empty()) 2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return false; 2360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return true; 2390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 2407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 241116680a4aac90f2aa7413d9095a592090648e557Ben Murdochscoped_ptr<base::DictionaryValue> PopulateConnectionDetails( 242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const NetworkState* network, 2431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::DictionaryValue& onc_properties) { 2441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<base::DictionaryValue> dictionary(onc_properties.DeepCopy()); 245116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Append Service Path for now. 2470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch dictionary->SetString(kNetworkInfoKeyServicePath, network->path()); 2481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Append a Chrome specific translated error message. 2490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch dictionary->SetString( 2506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) kTagErrorMessage, 2510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ash::network_connect::ErrorString(network->error(), network->path())); 2520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 253116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return dictionary.Pass(); 2540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 2557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Helper methods for SetIPConfigProperties 2573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)bool AppendPropertyKeyIfPresent(const std::string& key, 2587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::DictionaryValue& old_properties, 2597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::vector<std::string>* property_keys) { 2603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if (old_properties.HasKey(key)) { 2617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch property_keys->push_back(key); 2623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return true; 2633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 2643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return false; 26590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 26690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)bool AddStringPropertyIfChanged(const std::string& key, 2687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& new_value, 2697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::DictionaryValue& old_properties, 2707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::DictionaryValue* new_properties) { 2717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::string old_value; 2727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!old_properties.GetStringWithoutPathExpansion(key, &old_value) || 2737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch new_value != old_value) { 2747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch new_properties->SetStringWithoutPathExpansion(key, new_value); 2753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return true; 2767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 2773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return false; 2787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)bool AddIntegerPropertyIfChanged(const std::string& key, 2817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int new_value, 2827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::DictionaryValue& old_properties, 2837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::DictionaryValue* new_properties) { 2847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int old_value; 2857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!old_properties.GetIntegerWithoutPathExpansion(key, &old_value) || 2867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch new_value != old_value) { 2877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch new_properties->SetIntegerWithoutPathExpansion(key, new_value); 2883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return true; 2897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 2903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return false; 2913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 2923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} // namespace 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)InternetOptionsHandler::InternetOptionsHandler() 296868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) : weak_factory_(this) { 2977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NetworkHandler::Get()->network_state_handler()->AddObserver(this, FROM_HERE); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)InternetOptionsHandler::~InternetOptionsHandler() { 3017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (NetworkHandler::IsInitialized()) { 3027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NetworkHandler::Get()->network_state_handler()->RemoveObserver( 3037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch this, FROM_HERE); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InternetOptionsHandler::GetLocalizedValues( 3087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::DictionaryValue* localized_strings) { 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(localized_strings); 3100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch internet_options_strings::RegisterLocalizedStrings(localized_strings); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // TODO(stevenjb): Find a better way to populate initial data before 313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // InitializePage() gets called. 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string owner; 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chromeos::CrosSettings::Get()->GetString(chromeos::kDeviceOwner, &owner); 3165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) localized_strings->SetString("ownerUserId", base::UTF8ToUTF16(owner)); 317116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool logged_in_as_owner = LoginState::Get()->GetLoggedInUserType() == 318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch LoginState::LOGGED_IN_USER_OWNER; 319116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch localized_strings->SetBoolean("loggedInAsOwner", logged_in_as_owner); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::DictionaryValue* network_dictionary = new base::DictionaryValue; 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FillNetworkInfo(network_dictionary); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) localized_strings->Set("networkData", network_dictionary); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InternetOptionsHandler::InitializePage() { 3277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::DictionaryValue dictionary; 328116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch dictionary.SetString(::onc::network_type::kCellular, 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetIconDataUrl(IDR_AURA_UBER_TRAY_NETWORK_BARS_DARK)); 330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch dictionary.SetString(::onc::network_type::kWiFi, 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetIconDataUrl(IDR_AURA_UBER_TRAY_NETWORK_ARCS_DARK)); 332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch dictionary.SetString(::onc::network_type::kVPN, 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetIconDataUrl(IDR_AURA_UBER_TRAY_NETWORK_VPN)); 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_ui()->CallJavascriptFunction(kSetDefaultNetworkIconsFunction, 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dictionary); 3367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NetworkHandler::Get()->network_state_handler()->RequestScan(); 337ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch RefreshNetworkData(); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InternetOptionsHandler::RegisterMessages() { 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Setup handlers specific to this panel. 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->RegisterMessageCallback(kNetworkCommandMessage, 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&InternetOptionsHandler::NetworkCommandCallback, 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->RegisterMessageCallback(kSetPreferNetworkMessage, 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&InternetOptionsHandler::SetPreferNetworkCallback, 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->RegisterMessageCallback(kSetAutoConnectMessage, 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&InternetOptionsHandler::SetAutoConnectCallback, 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->RegisterMessageCallback(kSetIPConfigMessage, 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&InternetOptionsHandler::SetIPConfigCallback, 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->RegisterMessageCallback(kShowMorePlanInfoMessage, 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&InternetOptionsHandler::ShowMorePlanInfoCallback, 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->RegisterMessageCallback(kSetApnMessage, 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&InternetOptionsHandler::SetApnCallback, 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->RegisterMessageCallback(kSetCarrierMessage, 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&InternetOptionsHandler::SetCarrierCallback, 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 3631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_ui()->RegisterMessageCallback(kSimOperationMessage, 3641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&InternetOptionsHandler::SimOperationCallback, 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_ui()->RegisterMessageCallback(kSetServerHostname, 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&InternetOptionsHandler::SetServerHostnameCallback, 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Unretained(this))); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // networkingPrivate methods 3711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_ui()->RegisterMessageCallback(kDisableNetworkTypeMessage, 3721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&InternetOptionsHandler::DisableNetworkTypeCallback, 3731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Unretained(this))); 3741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_ui()->RegisterMessageCallback(kEnableNetworkTypeMessage, 3751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&InternetOptionsHandler::EnableNetworkTypeCallback, 3761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Unretained(this))); 3771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_ui()->RegisterMessageCallback(kGetManagedPropertiesMessage, 3781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&InternetOptionsHandler::GetManagedPropertiesCallback, 3791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Unretained(this))); 3801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_ui()->RegisterMessageCallback(kRequestNetworkScanMessage, 3811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&InternetOptionsHandler::RequestNetworkScanCallback, 3821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Unretained(this))); 3831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_ui()->RegisterMessageCallback(kStartConnectMessage, 3841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&InternetOptionsHandler::StartConnectCallback, 3851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Unretained(this))); 3861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_ui()->RegisterMessageCallback(kStartDisconnectMessage, 3871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&InternetOptionsHandler::StartDisconnectCallback, 3881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Unretained(this))); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid InternetOptionsHandler::ShowMorePlanInfoCallback( 3927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::ListValue* args) { 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!web_ui()) 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string service_path; 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (args->GetSize() != 1 || !args->GetString(0, &service_path)) { 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NOTREACHED(); 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ash::network_connect::ShowMobileSetup(service_path); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid InternetOptionsHandler::SetApnCallback(const base::ListValue* args) { 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string service_path; 4057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!args->GetString(0, &service_path)) { 4067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NOTREACHED(); 4077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return; 4087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 4097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NetworkHandler::Get()->network_configuration_handler()->GetProperties( 4107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch service_path, 4117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&InternetOptionsHandler::SetApnProperties, 4127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch weak_factory_.GetWeakPtr(), base::Owned(args->DeepCopy())), 4137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&ShillError, "SetApnCallback")); 4147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 4157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 4167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid InternetOptionsHandler::SetApnProperties( 4177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::ListValue* args, 4187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& service_path, 4197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::DictionaryValue& shill_properties) { 4207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::string apn, username, password; 4217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!args->GetString(1, &apn) || 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !args->GetString(2, &username) || 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !args->GetString(3, &password)) { 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NET_LOG_EVENT("SetApnCallback", service_path); 4287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 4297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (apn.empty()) { 4307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::vector<std::string> properties_to_clear; 43168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) properties_to_clear.push_back(shill::kCellularApnProperty); 4327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NetworkHandler::Get()->network_configuration_handler()->ClearProperties( 4337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch service_path, properties_to_clear, 4347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&base::DoNothing), 4357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&ShillError, "ClearCellularApnProperties")); 4367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return; 4377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::DictionaryValue* shill_apn_dict = NULL; 4407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::string network_id; 4417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (shill_properties.GetDictionaryWithoutPathExpansion( 44268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kCellularApnProperty, &shill_apn_dict)) { 4437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch shill_apn_dict->GetStringWithoutPathExpansion( 44468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) shill::kApnNetworkIdProperty, &network_id); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::DictionaryValue properties; 4477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::DictionaryValue* apn_dict = new base::DictionaryValue; 44868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) apn_dict->SetStringWithoutPathExpansion(shill::kApnProperty, apn); 44968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) apn_dict->SetStringWithoutPathExpansion(shill::kApnNetworkIdProperty, 4507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch network_id); 45168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) apn_dict->SetStringWithoutPathExpansion(shill::kApnUsernameProperty, 4527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch username); 45368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) apn_dict->SetStringWithoutPathExpansion(shill::kApnPasswordProperty, 4547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch password); 45568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) properties.SetWithoutPathExpansion(shill::kCellularApnProperty, apn_dict); 4567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NetworkHandler::Get()->network_configuration_handler()->SetProperties( 4577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch service_path, properties, 4587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&base::DoNothing), 4597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&ShillError, "SetApnProperties")); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid InternetOptionsHandler::CarrierStatusCallback() { 4637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler(); 4647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const DeviceState* device = 46558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) handler->GetDeviceStateByType(NetworkTypePattern::Cellular()); 4667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (device && (device->carrier() == shill::kCarrierSprint)) { 4677dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const NetworkState* network = 46858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) handler->FirstNetworkByType(NetworkTypePattern::Cellular()); 4691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (network && network->path() == details_path_) { 470ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ash::network_connect::ActivateCellular(network->path()); 4717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch UpdateConnectionData(network->path()); 4727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateCarrier(); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid InternetOptionsHandler::SetCarrierCallback(const base::ListValue* args) { 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string service_path; 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string carrier; 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (args->GetSize() != 2 || 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !args->GetString(0, &service_path) || 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !args->GetString(1, &carrier)) { 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const DeviceState* device = NetworkHandler::Get()->network_state_handler()-> 48758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GetDeviceStateByType(NetworkTypePattern::Cellular()); 4887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!device) { 4897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch LOG(WARNING) << "SetCarrierCallback with no cellular device."; 4907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return; 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NetworkHandler::Get()->network_device_handler()->SetCarrier( 4937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch device->path(), 4947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch carrier, 4957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&InternetOptionsHandler::CarrierStatusCallback, 4967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch weak_factory_.GetWeakPtr()), 4977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&ShillError, "SetCarrierCallback")); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid InternetOptionsHandler::SimOperationCallback(const base::ListValue* args) { 5011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string operation; 5021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (args->GetSize() != 1 || !args->GetString(0, &operation)) { 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (operation == kTagSimOpConfigure) { 5071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mobile_config_ui::DisplayConfigDialog(); 5081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 5091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 1. Bring up SIM unlock dialog, pass new RequirePin setting in URL. 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2. Dialog will ask for current PIN in any case. 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 3. If card is locked it will first call PIN unlock operation 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 4. Then it will call Set RequirePin, passing the same PIN. 5145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // 5. The dialog may change device properties, in which case 5155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // DevicePropertiesUpdated() will get called which will update the UI. 5167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch SimDialogDelegate::SimDialogMode mode; 5171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (operation == kTagSimOpSetLocked) { 5187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch mode = SimDialogDelegate::SIM_DIALOG_SET_LOCK_ON; 5191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } else if (operation == kTagSimOpSetUnlocked) { 5207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch mode = SimDialogDelegate::SIM_DIALOG_SET_LOCK_OFF; 5211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } else if (operation == kTagSimOpUnlock) { 5221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mode = SimDialogDelegate::SIM_DIALOG_UNLOCK; 5231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } else if (operation == kTagSimOpChangePin) { 5241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci mode = SimDialogDelegate::SIM_DIALOG_CHANGE_PIN; 5251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } else { 5261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NOTREACHED(); 5271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 5281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 5297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch SimDialogDelegate::ShowDialog(GetNativeWindow(), mode); 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci//////////////////////////////////////////////////////////////////////////////// 5331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// networkingPrivate implementation methods. TODO(stevenjb): Use the 5341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// networkingPrivate API directly in the settings JS and deprecate these 5351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// methods. crbug.com/279351. 5361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid InternetOptionsHandler::DisableNetworkTypeCallback( 5381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::ListValue* args) { 5391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string type; 5401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!args->GetString(0, &type)) { 5411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NOTREACHED(); 5421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 5431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 5441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NetworkHandler::Get()->network_state_handler()->SetTechnologyEnabled( 5451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chromeos::onc::NetworkTypePatternFromOncType(type), false, 5461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&ShillError, "DisableNetworkType")); 5471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 5481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid InternetOptionsHandler::EnableNetworkTypeCallback( 5501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::ListValue* args) { 5511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string type; 5521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!args->GetString(0, &type)) { 5531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NOTREACHED(); 5541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 5551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 5561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NetworkHandler::Get()->network_state_handler()->SetTechnologyEnabled( 5571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chromeos::onc::NetworkTypePatternFromOncType(type), true, 5581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&ShillError, "EnableNetworkType")); 5591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 5601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid InternetOptionsHandler::GetManagedPropertiesCallback( 5621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::ListValue* args) { 5631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string service_path; 5641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!args->GetString(0, &service_path)) { 5651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NOTREACHED(); 5661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 5671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 5681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NetworkHandler::Get()->managed_network_configuration_handler() 5691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->GetManagedProperties( 5701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LoginState::Get()->primary_user_hash(), 5711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service_path, 5721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind( 5731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &InternetOptionsHandler::PopulateDictionaryDetailsCallback, 5741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci weak_factory_.GetWeakPtr()), 5751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&ShillError, "GetManagedProperties")); 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid InternetOptionsHandler::RequestNetworkScanCallback( 5797dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::ListValue* args) { 5807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NetworkHandler::Get()->network_state_handler()->RequestScan(); 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid InternetOptionsHandler::StartConnectCallback(const base::ListValue* args) { 5841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string service_path; 5851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!args->GetString(0, &service_path)) { 5861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NOTREACHED(); 5871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 5881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 5891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ash::network_connect::ConnectToNetwork(service_path); 5901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 5911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 5921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid InternetOptionsHandler::StartDisconnectCallback( 5931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::ListValue* args) { 5941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string service_path; 5951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (!args->GetString(0, &service_path)) { 5961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NOTREACHED(); 5971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return; 5981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 5991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NetworkHandler::Get()->network_connection_handler()->DisconnectNetwork( 6001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service_path, 6011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&base::DoNothing), 6021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&ShillError, "StartDisconnectCallback")); 6031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 6041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci//////////////////////////////////////////////////////////////////////////////// 6061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)std::string InternetOptionsHandler::GetIconDataUrl(int resource_id) const { 6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::ImageSkia* icon = 6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResourceBundle::GetSharedInstance().GetImageSkiaNamed(resource_id); 6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::ImageSkiaRep image_rep = icon->GetRepresentation( 611cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) web_ui()->GetDeviceScaleFactor()); 6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return webui::GetBitmapDataUrl(image_rep.sk_bitmap()); 6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InternetOptionsHandler::RefreshNetworkData() { 6167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::DictionaryValue dictionary; 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FillNetworkInfo(&dictionary); 618116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_ui()->CallJavascriptFunction(kRefreshNetworkDataFunction, dictionary); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void InternetOptionsHandler::UpdateConnectionData( 6227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& service_path) { 6231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NetworkHandler::Get() 6241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->managed_network_configuration_handler() 6251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->GetManagedProperties( 6261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LoginState::Get()->primary_user_hash(), 6271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service_path, 6281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&InternetOptionsHandler::UpdateConnectionDataCallback, 6291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci weak_factory_.GetWeakPtr()), 6301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&ShillError, "UpdateConnectionData")); 6317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 6327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 6337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid InternetOptionsHandler::UpdateConnectionDataCallback( 6347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& service_path, 6351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::DictionaryValue& onc_properties) { 6367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const NetworkState* network = GetNetworkState(service_path); 6377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!network) 6387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return; 639116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<base::DictionaryValue> dictionary = 6401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PopulateConnectionDetails(network, onc_properties); 641116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch web_ui()->CallJavascriptFunction(kUpdateConnectionDataFunction, *dictionary); 6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void InternetOptionsHandler::UpdateCarrier() { 6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_ui()->CallJavascriptFunction(kUpdateCarrierFunction); 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 648d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void InternetOptionsHandler::DeviceListChanged() { 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!web_ui()) 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RefreshNetworkData(); 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid InternetOptionsHandler::NetworkListChanged() { 6557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!web_ui()) 6567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return; 6577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch RefreshNetworkData(); 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 66058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void InternetOptionsHandler::NetworkConnectionStateChanged( 66158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const NetworkState* network) { 66258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (!web_ui()) 66358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return; 6641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (network->path() == details_path_) 6651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UpdateConnectionData(network->path()); 66658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 66758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid InternetOptionsHandler::NetworkPropertiesUpdated( 6697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const NetworkState* network) { 6707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!web_ui()) 6717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return; 6727dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch RefreshNetworkData(); 6731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (network->path() == details_path_) 6741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UpdateConnectionData(network->path()); 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void InternetOptionsHandler::DevicePropertiesUpdated( 6785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const DeviceState* device) { 6795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!web_ui()) 6805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return; 6815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (device->type() != shill::kTypeCellular) 6825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return; 6835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const NetworkState* network = 6845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) NetworkHandler::Get()->network_state_handler()->FirstNetworkByType( 6855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) NetworkTypePattern::Cellular()); 6861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (network && network->path() == details_path_) 6871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UpdateConnectionData(network->path()); 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid InternetOptionsHandler::SetServerHostnameCallback( 6917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::ListValue* args) { 6927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::string service_path, server_hostname; 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (args->GetSize() < 2 || 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !args->GetString(0, &service_path) || 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !args->GetString(1, &server_hostname)) { 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 699116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetNetworkProperty(service_path, 700116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch shill::kProviderHostProperty, 701116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new base::StringValue(server_hostname)); 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid InternetOptionsHandler::SetPreferNetworkCallback( 7057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::ListValue* args) { 7067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::string service_path, prefer_network_str; 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (args->GetSize() < 2 || 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !args->GetString(0, &service_path) || 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !args->GetString(1, &prefer_network_str)) { 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int priority = (prefer_network_str == kTagTrue) ? kPreferredPriority : 0; 7145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) SetNetworkProperty(service_path, 7155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) shill::kPriorityProperty, 7165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new base::FundamentalValue(priority)); 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid InternetOptionsHandler::SetAutoConnectCallback( 7207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::ListValue* args) { 7217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::string service_path, auto_connect_str; 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (args->GetSize() < 2 || 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !args->GetString(0, &service_path) || 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !args->GetString(1, &auto_connect_str)) { 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool auto_connect = auto_connect_str == kTagTrue; 729116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SetNetworkProperty(service_path, 730116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch shill::kAutoConnectProperty, 731116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new base::FundamentalValue(auto_connect)); 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid InternetOptionsHandler::SetIPConfigCallback(const base::ListValue* args) { 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string service_path; 7367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!args->GetString(0, &service_path)) { 7377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NOTREACHED(); 7387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return; 7397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 7407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NetworkHandler::Get()->network_configuration_handler()->GetProperties( 7417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch service_path, 7427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&InternetOptionsHandler::SetIPConfigProperties, 7437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch weak_factory_.GetWeakPtr(), base::Owned(args->DeepCopy())), 7447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&ShillError, "SetIPConfigCallback")); 7457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid InternetOptionsHandler::SetIPConfigProperties( 7487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::ListValue* args, 7497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const std::string& service_path, 7507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::DictionaryValue& shill_properties) { 7517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::string address, netmask, gateway, name_server_type, name_servers; 7527dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool dhcp_for_ip; 7537dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!args->GetBoolean(1, &dhcp_for_ip) || 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !args->GetString(2, &address) || 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !args->GetString(3, &netmask) || 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !args->GetString(4, &gateway) || 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !args->GetString(5, &name_server_type) || 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !args->GetString(6, &name_servers)) { 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7625b892326406927b709cdaf6c384d4ababf456332Ben Murdoch NET_LOG_USER("SetIPConfigProperties: " + name_server_type, service_path); 7637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 7647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::vector<std::string> properties_to_clear; 7657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::DictionaryValue properties_to_set; 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (dhcp_for_ip) { 7685b892326406927b709cdaf6c384d4ababf456332Ben Murdoch AppendPropertyKeyIfPresent(shill::kStaticIPAddressProperty, 7695b892326406927b709cdaf6c384d4ababf456332Ben Murdoch shill_properties, 7705b892326406927b709cdaf6c384d4ababf456332Ben Murdoch &properties_to_clear); 7715b892326406927b709cdaf6c384d4ababf456332Ben Murdoch AppendPropertyKeyIfPresent(shill::kStaticIPPrefixlenProperty, 7725b892326406927b709cdaf6c384d4ababf456332Ben Murdoch shill_properties, 7735b892326406927b709cdaf6c384d4ababf456332Ben Murdoch &properties_to_clear); 7745b892326406927b709cdaf6c384d4ababf456332Ben Murdoch AppendPropertyKeyIfPresent(shill::kStaticIPGatewayProperty, 7755b892326406927b709cdaf6c384d4ababf456332Ben Murdoch shill_properties, 7765b892326406927b709cdaf6c384d4ababf456332Ben Murdoch &properties_to_clear); 7777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } else { 7785b892326406927b709cdaf6c384d4ababf456332Ben Murdoch AddStringPropertyIfChanged(shill::kStaticIPAddressProperty, 7795b892326406927b709cdaf6c384d4ababf456332Ben Murdoch address, 7805b892326406927b709cdaf6c384d4ababf456332Ben Murdoch shill_properties, 7815b892326406927b709cdaf6c384d4ababf456332Ben Murdoch &properties_to_set); 7827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int prefixlen = network_util::NetmaskToPrefixLength(netmask); 7831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (prefixlen < 0) { 7841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) LOG(ERROR) << "Invalid prefix length for: " << service_path 7851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) << " with netmask " << netmask; 7867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch prefixlen = 0; 7877dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 7885b892326406927b709cdaf6c384d4ababf456332Ben Murdoch AddIntegerPropertyIfChanged(shill::kStaticIPPrefixlenProperty, 7895b892326406927b709cdaf6c384d4ababf456332Ben Murdoch prefixlen, 7905b892326406927b709cdaf6c384d4ababf456332Ben Murdoch shill_properties, 7915b892326406927b709cdaf6c384d4ababf456332Ben Murdoch &properties_to_set); 7925b892326406927b709cdaf6c384d4ababf456332Ben Murdoch AddStringPropertyIfChanged(shill::kStaticIPGatewayProperty, 7935b892326406927b709cdaf6c384d4ababf456332Ben Murdoch gateway, 7945b892326406927b709cdaf6c384d4ababf456332Ben Murdoch shill_properties, 7955b892326406927b709cdaf6c384d4ababf456332Ben Murdoch &properties_to_set); 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (name_server_type == kNameServerTypeAutomatic) { 7997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch AppendPropertyKeyIfPresent(shill::kStaticIPNameServersProperty, 8005b892326406927b709cdaf6c384d4ababf456332Ben Murdoch shill_properties, 8015b892326406927b709cdaf6c384d4ababf456332Ben Murdoch &properties_to_clear); 8027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } else { 8037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (name_server_type == kNameServerTypeGoogle) 8047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch name_servers = kGoogleNameServers; 8055b892326406927b709cdaf6c384d4ababf456332Ben Murdoch AddStringPropertyIfChanged(shill::kStaticIPNameServersProperty, 8065b892326406927b709cdaf6c384d4ababf456332Ben Murdoch name_servers, 8075b892326406927b709cdaf6c384d4ababf456332Ben Murdoch shill_properties, 8085b892326406927b709cdaf6c384d4ababf456332Ben Murdoch &properties_to_set); 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!properties_to_clear.empty()) { 8127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NetworkHandler::Get()->network_configuration_handler()->ClearProperties( 8135b892326406927b709cdaf6c384d4ababf456332Ben Murdoch service_path, 8145b892326406927b709cdaf6c384d4ababf456332Ben Murdoch properties_to_clear, 8155b892326406927b709cdaf6c384d4ababf456332Ben Murdoch base::Bind(&base::DoNothing), 8165b892326406927b709cdaf6c384d4ababf456332Ben Murdoch base::Bind(&ShillError, "ClearIPConfigProperties")); 8177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 8187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!properties_to_set.empty()) { 8197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NetworkHandler::Get()->network_configuration_handler()->SetProperties( 8205b892326406927b709cdaf6c384d4ababf456332Ben Murdoch service_path, 8215b892326406927b709cdaf6c384d4ababf456332Ben Murdoch properties_to_set, 8227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&base::DoNothing), 8237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::Bind(&ShillError, "SetIPConfigProperties")); 8247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 8257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch std::string device_path; 8265b892326406927b709cdaf6c384d4ababf456332Ben Murdoch shill_properties.GetStringWithoutPathExpansion(shill::kDeviceProperty, 8275b892326406927b709cdaf6c384d4ababf456332Ben Murdoch &device_path); 8287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!device_path.empty()) { 8293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) NetworkHandler::Get()->network_device_handler()->RequestRefreshIPConfigs( 8303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) device_path, 8315b892326406927b709cdaf6c384d4ababf456332Ben Murdoch base::Bind(&base::DoNothing), 8323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) base::Bind(&ShillError, "RequestRefreshIPConfigs")); 833eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch } 8342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid InternetOptionsHandler::PopulateDictionaryDetailsCallback( 8372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& service_path, 8381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::DictionaryValue& onc_properties) { 8397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const NetworkState* network = GetNetworkState(service_path); 8407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!network) { 8417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch LOG(ERROR) << "Network properties not found: " << service_path; 8422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 844116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<base::DictionaryValue> dictionary = 8451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PopulateConnectionDetails(network, onc_properties); 8467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 8477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Show details dialog 8481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_ui()->CallJavascriptFunction(kSendNetworkDetailsFunction, *dictionary); 8492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)gfx::NativeWindow InternetOptionsHandler::GetNativeWindow() const { 852010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return web_ui()->GetWebContents()->GetTopLevelNativeWindow(); 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855116680a4aac90f2aa7413d9095a592090648e557Ben Murdochfloat InternetOptionsHandler::GetScaleFactor() const { 856116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return web_ui()->GetDeviceScaleFactor(); 857116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 858116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 859116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst PrefService* InternetOptionsHandler::GetPrefs() const { 860116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return Profile::FromWebUI(web_ui())->GetPrefs(); 861116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 862116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 8637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid InternetOptionsHandler::NetworkCommandCallback( 8647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const base::ListValue* args) { 865116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string onc_type; 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string service_path; 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string command; 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (args->GetSize() != 3 || 869116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch !args->GetString(0, &onc_type) || 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !args->GetString(1, &service_path) || 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !args->GetString(2, &command)) { 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 875116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string type; // Shill type 876116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!onc_type.empty()) { 877116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch type = network_util::TranslateONCTypeToShill(onc_type); 878116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (type.empty()) 879116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch LOG(ERROR) << "Unable to translate ONC type: " << onc_type; 880116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Process commands that do not require an existing network. 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (command == kTagAddConnection) { 883116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch AddConnection(type); 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (command == kTagForget) { 885116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch NetworkHandler::Get()->network_configuration_handler()-> 886116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch RemoveConfiguration( 887116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_path, 888116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&base::DoNothing), 889116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&ShillError, "NetworkCommand: " + command)); 8901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } else if (command == kTagShowDetails) { 8911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SendShowDetailedInfo(service_path); 8922385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch } else if (command == kTagConfigure) { 893ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch NetworkConfigView::Show(service_path, GetNativeWindow()); 89468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } else if (command == kTagActivate && type == shill::kTypeCellular) { 895ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ash::network_connect::ActivateCellular(service_path); 89690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Activation may update network properties (e.g. ActivationState), so 89790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // request them here in case they change. 8987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch UpdateConnectionData(service_path); 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 9001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci LOG(ERROR) << "Unknown internet options command: " << command; 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid InternetOptionsHandler::AddConnection(const std::string& type) { 906c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (type == shill::kTypeWifi) { 90768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) NetworkConfigView::ShowForType(shill::kTypeWifi, GetNativeWindow()); 908c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } else if (type == shill::kTypeVPN) { 90968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) NetworkConfigView::ShowForType(shill::kTypeVPN, GetNativeWindow()); 910c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } else if (type == shill::kTypeCellular) { 9117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch ChooseMobileNetworkDialog::ShowDialog(GetNativeWindow()); 912c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } else { 913116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch LOG(ERROR) << "Unsupported type for AddConnection"; 914c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid InternetOptionsHandler::SendShowDetailedInfo( 9181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& service_path) { 9191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci details_path_ = service_path; 9201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 9211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<base::DictionaryValue> dictionary(new base::DictionaryValue); 9221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const NetworkState* network = GetNetworkState(service_path); 9231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (network) { 9241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci dictionary->SetString(kNetworkInfoKeyServicePath, service_path); 9251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci dictionary->SetString(kNetworkInfoKeyGUID, network->guid()); 9261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (network->type() == shill::kTypeCellular) { 9271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci dictionary->SetBoolean( 9281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kTagCarrierSelectFlag, 9291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CommandLine::ForCurrentProcess() 9301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ->HasSwitch(chromeos::switches::kEnableCarrierSwitching)); 9311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci dictionary->SetBoolean(kTagShowViewAccountButton, 9321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ShowViewAccountButton(network)); 9331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 9341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 9351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_ui()->CallJavascriptFunction(kShowDetailedInfoFunction, *dictionary); 9361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 9371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 9387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochbase::ListValue* InternetOptionsHandler::GetWiredList() { 9397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::ListValue* list = new base::ListValue(); 9407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const NetworkState* network = NetworkHandler::Get()->network_state_handler()-> 94158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) FirstNetworkByType(NetworkTypePattern::Ethernet()); 9427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!network) 9437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return list; 944116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch list->Append(BuildNetworkDictionary(network, GetScaleFactor(), GetPrefs())); 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return list; 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochbase::ListValue* InternetOptionsHandler::GetWirelessList() { 9497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::ListValue* list = new base::ListValue(); 9507dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 9517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NetworkStateHandler::NetworkStateList networks; 952f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NetworkHandler::Get()->network_state_handler()->GetVisibleNetworkListByType( 95358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) NetworkTypePattern::Wireless(), &networks); 9547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch for (NetworkStateHandler::NetworkStateList::const_iterator iter = 9557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch networks.begin(); iter != networks.end(); ++iter) { 956116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch list->Append(BuildNetworkDictionary(*iter, GetScaleFactor(), GetPrefs())); 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return list; 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9627dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochbase::ListValue* InternetOptionsHandler::GetVPNList() { 9637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::ListValue* list = new base::ListValue(); 9647dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 9657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NetworkStateHandler::NetworkStateList networks; 966f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NetworkHandler::Get()->network_state_handler()->GetVisibleNetworkListByType( 96758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) NetworkTypePattern::VPN(), &networks); 9687dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch for (NetworkStateHandler::NetworkStateList::const_iterator iter = 9697dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch networks.begin(); iter != networks.end(); ++iter) { 970116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch list->Append(BuildNetworkDictionary(*iter, GetScaleFactor(), GetPrefs())); 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return list; 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochbase::ListValue* InternetOptionsHandler::GetRememberedList() { 9777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::ListValue* list = new base::ListValue(); 9787dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 979f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NetworkStateHandler::NetworkStateList networks; 980f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NetworkHandler::Get()->network_state_handler()->GetNetworkListByType( 981f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) NetworkTypePattern::Default(), 982f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) true /* configured_only */, 983f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) false /* visible_only */, 984f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 0 /* no limit */, 985f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) &networks); 986f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) for (NetworkStateHandler::NetworkStateList::const_iterator iter = 987f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) networks.begin(); iter != networks.end(); ++iter) { 988f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const NetworkState* network = *iter; 989f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (network->type() != shill::kTypeWifi && 990f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) network->type() != shill::kTypeVPN) 9917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch continue; 992d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) list->Append( 993f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) BuildNetworkDictionary(network, 994f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) web_ui()->GetDeviceScaleFactor(), 995f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) Profile::FromWebUI(web_ui())->GetPrefs())); 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return list; 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid InternetOptionsHandler::FillNetworkInfo( 10027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::DictionaryValue* dictionary) { 10037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler(); 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dictionary->Set(kTagWiredList, GetWiredList()); 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dictionary->Set(kTagWirelessList, GetWirelessList()); 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dictionary->Set(kTagVpnList, GetVPNList()); 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dictionary->Set(kTagRememberedList, GetRememberedList()); 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 100958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) dictionary->SetBoolean( 101058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) kTagWifiAvailable, 101158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) handler->IsTechnologyAvailable(NetworkTypePattern::WiFi())); 101258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) dictionary->SetBoolean( 101358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) kTagWifiEnabled, 101458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) handler->IsTechnologyEnabled(NetworkTypePattern::WiFi())); 101558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 10161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const DeviceState* cellular = 10171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci handler->GetDeviceStateByType(NetworkTypePattern::Mobile()); 101858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) dictionary->SetBoolean( 101958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) kTagCellularAvailable, 102058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) handler->IsTechnologyAvailable(NetworkTypePattern::Mobile())); 102158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) dictionary->SetBoolean( 102258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) kTagCellularEnabled, 102358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) handler->IsTechnologyEnabled(NetworkTypePattern::Mobile())); 10241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci dictionary->SetBoolean(kTagCellularSupportsScan, 10251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cellular && cellular->support_network_scan()); 10261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci dictionary->SetBoolean(kTagCellularSimAbsent, 10271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cellular && cellular->IsSimAbsent()); 10281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci dictionary->SetString(kTagCellularSimLockType, 10291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cellular ? cellular->sim_lock_type() : ""); 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 103158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) dictionary->SetBoolean( 103258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) kTagWimaxAvailable, 103358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) handler->IsTechnologyAvailable(NetworkTypePattern::Wimax())); 103458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) dictionary->SetBoolean( 103558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) kTagWimaxEnabled, 103658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) handler->IsTechnologyEnabled(NetworkTypePattern::Wimax())); 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace options 10407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch} // namespace chromeos 1041