| Index: chrome/browser/chromeos/status/network_menu_button.cc
 | 
| ===================================================================
 | 
| --- chrome/browser/chromeos/status/network_menu_button.cc	(revision 64888)
 | 
| +++ chrome/browser/chromeos/status/network_menu_button.cc	(working copy)
 | 
| @@ -35,16 +35,12 @@
 | 
|        ALLOW_THIS_IN_INITIALIZER_LIST(animation_connecting_(this)) {
 | 
|    animation_connecting_.SetThrobDuration(kThrobDuration);
 | 
|    animation_connecting_.SetTweenType(Tween::EASE_IN_OUT);
 | 
| -  OnNetworkManagerChanged(CrosLibrary::Get()->GetNetworkLibrary());
 | 
| -  CrosLibrary::Get()->GetNetworkLibrary()->AddNetworkManagerObserver(this);
 | 
| -  CrosLibrary::Get()->GetNetworkLibrary()->AddCellularDataPlanObserver(this);
 | 
| +  NetworkChanged(CrosLibrary::Get()->GetNetworkLibrary());
 | 
| +  CrosLibrary::Get()->GetNetworkLibrary()->AddObserver(this);
 | 
|  }
 | 
|  
 | 
|  NetworkMenuButton::~NetworkMenuButton() {
 | 
| -  NetworkLibrary* netlib = CrosLibrary::Get()->GetNetworkLibrary();
 | 
| -  netlib->RemoveNetworkManagerObserver(this);
 | 
| -  netlib->RemoveObserverForAllNetworks(this);
 | 
| -  netlib->RemoveCellularDataPlanObserver(this);
 | 
| +  CrosLibrary::Get()->GetNetworkLibrary()->RemoveObserver(this);
 | 
|  }
 | 
|  
 | 
|  ////////////////////////////////////////////////////////////////////////////////
 | 
| @@ -77,27 +73,11 @@
 | 
|  }
 | 
|  
 | 
|  ////////////////////////////////////////////////////////////////////////////////
 | 
| -// NetworkMenuButton, NetworkLibrary::NetworkManagerObserver implementation:
 | 
| +// NetworkMenuButton, NetworkLibrary::Observer implementation:
 | 
|  
 | 
| -void NetworkMenuButton::OnNetworkManagerChanged(NetworkLibrary* cros) {
 | 
| +void NetworkMenuButton::NetworkChanged(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()) {
 | 
| @@ -118,35 +98,68 @@
 | 
|      } else {
 | 
|        // Stop connecting animation since we are not connecting.
 | 
|        animation_connecting_.Stop();
 | 
| -      if (!cros->Connected()) {
 | 
| +
 | 
| +      // Always show the higher priority connection first. Ethernet then wifi.
 | 
| +      if (cros->ethernet_connected()) {
 | 
| +        SetIcon(*rb.GetBitmapNamed(IDR_STATUSBAR_WIRED));
 | 
| +        SetTooltipText(
 | 
| +            l10n_util::GetStringF(
 | 
| +                IDS_STATUSBAR_NETWORK_CONNECTED_TOOLTIP,
 | 
| +                l10n_util::GetString(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET)));
 | 
| +      } else if (cros->wifi_connected()) {
 | 
| +        SetIcon(IconForNetworkStrength(
 | 
| +            cros->wifi_network()->strength(), false));
 | 
| +        SetTooltipText(l10n_util::GetStringF(
 | 
| +            IDS_STATUSBAR_NETWORK_CONNECTED_TOOLTIP,
 | 
| +            UTF8ToWide(cros->wifi_network()->name())));
 | 
| +      } else if (cros->cellular_connected()) {
 | 
| +        const CellularNetwork* cellular = cros->cellular_network();
 | 
| +        if (cellular->data_left() == CellularNetwork::DATA_NONE) {
 | 
| +          // If no data, then we show 0 bars.
 | 
| +          SetIcon(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_BARS0));
 | 
| +        } else {
 | 
| +          SetIcon(IconForNetworkStrength(cellular));
 | 
| +        }
 | 
| +        SetTooltipText(l10n_util::GetStringF(
 | 
| +            IDS_STATUSBAR_NETWORK_CONNECTED_TOOLTIP,
 | 
| +            UTF8ToWide(cellular->name())));
 | 
| +      } else {
 | 
|          SetIcon(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_BARS0));
 | 
|          SetTooltipText(l10n_util::GetString(
 | 
|              IDS_STATUSBAR_NETWORK_NO_NETWORK_TOOLTIP));
 | 
| -      } else {
 | 
| -        SetNetworkIcon(network);
 | 
|        }
 | 
|      }
 | 
| -    SetNetworkBadge(cros, network);
 | 
| -  } else {
 | 
| -    SetIcon(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_BARS0));
 | 
| -    SetBadge(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_WARNING));
 | 
| -    SetTooltipText(l10n_util::GetString(
 | 
| -        IDS_STATUSBAR_NETWORK_NO_NETWORK_TOOLTIP));
 | 
| -  }
 | 
|  
 | 
| -  SchedulePaint();
 | 
| -  UpdateMenu();
 | 
| -}
 | 
| -
 | 
| -////////////////////////////////////////////////////////////////////////////////
 | 
| -// NetworkMenuButton, NetworkLibrary::NetworkObserver implementation:
 | 
| -void NetworkMenuButton::OnNetworkChanged(NetworkLibrary* cros,
 | 
| -                                         const Network* network) {
 | 
| -  ResourceBundle& rb = ResourceBundle::GetSharedInstance();
 | 
| -  if (CrosLibrary::Get()->EnsureLoaded()) {
 | 
| -    // Always show the active network connection, if any.
 | 
| -    SetNetworkIcon(network);
 | 
| -    SetNetworkBadge(cros, network);
 | 
| +    // Figure out whether or not to show a badge.
 | 
| +    int id = -1;
 | 
| +    if (cros->Connecting()) {
 | 
| +      if (cros->cellular_connecting()) {
 | 
| +        id = IDR_STATUSBAR_NETWORK_3G;
 | 
| +      }
 | 
| +    } else if (cros->Connected()) {
 | 
| +      if (!cros->ethernet_connected() && !cros->wifi_connected() &&
 | 
| +          cros->cellular_connected()) {
 | 
| +        switch (cros->cellular_network()->data_left()) {
 | 
| +          case CellularNetwork::DATA_NONE:
 | 
| +          case CellularNetwork::DATA_VERY_LOW:
 | 
| +            id = IDR_STATUSBAR_NETWORK_3G_ERROR;
 | 
| +            break;
 | 
| +          case CellularNetwork::DATA_LOW:
 | 
| +            id = IDR_STATUSBAR_NETWORK_3G_WARN;
 | 
| +            break;
 | 
| +          case CellularNetwork::DATA_NORMAL:
 | 
| +            id = IDR_STATUSBAR_NETWORK_3G;
 | 
| +            break;
 | 
| +        }
 | 
| +      }
 | 
| +    } else {
 | 
| +      id = IDR_STATUSBAR_NETWORK_DISCONNECTED;
 | 
| +    }
 | 
| +    if (id != -1) {
 | 
| +      SetBadge(*rb.GetBitmapNamed(id));
 | 
| +    } else {
 | 
| +      SetBadge(SkBitmap());
 | 
| +    }
 | 
|    } else {
 | 
|      SetIcon(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_BARS0));
 | 
|      SetBadge(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_WARNING));
 | 
| @@ -158,9 +171,9 @@
 | 
|    UpdateMenu();
 | 
|  }
 | 
|  
 | 
| -void NetworkMenuButton::OnCellularDataPlanChanged(NetworkLibrary* cros) {
 | 
| -  // Call OnNetworkManagerChanged which will update the icon.
 | 
| -  OnNetworkManagerChanged(cros);
 | 
| +void NetworkMenuButton::CellularDataPlanChanged(NetworkLibrary* cros) {
 | 
| +  // Call NetworkChanged which will update the icon.
 | 
| +  NetworkChanged(cros);
 | 
|  }
 | 
|  
 | 
|  ////////////////////////////////////////////////////////////////////////////////
 | 
| @@ -182,54 +195,4 @@
 | 
|    return host_->ShouldOpenButtonOptions(this);
 | 
|  }
 | 
|  
 | 
| -////////////////////////////////////////////////////////////////////////////////
 | 
| -// NetworkMenuButton, private methods
 | 
| -
 | 
| -void NetworkMenuButton::SetNetworkIcon(const Network* network) {
 | 
| -  ResourceBundle& rb = ResourceBundle::GetSharedInstance();
 | 
| -  if (network && network->is_active()) {
 | 
| -    if (network->type() == TYPE_ETHERNET) {
 | 
| -      SetIcon(*rb.GetBitmapNamed(IDR_STATUSBAR_WIRED));
 | 
| -      SetTooltipText(
 | 
| -          l10n_util::GetStringF(
 | 
| -              IDS_STATUSBAR_NETWORK_CONNECTED_TOOLTIP,
 | 
| -              l10n_util::GetString(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET)));
 | 
| -    } else if (network->type() == TYPE_WIFI) {
 | 
| -      const WifiNetwork* wifi = static_cast<const WifiNetwork*>(network);
 | 
| -      SetIcon(IconForNetworkStrength(wifi->strength(), false));
 | 
| -      SetTooltipText(l10n_util::GetStringF(
 | 
| -          IDS_STATUSBAR_NETWORK_CONNECTED_TOOLTIP,
 | 
| -          UTF8ToWide(wifi->name())));
 | 
| -    } else if (network->type() == TYPE_CELLULAR) {
 | 
| -      const CellularNetwork* cellular =
 | 
| -          static_cast<const CellularNetwork*>(network);
 | 
| -      if (cellular->data_left() == CellularNetwork::DATA_NONE) {
 | 
| -        // If no data, then we show 0 bars.
 | 
| -        SetIcon(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_BARS0));
 | 
| -      } else {
 | 
| -        SetIcon(IconForNetworkStrength(cellular));
 | 
| -      }
 | 
| -      SetTooltipText(l10n_util::GetStringF(
 | 
| -          IDS_STATUSBAR_NETWORK_CONNECTED_TOOLTIP,
 | 
| -          UTF8ToWide(cellular->name())));
 | 
| -    }
 | 
| -  }
 | 
| -}
 | 
| -
 | 
| -void NetworkMenuButton::SetNetworkBadge(NetworkLibrary* cros,
 | 
| -                                        const Network* network) {
 | 
| -  ResourceBundle& rb = ResourceBundle::GetSharedInstance();
 | 
| -  // Figure out whether or not to show a badge.
 | 
| -  if (network && network->type() == TYPE_CELLULAR &&
 | 
| -      (network->is_active() || network->connecting())) {
 | 
| -    const CellularNetwork* cellular
 | 
| -        = static_cast<const CellularNetwork*>(network);
 | 
| -    SetBadge(BadgeForNetworkTechnology(cellular));
 | 
| -  } else if (!cros->Connected() && !cros->Connecting()) {
 | 
| -    SetBadge(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_DISCONNECTED));
 | 
| -  } else {
 | 
| -    SetBadge(SkBitmap());
 | 
| -  }
 | 
| -}
 | 
| -
 | 
|  }  // namespace chromeos
 | 
| 
 |