summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chromeos/status
diff options
context:
space:
mode:
authorchocobo@chromium.org <chocobo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-18 00:52:29 +0000
committerchocobo@chromium.org <chocobo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-18 00:52:29 +0000
commit9e320296cc530b4f2be86be9b26047d504372920 (patch)
treec3807248852b1442aaa4e49c5039c7f341f29eaa /chrome/browser/chromeos/status
parent599490bc824bbff9968067dac44a4347122da9c2 (diff)
downloadchromium_src-9e320296cc530b4f2be86be9b26047d504372920.zip
chromium_src-9e320296cc530b4f2be86be9b26047d504372920.tar.gz
chromium_src-9e320296cc530b4f2be86be9b26047d504372920.tar.bz2
Workaround bug in flimflam to fix active_network not being reported propertly causing ethernet icon to get stuck.
BUG=chromium-os:8785 TEST=manual. connect to both ethernet and wifi. unplug ethernet usb dongle. verify that the network icon when from wired to wireless. Review URL: http://codereview.chromium.org/5194002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@66558 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/chromeos/status')
-rw-r--r--chrome/browser/chromeos/status/network_menu_button.cc31
-rw-r--r--chrome/browser/chromeos/status/network_menu_button.h4
2 files changed, 20 insertions, 15 deletions
diff --git a/chrome/browser/chromeos/status/network_menu_button.cc b/chrome/browser/chromeos/status/network_menu_button.cc
index 89bc0a1..2a422d3 100644
--- a/chrome/browser/chromeos/status/network_menu_button.cc
+++ b/chrome/browser/chromeos/status/network_menu_button.cc
@@ -73,22 +73,7 @@ void NetworkMenuButton::DrawIcon(gfx::Canvas* canvas) {
void NetworkMenuButton::OnNetworkManagerChanged(NetworkLibrary* cros) {
ResourceBundle& rb = ResourceBundle::GetSharedInstance();
if (CrosLibrary::Get()->EnsureLoaded()) {
- // Add an observer for the active network, if any
const Network* network = cros->active_network();
- if (active_network_.empty() || network == NULL ||
- active_network_ != network->service_path()) {
- if (!active_network_.empty()) {
- cros->RemoveNetworkObserver(active_network_, this);
- }
- if (network != NULL) {
- cros->AddNetworkObserver(network->service_path(), this);
- }
- }
- if (network)
- active_network_ = network->service_path();
- else
- active_network_ = "";
-
if (cros->wifi_connecting() || cros->cellular_connecting()) {
// Start the connecting animation if not running.
if (!animation_connecting_.is_animating()) {
@@ -125,6 +110,7 @@ void NetworkMenuButton::OnNetworkManagerChanged(NetworkLibrary* cros) {
IDS_STATUSBAR_NETWORK_NO_NETWORK_TOOLTIP));
}
+ RefreshNetworkObserver(cros);
SchedulePaint();
UpdateMenu();
}
@@ -145,6 +131,7 @@ void NetworkMenuButton::OnNetworkChanged(NetworkLibrary* cros,
IDS_STATUSBAR_NETWORK_NO_NETWORK_TOOLTIP));
}
+ RefreshNetworkObserver(cros);
SchedulePaint();
UpdateMenu();
}
@@ -223,4 +210,18 @@ void NetworkMenuButton::SetNetworkBadge(NetworkLibrary* cros,
}
}
+void NetworkMenuButton::RefreshNetworkObserver(NetworkLibrary* cros) {
+ const Network* network = cros->active_network();
+ std::string new_network = network ? network->service_path() : std::string();
+ if (active_network_ != new_network) {
+ if (!active_network_.empty()) {
+ cros->RemoveNetworkObserver(active_network_, this);
+ }
+ if (!new_network.empty()) {
+ cros->AddNetworkObserver(new_network, this);
+ }
+ active_network_ = new_network;
+ }
+}
+
} // namespace chromeos
diff --git a/chrome/browser/chromeos/status/network_menu_button.h b/chrome/browser/chromeos/status/network_menu_button.h
index 208efe2..3dfe007 100644
--- a/chrome/browser/chromeos/status/network_menu_button.h
+++ b/chrome/browser/chromeos/status/network_menu_button.h
@@ -83,6 +83,10 @@ class NetworkMenuButton : public StatusAreaButton,
void SetNetworkIcon(const Network* network);
void SetNetworkBadge(NetworkLibrary* cros, const Network* network);
+ // Called when the active network has possibly changed. This will remove
+ // old network observer and add a network observer for the active network.
+ void RefreshNetworkObserver(NetworkLibrary* cros);
+
// The status area host,
StatusAreaHost* host_;