Index: chrome/browser/chromeos/dom_ui/network_menu_ui.cc |
diff --git a/chrome/browser/chromeos/dom_ui/network_menu_ui.cc b/chrome/browser/chromeos/dom_ui/network_menu_ui.cc |
index 2658e9fcb2051114094583a9d9593fabd3d0b3ae..70002698fa4162371fb13e5725b1d1876a71dd63 100644 |
--- a/chrome/browser/chromeos/dom_ui/network_menu_ui.cc |
+++ b/chrome/browser/chromeos/dom_ui/network_menu_ui.cc |
@@ -10,7 +10,9 @@ |
#include "base/string_util.h" |
#include "chrome/app/chrome_dll_resource.h" |
#include "chrome/browser/chromeos/status/network_menu.h" |
+#include "chrome/browser/chromeos/views/domui_menu_widget.h" |
#include "chrome/browser/chromeos/views/native_menu_domui.h" |
+#include "chrome/browser/tab_contents/tab_contents.h" |
#include "chrome/common/url_constants.h" |
#include "googleurl/src/gurl.h" |
#include "grit/browser_resources.h" |
@@ -50,8 +52,21 @@ void NetworkMenuHandler::RegisterMessages() { |
void NetworkMenuHandler::HandleAction(const ListValue* values) { |
menus::MenuModel* model = GetMenuModel(); |
- if (model) |
- static_cast<chromeos::NetworkMenuUI*>(dom_ui_)->ModelAction(model, values); |
+ if (model) { |
+ chromeos::NetworkMenuUI* network_menu_ui = |
+ static_cast<chromeos::NetworkMenuUI*>(dom_ui_); |
+ bool close_menu = network_menu_ui->ModelAction(model, values); |
+ if (close_menu) { |
+ chromeos::DOMUIMenuWidget* widget |
+ = chromeos::DOMUIMenuWidget::FindDOMUIMenuWidget( |
+ dom_ui_->tab_contents()->GetNativeView()); |
+ if (widget) { |
+ chromeos::NativeMenuDOMUI* domui_menu = widget->domui_menu(); |
+ if (domui_menu) |
+ domui_menu->Hide(); |
+ } |
+ } |
+ } |
} |
NetworkMenuHandler::NetworkMenuHandler() { |
@@ -100,15 +115,16 @@ void NetworkMenuUI::AddLocalizedStrings( |
l10n_util::GetStringUTF16(IDS_NETWORK_PASSWORD_HINT)); |
} |
-void NetworkMenuUI::ModelAction(const menus::MenuModel* model, |
+bool NetworkMenuUI::ModelAction(const menus::MenuModel* model, |
const ListValue* values) { |
const NetworkMenu* network_menu = static_cast<const NetworkMenu*>(model); |
std::string action; |
bool success = values->GetString(0, &action); |
+ bool close_menu = true; |
if (!success) { |
LOG(WARNING) << "ModelAction called with no arguments from: " |
<< chrome::kChromeUINetworkMenu; |
- return; |
+ return close_menu; |
} |
int index; |
std::string index_str; |
@@ -117,18 +133,25 @@ void NetworkMenuUI::ModelAction(const menus::MenuModel* model, |
if (!success) { |
LOG(WARNING) << "ModelAction called with no index from: " |
<< chrome::kChromeUINetworkMenu; |
- return; |
+ return close_menu; |
} |
std::string passphrase; |
values->GetString(2, &passphrase); // Optional |
- std::string identity; |
- values->GetString(3, &identity); // Optional |
+ std::string ssid; |
+ values->GetString(3, &ssid); // Optional |
+ int remember = -1; // -1 indicates not set |
+ std::string remember_str; |
+ if (values->GetString(4, &remember_str)) // Optional |
+ base::StringToInt(remember_str, &remember); |
+ |
if (action == "connect" || action == "reconnect") { |
- network_menu->ConnectToNetworkAt(index, passphrase, identity); |
+ close_menu = network_menu->ConnectToNetworkAt(index, passphrase, ssid, |
+ remember); |
} else { |
LOG(WARNING) << "Unrecognized action: " << action |
<< " from: " << chrome::kChromeUINetworkMenu; |
} |
+ return close_menu; |
} |
DictionaryValue* NetworkMenuUI::CreateMenuItem(const menus::MenuModel* model, |