Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(765)

Unified Diff: chrome/browser/chromeos/status/network_menu.cc

Issue 6899025: Show hardware addresses for wifi and ethernet networks. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: nn Created 9 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 524e44d11c1de8644cb9a3d3359f40cdd99d9f05..47c9d29e99398726f3c4c92d292177cf9b66d3fd 100644
--- a/chrome/browser/chromeos/status/network_menu.cc
+++ b/chrome/browser/chromeos/status/network_menu.cc
@@ -30,19 +30,18 @@
namespace chromeos {
-class MainMenuModel : public NetworkMenuModel {
+class MoreMenuModel : public NetworkMenuModel {
public:
- explicit MainMenuModel(NetworkMenu* owner);
- virtual ~MainMenuModel() {}
+ explicit MoreMenuModel(NetworkMenu* owner);
+ virtual ~MoreMenuModel() {}
// NetworkMenuModel implementation.
virtual void InitMenuItems(bool is_browser_mode,
bool should_open_button_options);
private:
- scoped_ptr<NetworkMenuModel> vpn_menu_model_;
-
- DISALLOW_COPY_AND_ASSIGN(MainMenuModel);
+ friend class MainMenuModel;
+ DISALLOW_COPY_AND_ASSIGN(MoreMenuModel);
};
class VPNMenuModel : public NetworkMenuModel {
@@ -60,6 +59,22 @@ class VPNMenuModel : public NetworkMenuModel {
DISALLOW_COPY_AND_ASSIGN(VPNMenuModel);
};
+class MainMenuModel : public NetworkMenuModel {
+ public:
+ explicit MainMenuModel(NetworkMenu* owner);
+ virtual ~MainMenuModel() {}
+
+ // NetworkMenuModel implementation.
+ virtual void InitMenuItems(bool is_browser_mode,
+ bool should_open_button_options);
+
+ private:
+ scoped_ptr<NetworkMenuModel> vpn_menu_model_;
+ scoped_ptr<MoreMenuModel> more_menu_model_;
+
+ DISALLOW_COPY_AND_ASSIGN(MainMenuModel);
+};
+
////////////////////////////////////////////////////////////////////////////////
// NetworkMenuModel, public methods:
@@ -289,8 +304,9 @@ void NetworkMenuModel::ShowOtherCellular() const {
// MainMenuModel
MainMenuModel::MainMenuModel(NetworkMenu* owner)
- : NetworkMenuModel(owner) {
- vpn_menu_model_.reset(new VPNMenuModel(owner));
+ : NetworkMenuModel(owner),
+ vpn_menu_model_(new VPNMenuModel(owner)),
+ more_menu_model_(new MoreMenuModel(owner)) {
}
void MainMenuModel::InitMenuItems(bool is_browser_mode,
@@ -508,7 +524,7 @@ void MainMenuModel::InitMenuItems(bool is_browser_mode,
ui::MenuModel::TYPE_SUBMENU,
l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_PRIVATE_NETWORKS),
VPNMenuModel::IconForDisplay(connected_network),
- vpn_menu_model_.get(), FLAG_PRIVATE_NETWORKS));
+ vpn_menu_model_.get(), FLAG_NONE));
}
}
@@ -561,32 +577,37 @@ void MainMenuModel::InitMenuItems(bool is_browser_mode,
// l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_OFFLINE_MODE),
// SkBitmap(), std::string(), FLAG_TOGGLE_OFFLINE));
- bool connected = cros->Connected(); // always call for test expectations.
- bool oobe = !should_open_button_options; // we don't show options for OOBE.
- // Network settings. (And IP Address)
- if (!oobe) {
- menu_items_.push_back(MenuItem()); // Separator
-
- if (connected) {
- std::string ip_address = cros->IPAddress();
- if (!ip_address.empty()) {
- menu_items_.push_back(MenuItem(ui::MenuModel::TYPE_COMMAND,
- ASCIIToUTF16(cros->IPAddress()), SkBitmap(), std::string(),
- FLAG_DISABLED));
- }
+ // Additional links like:
+ // * Network settings;
+ // * IP Address on active interface;
+ // * Hardware addresses for wifi and ethernet.
+ menu_items_.push_back(MenuItem()); // Separator
+ more_menu_model_->InitMenuItems(
+ is_browser_mode, should_open_button_options);
+ if (is_browser_mode) {
+ menu_items_.insert(
+ menu_items_.end(),
+ more_menu_model_->menu_items_.begin(),
+ more_menu_model_->menu_items_.end());
+ } else {
+ if (!more_menu_model_->menu_items_.empty()) {
+ menu_items_.push_back(MenuItem(
+ ui::MenuModel::TYPE_SUBMENU,
+ l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_MORE),
+ SkBitmap(), more_menu_model_.get(), FLAG_NONE));
}
-
- label = l10n_util::GetStringUTF16(is_browser_mode ?
- IDS_STATUSBAR_NETWORK_OPEN_OPTIONS_DIALOG :
- IDS_STATUSBAR_NETWORK_OPEN_PROXY_SETTINGS_DIALOG);
- menu_items_.push_back(MenuItem(ui::MenuModel::TYPE_COMMAND, label,
- SkBitmap(), std::string(), FLAG_OPTIONS));
}
// Recursively call each submenu to populate its own menu items.
for (size_t i = 0; i < menu_items_.size(); ++i) {
- if (menu_items_[i].type == ui::MenuModel::TYPE_SUBMENU &&
- menu_items_[i].sub_menu_model) {
+ if (menu_items_[i].type == ui::MenuModel::TYPE_SUBMENU) {
+ NetworkMenuModel* model = menu_items_[i].sub_menu_model;
+ if (model == NULL)
+ continue;
+ if (model == more_menu_model_.get()) {
+ // This submenu is already initialized.
+ continue;
+ }
stevenjb 2011/04/26 17:05:08 This was designed to be general purpose, but since
Denis Lagno 2011/04/26 18:04:09 that's reasonable. Done.
menu_items_[i].sub_menu_model->InitMenuItems(is_browser_mode,
should_open_button_options);
}
@@ -702,6 +723,79 @@ SkBitmap VPNMenuModel::IconForDisplay(const Network* network) {
}
////////////////////////////////////////////////////////////////////////////////
+// MoreMenuModel
+
+MoreMenuModel::MoreMenuModel(NetworkMenu* owner)
+ : NetworkMenuModel(owner) {
+}
+
+void MoreMenuModel::InitMenuItems(
+ bool is_browser_mode, bool should_open_button_options) {
+ // This gets called on initialization, so any changes should be reflected
+ // in CrosMock::SetNetworkLibraryStatusAreaExpectations().
+
+ menu_items_.clear();
+ MenuItemVector link_items;
+ MenuItemVector address_items;
+
+ NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary();
+ bool oobe = !should_open_button_options; // we don't show options for OOBE.
+ if (!oobe) {
+ string16 label = l10n_util::GetStringUTF16(is_browser_mode ?
+ IDS_STATUSBAR_NETWORK_OPEN_OPTIONS_DIALOG :
+ IDS_STATUSBAR_NETWORK_OPEN_PROXY_SETTINGS_DIALOG);
+ link_items.push_back(MenuItem(ui::MenuModel::TYPE_COMMAND, label,
+ SkBitmap(), std::string(), FLAG_OPTIONS));
+ }
+
+ bool connected = cros->Connected(); // always call for test expectations.
+ if (connected) {
+ std::string ip_address = cros->IPAddress();
+ if (!ip_address.empty()) {
+ address_items.push_back(MenuItem(ui::MenuModel::TYPE_COMMAND,
+ ASCIIToUTF16(cros->IPAddress()), SkBitmap(), std::string(),
+ FLAG_DISABLED));
+ }
+ }
+
+ if (!is_browser_mode) {
+ const NetworkDevice* ether = cros->FindEthernetDevice();
+ if (ether) {
+ std::string hardware_address;
+ cros->GetIPConfigs(ether->device_path(), &hardware_address,
+ NetworkLibrary::FORMAT_COLON_SEPARATED_HEX);
+ if (!hardware_address.empty()) {
+ std::string label = l10n_util::GetStringUTF8(
+ IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET) + " " + hardware_address;
+ address_items.push_back(MenuItem(ui::MenuModel::TYPE_COMMAND,
+ UTF8ToUTF16(label), SkBitmap(), std::string(), FLAG_DISABLED));
+ }
+ }
+
+ if (cros->wifi_enabled()) {
+ const NetworkDevice* wifi = cros->FindWifiDevice();
+ if (wifi) {
+ std::string hardware_address;
+ cros->GetIPConfigs(wifi->device_path(),
+ &hardware_address, NetworkLibrary::FORMAT_COLON_SEPARATED_HEX);
+ if (!hardware_address.empty()) {
+ std::string label = l10n_util::GetStringUTF8(
+ IDS_STATUSBAR_NETWORK_DEVICE_WIFI) + " " + hardware_address;
+ address_items.push_back(MenuItem(ui::MenuModel::TYPE_COMMAND,
+ UTF8ToUTF16(label), SkBitmap(), std::string(), FLAG_DISABLED));
+ }
+ }
+ }
+ }
+
+ menu_items_ = link_items;
+ if (!menu_items_.empty() && address_items.size() > 1)
+ menu_items_.push_back(MenuItem()); // Separator
+ menu_items_.insert(menu_items_.end(),
+ address_items.begin(), address_items.end());
+}
+
+////////////////////////////////////////////////////////////////////////////////
// NetworkMenu
// static
@@ -749,8 +843,7 @@ SkBitmap NetworkMenu::kAnimatingImages[kNumAnimatingImages];
// static
SkBitmap NetworkMenu::kAnimatingImagesBlack[kNumAnimatingImages];
-NetworkMenu::NetworkMenu()
- : min_width_(-1) {
+NetworkMenu::NetworkMenu() : min_width_(-1) {
main_menu_model_.reset(new MainMenuModel(this));
network_menu_.reset(new views::Menu2(main_menu_model_.get()));
}
@@ -993,3 +1086,5 @@ void NetworkMenu::RunMenu(views::View* source, const gfx::Point& pt) {
}
} // namespace chromeos
+
+

Powered by Google App Engine
This is Rietveld 408576698