summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorchocobo@chromium.org <chocobo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-12-16 00:15:19 +0000
committerchocobo@chromium.org <chocobo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-12-16 00:15:19 +0000
commitd05301aa43b2f9358e69262151fc521fca6db57a (patch)
tree405e8e124457180ddd9ca70fe6f84de8b906c5b7
parenteea8fd55353c798c2e58351be37dec3b5d69595b (diff)
downloadchromium_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.grd3
-rw-r--r--chrome/browser/chromeos/network_library.cc30
-rw-r--r--chrome/browser/chromeos/network_library.h6
-rw-r--r--chrome/browser/chromeos/network_menu_button.cc92
-rw-r--r--chrome/browser/chromeos/network_menu_button.h1
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 {