diff options
author | chocobo@chromium.org <chocobo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-16 00:15:19 +0000 |
---|---|---|
committer | chocobo@chromium.org <chocobo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-12-16 00:15:19 +0000 |
commit | d05301aa43b2f9358e69262151fc521fca6db57a (patch) | |
tree | 405e8e124457180ddd9ca70fe6f84de8b906c5b7 | |
parent | eea8fd55353c798c2e58351be37dec3b5d69595b (diff) | |
download | chromium_src-d05301aa43b2f9358e69262151fc521fca6db57a.zip chromium_src-d05301aa43b2f9358e69262151fc521fca6db57a.tar.gz chromium_src-d05301aa43b2f9358e69262151fc521fca6db57a.tar.bz2 |
Add offline mode selection for ChromeOS
BUG=568
TEST=none
Review URL: http://codereview.chromium.org/504008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@34627 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/app/generated_resources.grd | 3 | ||||
-rw-r--r-- | chrome/browser/chromeos/network_library.cc | 30 | ||||
-rw-r--r-- | chrome/browser/chromeos/network_library.h | 6 | ||||
-rw-r--r-- | chrome/browser/chromeos/network_menu_button.cc | 92 | ||||
-rw-r--r-- | chrome/browser/chromeos/network_menu_button.h | 1 |
5 files changed, 93 insertions, 39 deletions
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd index e3aefd0..4b6485e 100644 --- a/chrome/app/generated_resources.grd +++ b/chrome/app/generated_resources.grd @@ -6144,6 +6144,9 @@ Keep your key file in a safe place. You will need it to create new versions of y <message name="IDS_STATUSBAR_NETWORK_MENU_ITEM_INDENT" desc="A menu item label with an indentation. For left-to-right languages, we use 3 spaces on the left."> ''' <ph name="LABEL">$1<ex>Wifi SSID</ex></ph>''' </message> + <message name="IDS_STATUSBAR_NETWORK_OFFLINE_MODE" desc="The offline mode."> + Offline mode + </message> <message name="IDS_STATUSBAR_NO_NETWORKS_MESSAGE" desc="No networks are available"> No networks are available </message> diff --git a/chrome/browser/chromeos/network_library.cc b/chrome/browser/chromeos/network_library.cc index b1068b5..828e899 100644 --- a/chrome/browser/chromeos/network_library.cc +++ b/chrome/browser/chromeos/network_library.cc @@ -29,7 +29,8 @@ const int NetworkLibrary::kNetworkTrafficeTimerSecs = 1; NetworkLibrary::NetworkLibrary() : traffic_type_(0), - network_devices_(0) { + network_devices_(0), + offline_mode_(false) { if (CrosLibrary::EnsureLoaded()) { Init(); } @@ -120,6 +121,25 @@ void NetworkLibrary::EnableWifiNetworkDevice(bool enable) { EnableNetworkDevice(chromeos::TYPE_WIFI, enable); } +void NetworkLibrary::EnableOfflineMode(bool enable) { + if (!CrosLibrary::EnsureLoaded()) + return; + + // If network device is already enabled/disabled, then don't do anything. + if (enable && offline_mode_) { + LOG(INFO) << "Trying to enable offline mode when it's already enabled. "; + return; + } + if (!enable && !offline_mode_) { + LOG(INFO) << "Trying to disable offline mode when it's already disabled. "; + return; + } + + if (chromeos::SetOfflineMode(enable)) { + offline_mode_ = enable; + } +} + // static void NetworkLibrary::NetworkStatusChangedHandler(void* object, const chromeos::ServiceStatus& service_status) { @@ -176,8 +196,14 @@ void NetworkLibrary::Init() { // Now, register to receive updates on network status. network_status_connection_ = chromeos::MonitorNetworkStatus( &NetworkStatusChangedHandler, this); - // Get the enabled network devices. + // Get the enabled network devices bit flag. If we get a -1, then that means + // offline mode is on. So all devices are disabled. This happens when offline + // mode is persisted during a reboot and Chrome starts up with it on. network_devices_ = chromeos::GetEnabledNetworkDevices(); + if (network_devices_ == -1) { + offline_mode_ = true; + network_devices_ = 0; + } } void NetworkLibrary::EnableNetworkDevice(chromeos::ConnectionType device, diff --git a/chrome/browser/chromeos/network_library.h b/chrome/browser/chromeos/network_library.h index b313ced..021fd7d 100644 --- a/chrome/browser/chromeos/network_library.h +++ b/chrome/browser/chromeos/network_library.h @@ -115,6 +115,7 @@ class NetworkLibrary : public URLRequestJobTracker::JobObserver { bool ethernet_enabled() const { return network_devices_ & TYPE_ETHERNET; } bool wifi_enabled() const { return network_devices_ & TYPE_WIFI; } + bool offline_mode() const { return offline_mode_; } // Enables/disables the ethernet network device. void EnableEthernetNetworkDevice(bool enable); @@ -122,6 +123,9 @@ class NetworkLibrary : public URLRequestJobTracker::JobObserver { // Enables/disables the wifi network device. void EnableWifiNetworkDevice(bool enable); + // Enables/disables offline mode. + void EnableOfflineMode(bool enable); + private: friend struct DefaultSingletonTraits<NetworkLibrary>; @@ -196,6 +200,8 @@ class NetworkLibrary : public URLRequestJobTracker::JobObserver { // ConnectionTypes. int network_devices_; + bool offline_mode_; + DISALLOW_COPY_AND_ASSIGN(NetworkLibrary); }; diff --git a/chrome/browser/chromeos/network_menu_button.cc b/chrome/browser/chromeos/network_menu_button.cc index bd69598..92c6845 100644 --- a/chrome/browser/chromeos/network_menu_button.cc +++ b/chrome/browser/chromeos/network_menu_button.cc @@ -115,6 +115,8 @@ void NetworkMenuButton::ActivatedAt(int index) { cros->EnableEthernetNetworkDevice(!cros->ethernet_enabled()); } else if (menu_items_[index].flags & FLAG_TOGGLE_WIFI) { cros->EnableWifiNetworkDevice(!cros->wifi_enabled()); + } else if (menu_items_[index].flags & FLAG_TOGGLE_OFFLINE) { + cros->EnableOfflineMode(!cros->offline_mode()); } else { activated_wifi_network_ = menu_items_[index].wifi_network; @@ -332,7 +334,7 @@ void NetworkMenuButton::InitMenuItems() { menu_items_.clear(); // Populate our MenuItems with the current list of wifi networks. NetworkLibrary* cros = NetworkLibrary::Get(); - const WifiNetworkVector& networks = cros->wifi_networks(); + bool offline_mode = cros->offline_mode(); // Wifi: Status. int status = IDS_STATUSBAR_NETWORK_DEVICE_DISABLED; @@ -353,41 +355,46 @@ void NetworkMenuButton::InitMenuItems() { icon, WifiNetwork(), FLAG_DISABLED)); // Turn Wifi Off. - label = cros->wifi_enabled() ? - l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_DEVICE_DISABLE, - l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_WIFI)) : - l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ENABLE, - l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_WIFI)); - menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, - SkBitmap(), WifiNetwork(), FLAG_TOGGLE_WIFI)); - - // Wifi networks ssids. - if (networks.empty()) { - // No networks available message. - label = l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_MENU_ITEM_INDENT, - l10n_util::GetStringUTF16(IDS_STATUSBAR_NO_NETWORKS_MESSAGE)); + if (!offline_mode) { + label = cros->wifi_enabled() ? + l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_DEVICE_DISABLE, + l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_WIFI)) : + l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ENABLE, + l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_WIFI)); menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, - SkBitmap(), WifiNetwork(), FLAG_DISABLED)); - } else { - for (size_t i = 0; i < networks.size(); ++i) { - label = l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_MENU_ITEM_INDENT, - ASCIIToUTF16(networks[i].ssid)); - if (networks[i].ssid == cros->wifi_ssid()) { - menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_CHECK, label, - SkBitmap(), networks[i], 0)); - } else { - menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, - SkBitmap(), networks[i], 0)); - // TODO(chocobo): Once we have better icons and more reliable strength - // data, show icons for wifi ssids. + SkBitmap(), WifiNetwork(), FLAG_TOGGLE_WIFI)); + + const WifiNetworkVector& networks = cros->wifi_networks(); + // Wifi networks ssids. + if (networks.empty()) { + // No networks available message. + label = + l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_MENU_ITEM_INDENT, + l10n_util::GetStringUTF16(IDS_STATUSBAR_NO_NETWORKS_MESSAGE)); + menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, + SkBitmap(), WifiNetwork(), FLAG_DISABLED)); + } else { + for (size_t i = 0; i < networks.size(); ++i) { + label = + l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_MENU_ITEM_INDENT, + ASCIIToUTF16(networks[i].ssid)); + if (networks[i].ssid == cros->wifi_ssid()) { + menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_CHECK, label, + SkBitmap(), networks[i], 0)); + } else { + menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, + SkBitmap(), networks[i], 0)); + // TODO(chocobo): Once we have better icons and more reliable strength + // data, show icons for wifi ssids. // menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, // IconForWifiStrength(networks[i].strength), networks[i], 0)); + } } } - } - // Separator. - menu_items_.push_back(MenuItem()); + // Separator. + menu_items_.push_back(MenuItem()); + } // Ethernet: Status. status = IDS_STATUSBAR_NETWORK_DEVICE_DISABLED; @@ -406,13 +413,24 @@ void NetworkMenuButton::InitMenuItems() { icon, WifiNetwork(), FLAG_DISABLED)); // Turn Ethernet Off. - label = cros->ethernet_enabled() ? - l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_DEVICE_DISABLE, - l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET)) : - l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ENABLE, - l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET)); - menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, - SkBitmap(), WifiNetwork(), FLAG_TOGGLE_ETHERNET)); + if (!offline_mode) { + label = cros->ethernet_enabled() ? + l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_DEVICE_DISABLE, + l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET)) : + l10n_util::GetStringFUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ENABLE, + l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET)); + menu_items_.push_back(MenuItem(menus::MenuModel::TYPE_COMMAND, label, + SkBitmap(), WifiNetwork(), FLAG_TOGGLE_ETHERNET)); + + // Separator. + menu_items_.push_back(MenuItem()); + } + + // Offline mode. + menu_items_.push_back(MenuItem(offline_mode ? + menus::MenuModel::TYPE_CHECK : menus::MenuModel::TYPE_COMMAND, + l10n_util::GetStringUTF16(IDS_STATUSBAR_NETWORK_OFFLINE_MODE), + SkBitmap(), WifiNetwork(), FLAG_TOGGLE_OFFLINE)); } } // namespace chromeos diff --git a/chrome/browser/chromeos/network_menu_button.h b/chrome/browser/chromeos/network_menu_button.h index eb9479b..c63a29b 100644 --- a/chrome/browser/chromeos/network_menu_button.h +++ b/chrome/browser/chromeos/network_menu_button.h @@ -94,6 +94,7 @@ class NetworkMenuButton : public StatusAreaButton, FLAG_DISABLED = 0x0001, FLAG_TOGGLE_ETHERNET = 0x0010, FLAG_TOGGLE_WIFI = 0x0100, + FLAG_TOGGLE_OFFLINE = 0x1000 }; struct MenuItem { |