| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/chromeos/status/network_menu.h" | 5 #include "chrome/browser/chromeos/status/network_menu.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| 11 #include "base/logging.h" | 11 #include "base/logging.h" |
| 12 #include "base/stringprintf.h" | 12 #include "base/stringprintf.h" |
| 13 #include "base/utf_string_conversions.h" | 13 #include "base/utf_string_conversions.h" |
| 14 #include "chrome/browser/chromeos/choose_mobile_network_dialog.h" | 14 #include "chrome/browser/chromeos/choose_mobile_network_dialog.h" |
| 15 #include "chrome/browser/chromeos/cros/cros_library.h" | 15 #include "chrome/browser/chromeos/cros/cros_library.h" |
| 16 #include "chrome/browser/chromeos/enrollment_dialog_view.h" | 16 #include "chrome/browser/chromeos/enrollment_dialog_view.h" |
| 17 #include "chrome/browser/chromeos/login/user_manager.h" | 17 #include "chrome/browser/chromeos/login/user_manager.h" |
| 18 #include "chrome/browser/chromeos/mobile_config.h" | 18 #include "chrome/browser/chromeos/mobile_config.h" |
| 19 #include "chrome/browser/chromeos/options/network_config_view.h" | 19 #include "chrome/browser/chromeos/options/network_config_view.h" |
| 20 #include "chrome/browser/chromeos/sim_dialog_delegate.h" | 20 #include "chrome/browser/chromeos/sim_dialog_delegate.h" |
| 21 #include "chrome/browser/chromeos/status/network_menu_icon.h" | 21 #include "chrome/browser/chromeos/status/network_menu_icon.h" |
| 22 #include "chrome/browser/chromeos/status/status_area_view_chromeos.h" | |
| 23 #include "chrome/browser/defaults.h" | 22 #include "chrome/browser/defaults.h" |
| 24 #include "chrome/browser/profiles/profile_manager.h" | 23 #include "chrome/browser/profiles/profile_manager.h" |
| 25 #include "chrome/browser/ui/browser.h" | 24 #include "chrome/browser/ui/browser.h" |
| 26 #include "chrome/browser/ui/dialog_style.h" | 25 #include "chrome/browser/ui/dialog_style.h" |
| 27 #include "chrome/browser/ui/views/window.h" | 26 #include "chrome/browser/ui/views/window.h" |
| 28 #include "chrome/common/chrome_switches.h" | 27 #include "chrome/common/chrome_switches.h" |
| 29 #include "chrome/common/url_constants.h" | 28 #include "chrome/common/url_constants.h" |
| 30 #include "content/public/browser/browser_thread.h" | 29 #include "content/public/browser/browser_thread.h" |
| 31 #include "grit/generated_resources.h" | 30 #include "grit/generated_resources.h" |
| 32 #include "grit/theme_resources.h" | 31 #include "grit/theme_resources.h" |
| (...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 620 if (cellular_available && cellular_enabled) { | 619 if (cellular_available && cellular_enabled) { |
| 621 const CellularNetworkVector& cell_networks = cros->cellular_networks(); | 620 const CellularNetworkVector& cell_networks = cros->cellular_networks(); |
| 622 const CellularNetwork* active_cellular = cros->cellular_network(); | 621 const CellularNetwork* active_cellular = cros->cellular_network(); |
| 623 | 622 |
| 624 bool separator_added = false; | 623 bool separator_added = false; |
| 625 // List Cellular networks. | 624 // List Cellular networks. |
| 626 for (size_t i = 0; i < cell_networks.size(); ++i) { | 625 for (size_t i = 0; i < cell_networks.size(); ++i) { |
| 627 chromeos::ActivationState activation_state = | 626 chromeos::ActivationState activation_state = |
| 628 cell_networks[i]->activation_state(); | 627 cell_networks[i]->activation_state(); |
| 629 | 628 |
| 630 // If we are on the OOBE/login screen, do not show activating 3G option. | 629 // This is currently only used in the OOBE/login screen, do not show |
| 631 if (!StatusAreaViewChromeos::IsBrowserMode() && | 630 // activating 3G option. |
| 632 activation_state != ACTIVATION_STATE_ACTIVATED) | 631 if (activation_state != ACTIVATION_STATE_ACTIVATED) |
| 633 continue; | 632 continue; |
| 634 | 633 |
| 635 // Ampersand is a valid character in a network name, but menu2 uses it | 634 // Ampersand is a valid character in a network name, but menu2 uses it |
| 636 // to mark "mnemonics" for keyboard shortcuts. http://crosbug.com/14697 | 635 // to mark "mnemonics" for keyboard shortcuts. http://crosbug.com/14697 |
| 637 std::string network_name = EscapeAmpersands(cell_networks[i]->name()); | 636 std::string network_name = EscapeAmpersands(cell_networks[i]->name()); |
| 638 if (activation_state == ACTIVATION_STATE_NOT_ACTIVATED || | 637 if (activation_state == ACTIVATION_STATE_NOT_ACTIVATED || |
| 639 activation_state == ACTIVATION_STATE_PARTIALLY_ACTIVATED) { | 638 activation_state == ACTIVATION_STATE_PARTIALLY_ACTIVATED) { |
| 640 label = l10n_util::GetStringFUTF16( | 639 label = l10n_util::GetStringFUTF16( |
| 641 IDS_STATUSBAR_NETWORK_DEVICE_ACTIVATE, | 640 IDS_STATUSBAR_NETWORK_DEVICE_ACTIVATE, |
| 642 UTF8ToUTF16(network_name)); | 641 UTF8ToUTF16(network_name)); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 687 if (label.length()) { | 686 if (label.length()) { |
| 688 menu_items_.push_back( | 687 menu_items_.push_back( |
| 689 MenuItem(ui::MenuModel::TYPE_COMMAND, | 688 MenuItem(ui::MenuModel::TYPE_COMMAND, |
| 690 label, SkBitmap(), | 689 label, SkBitmap(), |
| 691 std::string(), FLAG_DISABLED)); | 690 std::string(), FLAG_DISABLED)); |
| 692 } | 691 } |
| 693 } | 692 } |
| 694 } | 693 } |
| 695 const NetworkDevice* cellular_device = cros->FindCellularDevice(); | 694 const NetworkDevice* cellular_device = cros->FindCellularDevice(); |
| 696 if (cellular_device) { | 695 if (cellular_device) { |
| 697 // Add "View Account" with top up URL if we know that. | 696 // NOTE: This is currently only used in login/OOBE screen. So do not add |
| 698 MobileConfig* config = MobileConfig::GetInstance(); | 697 // "View Account" with top up URL. |
| 699 if (StatusAreaViewChromeos::IsBrowserMode() && config->IsReady()) { | |
| 700 std::string carrier_id = cros->GetCellularHomeCarrierId(); | |
| 701 // If we don't have top up URL cached. | |
| 702 if (carrier_id != carrier_id_) { | |
| 703 // Mark that we've checked this carrier ID. | |
| 704 carrier_id_ = carrier_id; | |
| 705 top_up_url_.clear(); | |
| 706 const MobileConfig::Carrier* carrier = config->GetCarrier(carrier_id); | |
| 707 if (carrier && !carrier->top_up_url().empty()) | |
| 708 top_up_url_ = carrier->top_up_url(); | |
| 709 } | |
| 710 if (!top_up_url_.empty()) { | |
| 711 menu_items_.push_back(MenuItem( | |
| 712 ui::MenuModel::TYPE_COMMAND, | |
| 713 l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_VIEW_ACCOUNT), | |
| 714 SkBitmap(), | |
| 715 std::string(), FLAG_VIEW_ACCOUNT)); | |
| 716 } | |
| 717 } | |
| 718 | 698 |
| 719 if (cellular_device->support_network_scan()) { | 699 if (cellular_device->support_network_scan()) { |
| 720 // For GSM add mobile network scan. | 700 // For GSM add mobile network scan. |
| 721 if (!separator_added && !menu_items_.empty()) | 701 if (!separator_added && !menu_items_.empty()) |
| 722 menu_items_.push_back(MenuItem()); | 702 menu_items_.push_back(MenuItem()); |
| 723 | 703 |
| 724 menu_items_.push_back(MenuItem( | 704 menu_items_.push_back(MenuItem( |
| 725 ui::MenuModel::TYPE_COMMAND, | 705 ui::MenuModel::TYPE_COMMAND, |
| 726 l10n_util::GetStringUTF16( | 706 l10n_util::GetStringUTF16( |
| 727 IDS_OPTIONS_SETTINGS_OTHER_CELLULAR_NETWORKS), | 707 IDS_OPTIONS_SETTINGS_OTHER_CELLULAR_NETWORKS), |
| 728 NetworkMenuIcon::GetDisconnectedBitmap(NetworkMenuIcon::BARS, | 708 NetworkMenuIcon::GetDisconnectedBitmap(NetworkMenuIcon::BARS, |
| 729 NetworkMenuIcon::COLOR_DARK), | 709 NetworkMenuIcon::COLOR_DARK), |
| 730 std::string(), FLAG_ADD_CELLULAR)); | 710 std::string(), FLAG_ADD_CELLULAR)); |
| 731 } | 711 } |
| 732 } | 712 } |
| 733 } | 713 } |
| 734 | 714 |
| 735 // No networks available message. | 715 // No networks available message. |
| 736 if (menu_items_.empty()) { | 716 if (menu_items_.empty()) { |
| 737 label = l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_MENU_ITEM_INDENT, | 717 label = l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_MENU_ITEM_INDENT, |
| 738 l10n_util::GetStringUTF16(IDS_STATUSBAR_NO_NETWORKS_MESSAGE)); | 718 l10n_util::GetStringUTF16(IDS_STATUSBAR_NO_NETWORKS_MESSAGE)); |
| 739 menu_items_.push_back(MenuItem(ui::MenuModel::TYPE_COMMAND, label, | 719 menu_items_.push_back(MenuItem(ui::MenuModel::TYPE_COMMAND, label, |
| 740 SkBitmap(), std::string(), FLAG_DISABLED)); | 720 SkBitmap(), std::string(), FLAG_DISABLED)); |
| 741 } | 721 } |
| 742 | 722 |
| 743 // If we are logged in and there is a connected network or a connected VPN, | |
| 744 // add submenu for Private Networks. | |
| 745 if (StatusAreaViewChromeos::IsBrowserMode()) { | |
| 746 if (cros->connected_network() || cros->virtual_network_connected()) { | |
| 747 menu_items_.push_back(MenuItem()); // Separator | |
| 748 const SkBitmap icon = NetworkMenuIcon::GetVpnBitmap(); | |
| 749 menu_items_.push_back(MenuItem( | |
| 750 ui::MenuModel::TYPE_SUBMENU, | |
| 751 l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_PRIVATE_NETWORKS), | |
| 752 icon, vpn_menu_model_.get(), FLAG_NONE)); | |
| 753 vpn_menu_model_->InitMenuItems(should_open_button_options); | |
| 754 } | |
| 755 } | |
| 756 | |
| 757 bool show_wifi_scanning = wifi_available && cros->wifi_scanning(); | 723 bool show_wifi_scanning = wifi_available && cros->wifi_scanning(); |
| 758 // Do not show disable wifi during oobe | 724 // Do not show disable wifi during oobe |
| 759 bool show_toggle_wifi = wifi_available && | 725 bool show_toggle_wifi = wifi_available && |
| 760 (should_open_button_options || !wifi_enabled); | 726 (should_open_button_options || !wifi_enabled); |
| 761 // Do not show disable cellular during oobe | 727 // Do not show disable cellular during oobe |
| 762 bool show_toggle_cellular = cellular_available && | 728 bool show_toggle_cellular = cellular_available && |
| 763 (should_open_button_options || !cellular_enabled); | 729 (should_open_button_options || !cellular_enabled); |
| 764 | 730 |
| 765 if (show_wifi_scanning || show_toggle_wifi || show_toggle_cellular) { | 731 if (show_wifi_scanning || show_toggle_wifi || show_toggle_cellular) { |
| 766 menu_items_.push_back(MenuItem()); // Separator | 732 menu_items_.push_back(MenuItem()); // Separator |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 820 // l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_OFFLINE_MODE), | 786 // l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_OFFLINE_MODE), |
| 821 // SkBitmap(), std::string(), FLAG_TOGGLE_OFFLINE)); | 787 // SkBitmap(), std::string(), FLAG_TOGGLE_OFFLINE)); |
| 822 | 788 |
| 823 // Additional links like: | 789 // Additional links like: |
| 824 // * Network settings; | 790 // * Network settings; |
| 825 // * IP Address on active interface; | 791 // * IP Address on active interface; |
| 826 // * Hardware addresses for wifi and ethernet. | 792 // * Hardware addresses for wifi and ethernet. |
| 827 more_menu_model_->InitMenuItems(should_open_button_options); | 793 more_menu_model_->InitMenuItems(should_open_button_options); |
| 828 if (!more_menu_model_->menu_items().empty()) { | 794 if (!more_menu_model_->menu_items().empty()) { |
| 829 menu_items_.push_back(MenuItem()); // Separator | 795 menu_items_.push_back(MenuItem()); // Separator |
| 830 if (StatusAreaViewChromeos::IsBrowserMode()) { | 796 menu_items_.push_back(MenuItem( |
| 831 // In browser mode we do not want separate submenu, inline items. | 797 ui::MenuModel::TYPE_SUBMENU, |
| 832 menu_items_.insert( | 798 l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_MORE), |
| 833 menu_items_.end(), | 799 SkBitmap(), more_menu_model_.get(), FLAG_NONE)); |
| 834 more_menu_model_->menu_items().begin(), | |
| 835 more_menu_model_->menu_items().end()); | |
| 836 } else { | |
| 837 menu_items_.push_back(MenuItem( | |
| 838 ui::MenuModel::TYPE_SUBMENU, | |
| 839 l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_MORE), | |
| 840 SkBitmap(), more_menu_model_.get(), FLAG_NONE)); | |
| 841 } | |
| 842 } | 800 } |
| 843 } | 801 } |
| 844 | 802 |
| 845 int MainMenuModel::GetCommandIdAt(int index) const { | 803 int MainMenuModel::GetCommandIdAt(int index) const { |
| 846 return index + kMainIndexMask; | 804 return index + kMainIndexMask; |
| 847 } | 805 } |
| 848 | 806 |
| 849 //////////////////////////////////////////////////////////////////////////////// | 807 //////////////////////////////////////////////////////////////////////////////// |
| 850 // VPNMenuModel | 808 // VPNMenuModel |
| 851 | 809 |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 917 // in CrosMock::SetNetworkLibraryStatusAreaExpectations(). | 875 // in CrosMock::SetNetworkLibraryStatusAreaExpectations(). |
| 918 | 876 |
| 919 menu_items_.clear(); | 877 menu_items_.clear(); |
| 920 MenuItemVector link_items; | 878 MenuItemVector link_items; |
| 921 MenuItemVector address_items; | 879 MenuItemVector address_items; |
| 922 | 880 |
| 923 NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary(); | 881 NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary(); |
| 924 bool connected = cros->Connected(); // always call for test expectations. | 882 bool connected = cros->Connected(); // always call for test expectations. |
| 925 | 883 |
| 926 int message_id = -1; | 884 int message_id = -1; |
| 927 if (StatusAreaViewChromeos::IsBrowserMode()) | 885 if (connected) |
| 928 message_id = IDS_STATUSBAR_NETWORK_OPEN_OPTIONS_DIALOG; | |
| 929 else if (connected) | |
| 930 message_id = IDS_STATUSBAR_NETWORK_OPEN_PROXY_SETTINGS_DIALOG; | 886 message_id = IDS_STATUSBAR_NETWORK_OPEN_PROXY_SETTINGS_DIALOG; |
| 931 if (message_id != -1) { | 887 if (message_id != -1) { |
| 932 link_items.push_back(MenuItem(ui::MenuModel::TYPE_COMMAND, | 888 link_items.push_back(MenuItem(ui::MenuModel::TYPE_COMMAND, |
| 933 l10n_util::GetStringUTF16(message_id), | 889 l10n_util::GetStringUTF16(message_id), |
| 934 SkBitmap(), std::string(), FLAG_OPTIONS)); | 890 SkBitmap(), std::string(), FLAG_OPTIONS)); |
| 935 } | 891 } |
| 936 | 892 |
| 937 if (connected) { | 893 if (connected) { |
| 938 std::string ip_address = cros->IPAddress(); | 894 std::string ip_address = cros->IPAddress(); |
| 939 if (!ip_address.empty()) { | 895 if (!ip_address.empty()) { |
| 940 address_items.push_back(MenuItem(ui::MenuModel::TYPE_COMMAND, | 896 address_items.push_back(MenuItem(ui::MenuModel::TYPE_COMMAND, |
| 941 ASCIIToUTF16(cros->IPAddress()), SkBitmap(), std::string(), | 897 ASCIIToUTF16(cros->IPAddress()), SkBitmap(), std::string(), |
| 942 FLAG_DISABLED)); | 898 FLAG_DISABLED)); |
| 943 } | 899 } |
| 944 } | 900 } |
| 945 | 901 |
| 946 if (!StatusAreaViewChromeos::IsBrowserMode()) { | 902 const NetworkDevice* ether = cros->FindEthernetDevice(); |
| 947 const NetworkDevice* ether = cros->FindEthernetDevice(); | 903 if (ether) { |
| 948 if (ether) { | 904 std::string hardware_address; |
| 905 cros->GetIPConfigs(ether->device_path(), &hardware_address, |
| 906 NetworkLibrary::FORMAT_COLON_SEPARATED_HEX); |
| 907 if (!hardware_address.empty()) { |
| 908 std::string label = l10n_util::GetStringUTF8( |
| 909 IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET) + " " + hardware_address; |
| 910 address_items.push_back(MenuItem(ui::MenuModel::TYPE_COMMAND, |
| 911 UTF8ToUTF16(label), SkBitmap(), std::string(), FLAG_DISABLED)); |
| 912 } |
| 913 } |
| 914 |
| 915 if (cros->wifi_enabled()) { |
| 916 const NetworkDevice* wifi = cros->FindWifiDevice(); |
| 917 if (wifi) { |
| 949 std::string hardware_address; | 918 std::string hardware_address; |
| 950 cros->GetIPConfigs(ether->device_path(), &hardware_address, | 919 cros->GetIPConfigs(wifi->device_path(), |
| 951 NetworkLibrary::FORMAT_COLON_SEPARATED_HEX); | 920 &hardware_address, NetworkLibrary::FORMAT_COLON_SEPARATED_HEX); |
| 952 if (!hardware_address.empty()) { | 921 if (!hardware_address.empty()) { |
| 953 std::string label = l10n_util::GetStringUTF8( | 922 std::string label = l10n_util::GetStringUTF8( |
| 954 IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET) + " " + hardware_address; | 923 IDS_STATUSBAR_NETWORK_DEVICE_WIFI) + " " + hardware_address; |
| 955 address_items.push_back(MenuItem(ui::MenuModel::TYPE_COMMAND, | 924 address_items.push_back(MenuItem(ui::MenuModel::TYPE_COMMAND, |
| 956 UTF8ToUTF16(label), SkBitmap(), std::string(), FLAG_DISABLED)); | 925 UTF8ToUTF16(label), SkBitmap(), std::string(), FLAG_DISABLED)); |
| 957 } | 926 } |
| 958 } | 927 } |
| 959 | |
| 960 if (cros->wifi_enabled()) { | |
| 961 const NetworkDevice* wifi = cros->FindWifiDevice(); | |
| 962 if (wifi) { | |
| 963 std::string hardware_address; | |
| 964 cros->GetIPConfigs(wifi->device_path(), | |
| 965 &hardware_address, NetworkLibrary::FORMAT_COLON_SEPARATED_HEX); | |
| 966 if (!hardware_address.empty()) { | |
| 967 std::string label = l10n_util::GetStringUTF8( | |
| 968 IDS_STATUSBAR_NETWORK_DEVICE_WIFI) + " " + hardware_address; | |
| 969 address_items.push_back(MenuItem(ui::MenuModel::TYPE_COMMAND, | |
| 970 UTF8ToUTF16(label), SkBitmap(), std::string(), FLAG_DISABLED)); | |
| 971 } | |
| 972 } | |
| 973 } | |
| 974 } | 928 } |
| 975 | 929 |
| 976 menu_items_ = link_items; | 930 menu_items_ = link_items; |
| 977 if (!menu_items_.empty() && address_items.size() > 1) | 931 if (!menu_items_.empty() && address_items.size() > 1) |
| 978 menu_items_.push_back(MenuItem()); // Separator | 932 menu_items_.push_back(MenuItem()); // Separator |
| 979 menu_items_.insert(menu_items_.end(), | 933 menu_items_.insert(menu_items_.end(), |
| 980 address_items.begin(), address_items.end()); | 934 address_items.begin(), address_items.end()); |
| 981 } | 935 } |
| 982 | 936 |
| 983 int MoreMenuModel::GetCommandIdAt(int index) const { | 937 int MoreMenuModel::GetCommandIdAt(int index) const { |
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1127 | 1081 |
| 1128 void NetworkMenu::ShowOtherCellular() { | 1082 void NetworkMenu::ShowOtherCellular() { |
| 1129 ChooseMobileNetworkDialog::ShowDialog(delegate_->GetNativeWindow()); | 1083 ChooseMobileNetworkDialog::ShowDialog(delegate_->GetNativeWindow()); |
| 1130 } | 1084 } |
| 1131 | 1085 |
| 1132 bool NetworkMenu::ShouldHighlightNetwork(const Network* network) { | 1086 bool NetworkMenu::ShouldHighlightNetwork(const Network* network) { |
| 1133 return ::ShouldHighlightNetwork(network); | 1087 return ::ShouldHighlightNetwork(network); |
| 1134 } | 1088 } |
| 1135 | 1089 |
| 1136 } // namespace chromeos | 1090 } // namespace chromeos |
| OLD | NEW |