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 9d3cb29a061eff97fc33ec40698f9d9f9f9c70a2..0497b4647152f1270998132baf9b98efedd0ac41 100644 |
--- a/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc |
+++ b/chrome/browser/ui/webui/options/chromeos/internet_options_handler.cc |
@@ -112,6 +112,8 @@ const char kSetDefaultNetworkIconsFunction[] = |
"options.network.NetworkList.setDefaultNetworkIcons"; |
const char kShowDetailedInfoFunction[] = |
"options.internet.DetailsInternetPage.showDetailedInfo"; |
+const char kUpdateConnectionDataFunction[] = |
+ "options.internet.DetailsInternetPage.updateConnectionData"; |
const char kUpdateCarrierFunction[] = |
"options.internet.DetailsInternetPage.updateCarrier"; |
const char kUpdateSecurityTabFunction[] = |
@@ -161,6 +163,7 @@ const char kTagConnectionState[] = "connectionState"; |
const char kTagControlledBy[] = "controlledBy"; |
const char kTagDataRemaining[] = "dataRemaining"; |
const char kTagDeviceConnected[] = "deviceConnected"; |
+const char kTagDisableConnectButton[] = "disableConnectButton"; |
const char kTagDisconnect[] = "disconnect"; |
const char kTagEncryption[] = "encryption"; |
const char kTagErrorState[] = "errorState"; |
@@ -525,6 +528,32 @@ void PopulateVPNDetails( |
hostname_ui_data); |
} |
+// Activate the cellular device pointed to by the service path. |
+void Activate(std::string service_path) { |
+ DCHECK(!service_path.empty()); |
+ chromeos::Network* network = NULL; |
+ if (!service_path.empty()) { |
Evan Stade
2013/01/09 23:49:29
you aren't supposed to handle DCHECK failures, but
rkc
2013/01/09 23:59:11
Done.
|
+ network = chromeos::CrosLibrary::Get()->GetNetworkLibrary()-> |
+ FindNetworkByPath(service_path); |
+ } else { |
+ return; |
+ } |
+ if (network->type() != chromeos::TYPE_CELLULAR) |
+ return; |
+ chromeos::CellularNetwork* cell_network = |
+ static_cast<chromeos::CellularNetwork*>(network); |
+ cell_network->StartActivation(); |
Evan Stade
2013/01/09 23:49:29
L543-545 could be combined to one.
rkc
2013/01/09 23:59:11
Done.
|
+} |
+ |
+// Check if the current cellular device can be activated by directly calling |
+// it's activate function instead of going through the activation process. |
+// Note: Currently Sprint is the only carrier that uses this. |
+bool UseDirectActivation() { |
+ const chromeos::NetworkDevice* device = |
+ chromeos::CrosLibrary::Get()->GetNetworkLibrary()->FindCellularDevice(); |
+ return device && (device->carrier() == shill::kCarrierSprint); |
+} |
+ |
// Given a list of supported carrier's by the device, return the index of |
// the carrier the device is currently using. |
int FindCurrentCarrierIndex(const base::ListValue* carriers, |
@@ -991,6 +1020,14 @@ void InternetOptionsHandler::RefreshNetworkData() { |
kRefreshNetworkDataFunction, dictionary); |
} |
+void InternetOptionsHandler::UpdateConnectionData( |
+ const chromeos::Network* network) { |
+ DictionaryValue dictionary; |
+ PopulateConnectionDetails(network, &dictionary); |
+ web_ui()->CallJavascriptFunction( |
+ kUpdateConnectionDataFunction, dictionary); |
+} |
+ |
void InternetOptionsHandler::UpdateCarrier(bool success) { |
base::FundamentalValue success_value(success); |
web_ui()->CallJavascriptFunction(kUpdateCarrierFunction, success_value); |
@@ -1007,8 +1044,10 @@ void InternetOptionsHandler::OnNetworkManagerChanged( |
void InternetOptionsHandler::OnNetworkChanged( |
chromeos::NetworkLibrary* cros, |
const chromeos::Network* network) { |
- if (web_ui()) |
+ if (web_ui()) { |
RefreshNetworkData(); |
+ UpdateConnectionData(network); |
+ } |
} |
// Monitor wireless networks for changes. It is only necessary |
@@ -1282,10 +1321,6 @@ void InternetOptionsHandler::PopulateIPConfigsCallback( |
chromeos::ConnectionType type = network->type(); |
dictionary.SetInteger(kTagType, type); |
dictionary.SetString(kTagServicePath, network->service_path()); |
- dictionary.SetBoolean(kTagConnecting, network->connecting()); |
- dictionary.SetBoolean(kTagConnected, network->connected()); |
- dictionary.SetString(kTagConnectionState, network->GetStateString()); |
- dictionary.SetString(kTagNetworkName, network->name()); |
dictionary.SetString(kTagNameServerType, name_server_type); |
dictionary.SetString(kTagNameServersGoogle, kGoogleNameServers); |
@@ -1319,31 +1354,43 @@ void InternetOptionsHandler::PopulateIPConfigsCallback( |
new base::FundamentalValue(network->auto_connect()), |
auto_connect_ui_data); |
+ PopulateConnectionDetails(network, &dictionary); |
+ web_ui()->CallJavascriptFunction( |
+ kShowDetailedInfoFunction, dictionary); |
+} |
+ |
+void InternetOptionsHandler::PopulateConnectionDetails( |
+ const chromeos::Network* network, DictionaryValue* dictionary) { |
+ chromeos::ConnectionType type = network->type(); |
+ dictionary->SetBoolean(kTagConnecting, network->connecting()); |
+ dictionary->SetBoolean(kTagConnected, network->connected()); |
+ dictionary->SetString(kTagConnectionState, network->GetStateString()); |
+ dictionary->SetString(kTagNetworkName, network->name()); |
+ |
if (type == chromeos::TYPE_WIFI) { |
- dictionary.SetBoolean(kTagDeviceConnected, cros_->wifi_connected()); |
+ dictionary->SetBoolean(kTagDeviceConnected, cros_->wifi_connected()); |
PopulateWifiDetails(static_cast<const chromeos::WifiNetwork*>(network), |
- &dictionary); |
+ dictionary); |
} else if (type == chromeos::TYPE_WIMAX) { |
- dictionary.SetBoolean(kTagDeviceConnected, cros_->wimax_connected()); |
+ dictionary->SetBoolean(kTagDeviceConnected, cros_->wimax_connected()); |
PopulateWimaxDetails(static_cast<const chromeos::WimaxNetwork*>(network), |
- &dictionary); |
+ dictionary); |
} else if (type == chromeos::TYPE_CELLULAR) { |
- dictionary.SetBoolean(kTagDeviceConnected, cros_->cellular_connected()); |
+ dictionary->SetBoolean(kTagDeviceConnected, cros_->cellular_connected()); |
PopulateCellularDetails( |
static_cast<const chromeos::CellularNetwork*>(network), |
- &dictionary); |
+ dictionary); |
} else if (type == chromeos::TYPE_VPN) { |
- dictionary.SetBoolean(kTagDeviceConnected, |
+ dictionary->SetBoolean(kTagDeviceConnected, |
cros_->virtual_network_connected()); |
Evan Stade
2013/01/09 23:49:29
indent
rkc
2013/01/09 23:59:11
Done.
|
+ const base::DictionaryValue* onc = |
+ cros_->FindOncForNetwork(network->unique_id()); |
PopulateVPNDetails(static_cast<const chromeos::VirtualNetwork*>(network), |
*onc, |
- &dictionary); |
+ dictionary); |
} else if (type == chromeos::TYPE_ETHERNET) { |
- dictionary.SetBoolean(kTagDeviceConnected, cros_->ethernet_connected()); |
+ dictionary->SetBoolean(kTagDeviceConnected, cros_->ethernet_connected()); |
} |
- |
- web_ui()->CallJavascriptFunction( |
- kShowDetailedInfoFunction, dictionary); |
} |
void InternetOptionsHandler::PopulateWifiDetails( |
@@ -1475,15 +1522,22 @@ void InternetOptionsHandler::PopulateCellularDetails( |
} |
} |
- SetActivationButtonVisibility(cellular, |
+ SetCellularButtonsVisibility(cellular, |
dictionary, |
cros_->GetCellularHomeCarrierId()); |
} |
-void InternetOptionsHandler::SetActivationButtonVisibility( |
+void InternetOptionsHandler::SetCellularButtonsVisibility( |
const chromeos::CellularNetwork* cellular, |
DictionaryValue* dictionary, |
const std::string& carrier_id) { |
+ if (cellular->activation_state() == chromeos::ACTIVATION_STATE_ACTIVATING || |
+ cellular->connecting()) { |
+ dictionary->SetBoolean(kTagDisableConnectButton, true); |
Evan Stade
2013/01/09 23:49:29
dictionary->SetBoolean(kTagDisableConnectButton, c
rkc
2013/01/09 23:59:11
Done.
|
+ } else { |
+ dictionary->SetBoolean(kTagDisableConnectButton, false); |
+ } |
+ |
if (cellular->activation_state() != chromeos::ACTIVATION_STATE_ACTIVATING && |
cellular->activation_state() != chromeos::ACTIVATION_STATE_ACTIVATED) { |
dictionary->SetBoolean(kTagShowActivateButton, true); |
@@ -1562,8 +1616,17 @@ void InternetOptionsHandler::NetworkCommandCallback(const ListValue* args) { |
} else if (command == kTagDisconnect && type != chromeos::TYPE_ETHERNET) { |
cros_->DisconnectFromNetwork(network); |
} else if (command == kTagActivate && type == chromeos::TYPE_CELLULAR) { |
- ash::Shell::GetInstance()->delegate()->OpenMobileSetup( |
- network->service_path()); |
+ if (!UseDirectActivation()) { |
+ ash::Shell::GetInstance()->delegate()->OpenMobileSetup( |
+ network->service_path()); |
+ } else { |
+ Activate(service_path); |
+ // Update network properties after we start activation. The Activate |
+ // call is a blocking call, which blocks on finishing the "start" of |
+ // the activation, hence when we query for network properties after |
+ // this call is done, we will have the "activating" activation state. |
+ UpdateConnectionData(network); |
+ } |
} else { |
VLOG(1) << "Unknown command: " << command; |
NOTREACHED(); |