| 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 11b7aedca8a0f2fdc7ff293f5925bcede8aa0714..7e269e91e81d8fb54beb272a13b5e73b4981c3cb 100644
|
| --- a/chrome/browser/chromeos/status/network_menu.cc
|
| +++ b/chrome/browser/chromeos/status/network_menu.cc
|
| @@ -12,6 +12,7 @@
|
| #include "chrome/browser/browser.h"
|
| #include "chrome/browser/browser_list.h"
|
| #include "chrome/browser/chromeos/cros/cros_library.h"
|
| +#include "chrome/browser/chromeos/dom_ui/network_menu_ui.h"
|
| #include "chrome/common/chrome_switches.h"
|
| #include "chrome/common/url_constants.h"
|
| #include "chrome/browser/views/window.h"
|
| @@ -20,8 +21,22 @@
|
| #include "grit/generated_resources.h"
|
| #include "grit/theme_resources.h"
|
| #include "net/base/escape.h"
|
| +#include "views/controls/menu/menu_2.h"
|
| #include "views/window/window.h"
|
|
|
| +namespace {
|
| +// Constants passed to Javascript:
|
| +static const char* kNetworkTypeEthernet = "ethernet";
|
| +static const char* kNetworkTypeWifi = "wifi";
|
| +static const char* kNetworkTypeCellular = "cellular";
|
| +static const char* kNetworkTypeOther = "other";
|
| +
|
| +static const char* kNetworkStatusConnected = "connected";
|
| +static const char* kNetworkStatusConnecting = "connecting";
|
| +static const char* kNetworkStatusDisconnected = "disconnected";
|
| +static const char* kNetworkStatusError = "error";
|
| +}
|
| +
|
| namespace chromeos {
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| @@ -31,13 +46,100 @@ namespace chromeos {
|
| const int NetworkMenu::kNumWifiImages = 9;
|
|
|
| NetworkMenu::NetworkMenu()
|
| - : ALLOW_THIS_IN_INITIALIZER_LIST(network_menu_(this)),
|
| - min_width_(-1) {
|
| + : min_width_(-1) {
|
| + network_menu_.reset(NetworkMenuUI::CreateMenu2(this));
|
| }
|
|
|
| NetworkMenu::~NetworkMenu() {
|
| }
|
|
|
| +bool NetworkMenu::GetNetworkAt(int index, NetworkInfo* info) const {
|
| + DCHECK(info);
|
| + bool res = true; // True unless a network doesn't exist.
|
| + int flags = menu_items_[index].flags;
|
| + NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary();
|
| + if (flags & FLAG_ETHERNET) {
|
| + info->network_type = kNetworkTypeEthernet;
|
| + if (cros->ethernet_connected()) {
|
| + info->status = kNetworkStatusConnected;
|
| + info->ip_address = cros->ethernet_network().ip_address();
|
| + }
|
| + info->need_passphrase = false;
|
| + info->remembered = true;
|
| + } else if (flags & FLAG_WIFI) {
|
| + WifiNetwork wifi;
|
| + bool found = cros->FindWifiNetworkByPath(
|
| + menu_items_[index].wireless_path, &wifi);
|
| + if (found) {
|
| + info->network_type = kNetworkTypeWifi;
|
| + if (wifi.name() == cros->wifi_name()) {
|
| + if (cros->wifi_connected()) {
|
| + info->status = kNetworkStatusConnected;
|
| + info->message = l10n_util::GetStringUTF8(
|
| + IDS_STATUSBAR_NETWORK_DEVICE_CONNECTED);
|
| + } else if (cros->wifi_connecting()) {
|
| + info->status = kNetworkStatusConnecting;
|
| + // TODO(stevenjb): Eliminate status message, or localize properly.
|
| + info->message = l10n_util::GetStringUTF8(
|
| + IDS_STATUSBAR_NETWORK_DEVICE_CONNECTING)
|
| + + ": " + wifi.GetStateString();
|
| + } else if (wifi.state() == STATE_FAILURE) {
|
| + info->status = kNetworkStatusError;
|
| + info->message = wifi.GetErrorString();
|
| + } 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();
|
| + info->remembered = wifi.favorite();
|
| + } else {
|
| + res = false; // Network not found, hide entry.
|
| + }
|
| + } else if (flags & FLAG_CELLULAR) {
|
| + CellularNetwork cellular;
|
| + bool found = cros->FindCellularNetworkByPath(
|
| + menu_items_[index].wireless_path, &cellular);
|
| + if (found) {
|
| + info->network_type = kNetworkTypeCellular;
|
| + if (cellular.name() == cros->cellular_name()) {
|
| + if (cros->cellular_connected()) {
|
| + info->status = kNetworkStatusConnected;
|
| + info->message = l10n_util::GetStringUTF8(
|
| + IDS_STATUSBAR_NETWORK_DEVICE_CONNECTED);
|
| + } else if (cros->cellular_connecting()) {
|
| + // TODO(stevenjb): Eliminate status message, or localize properly.
|
| + info->status = kNetworkStatusConnecting;
|
| + info->message = l10n_util::GetStringUTF8(
|
| + IDS_STATUSBAR_NETWORK_DEVICE_CONNECTING)
|
| + + ": " + cellular.GetStateString();
|
| + } else if (cellular.state() == STATE_FAILURE) {
|
| + info->status = kNetworkStatusError;
|
| + info->message = cellular.GetErrorString();
|
| + } else {
|
| + info->status = kNetworkStatusDisconnected;
|
| + info->message = l10n_util::GetStringUTF8(
|
| + IDS_STATUSBAR_NETWORK_DEVICE_DISCONNECTED);
|
| + }
|
| + }
|
| + info->ip_address = cellular.ip_address();
|
| + info->need_passphrase = false;
|
| + info->remembered = true;
|
| + } else {
|
| + res = false; // Network not found, hide entry.
|
| + }
|
| + } else if (flags & FLAG_OTHER_NETWORK) {
|
| + info->network_type = kNetworkTypeOther;
|
| + info->need_passphrase = true;
|
| + info->remembered = true;
|
| + } else {
|
| + // Not a network, e.g options, separator.
|
| + }
|
| + return res;
|
| +}
|
| +
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // NetworkMenu, menus::MenuModel implementation:
|
|
|
| @@ -205,11 +307,11 @@ void NetworkMenu::ActivatedAt(int index) {
|
| void NetworkMenu::SetFirstLevelMenuWidth(int width) {
|
| min_width_ = width;
|
| // This actually has no effect since menu is rebuilt before showing.
|
| - network_menu_.SetMinimumWidth(width);
|
| + network_menu_->SetMinimumWidth(width);
|
| }
|
|
|
| void NetworkMenu::CancelMenu() {
|
| - network_menu_.CancelMenu();
|
| + network_menu_->CancelMenu();
|
| }
|
|
|
| // static
|
| @@ -275,15 +377,15 @@ void NetworkMenu::RunMenu(views::View* source, const gfx::Point& pt) {
|
| cros->RequestWifiScan();
|
| cros->UpdateSystemInfo();
|
| InitMenuItems();
|
| - network_menu_.Rebuild();
|
| - network_menu_.UpdateStates();
|
| + 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_|.
|
| if (min_width_ != -1)
|
| - network_menu_.SetMinimumWidth(min_width_);
|
| + network_menu_->SetMinimumWidth(min_width_);
|
| refreshing_menu_ = false;
|
| - network_menu_.RunMenuAt(pt, views::Menu2::ALIGN_TOPRIGHT);
|
| + network_menu_->RunMenuAt(pt, views::Menu2::ALIGN_TOPRIGHT);
|
| }
|
|
|
| void NetworkMenu::InitMenuItems() {
|
| @@ -383,13 +485,6 @@ void NetworkMenu::InitMenuItems() {
|
| // Separator.
|
| menu_items_.push_back(MenuItem());
|
|
|
| - // IP address
|
| - if (cros->Connected()) {
|
| - menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND,
|
| - ASCIIToUTF16(cros->IPAddress()), SkBitmap(),
|
| - std::string(), FLAG_DISABLED));
|
| - }
|
| -
|
| // Network settings.
|
| if (ShouldOpenButtonOptions()) {
|
| label =
|
|
|