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 7e269e91e81d8fb54beb272a13b5e73b4981c3cb..e73890962e8a68a3c914f29519ccc41b3b766d76 100644 |
--- a/chrome/browser/chromeos/status/network_menu.cc |
+++ b/chrome/browser/chromeos/status/network_menu.cc |
@@ -91,6 +91,10 @@ bool NetworkMenu::GetNetworkAt(int index, NetworkInfo* info) const { |
info->message = l10n_util::GetStringUTF8( |
IDS_STATUSBAR_NETWORK_DEVICE_DISCONNECTED); |
} |
+ } else { |
+ info->status = kNetworkStatusDisconnected; |
+ info->message = l10n_util::GetStringUTF8( |
+ IDS_STATUSBAR_NETWORK_DEVICE_DISCONNECTED); |
} |
info->ip_address = wifi.ip_address(); |
info->need_passphrase = wifi.encrypted(); |
@@ -123,6 +127,10 @@ bool NetworkMenu::GetNetworkAt(int index, NetworkInfo* info) const { |
info->message = l10n_util::GetStringUTF8( |
IDS_STATUSBAR_NETWORK_DEVICE_DISCONNECTED); |
} |
+ } else { |
+ info->status = kNetworkStatusDisconnected; |
+ info->message = l10n_util::GetStringUTF8( |
+ IDS_STATUSBAR_NETWORK_DEVICE_DISCONNECTED); |
} |
info->ip_address = cellular.ip_address(); |
info->need_passphrase = false; |
@@ -131,6 +139,9 @@ bool NetworkMenu::GetNetworkAt(int index, NetworkInfo* info) const { |
res = false; // Network not found, hide entry. |
} |
} else if (flags & FLAG_OTHER_NETWORK) { |
+ info->status = kNetworkStatusDisconnected; |
+ info->message = l10n_util::GetStringUTF8( |
+ IDS_STATUSBAR_NETWORK_DEVICE_DISCONNECTED); |
info->network_type = kNetworkTypeOther; |
info->need_passphrase = true; |
info->remembered = true; |
@@ -140,6 +151,47 @@ bool NetworkMenu::GetNetworkAt(int index, NetworkInfo* info) const { |
return res; |
} |
+void NetworkMenu::ConnectToNetworkAt(int index, |
+ const std::string& passphrase, |
+ const std::string& identity) const { |
+ int flags = menu_items_[index].flags; |
+ NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary(); |
+ if (flags & FLAG_WIFI) { |
+ WifiNetwork wifi; |
+ bool found = cros->FindWifiNetworkByPath( |
+ menu_items_[index].wireless_path, &wifi); |
+ if (found) { |
+ // Connect or reconnect. |
+ if (wifi.encrypted()) { |
+ if (wifi.IsCertificateLoaded()) { |
+ cros->ConnectToWifiNetwork(wifi, std::string(), |
+ std::string(), wifi.cert_path()); |
+ } else { |
+ // TODO(stevenjb): use passphrase/identity once provided. |
+ // cros->ConnectToWifiNetwork(wifi, passphrase, |
+ // identity, menu_items[index].path); |
+ const bool kFocusLogin = true; |
+ ShowNetworkConfigView(new NetworkConfigView(wifi, true), kFocusLogin); |
+ } |
+ } else { |
+ cros->ConnectToWifiNetwork(wifi, std::string(), |
+ std::string(), std::string()); |
+ } |
+ } |
+ } else if (flags & FLAG_CELLULAR) { |
+ CellularNetwork cellular; |
+ bool found = cros->FindCellularNetworkByPath( |
+ menu_items_[index].wireless_path, &cellular); |
+ if (found) { |
+ // Connect or reconnect. |
+ cros->ConnectToCellularNetwork(cellular); |
+ } |
+ } else if (flags & FLAG_OTHER_NETWORK) { |
+ const bool kFocusLogin = true; |
+ ShowNetworkConfigView(new NetworkConfigView(), kFocusLogin); |
+ } |
+} |
+ |
//////////////////////////////////////////////////////////////////////////////// |
// NetworkMenu, menus::MenuModel implementation: |
@@ -178,17 +230,6 @@ bool NetworkMenu::IsEnabledAt(int index) const { |
return !(menu_items_[index].flags & FLAG_DISABLED); |
} |
-void NetworkMenu::ShowTabbedNetworkSettings(const Network& network) { |
- Browser* browser = BrowserList::GetLastActive(); |
- if (!browser) |
- return; |
- std::string page = StringPrintf("%s?servicePath=%s&networkType=%d", |
- chrome::kInternetOptionsSubPage, |
- EscapeUrlEncodedData(network.service_path()).c_str(), |
- network.type()); |
- browser->ShowOptionsTab(page); |
-} |
- |
void NetworkMenu::ActivatedAt(int index) { |
// When we are refreshing the menu, ignore menu item activation. |
if (refreshing_menu_) |
@@ -207,27 +248,16 @@ void NetworkMenu::ActivatedAt(int index) { |
} else if (flags & FLAG_TOGGLE_OFFLINE) { |
cros->EnableOfflineMode(!cros->offline_mode()); |
} else if (flags & FLAG_OTHER_NETWORK) { |
- NetworkConfigView* view = new NetworkConfigView(); |
- view->set_browser_mode(IsBrowserMode()); |
- views::Window* window = browser::CreateViewsWindow(GetNativeWindow(), |
- gfx::Rect(), |
- view); |
- window->SetIsAlwaysOnTop(true); |
- window->Show(); |
- view->SetLoginTextfieldFocus(); |
+ const bool kFocusLogin = true; |
+ ShowNetworkConfigView(new NetworkConfigView(), kFocusLogin); |
} else if (flags & FLAG_ETHERNET) { |
if (cros->ethernet_connected()) { |
if (CommandLine::ForCurrentProcess()->HasSwitch( |
switches::kEnableTabbedOptions)) { |
ShowTabbedNetworkSettings(cros->ethernet_network()); |
} else { |
- NetworkConfigView* view = |
- new NetworkConfigView(cros->ethernet_network()); |
- view->set_browser_mode(IsBrowserMode()); |
- views::Window* window = browser::CreateViewsWindow( |
- GetNativeWindow(), gfx::Rect(), view); |
- window->SetIsAlwaysOnTop(true); |
- window->Show(); |
+ ShowNetworkConfigView( |
Charlie Lee
2010/10/15 06:34:32
while you are at it, add the const here also
|
+ new NetworkConfigView(cros->ethernet_network()), false); |
} |
} |
} else if (flags & FLAG_WIFI) { |
@@ -240,35 +270,25 @@ void NetworkMenu::ActivatedAt(int index) { |
// TODO(stevenjb): Show notification. |
} else if (wifi.name() == cros->wifi_name()) { |
if (cros->wifi_connected()) { |
+ // If we are already connected, show the config settings. |
if (CommandLine::ForCurrentProcess()->HasSwitch( |
switches::kEnableTabbedOptions)) { |
ShowTabbedNetworkSettings(wifi); |
} else { |
- // If we are already connected, open the config dialog. |
- NetworkConfigView* view = new NetworkConfigView(wifi, false); |
- view->set_browser_mode(IsBrowserMode()); |
- views::Window* window = browser::CreateViewsWindow( |
- GetNativeWindow(), gfx::Rect(), view); |
- window->SetIsAlwaysOnTop(true); |
- window->Show(); |
+ ShowNetworkConfigView(new NetworkConfigView(wifi, false), false); |
Charlie Lee
2010/10/15 06:34:32
and here
|
} |
} else { |
// TODO(stevenjb): Connection in progress. Show dialog? |
} |
} else { |
// If wifi network is not encrypted, then directly connect. |
- // Otherwise, we open password dialog window. |
+ // Otherwise, open the password dialog window. |
if (!wifi.encrypted()) { |
cros->ConnectToWifiNetwork(wifi, std::string(), |
std::string(), std::string()); |
} else { |
- NetworkConfigView* view = new NetworkConfigView(wifi, true); |
- view->set_browser_mode(IsBrowserMode()); |
- views::Window* window = browser::CreateViewsWindow( |
- GetNativeWindow(), gfx::Rect(), view); |
- window->SetIsAlwaysOnTop(true); |
- window->Show(); |
- view->SetLoginTextfieldFocus(); |
+ const bool kFocusLogin = true; |
+ ShowNetworkConfigView(new NetworkConfigView(wifi, true), kFocusLogin); |
} |
} |
} else if (flags & FLAG_CELLULAR) { |
@@ -288,12 +308,7 @@ void NetworkMenu::ActivatedAt(int index) { |
switches::kEnableTabbedOptions)) { |
ShowTabbedNetworkSettings(cellular); |
} else { |
- NetworkConfigView* view = new NetworkConfigView(cellular); |
- view->set_browser_mode(IsBrowserMode()); |
- views::Window* window = browser::CreateViewsWindow( |
- GetNativeWindow(), gfx::Rect(), view); |
- window->SetIsAlwaysOnTop(true); |
- window->Show(); |
+ ShowNetworkConfigView(new NetworkConfigView(cellular), false); |
} |
} else { |
// TODO(stevenjb): Connection in progress. Show dialog? |
@@ -314,6 +329,13 @@ void NetworkMenu::CancelMenu() { |
network_menu_->CancelMenu(); |
} |
+void NetworkMenu::UpdateMenu() { |
+ refreshing_menu_ = true; |
+ InitMenuItems(); |
+ network_menu_->Rebuild(); |
+ refreshing_menu_ = false; |
+} |
+ |
// static |
SkBitmap NetworkMenu::IconForNetworkStrength(int strength, bool black) { |
// Compose wifi icon by superimposing various icons. |
@@ -378,7 +400,6 @@ void NetworkMenu::RunMenu(views::View* source, const gfx::Point& pt) { |
cros->UpdateSystemInfo(); |
InitMenuItems(); |
network_menu_->Rebuild(); |
- network_menu_->UpdateStates(); |
// Restore menu width, if it was set up. |
// NOTE: width isn't checked for correctness here since all width-related |
// logic implemented inside |network_menu_|. |
@@ -389,31 +410,37 @@ void NetworkMenu::RunMenu(views::View* source, const gfx::Point& pt) { |
} |
void NetworkMenu::InitMenuItems() { |
+ // This gets called on initialization, so any changes should be reflected |
+ // in CrosMock::SetNetworkLibraryStatusAreaExpectations(). |
+ |
menu_items_.clear(); |
// Populate our MenuItems with the current list of wifi networks. |
NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary(); |
ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
// Ethernet |
+ bool ethernet_connected = cros->ethernet_connected(); |
+ bool ethernet_connecting = cros->ethernet_connecting(); |
string16 label = l10n_util::GetStringUTF16( |
IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET); |
SkBitmap icon = *rb.GetBitmapNamed(IDR_STATUSBAR_WIRED_BLACK); |
- SkBitmap badge = cros->ethernet_connecting() || cros->ethernet_connected() ? |
+ SkBitmap badge = ethernet_connecting || ethernet_connected ? |
SkBitmap() : *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_DISCONNECTED); |
- int flag = (cros->ethernet_connecting() || cros->ethernet_connected()) ? |
+ int flag = (ethernet_connecting || ethernet_connected) ? |
FLAG_ETHERNET | FLAG_ASSOCIATED : FLAG_ETHERNET; |
menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, |
IconForDisplay(icon, badge), std::string(), flag)); |
// Wifi |
const WifiNetworkVector& wifi_networks = cros->wifi_networks(); |
+ const std::string& active_wifi_name = cros->wifi_name(); |
// Wifi networks ssids. |
for (size_t i = 0; i < wifi_networks.size(); ++i) { |
label = ASCIIToUTF16(wifi_networks[i].name()); |
SkBitmap icon = IconForNetworkStrength(wifi_networks[i].strength(), true); |
SkBitmap badge = wifi_networks[i].encrypted() ? |
*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_SECURE) : SkBitmap(); |
- flag = (wifi_networks[i].name() == cros->wifi_name()) ? |
+ flag = (wifi_networks[i].name() == active_wifi_name) ? |
FLAG_WIFI | FLAG_ASSOCIATED : FLAG_WIFI; |
menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, |
IconForDisplay(icon, badge), wifi_networks[i].service_path(), flag)); |
@@ -421,6 +448,7 @@ void NetworkMenu::InitMenuItems() { |
// Cellular |
const CellularNetworkVector& cell_networks = cros->cellular_networks(); |
+ const std::string& active_cellular_name = cros->cellular_name(); |
// Cellular networks ssids. |
for (size_t i = 0; i < cell_networks.size(); ++i) { |
label = ASCIIToUTF16(cell_networks[i].name()); |
@@ -428,7 +456,7 @@ void NetworkMenu::InitMenuItems() { |
// TODO(chocobo): Check cellular network 3g/edge. |
SkBitmap badge = *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_3G); |
// SkBitmap badge = *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_EDGE); |
- flag = (cell_networks[i].name() == cros->cellular_name()) ? |
+ flag = (cell_networks[i].name() == active_cellular_name) ? |
FLAG_CELLULAR | FLAG_ASSOCIATED : FLAG_CELLULAR; |
menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, |
IconForDisplay(icon, badge), cell_networks[i].service_path(), flag)); |
@@ -449,12 +477,14 @@ void NetworkMenu::InitMenuItems() { |
SkBitmap()), |
std::string(), FLAG_OTHER_NETWORK)); |
- if (cros->wifi_available() || cros->cellular_available()) { |
+ bool wifi_available = cros->wifi_available(); |
+ bool cellular_available = cros->cellular_available(); |
+ if (wifi_available || cellular_available) { |
// Separator. |
menu_items_.push_back(MenuItem()); |
// Turn Wifi Off. (only if wifi available) |
- if (cros->wifi_available()) { |
+ if (wifi_available) { |
int id = cros->wifi_enabled() ? IDS_STATUSBAR_NETWORK_DEVICE_DISABLE : |
IDS_STATUSBAR_NETWORK_DEVICE_ENABLE; |
label = l10n_util::GetStringFUTF16(id, |
@@ -464,7 +494,7 @@ void NetworkMenu::InitMenuItems() { |
} |
// Turn Cellular Off. (only if cellular available) |
- if (cros->cellular_available()) { |
+ if (cellular_available) { |
int id = cros->cellular_enabled() ? IDS_STATUSBAR_NETWORK_DEVICE_DISABLE : |
IDS_STATUSBAR_NETWORK_DEVICE_ENABLE; |
label = l10n_util::GetStringFUTF16(id, |
@@ -495,4 +525,27 @@ void NetworkMenu::InitMenuItems() { |
} |
} |
+void NetworkMenu::ShowTabbedNetworkSettings(const Network& network) { |
+ Browser* browser = BrowserList::GetLastActive(); |
+ if (!browser) |
+ return; |
+ std::string page = StringPrintf("%s?servicePath=%s&networkType=%d", |
+ chrome::kInternetOptionsSubPage, |
+ EscapeUrlEncodedData(network.service_path()).c_str(), |
+ network.type()); |
+ browser->ShowOptionsTab(page); |
+} |
+ |
+// TODO(stevenjb): deprecate this once all of the UI is embedded in the menu. |
+void NetworkMenu::ShowNetworkConfigView(NetworkConfigView* view, |
+ bool focus_login) const { |
+ view->set_browser_mode(IsBrowserMode()); |
+ views::Window* window = browser::CreateViewsWindow( |
+ GetNativeWindow(), gfx::Rect(), view); |
+ window->SetIsAlwaysOnTop(true); |
+ window->Show(); |
+ if (focus_login) |
+ view->SetLoginTextfieldFocus(); |
+} |
+ |
} // namespace chromeos |