diff options
author | chocobo@chromium.org <chocobo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-18 00:52:29 +0000 |
---|---|---|
committer | chocobo@chromium.org <chocobo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-18 00:52:29 +0000 |
commit | 9e320296cc530b4f2be86be9b26047d504372920 (patch) | |
tree | c3807248852b1442aaa4e49c5039c7f341f29eaa /chrome/browser/chromeos/status | |
parent | 599490bc824bbff9968067dac44a4347122da9c2 (diff) | |
download | chromium_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.cc | 31 | ||||
-rw-r--r-- | chrome/browser/chromeos/status/network_menu_button.h | 4 |
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_; |