Index: chrome/browser/chromeos/status/network_menu.cc |
diff --git a/chrome/browser/chromeos/status/network_menu.cc b/chrome/browser/chromeos/status/network_menu.cc |
index 98de1d21373a1c676d591c48d25579ed1799125f..6e8672fa8ab9340edde2d5c5437a9a36dd8d1f2b 100644 |
--- a/chrome/browser/chromeos/status/network_menu.cc |
+++ b/chrome/browser/chromeos/status/network_menu.cc |
@@ -87,6 +87,15 @@ void SetMenuMargins(views::MenuItemView* menu_item_view, int top, int bottom) { |
} |
} |
+// Activate a cellular network. |
+void ActivateCellular(const chromeos::CellularNetwork* cellular) { |
+ DCHECK(cellular); |
+ Browser* browser = BrowserList::GetLastActive(); |
+ if (!browser) |
+ return; |
+ browser->OpenMobilePlanTabAndActivate(); |
+} |
+ |
} // namespace |
namespace chromeos { |
@@ -202,15 +211,12 @@ class NetworkMenuModel : public ui::MenuModel { |
private: |
// Show a NetworkConfigView modal dialog instance. |
void ShowNetworkConfigView(NetworkConfigView* view) const; |
- // Activate a cellular network. |
- void ActivateCellular(const CellularNetwork* cellular) const; |
// Open a dialog to set up and connect to a network. |
void ShowOther(ConnectionType type) const; |
DISALLOW_COPY_AND_ASSIGN(NetworkMenuModel); |
}; |
- |
class MoreMenuModel : public NetworkMenuModel { |
public: |
explicit MoreMenuModel(const base::WeakPtr<NetworkMenu> owner) |
@@ -281,14 +287,7 @@ void NetworkMenuModel::ConnectToNetworkAt(int index, |
// Connect or reconnect. |
if (auto_connect >= 0) |
wifi->SetAutoConnect(auto_connect ? true : false); |
- if (wifi->connecting_or_connected()) { |
- // Show the config settings for the active network. |
- owner_->ShowTabbedNetworkSettings(wifi); |
- } else { |
- wifi->AttemptConnection(base::Bind(&NetworkMenu::DoConnect, |
- owner_, |
- wifi)); |
- } |
+ owner_->ConnectToNetwork(wifi); |
} else { |
// If we are attempting to connect to a network that no longer exists, |
// display a notification. |
@@ -300,18 +299,7 @@ void NetworkMenuModel::ConnectToNetworkAt(int index, |
CellularNetwork* cellular = cros->FindCellularNetworkByPath( |
service_path); |
if (cellular) { |
- if ((cellular->activation_state() != ACTIVATION_STATE_ACTIVATED && |
- cellular->activation_state() != ACTIVATION_STATE_UNKNOWN) || |
- cellular->needs_new_plan()) { |
- ActivateCellular(cellular); |
- } else if (cellular->connecting_or_connected()) { |
- // Cellular network is connecting or connected, |
- // so we show the config settings for the cellular network. |
- owner_->ShowTabbedNetworkSettings(cellular); |
- } else { |
- // Clicked on a disconnected cellular network, so connect to it. |
- cros->ConnectToCellularNetwork(cellular); |
- } |
+ owner_->ConnectToNetwork(cellular); |
} else { |
// If we are attempting to connect to a network that no longer exists, |
// display a notification. |
@@ -328,22 +316,65 @@ void NetworkMenuModel::ConnectToNetworkAt(int index, |
} else if (flags & FLAG_VPN) { |
VirtualNetwork* vpn = cros->FindVirtualNetworkByPath(service_path); |
if (vpn) { |
+ owner_->ConnectToNetwork(vpn); |
+ } else { |
+ // If we are attempting to connect to a network that no longer exists, |
+ // display a notification. |
+ LOG(WARNING) << "VPN does not exist to connect to: " << service_path; |
+ // TODO(stevenjb): Show notification. |
+ } |
+ } |
+} |
+ |
+void NetworkMenu::ConnectToNetwork(Network* network) { |
+ NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary(); |
+ switch (network->type()) { |
+ case TYPE_ETHERNET: { |
+ ShowTabbedNetworkSettings(network); |
+ break; |
+ } |
+ case TYPE_WIFI: { |
+ WifiNetwork* wifi = static_cast<WifiNetwork*>(network); |
+ if (wifi->connecting_or_connected()) { |
+ ShowTabbedNetworkSettings(wifi); |
+ } else { |
+ wifi->AttemptConnection(base::Bind(&NetworkMenu::DoConnect, |
+ weak_pointer_factory_.GetWeakPtr(), |
+ wifi)); |
+ } |
+ break; |
+ } |
+ |
+ case TYPE_CELLULAR: { |
+ CellularNetwork* cell = static_cast<CellularNetwork*>(network); |
+ if (cell->NeedsActivation()) { |
+ ActivateCellular(cell); |
+ } else if (cell->connecting_or_connected()) { |
+ // Cellular network is connecting or connected, |
+ // so we show the config settings for the cellular network. |
+ ShowTabbedNetworkSettings(cell); |
+ } else { |
+ // Clicked on a disconnected cellular network, so connect to it. |
+ cros->ConnectToCellularNetwork(cell); |
+ } |
+ break; |
+ } |
+ |
+ case TYPE_VPN: { |
+ VirtualNetwork* vpn = static_cast<VirtualNetwork*>(network); |
// Connect or reconnect. |
if (vpn->connecting_or_connected()) { |
- // Show the config settings for the connected network. |
- if (cros->connected_network()) |
- owner_->ShowTabbedNetworkSettings(cros->connected_network()); |
+ ShowTabbedNetworkSettings(vpn); |
} else { |
vpn->AttemptConnection(base::Bind(&NetworkMenu::DoConnect, |
- owner_, |
+ weak_pointer_factory_.GetWeakPtr(), |
vpn)); |
} |
- } else { |
- // If we are attempting to connect to a network that no longer exists, |
- // display a notification. |
- LOG(WARNING) << "VPN does not exist to connect to: " << service_path; |
- // TODO(stevenjb): Show notification. |
+ break; |
} |
+ |
+ default: |
+ break; |
} |
} |
@@ -451,9 +482,8 @@ void NetworkMenuModel::ActivatedAt(int index) { |
} else if (flags & FLAG_TOGGLE_OFFLINE) { |
cros->EnableOfflineMode(!cros->offline_mode()); |
} else if (flags & FLAG_ETHERNET) { |
- if (cros->ethernet_connected()) { |
+ if (cros->ethernet_connected()) |
owner_->ShowTabbedNetworkSettings(cros->ethernet_network()); |
- } |
} else if (flags & (FLAG_WIFI | FLAG_ADD_WIFI | |
FLAG_CELLULAR | FLAG_ADD_CELLULAR | |
FLAG_VPN | FLAG_ADD_VPN)) { |
@@ -482,14 +512,6 @@ void NetworkMenuModel::ShowNetworkConfigView(NetworkConfigView* view) const { |
window->Show(); |
} |
-void NetworkMenuModel::ActivateCellular(const CellularNetwork* cellular) const { |
- DCHECK(cellular); |
- Browser* browser = BrowserList::GetLastActive(); |
- if (!browser) |
- return; |
- browser->OpenMobilePlanTabAndActivate(); |
-} |
- |
void NetworkMenuModel::ShowOther(ConnectionType type) const { |
if (type == TYPE_CELLULAR) { |
ChooseMobileNetworkDialog::ShowDialog( |
@@ -1040,6 +1062,14 @@ void NetworkMenu::ShowTabbedNetworkSettings(const Network* network) const { |
Browser* browser = BrowserList::GetLastActive(); |
if (!browser) |
return; |
+ |
+ // In case of a VPN, show the config settings for the connected network. |
+ if (network->type() == chromeos::TYPE_VPN) { |
+ network = CrosLibrary::Get()->GetNetworkLibrary()->connected_network(); |
+ if (!network) |
+ return; |
+ } |
+ |
std::string network_name(network->name()); |
if (network_name.empty() && network->type() == chromeos::TYPE_ETHERNET) { |
network_name = l10n_util::GetStringUTF8( |