| Index: chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc
|
| diff --git a/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc b/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc
|
| index b3d430771ee2c969c5d158296eba748b7e13856f..48d124345441b5e27723ef2f97804b443cdf6ebe 100644
|
| --- a/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc
|
| +++ b/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc
|
| @@ -63,6 +63,11 @@ namespace options {
|
|
|
| namespace {
|
|
|
| +// Keys for the initial "localized" dictionary values.
|
| +const char kLoggedInAsOwnerKey[] = "loggedInAsOwner";
|
| +const char kShowCarrierSelectKey[] = "showCarrierSelect";
|
| +const char kNetworkDataKey[] = "networkData";
|
| +
|
| // Keys for the network description dictionary passed to the web ui. Make sure
|
| // to keep the strings in sync with what the JavaScript side uses.
|
| const char kNetworkInfoKeyIconURL[] = "iconURL";
|
| @@ -80,17 +85,15 @@ const char kRefreshNetworkDataFunction[] =
|
| "options.network.NetworkList.refreshNetworkData";
|
| const char kSetDefaultNetworkIconsFunction[] =
|
| "options.network.NetworkList.setDefaultNetworkIcons";
|
| -const char kSendNetworkDetailsFunction[] =
|
| - "options.internet.DetailsInternetPage.sendNetworkDetails";
|
| -const char kShowDetailedInfoFunction[] =
|
| - "options.internet.DetailsInternetPage.showDetailedInfo";
|
| +const char kGetManagedPropertiesResultFunction[] =
|
| + "options.internet.DetailsInternetPage.getManagedPropertiesResult";
|
| const char kUpdateConnectionDataFunction[] =
|
| "options.internet.DetailsInternetPage.updateConnectionData";
|
| const char kUpdateCarrierFunction[] =
|
| "options.internet.DetailsInternetPage.updateCarrier";
|
|
|
| -// These are used to register message handlers with JavaScript.
|
| -const char kNetworkCommandMessage[] = "networkCommand";
|
| +// Setter methods called from JS that still need to be converted to match
|
| +// networkingPrivate methods.
|
| const char kSetApnMessage[] = "setApn";
|
| const char kSetAutoConnectMessage[] = "setAutoConnect";
|
| const char kSetCarrierMessage[] = "setCarrier";
|
| @@ -109,26 +112,26 @@ const char kRequestNetworkScanMessage[] = "requestNetworkScan";
|
| const char kStartConnectMessage[] = "startConnect";
|
| const char kStartDisconnectMessage[] = "startDisconnect";
|
|
|
| +// TODO(stevenjb): Add these to networkingPrivate.
|
| +const char kRemoveNetworkMessage[] = "removeNetwork";
|
| +
|
| +// TODO(stevenjb): Deprecate these and integrate with settings Web UI.
|
| +const char kAddConnectionMessage[] = "addConnection";
|
| +const char kConfigureNetworkMessage[] = "configureNetwork";
|
| +const char kActivateNetworkMessage[] = "activateNetwork";
|
| +
|
| // These are strings used to communicate with JavaScript.
|
| -const char kTagActivate[] = "activate";
|
| -const char kTagAddConnection[] = "add";
|
| -const char kTagCarrierSelectFlag[] = "showCarrierSelect";
|
| const char kTagCellularAvailable[] = "cellularAvailable";
|
| const char kTagCellularEnabled[] = "cellularEnabled";
|
| const char kTagCellularSimAbsent[] = "cellularSimAbsent";
|
| const char kTagCellularSimLockType[] = "cellularSimLockType";
|
| const char kTagCellularSupportsScan[] = "cellularSupportsScan";
|
| -const char kTagConfigure[] = "configure";
|
| -const char kTagForget[] = "forget";
|
| const char kTagRememberedList[] = "rememberedList";
|
| -const char kTagShowDetails[] = "showDetails";
|
| -const char kTagShowViewAccountButton[] = "showViewAccountButton";
|
| const char kTagSimOpChangePin[] = "changePin";
|
| const char kTagSimOpConfigure[] = "configure";
|
| const char kTagSimOpSetLocked[] = "setLocked";
|
| const char kTagSimOpSetUnlocked[] = "setUnlocked";
|
| const char kTagSimOpUnlock[] = "unlock";
|
| -const char kTagTrue[] = "true";
|
| const char kTagVpnList[] = "vpnList";
|
| const char kTagWifiAvailable[] = "wifiAvailable";
|
| const char kTagWifiEnabled[] = "wifiEnabled";
|
| @@ -138,9 +141,9 @@ const char kTagWiredList[] = "wiredList";
|
| const char kTagWirelessList[] = "wirelessList";
|
|
|
| // Pseudo-ONC chrome specific properties appended to the ONC dictionary.
|
| -const char kTagErrorMessage[] = "errorMessage";
|
| const char kNetworkInfoKeyServicePath[] = "servicePath";
|
| -const char kNetworkInfoKeyGUID[] = "GUID";
|
| +const char kTagErrorMessage[] = "errorMessage";
|
| +const char kTagShowViewAccountButton[] = "showViewAccountButton";
|
|
|
| const int kPreferredPriority = 1;
|
|
|
| @@ -238,21 +241,6 @@ bool ShowViewAccountButton(const NetworkState* cellular) {
|
| return true;
|
| }
|
|
|
| -scoped_ptr<base::DictionaryValue> PopulateConnectionDetails(
|
| - const NetworkState* network,
|
| - const base::DictionaryValue& onc_properties) {
|
| - scoped_ptr<base::DictionaryValue> dictionary(onc_properties.DeepCopy());
|
| -
|
| - // Append Service Path for now.
|
| - dictionary->SetString(kNetworkInfoKeyServicePath, network->path());
|
| - // Append a Chrome specific translated error message.
|
| - dictionary->SetString(kTagErrorMessage,
|
| - ash::NetworkConnect::Get()->GetErrorString(
|
| - network->error(), network->path()));
|
| -
|
| - return dictionary.Pass();
|
| -}
|
| -
|
| // Helper methods for SetIPConfigProperties
|
| bool AppendPropertyKeyIfPresent(const std::string& key,
|
| const base::DictionaryValue& old_properties,
|
| @@ -313,14 +301,16 @@ void InternetOptionsHandler::GetLocalizedValues(
|
| // InitializePage() gets called.
|
| std::string owner;
|
| chromeos::CrosSettings::Get()->GetString(chromeos::kDeviceOwner, &owner);
|
| - localized_strings->SetString("ownerUserId", base::UTF8ToUTF16(owner));
|
| bool logged_in_as_owner = LoginState::Get()->GetLoggedInUserType() ==
|
| LoginState::LOGGED_IN_USER_OWNER;
|
| - localized_strings->SetBoolean("loggedInAsOwner", logged_in_as_owner);
|
| + localized_strings->SetBoolean(kLoggedInAsOwnerKey, logged_in_as_owner);
|
| + localized_strings->SetBoolean(
|
| + kShowCarrierSelectKey, CommandLine::ForCurrentProcess()->HasSwitch(
|
| + chromeos::switches::kEnableCarrierSwitching));
|
|
|
| base::DictionaryValue* network_dictionary = new base::DictionaryValue;
|
| FillNetworkInfo(network_dictionary);
|
| - localized_strings->Set("networkData", network_dictionary);
|
| + localized_strings->Set(kNetworkDataKey, network_dictionary);
|
| }
|
|
|
| void InternetOptionsHandler::InitializePage() {
|
| @@ -338,9 +328,17 @@ void InternetOptionsHandler::InitializePage() {
|
| }
|
|
|
| void InternetOptionsHandler::RegisterMessages() {
|
| - // Setup handlers specific to this panel.
|
| - web_ui()->RegisterMessageCallback(kNetworkCommandMessage,
|
| - base::Bind(&InternetOptionsHandler::NetworkCommandCallback,
|
| + web_ui()->RegisterMessageCallback(kAddConnectionMessage,
|
| + base::Bind(&InternetOptionsHandler::AddConnection,
|
| + base::Unretained(this)));
|
| + web_ui()->RegisterMessageCallback(kRemoveNetworkMessage,
|
| + base::Bind(&InternetOptionsHandler::RemoveNetwork,
|
| + base::Unretained(this)));
|
| + web_ui()->RegisterMessageCallback(kConfigureNetworkMessage,
|
| + base::Bind(&InternetOptionsHandler::ConfigureNetwork,
|
| + base::Unretained(this)));
|
| + web_ui()->RegisterMessageCallback(kActivateNetworkMessage,
|
| + base::Bind(&InternetOptionsHandler::ActivateNetwork,
|
| base::Unretained(this)));
|
| web_ui()->RegisterMessageCallback(kSetPreferNetworkMessage,
|
| base::Bind(&InternetOptionsHandler::SetPreferNetworkCallback,
|
| @@ -565,13 +563,16 @@ void InternetOptionsHandler::GetManagedPropertiesCallback(
|
| NOTREACHED();
|
| return;
|
| }
|
| - NetworkHandler::Get()->managed_network_configuration_handler()
|
| + // This is only ever called to provide properties for the details page, so
|
| + // set |details_path_| (used by the NetworkState observers) here.
|
| + details_path_ = service_path;
|
| + NetworkHandler::Get()
|
| + ->managed_network_configuration_handler()
|
| ->GetManagedProperties(
|
| - LoginState::Get()->primary_user_hash(),
|
| - service_path,
|
| - base::Bind(
|
| - &InternetOptionsHandler::PopulateDictionaryDetailsCallback,
|
| - weak_factory_.GetWeakPtr()),
|
| + LoginState::Get()->primary_user_hash(), service_path,
|
| + base::Bind(&InternetOptionsHandler::GetManagedPropertiesResult,
|
| + weak_factory_.GetWeakPtr(),
|
| + kGetManagedPropertiesResultFunction),
|
| base::Bind(&ShillError, "GetManagedProperties"));
|
| }
|
|
|
| @@ -623,22 +624,35 @@ void InternetOptionsHandler::UpdateConnectionData(
|
| NetworkHandler::Get()
|
| ->managed_network_configuration_handler()
|
| ->GetManagedProperties(
|
| - LoginState::Get()->primary_user_hash(),
|
| - service_path,
|
| - base::Bind(&InternetOptionsHandler::UpdateConnectionDataCallback,
|
| - weak_factory_.GetWeakPtr()),
|
| + LoginState::Get()->primary_user_hash(), service_path,
|
| + base::Bind(&InternetOptionsHandler::GetManagedPropertiesResult,
|
| + weak_factory_.GetWeakPtr(), kUpdateConnectionDataFunction),
|
| base::Bind(&ShillError, "UpdateConnectionData"));
|
| }
|
|
|
| -void InternetOptionsHandler::UpdateConnectionDataCallback(
|
| +void InternetOptionsHandler::GetManagedPropertiesResult(
|
| + const std::string& js_callback_function,
|
| const std::string& service_path,
|
| const base::DictionaryValue& onc_properties) {
|
| + scoped_ptr<base::DictionaryValue> dictionary(onc_properties.DeepCopy());
|
| + // Add service path for now.
|
| + dictionary->SetString(kNetworkInfoKeyServicePath, service_path);
|
| +
|
| const NetworkState* network = GetNetworkState(service_path);
|
| - if (!network)
|
| - return;
|
| - scoped_ptr<base::DictionaryValue> dictionary =
|
| - PopulateConnectionDetails(network, onc_properties);
|
| - web_ui()->CallJavascriptFunction(kUpdateConnectionDataFunction, *dictionary);
|
| + if (network) {
|
| + // Add a Chrome specific translated error message. TODO(stevenjb): Figure
|
| + // out a more robust way to track errors. Service.Error is transient so we
|
| + // use NetworkState.error() which accurately tracks the "last" error.
|
| + dictionary->SetString(kTagErrorMessage,
|
| + ash::NetworkConnect::Get()->GetErrorString(
|
| + network->error(), service_path));
|
| + // Add additional non-ONC cellular properties to inform the UI.
|
| + if (network->type() == shill::kTypeCellular) {
|
| + dictionary->SetBoolean(kTagShowViewAccountButton,
|
| + ShowViewAccountButton(network));
|
| + }
|
| + }
|
| + web_ui()->CallJavascriptFunction(js_callback_function, *dictionary);
|
| }
|
|
|
| void InternetOptionsHandler::UpdateCarrier() {
|
| @@ -703,14 +717,15 @@ void InternetOptionsHandler::SetServerHostnameCallback(
|
|
|
| void InternetOptionsHandler::SetPreferNetworkCallback(
|
| const base::ListValue* args) {
|
| - std::string service_path, prefer_network_str;
|
| + std::string service_path;
|
| + bool prefer_network;
|
| if (args->GetSize() < 2 ||
|
| !args->GetString(0, &service_path) ||
|
| - !args->GetString(1, &prefer_network_str)) {
|
| + !args->GetBoolean(1, &prefer_network)) {
|
| NOTREACHED();
|
| return;
|
| }
|
| - int priority = (prefer_network_str == kTagTrue) ? kPreferredPriority : 0;
|
| + int priority = prefer_network ? kPreferredPriority : 0;
|
| SetNetworkProperty(service_path,
|
| shill::kPriorityProperty,
|
| new base::FundamentalValue(priority));
|
| @@ -718,14 +733,14 @@ void InternetOptionsHandler::SetPreferNetworkCallback(
|
|
|
| void InternetOptionsHandler::SetAutoConnectCallback(
|
| const base::ListValue* args) {
|
| - std::string service_path, auto_connect_str;
|
| + std::string service_path;
|
| + bool auto_connect;
|
| if (args->GetSize() < 2 ||
|
| !args->GetString(0, &service_path) ||
|
| - !args->GetString(1, &auto_connect_str)) {
|
| + !args->GetBoolean(1, &auto_connect)) {
|
| NOTREACHED();
|
| return;
|
| }
|
| - bool auto_connect = auto_connect_str == kTagTrue;
|
| SetNetworkProperty(service_path,
|
| shill::kAutoConnectProperty,
|
| new base::FundamentalValue(auto_connect));
|
| @@ -833,21 +848,6 @@ void InternetOptionsHandler::SetIPConfigProperties(
|
| }
|
| }
|
|
|
| -void InternetOptionsHandler::PopulateDictionaryDetailsCallback(
|
| - const std::string& service_path,
|
| - const base::DictionaryValue& onc_properties) {
|
| - const NetworkState* network = GetNetworkState(service_path);
|
| - if (!network) {
|
| - LOG(ERROR) << "Network properties not found: " << service_path;
|
| - return;
|
| - }
|
| - scoped_ptr<base::DictionaryValue> dictionary =
|
| - PopulateConnectionDetails(network, onc_properties);
|
| -
|
| - // Show details dialog
|
| - web_ui()->CallJavascriptFunction(kSendNetworkDetailsFunction, *dictionary);
|
| -}
|
| -
|
| gfx::NativeWindow InternetOptionsHandler::GetNativeWindow() const {
|
| return web_ui()->GetWebContents()->GetTopLevelNativeWindow();
|
| }
|
| @@ -860,79 +860,51 @@ const PrefService* InternetOptionsHandler::GetPrefs() const {
|
| return Profile::FromWebUI(web_ui())->GetPrefs();
|
| }
|
|
|
| -void InternetOptionsHandler::NetworkCommandCallback(
|
| - const base::ListValue* args) {
|
| +void InternetOptionsHandler::AddConnection(const base::ListValue* args) {
|
| std::string onc_type;
|
| - std::string service_path;
|
| - std::string command;
|
| - if (args->GetSize() != 3 ||
|
| - !args->GetString(0, &onc_type) ||
|
| - !args->GetString(1, &service_path) ||
|
| - !args->GetString(2, &command)) {
|
| + if (args->GetSize() != 1 || !args->GetString(0, &onc_type)) {
|
| NOTREACHED();
|
| return;
|
| }
|
| - std::string type; // Shill type
|
| - if (!onc_type.empty()) {
|
| - type = network_util::TranslateONCTypeToShill(onc_type);
|
| - if (type.empty())
|
| - LOG(ERROR) << "Unable to translate ONC type: " << onc_type;
|
| - }
|
| - // Process commands that do not require an existing network.
|
| - if (command == kTagAddConnection) {
|
| - AddConnection(type);
|
| - } else if (command == kTagForget) {
|
| - NetworkHandler::Get()->network_configuration_handler()->
|
| - RemoveConfiguration(
|
| - service_path,
|
| - base::Bind(&base::DoNothing),
|
| - base::Bind(&ShillError, "NetworkCommand: " + command));
|
| - } else if (command == kTagShowDetails) {
|
| - SendShowDetailedInfo(service_path);
|
| - } else if (command == kTagConfigure) {
|
| - NetworkConfigView::Show(service_path, GetNativeWindow());
|
| - } else if (command == kTagActivate && type == shill::kTypeCellular) {
|
| - ash::NetworkConnect::Get()->ActivateCellular(service_path);
|
| - // Activation may update network properties (e.g. ActivationState), so
|
| - // request them here in case they change.
|
| - UpdateConnectionData(service_path);
|
| - } else {
|
| - LOG(ERROR) << "Unknown internet options command: " << command;
|
| - NOTREACHED();
|
| - }
|
| -}
|
| -
|
| -void InternetOptionsHandler::AddConnection(const std::string& type) {
|
| - if (type == shill::kTypeWifi) {
|
| + if (onc_type == ::onc::network_type::kWiFi) {
|
| NetworkConfigView::ShowForType(shill::kTypeWifi, GetNativeWindow());
|
| - } else if (type == shill::kTypeVPN) {
|
| + } else if (onc_type == ::onc::network_type::kVPN) {
|
| NetworkConfigView::ShowForType(shill::kTypeVPN, GetNativeWindow());
|
| - } else if (type == shill::kTypeCellular) {
|
| + } else if (onc_type == ::onc::network_type::kCellular) {
|
| ChooseMobileNetworkDialog::ShowDialog(GetNativeWindow());
|
| } else {
|
| LOG(ERROR) << "Unsupported type for AddConnection";
|
| }
|
| }
|
|
|
| -void InternetOptionsHandler::SendShowDetailedInfo(
|
| - const std::string& service_path) {
|
| - details_path_ = service_path;
|
| +void InternetOptionsHandler::ConfigureNetwork(const base::ListValue* args) {
|
| + std::string service_path;
|
| + if (args->GetSize() != 1 || !args->GetString(0, &service_path)) {
|
| + NOTREACHED();
|
| + return;
|
| + }
|
| + NetworkConfigView::Show(service_path, GetNativeWindow());
|
| +}
|
|
|
| - scoped_ptr<base::DictionaryValue> dictionary(new base::DictionaryValue);
|
| - const NetworkState* network = GetNetworkState(service_path);
|
| - if (network) {
|
| - dictionary->SetString(kNetworkInfoKeyServicePath, service_path);
|
| - dictionary->SetString(kNetworkInfoKeyGUID, network->guid());
|
| - if (network->type() == shill::kTypeCellular) {
|
| - dictionary->SetBoolean(
|
| - kTagCarrierSelectFlag,
|
| - CommandLine::ForCurrentProcess()
|
| - ->HasSwitch(chromeos::switches::kEnableCarrierSwitching));
|
| - dictionary->SetBoolean(kTagShowViewAccountButton,
|
| - ShowViewAccountButton(network));
|
| - }
|
| +void InternetOptionsHandler::ActivateNetwork(const base::ListValue* args) {
|
| + std::string service_path;
|
| + if (args->GetSize() != 1 || !args->GetString(0, &service_path)) {
|
| + NOTREACHED();
|
| + return;
|
| }
|
| - web_ui()->CallJavascriptFunction(kShowDetailedInfoFunction, *dictionary);
|
| + ash::NetworkConnect::Get()->ActivateCellular(service_path);
|
| +}
|
| +
|
| +void InternetOptionsHandler::RemoveNetwork(const base::ListValue* args) {
|
| + std::string service_path;
|
| + if (args->GetSize() != 1 || !args->GetString(0, &service_path)) {
|
| + NOTREACHED();
|
| + return;
|
| + }
|
| + NetworkHandler::Get()
|
| + ->managed_network_configuration_handler()
|
| + ->RemoveConfiguration(service_path, base::Bind(&base::DoNothing),
|
| + base::Bind(&ShillError, "RemoveNetwork"));
|
| }
|
|
|
| base::ListValue* InternetOptionsHandler::GetWiredList() {
|
|
|