summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorchocobo@chromium.org <chocobo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-03 06:58:14 +0000
committerchocobo@chromium.org <chocobo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-03 06:58:14 +0000
commit7c3cc8a33bbd488b37478cafe01dd6a3a43591d7 (patch)
tree7606bca17e04156f1e49f76cd89a689d30b847a2
parent6b26224c72ca4b49c50d881d51ec9d72b70f8dfc (diff)
downloadchromium_src-7c3cc8a33bbd488b37478cafe01dd6a3a43591d7.zip
chromium_src-7c3cc8a33bbd488b37478cafe01dd6a3a43591d7.tar.gz
chromium_src-7c3cc8a33bbd488b37478cafe01dd6a3a43591d7.tar.bz2
Revert 64888 - Push for ers:
Added handling of network ("service" in flimflam parlance) property changes. NetworkLibrary updates its Network objects in response to property changes, then calls any NetworkObservers that have registered for the given network. Use the is_active member of Network in various places to ensure that we are dealing with the correct network. Created separate observer classes for NetworkManager, Network, and CellularDataPlan, so that monitors can be established independently for each of them. Changed the callback method names to prepend "On", i.e., OnNetworkManagerChanged, OnNetworkChanged, OnCellularDataPlanChanged. Wired up signal strength update and network technology update in the status bar, network dropdown menu, and internet settings page. Added new icon badges for 1xRTT radio technology. These are used when EVDO coverage switches to 1xRTT. Just as is the case for the 3G icons, there are three 1x icons: normal, warn, and error. Please consider these icons to be placeholders if the UI folks think they need to be redesigned. Centralized choosing of the network technology badge in NetworkMenu::BadgeForNetworkTechnology. BUG=chromium-os:5612:chromium-os:7619,chromium-os:5917,chromium-os:4674 TEST=Extensive manual testing with different combinations of wi-fi and cellular networks connected and disconnected. Used a modified version of flimflam that randomly changes reported signal strength, network technology, and roaming state, and verified that the UI correctly reflected current values for the active network (roaming is not handled in the UI at this time). Review URL: http://codereview.chromium.org/4235005 TBR=chocobo@chromium.org Review URL: http://codereview.chromium.org/4229006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@64889 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/app/theme/statusbar_network_1x.pngbin2832 -> 0 bytes
-rw-r--r--chrome/app/theme/statusbar_network_1x_error.pngbin2837 -> 0 bytes
-rw-r--r--chrome/app/theme/statusbar_network_1x_warn.pngbin2841 -> 0 bytes
-rw-r--r--chrome/app/theme/theme_resources.grd3
-rw-r--r--chrome/browser/browser_init.cc10
-rw-r--r--chrome/browser/chromeos/cros/cros_mock.cc2
-rw-r--r--chrome/browser/chromeos/cros/mock_network_library.h10
-rw-r--r--chrome/browser/chromeos/cros/network_library.cc489
-rw-r--r--chrome/browser/chromeos/cros/network_library.h110
-rw-r--r--chrome/browser/chromeos/dom_ui/internet_options_handler.cc60
-rw-r--r--chrome/browser/chromeos/dom_ui/internet_options_handler.h25
-rw-r--r--chrome/browser/chromeos/dom_ui/mobile_setup_ui.cc76
-rw-r--r--chrome/browser/chromeos/login/login_utils.cc12
-rw-r--r--chrome/browser/chromeos/login/network_screen.cc12
-rw-r--r--chrome/browser/chromeos/login/network_screen.h4
-rw-r--r--chrome/browser/chromeos/login/network_screen_browsertest.cc19
-rw-r--r--chrome/browser/chromeos/login/network_screen_delegate.h2
-rw-r--r--chrome/browser/chromeos/network_list.cc3
-rw-r--r--chrome/browser/chromeos/network_list.h2
-rw-r--r--chrome/browser/chromeos/network_message_observer.cc14
-rw-r--r--chrome/browser/chromeos/network_message_observer.h11
-rw-r--r--chrome/browser/chromeos/network_state_notifier.cc10
-rw-r--r--chrome/browser/chromeos/network_state_notifier.h10
-rw-r--r--chrome/browser/chromeos/network_state_notifier_browsertest.cc6
-rw-r--r--chrome/browser/chromeos/options/internet_page_view.cc35
-rw-r--r--chrome/browser/chromeos/options/internet_page_view.h6
-rw-r--r--chrome/browser/chromeos/status/network_dropdown_button.cc41
-rw-r--r--chrome/browser/chromeos/status/network_dropdown_button.h6
-rw-r--r--chrome/browser/chromeos/status/network_menu.cc45
-rw-r--r--chrome/browser/chromeos/status/network_menu.h5
-rw-r--r--chrome/browser/chromeos/status/network_menu_button.cc165
-rw-r--r--chrome/browser/chromeos/status/network_menu_button.h20
32 files changed, 381 insertions, 832 deletions
diff --git a/chrome/app/theme/statusbar_network_1x.png b/chrome/app/theme/statusbar_network_1x.png
deleted file mode 100644
index 26b36bb..0000000
--- a/chrome/app/theme/statusbar_network_1x.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/statusbar_network_1x_error.png b/chrome/app/theme/statusbar_network_1x_error.png
deleted file mode 100644
index 06d9585..0000000
--- a/chrome/app/theme/statusbar_network_1x_error.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/statusbar_network_1x_warn.png b/chrome/app/theme/statusbar_network_1x_warn.png
deleted file mode 100644
index 9c8ea7b..0000000
--- a/chrome/app/theme/statusbar_network_1x_warn.png
+++ /dev/null
Binary files differ
diff --git a/chrome/app/theme/theme_resources.grd b/chrome/app/theme/theme_resources.grd
index 79e63b9..6a8c38e 100644
--- a/chrome/app/theme/theme_resources.grd
+++ b/chrome/app/theme/theme_resources.grd
@@ -537,9 +537,6 @@
<include name="IDR_STATUSBAR_NETWORK_3G" file="statusbar_network_3g.png" type="BINDATA" />
<include name="IDR_STATUSBAR_NETWORK_3G_WARN" file="statusbar_network_3g_warn.png" type="BINDATA" />
<include name="IDR_STATUSBAR_NETWORK_3G_ERROR" file="statusbar_network_3g_error.png" type="BINDATA" />
- <include name="IDR_STATUSBAR_NETWORK_1X" file="statusbar_network_1x.png" type="BINDATA" />
- <include name="IDR_STATUSBAR_NETWORK_1X_WARN" file="statusbar_network_1x_warn.png" type="BINDATA" />
- <include name="IDR_STATUSBAR_NETWORK_1X_ERROR" file="statusbar_network_1x_error.png" type="BINDATA" />
<include name="IDR_STATUSBAR_NETWORK_BARS0" file="statusbar_network_bars0.png" type="BINDATA" />
<include name="IDR_STATUSBAR_NETWORK_BARS0_BLACK" file="statusbar_network_bars0b.png" type="BINDATA" />
<include name="IDR_STATUSBAR_NETWORK_BARS1" file="statusbar_network_bars1.png" type="BINDATA" />
diff --git a/chrome/browser/browser_init.cc b/chrome/browser/browser_init.cc
index f28029f..15bfb0b 100644
--- a/chrome/browser/browser_init.cc
+++ b/chrome/browser/browser_init.cc
@@ -441,13 +441,11 @@ bool BrowserInit::LaunchBrowser(const CommandLine& command_line,
static chromeos::NetworkMessageObserver* network_message_observer =
new chromeos::NetworkMessageObserver(profile);
- chromeos::CrosLibrary::Get()->GetNetworkLibrary()
- ->AddNetworkManagerObserver(network_message_observer);
- chromeos::CrosLibrary::Get()->GetNetworkLibrary()
- ->AddCellularDataPlanObserver(network_message_observer);
+ chromeos::CrosLibrary::Get()->GetNetworkLibrary()->AddObserver(
+ network_message_observer);
- chromeos::CrosLibrary::Get()->GetNetworkLibrary()
- ->AddNetworkManagerObserver(chromeos::NetworkStateNotifier::Get());
+ chromeos::CrosLibrary::Get()->GetNetworkLibrary()->AddObserver(
+ chromeos::NetworkStateNotifier::Get());
}
#endif
return true;
diff --git a/chrome/browser/chromeos/cros/cros_mock.cc b/chrome/browser/chromeos/cros/cros_mock.cc
index 13416c5..25bf9aa 100644
--- a/chrome/browser/chromeos/cros/cros_mock.cc
+++ b/chrome/browser/chromeos/cros/cros_mock.cc
@@ -273,7 +273,7 @@ void CrosMock::SetNetworkLibraryStatusAreaExpectations() {
.Times(1)
.RetiresOnSaturation();
- // NetworkDropdownButton::OnNetworkManagerChanged() calls:
+ // NetworkDropdownButton::NetworkChanged() calls:
EXPECT_CALL(*mock_network_library_, ethernet_connected())
.Times(1)
.WillRepeatedly((Return(false)))
diff --git a/chrome/browser/chromeos/cros/mock_network_library.h b/chrome/browser/chromeos/cros/mock_network_library.h
index 513eca34..21465c7 100644
--- a/chrome/browser/chromeos/cros/mock_network_library.h
+++ b/chrome/browser/chromeos/cros/mock_network_library.h
@@ -17,12 +17,10 @@ class MockNetworkLibrary : public NetworkLibrary {
public:
MockNetworkLibrary() {}
virtual ~MockNetworkLibrary() {}
- MOCK_METHOD1(AddNetworkManagerObserver, void(NetworkManagerObserver*));
- MOCK_METHOD1(RemoveNetworkManagerObserver, void(NetworkManagerObserver*));
- MOCK_METHOD2(AddNetworkObserver, void(const char*, NetworkObserver*));
- MOCK_METHOD1(RemoveNetworkObserver, void(NetworkObserver*));
- MOCK_METHOD1(AddCellularDataPlanObserver, void(NetworkManagerObserver*));
- MOCK_METHOD1(RemoveCellularDataPlanObserver, void(NetworkManagerObserver*));
+ MOCK_METHOD1(AddObserver, void(Observer*));
+ MOCK_METHOD1(RemoveObserver, void(Observer*));
+ MOCK_METHOD2(AddProperyObserver, void(const char*, PropertyObserver*));
+ MOCK_METHOD1(RemoveProperyObserver, void(PropertyObserver*));
MOCK_METHOD0(ethernet_network, EthernetNetwork*(void));
MOCK_CONST_METHOD0(ethernet_connecting, bool(void));
MOCK_CONST_METHOD0(ethernet_connected, bool(void));
diff --git a/chrome/browser/chromeos/cros/network_library.cc b/chrome/browser/chromeos/cros/network_library.cc
index dac756c..feb4d49 100644
--- a/chrome/browser/chromeos/cros/network_library.cc
+++ b/chrome/browser/chromeos/cros/network_library.cc
@@ -12,130 +12,12 @@
#include "base/string_number_conversions.h"
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
-#include "base/values.h"
#include "chrome/browser/browser_thread.h"
#include "chrome/browser/chromeos/cros/cros_library.h"
#include "grit/generated_resources.h"
namespace chromeos {
-namespace {
-// TODO(ers) These string constants and Parse functions are copied
-// straight out of libcros:chromeos_network.cc. Fix this by moving
-// all handling of properties into libcros.
-// Network service properties we are interested in monitoring
-static const char* kIsActiveProperty = "IsActive";
-static const char* kStateProperty = "State";
-static const char* kSignalStrengthProperty = "Strength";
-static const char* kActivationStateProperty = "Cellular.ActivationState";
-static const char* kNetworkTechnologyProperty = "Cellular.NetworkTechnology";
-static const char* kPaymentURLProperty = "Cellular.OlpUrl";
-static const char* kRestrictedPoolProperty = "Cellular.RestrictedPool";
-static const char* kRoamingStateProperty = "Cellular.RoamingState";
-
-// Connman state options.
-static const char* kStateIdle = "idle";
-static const char* kStateCarrier = "carrier";
-static const char* kStateAssociation = "association";
-static const char* kStateConfiguration = "configuration";
-static const char* kStateReady = "ready";
-static const char* kStateDisconnect = "disconnect";
-static const char* kStateFailure = "failure";
-static const char* kStateActivationFailure = "activation-failure";
-
-// Connman activation state options
-static const char* kActivationStateActivated = "activated";
-static const char* kActivationStateActivating = "activating";
-static const char* kActivationStateNotActivated = "not-activated";
-static const char* kActivationStatePartiallyActivated = "partially-activated";
-static const char* kActivationStateUnknown = "unknown";
-
-// Connman network technology options.
-static const char* kNetworkTechnology1Xrtt = "1xRTT";
-static const char* kNetworkTechnologyEvdo = "EVDO";
-static const char* kNetworkTechnologyGprs = "GPRS";
-static const char* kNetworkTechnologyEdge = "EDGE";
-static const char* kNetworkTechnologyUmts = "UMTS";
-static const char* kNetworkTechnologyHspa = "HSPA";
-static const char* kNetworkTechnologyHspaPlus = "HSPA+";
-static const char* kNetworkTechnologyLte = "LTE";
-static const char* kNetworkTechnologyLteAdvanced = "LTE Advanced";
-
-// Connman roaming state options
-static const char* kRoamingStateHome = "home";
-static const char* kRoamingStateRoaming = "roaming";
-static const char* kRoamingStateUnknown = "unknown";
-
-static ConnectionState ParseState(const std::string& state) {
- if (state == kStateIdle)
- return STATE_IDLE;
- if (state == kStateCarrier)
- return STATE_CARRIER;
- if (state == kStateAssociation)
- return STATE_ASSOCIATION;
- if (state == kStateConfiguration)
- return STATE_CONFIGURATION;
- if (state == kStateReady)
- return STATE_READY;
- if (state == kStateDisconnect)
- return STATE_DISCONNECT;
- if (state == kStateFailure)
- return STATE_FAILURE;
- if (state == kStateActivationFailure)
- return STATE_ACTIVATION_FAILURE;
- return STATE_UNKNOWN;
-}
-
-static ActivationState ParseActivationState(
- const std::string& activation_state) {
- if (activation_state == kActivationStateActivated)
- return ACTIVATION_STATE_ACTIVATED;
- if (activation_state == kActivationStateActivating)
- return ACTIVATION_STATE_ACTIVATING;
- if (activation_state == kActivationStateNotActivated)
- return ACTIVATION_STATE_NOT_ACTIVATED;
- if (activation_state == kActivationStateUnknown)
- return ACTIVATION_STATE_UNKNOWN;
- if (activation_state == kActivationStatePartiallyActivated)
- return ACTIVATION_STATE_PARTIALLY_ACTIVATED;
- return ACTIVATION_STATE_UNKNOWN;
-}
-
-static NetworkTechnology ParseNetworkTechnology(
- const std::string& technology) {
- if (technology == kNetworkTechnology1Xrtt)
- return NETWORK_TECHNOLOGY_1XRTT;
- if (technology == kNetworkTechnologyEvdo)
- return NETWORK_TECHNOLOGY_EVDO;
- if (technology == kNetworkTechnologyGprs)
- return NETWORK_TECHNOLOGY_GPRS;
- if (technology == kNetworkTechnologyEdge)
- return NETWORK_TECHNOLOGY_EDGE;
- if (technology == kNetworkTechnologyUmts)
- return NETWORK_TECHNOLOGY_UMTS;
- if (technology == kNetworkTechnologyHspa)
- return NETWORK_TECHNOLOGY_HSPA;
- if (technology == kNetworkTechnologyHspaPlus)
- return NETWORK_TECHNOLOGY_HSPA_PLUS;
- if (technology == kNetworkTechnologyLte)
- return NETWORK_TECHNOLOGY_LTE;
- if (technology == kNetworkTechnologyLteAdvanced)
- return NETWORK_TECHNOLOGY_LTE_ADVANCED;
- return NETWORK_TECHNOLOGY_UNKNOWN;
-}
-static NetworkRoamingState ParseRoamingState(
- const std::string& roaming_state) {
- if (roaming_state == kRoamingStateHome)
- return ROAMING_STATE_HOME;
- if (roaming_state == kRoamingStateRoaming)
- return ROAMING_STATE_ROAMING;
- if (roaming_state == kRoamingStateUnknown)
- return ROAMING_STATE_UNKNOWN;
- return ROAMING_STATE_UNKNOWN;
-}
-
-}
-
// Helper function to wrap Html with <th> tag.
static std::string WrapWithTH(std::string text) {
return "<th>" + text + "</th>";
@@ -217,7 +99,6 @@ void Network::Clear() {
service_path_.clear();
device_path_.clear();
ip_address_.clear();
- is_active_ = false;
}
Network::Network(const ServiceInfo* service) {
@@ -226,7 +107,6 @@ Network::Network(const ServiceInfo* service) {
error_ = service->error;
service_path_ = SafeString(service->service_path);
device_path_ = SafeString(service->device_path);
- is_active_ = service->is_active;
ip_address_.clear();
// If connected, get ip config.
if (EnsureCrosLoaded() && connected() && service->device_path) {
@@ -630,7 +510,7 @@ bool WifiNetwork::IsCertificateLoaded() const {
class NetworkLibraryImpl : public NetworkLibrary {
public:
NetworkLibraryImpl()
- : network_manager_monitor_(NULL),
+ : network_status_connection_(NULL),
data_plan_monitor_(NULL),
ethernet_(NULL),
wifi_(NULL),
@@ -641,98 +521,68 @@ class NetworkLibraryImpl : public NetworkLibrary {
offline_mode_(false) {
if (EnsureCrosLoaded()) {
Init();
- network_manager_monitor_ =
- MonitorNetworkManager(&NetworkManagerStatusChangedHandler,
- this);
- data_plan_monitor_ = MonitorCellularDataPlan(&DataPlanUpdateHandler,
- this);
} else {
InitTestData();
}
}
~NetworkLibraryImpl() {
- DCHECK(!network_manager_observers_.size());
- DCHECK(network_manager_monitor_);
- DisconnectPropertyChangeMonitor(network_manager_monitor_);
- DCHECK(!data_plan_observers_.size());
- DCHECK(data_plan_monitor_);
- DisconnectDataPlanUpdateMonitor(data_plan_monitor_);
- DCHECK(!network_observers_.size());
- STLDeleteValues(&network_observers_);
+ if (network_status_connection_) {
+ DisconnectMonitorNetwork(network_status_connection_);
+ }
+ if (data_plan_monitor_) {
+ DisconnectDataPlanUpdateMonitor(data_plan_monitor_);
+ }
+ // DCHECK(!observers_.size());
+ DCHECK(!property_observers_.size());
+ STLDeleteValues(&property_observers_);
ClearNetworks();
}
- virtual void AddNetworkManagerObserver(NetworkManagerObserver* observer) {
- network_manager_observers_.AddObserver(observer);
+ void AddObserver(Observer* observer) {
+ observers_.AddObserver(observer);
}
- virtual void RemoveNetworkManagerObserver(NetworkManagerObserver* observer) {
- if (!network_manager_observers_.HasObserver(observer))
- network_manager_observers_.RemoveObserver(observer);
+ void RemoveObserver(Observer* observer) {
+ observers_.RemoveObserver(observer);
}
- virtual void AddNetworkObserver(const std::string& service_path,
- NetworkObserver* observer) {
+ virtual void AddProperyObserver(const char* service_path,
+ PropertyObserver* observer) {
+ DCHECK(service_path);
DCHECK(observer);
if (!EnsureCrosLoaded())
return;
// First, add the observer to the callback map.
- NetworkObserverMap::iterator iter = network_observers_.find(service_path);
- NetworkObserverList* oblist;
- if (iter != network_observers_.end()) {
- oblist = iter->second;
+ PropertyChangeObserverMap::iterator iter = property_observers_.find(
+ std::string(service_path));
+ if (iter != property_observers_.end()) {
+ iter->second->AddObserver(observer);
} else {
- std::pair<NetworkObserverMap::iterator, bool> inserted =
- network_observers_.insert(
- std::make_pair<std::string, NetworkObserverList*>(
- service_path,
- new NetworkObserverList(this, service_path)));
- oblist = inserted.first->second;
- }
- if (!oblist->HasObserver(observer))
- oblist->AddObserver(observer);
- }
-
- virtual void RemoveNetworkObserver(const std::string& service_path,
- NetworkObserver* observer) {
- DCHECK(observer);
- DCHECK(service_path.size());
- NetworkObserverMap::iterator map_iter = network_observers_.find(
- service_path);
- if (map_iter != network_observers_.end()) {
- map_iter->second->RemoveObserver(observer);
- if (!map_iter->second->size()) {
- delete map_iter->second;
- network_observers_.erase(map_iter++);
- }
+ std::pair<PropertyChangeObserverMap::iterator, bool> inserted =
+ property_observers_.insert(
+ std::pair<std::string, PropertyObserverList*>(
+ std::string(service_path),
+ new PropertyObserverList(this, service_path)));
+ inserted.first->second->AddObserver(observer);
}
}
- virtual void RemoveObserverForAllNetworks(NetworkObserver* observer) {
+ virtual void RemoveProperyObserver(PropertyObserver* observer) {
DCHECK(observer);
- NetworkObserverMap::iterator map_iter = network_observers_.begin();
- while (map_iter != network_observers_.end()) {
+ PropertyChangeObserverMap::iterator map_iter =
+ property_observers_.begin();
+ while (map_iter != property_observers_.end()) {
map_iter->second->RemoveObserver(observer);
if (!map_iter->second->size()) {
delete map_iter->second;
- network_observers_.erase(map_iter++);
+ property_observers_.erase(map_iter++);
} else {
++map_iter;
}
}
}
- virtual void AddCellularDataPlanObserver(CellularDataPlanObserver* observer) {
- if (!data_plan_observers_.HasObserver(observer))
- data_plan_observers_.AddObserver(observer);
- }
-
- virtual void RemoveCellularDataPlanObserver(
- CellularDataPlanObserver* observer) {
- data_plan_observers_.RemoveObserver(observer);
- }
-
virtual EthernetNetwork* ethernet_network() { return ethernet_; }
virtual bool ethernet_connecting() const {
return ethernet_ ? ethernet_->connecting() : false;
@@ -766,14 +616,14 @@ class NetworkLibraryImpl : public NetworkLibrary {
}
const std::string& IPAddress() const {
- // Returns IP address for the active network.
- const Network* active = active_network();
- if (active != NULL)
- return active->ip_address();
- if (ethernet_)
+ // Returns highest priority IP address.
+ if (ethernet_connected())
return ethernet_->ip_address();
- static std::string null_address("0.0.0.0");
- return null_address;
+ if (wifi_connected())
+ return wifi_->ip_address();
+ if (cellular_connected())
+ return cellular_->ip_address();
+ return ethernet_->ip_address();
}
virtual const WifiNetworkVector& wifi_networks() const {
@@ -838,7 +688,6 @@ class NetworkLibraryImpl : public NetworkLibrary {
DCHECK(network);
if (!EnsureCrosLoaded())
return;
- // TODO(ers) make wifi the highest priority service type
if (ConnectToNetworkWithCertInfo(network->service_path().c_str(),
password.empty() ? NULL : password.c_str(),
identity.empty() ? NULL : identity.c_str(),
@@ -853,7 +702,7 @@ class NetworkLibraryImpl : public NetworkLibrary {
wifi->set_connecting(true);
wifi_ = wifi;
}
- NotifyNetworkManagerChanged();
+ NotifyNetworkChanged();
}
}
@@ -872,7 +721,6 @@ class NetworkLibraryImpl : public NetworkLibrary {
// Set auto-connect.
SetAutoConnect(service->service_path, auto_connect);
// Now connect to that service.
- // TODO(ers) make wifi the highest priority service type
ConnectToNetworkWithCertInfo(service->service_path,
password.empty() ? NULL : password.c_str(),
identity.empty() ? NULL : identity.c_str(),
@@ -890,7 +738,6 @@ class NetworkLibraryImpl : public NetworkLibrary {
DCHECK(network);
if (!EnsureCrosLoaded())
return;
- // TODO(ers) make cellular the highest priority service type
if (network && ConnectToNetwork(network->service_path().c_str(), NULL)) {
// Update local cache and notify listeners.
CellularNetwork* cellular = GetWirelessNetworkByPath(
@@ -899,7 +746,7 @@ class NetworkLibraryImpl : public NetworkLibrary {
cellular->set_connecting(true);
cellular_ = cellular;
}
- NotifyNetworkManagerChanged();
+ NotifyNetworkChanged();
}
}
@@ -914,7 +761,6 @@ class NetworkLibraryImpl : public NetworkLibrary {
DCHECK(network);
if (!EnsureCrosLoaded() || !network)
return;
- // TODO(ers) restore default service type priority ordering?
if (DisconnectFromNetwork(network->service_path().c_str())) {
// Update local cache and notify listeners.
if (network->type() == TYPE_WIFI) {
@@ -932,7 +778,7 @@ class NetworkLibraryImpl : public NetworkLibrary {
cellular_ = NULL;
}
}
- NotifyNetworkManagerChanged();
+ NotifyNetworkChanged();
}
}
@@ -974,7 +820,7 @@ class NetworkLibraryImpl : public NetworkLibrary {
break;
}
}
- NotifyNetworkManagerChanged();
+ NotifyNetworkChanged();
}
}
@@ -1000,16 +846,6 @@ class NetworkLibraryImpl : public NetworkLibrary {
virtual bool offline_mode() const { return offline_mode_; }
- virtual const Network* active_network() const {
- if (ethernet_ && ethernet_->is_active())
- return ethernet_;
- if (wifi_ && wifi_->is_active())
- return wifi_;
- if (cellular_ && cellular_->is_active())
- return cellular_;
- return NULL;
- }
-
virtual void EnableEthernetNetworkDevice(bool enable) {
EnableNetworkDeviceType(TYPE_ETHERNET, enable);
}
@@ -1115,53 +951,52 @@ class NetworkLibraryImpl : public NetworkLibrary {
private:
- class NetworkObserverList : public ObserverList<NetworkObserver> {
+ class PropertyObserverList : public ObserverList<PropertyObserver> {
public:
- NetworkObserverList(NetworkLibraryImpl* library,
- const std::string& service_path) {
- network_monitor_ = MonitorNetworkService(&NetworkStatusChangedHandler,
- service_path.c_str(),
- library);
+ PropertyObserverList(NetworkLibraryImpl* library,
+ const char* service_path) {
+ DCHECK(service_path);
+ property_change_monitor_ = MonitorNetworkService(&PropertyChangeHandler,
+ service_path,
+ library);
}
- virtual ~NetworkObserverList() {
- if (network_monitor_)
- DisconnectPropertyChangeMonitor(network_monitor_);
+ virtual ~PropertyObserverList() {
+ if (property_change_monitor_)
+ DisconnectPropertyChangeMonitor(property_change_monitor_);
}
private:
- static void NetworkStatusChangedHandler(void* object,
- const char* path,
- const char* key,
- const Value* value) {
- NetworkLibraryImpl* networklib = static_cast<NetworkLibraryImpl*>(object);
- DCHECK(networklib);
- networklib->UpdateNetworkStatus(path, key, value);
+ static void PropertyChangeHandler(void* object,
+ const char* path,
+ const char* key,
+ const Value* value) {
+ NetworkLibraryImpl* network = static_cast<NetworkLibraryImpl*>(object);
+ DCHECK(network);
+ network->NotifyPropertyChange(path, key, value);
}
- PropertyChangeMonitor network_monitor_;
+ PropertyChangeMonitor property_change_monitor_;
};
- typedef std::map<std::string, NetworkObserverList*> NetworkObserverMap;
+ typedef std::map<std::string, PropertyObserverList*>
+ PropertyChangeObserverMap;
- static void NetworkManagerStatusChangedHandler(void* object,
- const char* path,
- const char* key,
- const Value* value) {
- NetworkLibraryImpl* networklib = static_cast<NetworkLibraryImpl*>(object);
- DCHECK(networklib);
- networklib->UpdateNetworkManagerStatus();
+ static void NetworkStatusChangedHandler(void* object) {
+ NetworkLibraryImpl* network = static_cast<NetworkLibraryImpl*>(object);
+ DCHECK(network);
+ network->UpdateNetworkStatus();
}
static void DataPlanUpdateHandler(void* object,
const char* modem_service_path,
const CellularDataPlanList* dataplan) {
- NetworkLibraryImpl* networklib = static_cast<NetworkLibraryImpl*>(object);
- DCHECK(networklib && networklib->cellular_network());
+ NetworkLibraryImpl* network = static_cast<NetworkLibraryImpl*>(object);
+ DCHECK(network && network->cellular_network());
// Store data plan for currently connected cellular network.
- if (networklib->cellular_network()->service_path()
+ if (network->cellular_network()->service_path()
.compare(modem_service_path) == 0) {
if (dataplan != NULL) {
- networklib->UpdateCellularDataPlan(*dataplan);
+ network->UpdateCellularDataPlan(*dataplan);
}
}
}
@@ -1186,7 +1021,6 @@ class NetworkLibraryImpl : public NetworkLibrary {
<< " str=" << service->strength
<< " fav=" << service->favorite
<< " auto=" << service->auto_connect
- << " is_active=" << service->is_active
<< " error=" << service->error;
// Once a connected ethernet service is found, disregard other ethernet
// services that are also found
@@ -1226,10 +1060,17 @@ class NetworkLibraryImpl : public NetworkLibrary {
}
void Init() {
- // First, get the currently available networks. This data is cached
+ // First, get the currently available networks. This data is cached
// on the connman side, so the call should be quick.
VLOG(1) << "Getting initial CrOS network info.";
UpdateSystemInfo();
+
+ VLOG(1) << "Registering for network status updates.";
+ // Now, register to receive updates on network status.
+ network_status_connection_ = MonitorNetwork(&NetworkStatusChangedHandler,
+ this);
+ VLOG(1) << "Registering for cellular data plan updates.";
+ data_plan_monitor_ = MonitorCellularDataPlan(&DataPlanUpdateHandler, this);
}
void InitTestData() {
@@ -1308,7 +1149,7 @@ class NetworkLibraryImpl : public NetworkLibrary {
void UpdateSystemInfo() {
if (EnsureCrosLoaded()) {
- UpdateNetworkManagerStatus();
+ UpdateNetworkStatus();
}
}
@@ -1357,40 +1198,53 @@ class NetworkLibraryImpl : public NetworkLibrary {
EnableNetworkDevice(device, enable);
}
- void NotifyNetworkManagerChanged() {
- FOR_EACH_OBSERVER(NetworkManagerObserver,
- network_manager_observers_,
- OnNetworkManagerChanged(this));
+ void NotifyNetworkChanged() {
+ FOR_EACH_OBSERVER(Observer, observers_, NetworkChanged(this));
}
- void NotifyNetworkChanged(Network* network) {
- DCHECK(network);
- NetworkObserverMap::const_iterator iter = network_observers_.find(
- network->service_path());
- if (iter != network_observers_.end()) {
- FOR_EACH_OBSERVER(NetworkObserver,
- *(iter->second),
- OnNetworkChanged(this, network));
+ void NotifyCellularDataPlanChanged() {
+ FOR_EACH_OBSERVER(Observer, observers_, CellularDataPlanChanged(this));
+ }
+
+ void NotifyPropertyChange(const char* service_path,
+ const char* key,
+ const Value* value) {
+ DCHECK(service_path);
+ DCHECK(key);
+ DCHECK(value);
+ PropertyChangeObserverMap::const_iterator iter = property_observers_.find(
+ std::string(service_path));
+ if (iter != property_observers_.end()) {
+ FOR_EACH_OBSERVER(PropertyObserver, *(iter->second),
+ PropertyChanged(service_path, key, value));
} else {
NOTREACHED() <<
"There weren't supposed to be any property change observers of " <<
- network->service_path();
+ service_path;
}
}
- void NotifyCellularDataPlanChanged() {
- FOR_EACH_OBSERVER(CellularDataPlanObserver,
- data_plan_observers_,
- OnCellularDataPlanChanged(this));
+ void ClearNetworks() {
+ if (ethernet_)
+ delete ethernet_;
+ ethernet_ = NULL;
+ wifi_ = NULL;
+ cellular_ = NULL;
+ STLDeleteElements(&wifi_networks_);
+ wifi_networks_.clear();
+ STLDeleteElements(&cellular_networks_);
+ cellular_networks_.clear();
+ STLDeleteElements(&remembered_wifi_networks_);
+ remembered_wifi_networks_.clear();
}
- void UpdateNetworkManagerStatus() {
+ void UpdateNetworkStatus() {
// Make sure we run on UI thread.
if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
NewRunnableMethod(this,
- &NetworkLibraryImpl::UpdateNetworkManagerStatus));
+ &NetworkLibraryImpl::UpdateNetworkStatus));
return;
}
@@ -1434,114 +1288,30 @@ class NetworkLibraryImpl : public NetworkLibrary {
connected_devices_ = system->connected_technologies;
offline_mode_ = system->offline_mode;
- NotifyNetworkManagerChanged();
+ NotifyNetworkChanged();
FreeSystemInfo(system);
}
- void UpdateNetworkStatus(const char* path,
- const char* key,
- const Value* value) {
- if (key == NULL || value == NULL)
- return;
- // Make sure we run on UI thread.
- if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) {
- BrowserThread::PostTask(
- BrowserThread::UI, FROM_HERE,
- NewRunnableMethod(this,
- &NetworkLibraryImpl::UpdateNetworkStatus,
- path, key, value));
- return;
- }
-
- bool boolval = false;
- int intval = 0;
- std::string stringval;
- Network* network;
- if (ethernet_->service_path() == path) {
- network = ethernet_;
- } else {
- CellularNetwork* cellular =
- GetWirelessNetworkByPath(cellular_networks_, path);
- WifiNetwork* wifi =
- GetWirelessNetworkByPath(wifi_networks_, path);
- if (cellular == NULL && wifi == NULL)
- return;
-
- WirelessNetwork* wireless;
- if (wifi != NULL)
- wireless = static_cast<WirelessNetwork*>(wifi);
- else
- wireless = static_cast<WirelessNetwork*>(cellular);
-
- if (strcmp(key, kSignalStrengthProperty) == 0) {
- if (value->GetAsInteger(&intval))
- wireless->set_strength(intval);
- } else if (cellular != NULL) {
- if (strcmp(key, kRestrictedPoolProperty) == 0) {
- if (value->GetAsBoolean(&boolval))
- cellular->set_restricted_pool(boolval);
- } else if (strcmp(key, kActivationStateProperty) == 0) {
- if (value->GetAsString(&stringval))
- cellular->set_activation_state(ParseActivationState(stringval));
- } else if (strcmp(key, kPaymentURLProperty) == 0) {
- if (value->GetAsString(&stringval))
- cellular->set_payment_url(stringval);
- } else if (strcmp(key, kNetworkTechnologyProperty) == 0) {
- if (value->GetAsString(&stringval))
- cellular->set_network_technology(
- ParseNetworkTechnology(stringval));
- } else if (strcmp(key, kRoamingStateProperty) == 0) {
- if (value->GetAsString(&stringval))
- cellular->set_roaming_state(ParseRoamingState(stringval));
- }
- }
- network = wireless;
- }
- if (strcmp(key, kIsActiveProperty) == 0) {
- if (value->GetAsBoolean(&boolval))
- network->set_active(boolval);
- } else if (strcmp(key, kStateProperty) == 0) {
- if (value->GetAsString(&stringval))
- network->set_state(ParseState(stringval));
- }
- NotifyNetworkChanged(network);
- }
-
void UpdateCellularDataPlan(const CellularDataPlanList& data_plans) {
DCHECK(cellular_);
cellular_->SetDataPlans(data_plans);
NotifyCellularDataPlanChanged();
}
- void ClearNetworks() {
- if (ethernet_)
- delete ethernet_;
- ethernet_ = NULL;
- wifi_ = NULL;
- cellular_ = NULL;
- STLDeleteElements(&wifi_networks_);
- wifi_networks_.clear();
- STLDeleteElements(&cellular_networks_);
- cellular_networks_.clear();
- STLDeleteElements(&remembered_wifi_networks_);
- remembered_wifi_networks_.clear();
- }
-
- // Network manager observer list
- ObserverList<NetworkManagerObserver> network_manager_observers_;
+ ObserverList<Observer> observers_;
- // Cellular data plan observer list
- ObserverList<CellularDataPlanObserver> data_plan_observers_;
+ // Property change observer map
+ PropertyChangeObserverMap property_observers_;
- // Network observer map
- NetworkObserverMap network_observers_;
-
- // For monitoring network manager status changes.
- PropertyChangeMonitor network_manager_monitor_;
+ // The network status connection for monitoring network status changes.
+ MonitorNetworkConnection network_status_connection_;
// For monitoring data plan changes to the connected cellular network.
DataPlanUpdateMonitor data_plan_monitor_;
+ // The property change connection for monitoring service property changes.
+ std::map<std::string, PropertyChangeMonitor> property_change_monitors_;
+
// The ethernet network.
EthernetNetwork* ethernet_;
@@ -1583,17 +1353,11 @@ class NetworkLibraryStubImpl : public NetworkLibrary {
cellular_(NULL) {
}
~NetworkLibraryStubImpl() { if (ethernet_) delete ethernet_; }
- virtual void AddNetworkManagerObserver(NetworkManagerObserver* observer) {}
- virtual void RemoveNetworkManagerObserver(NetworkManagerObserver* observer) {}
- virtual void AddNetworkObserver(const std::string& service_path,
- NetworkObserver* observer) {}
- virtual void RemoveNetworkObserver(const std::string& service_path,
- NetworkObserver* observer) {}
- virtual void RemoveObserverForAllNetworks(NetworkObserver* observer) {}
- virtual void AddCellularDataPlanObserver(
- CellularDataPlanObserver* observer) {}
- virtual void RemoveCellularDataPlanObserver(
- CellularDataPlanObserver* observer) {}
+ virtual void AddObserver(Observer* observer) {}
+ virtual void RemoveObserver(Observer* observer) {}
+ virtual void AddProperyObserver(const char* service_path,
+ PropertyObserver* observer) {}
+ virtual void RemoveProperyObserver(PropertyObserver* observer) {}
virtual EthernetNetwork* ethernet_network() {
return ethernet_;
}
@@ -1658,7 +1422,6 @@ class NetworkLibraryStubImpl : public NetworkLibrary {
virtual bool ethernet_enabled() const { return true; }
virtual bool wifi_enabled() const { return false; }
virtual bool cellular_enabled() const { return false; }
- virtual const Network* active_network() const { return NULL; }
virtual bool offline_mode() const { return false; }
virtual void EnableEthernetNetworkDevice(bool enable) {}
virtual void EnableWifiNetworkDevice(bool enable) {}
diff --git a/chrome/browser/chromeos/cros/network_library.h b/chrome/browser/chromeos/cros/network_library.h
index 1e48fc7..65574ed 100644
--- a/chrome/browser/chromeos/cros/network_library.h
+++ b/chrome/browser/chromeos/cros/network_library.h
@@ -48,10 +48,13 @@ class Network {
state_ == STATE_IDLE; }
ConnectionError error() const { return error_; }
ConnectionState state() const { return state_; }
- // Is this the active network, i.e, the one through which
- // network traffic is being routed? A network can be connected,
- // but not be carrying traffic.
- bool is_active() const { return is_active_; }
+
+ void set_service_path(const std::string& service_path) {
+ service_path_ = service_path; }
+ void set_connecting(bool connecting) { state_ = (connecting ?
+ STATE_ASSOCIATION : STATE_IDLE); }
+ void set_connected(bool connected) { state_ = (connected ?
+ STATE_READY : STATE_IDLE); }
// Clear the fields.
virtual void Clear();
@@ -66,8 +69,7 @@ class Network {
Network()
: type_(TYPE_UNKNOWN),
state_(STATE_UNKNOWN),
- error_(ERROR_UNKNOWN),
- is_active_(false) {}
+ error_(ERROR_UNKNOWN) {}
explicit Network(const Network& network);
explicit Network(const ServiceInfo* service);
virtual ~Network() {}
@@ -78,19 +80,6 @@ class Network {
ConnectionType type_;
ConnectionState state_;
ConnectionError error_;
- bool is_active_;
-
- private:
- void set_service_path(const std::string& service_path) {
- service_path_ = service_path; }
- void set_connecting(bool connecting) { state_ = (connecting ?
- STATE_ASSOCIATION : STATE_IDLE); }
- void set_connected(bool connected) { state_ = (connected ?
- STATE_READY : STATE_IDLE); }
- void set_state(ConnectionState state) { state_ = state; }
- void set_active(bool is_active) { is_active_ = is_active; }
-
- friend class NetworkLibraryImpl;
};
class EthernetNetwork : public Network {
@@ -130,6 +119,8 @@ class WirelessNetwork : public Network {
bool auto_connect() const { return auto_connect_; }
bool favorite() const { return favorite_; }
+ void set_name(const std::string& name) { name_ = name; }
+ void set_strength(int strength) { strength_ = strength; }
void set_auto_connect(bool auto_connect) { auto_connect_ = auto_connect; }
void set_favorite(bool favorite) { favorite_ = favorite; }
@@ -149,12 +140,6 @@ class WirelessNetwork : public Network {
int strength_;
bool auto_connect_;
bool favorite_;
-
- private:
- void set_name(const std::string& name) { name_ = name; }
- void set_strength(int strength) { strength_ = strength; }
-
- friend class NetworkLibraryImpl;
};
class CellularNetwork : public WirelessNetwork {
@@ -173,6 +158,9 @@ class CellularNetwork : public WirelessNetwork {
// Starts device activation process. Returns false if the device state does
// not permit activation.
bool StartActivation() const;
+ void set_activation_state(ActivationState state) {
+ activation_state_ = state;
+ }
const ActivationState activation_state() const { return activation_state_; }
const NetworkTechnology network_technology() const {
return network_technology_;
@@ -183,6 +171,9 @@ class CellularNetwork : public WirelessNetwork {
const std::string& operator_name() const { return operator_name_; }
const std::string& operator_code() const { return operator_code_; }
const std::string& payment_url() const { return payment_url_; }
+ void set_payment_url(const std::string& url) {
+ payment_url_ = url;
+ }
const std::string& meid() const { return meid_; }
const std::string& imei() const { return imei_; }
const std::string& imsi() const { return imsi_; }
@@ -243,25 +234,6 @@ class CellularNetwork : public WirelessNetwork {
std::string last_update_;
unsigned int prl_version_;
CellularDataPlanList data_plans_;
-
- private:
- void set_activation_state(ActivationState state) {
- activation_state_ = state;
- }
- void set_payment_url(const std::string& url) {
- payment_url_ = url;
- }
- void set_network_technology(NetworkTechnology technology) {
- network_technology_ = technology;
- }
- void set_roaming_state(NetworkRoamingState state) {
- roaming_state_ = state;
- }
- void set_restricted_pool(bool restricted_pool) {
- restricted_pool_ = restricted_pool;
- }
-
- friend class NetworkLibraryImpl;
};
class WifiNetwork : public WirelessNetwork {
@@ -367,47 +339,27 @@ typedef std::vector<NetworkIPConfig> NetworkIPConfigVector;
// library like this: chromeos::CrosLibrary::Get()->GetNetworkLibrary()
class NetworkLibrary {
public:
- class NetworkManagerObserver {
+ class Observer {
public:
- // Called when the state of the network manager has changed,
- // for example, networks have appeared or disappeared.
- virtual void OnNetworkManagerChanged(NetworkLibrary* obj) = 0;
- };
-
- class NetworkObserver {
- public:
- // Called when the state of a single network has changed,
- // for example signal strength or connection state.
- virtual void OnNetworkChanged(NetworkLibrary* cros,
- const Network* network) = 0;
+ // Called when the network has changed. (wifi networks, and ethernet)
+ virtual void NetworkChanged(NetworkLibrary* obj) = 0;
+ // Called when the cellular data plan has changed.
+ virtual void CellularDataPlanChanged(NetworkLibrary* obj) {}
};
- class CellularDataPlanObserver {
+ class PropertyObserver {
public:
- // Called when the cellular data plan has changed.
- virtual void OnCellularDataPlanChanged(NetworkLibrary* obj) = 0;
+ virtual void PropertyChanged(const char* service_path,
+ const char* key,
+ const Value* value) = 0;
};
virtual ~NetworkLibrary() {}
-
- virtual void AddNetworkManagerObserver(NetworkManagerObserver* observer) = 0;
- virtual void RemoveNetworkManagerObserver(
- NetworkManagerObserver* observer) = 0;
-
- // An attempt to add an observer that has already been added for a
- // give service path will be ignored.
- virtual void AddNetworkObserver(const std::string& service_path,
- NetworkObserver* observer) = 0;
- // Remove an observer of a single network
- virtual void RemoveNetworkObserver(const std::string& service_path,
- NetworkObserver* observer) = 0;
- // Stop |observer| from observing any networks
- virtual void RemoveObserverForAllNetworks(NetworkObserver* observer) = 0;
-
- virtual void AddCellularDataPlanObserver(
- CellularDataPlanObserver* observer) = 0;
- virtual void RemoveCellularDataPlanObserver(
- CellularDataPlanObserver* observer) = 0;
+ virtual void AddObserver(Observer* observer) = 0;
+ virtual void RemoveObserver(Observer* observer) = 0;
+ virtual void AddProperyObserver(const char* service_path,
+ PropertyObserver* observer) = 0;
+ virtual void RemoveProperyObserver(PropertyObserver* observer) = 0;
// Return the active Ethernet network (or a default structure if inactive).
virtual EthernetNetwork* ethernet_network() = 0;
@@ -505,8 +457,6 @@ class NetworkLibrary {
virtual bool wifi_enabled() const = 0;
virtual bool cellular_enabled() const = 0;
- virtual const Network* active_network() const = 0;
-
virtual bool offline_mode() const = 0;
// Enables/disables the ethernet network device.
diff --git a/chrome/browser/chromeos/dom_ui/internet_options_handler.cc b/chrome/browser/chromeos/dom_ui/internet_options_handler.cc
index a4ab56f..47541a3 100644
--- a/chrome/browser/chromeos/dom_ui/internet_options_handler.cc
+++ b/chrome/browser/chromeos/dom_ui/internet_options_handler.cc
@@ -56,19 +56,11 @@ std::string FormatHardwareAddress(const std::string& address) {
} // namespace
InternetOptionsHandler::InternetOptionsHandler() {
- chromeos::NetworkLibrary* netlib =
- chromeos::CrosLibrary::Get()->GetNetworkLibrary();
- netlib->AddNetworkManagerObserver(this);
- netlib->AddCellularDataPlanObserver(this);
- MonitorActiveNetwork(netlib);
+ chromeos::CrosLibrary::Get()->GetNetworkLibrary()->AddObserver(this);
}
InternetOptionsHandler::~InternetOptionsHandler() {
- chromeos::NetworkLibrary *netlib =
- chromeos::CrosLibrary::Get()->GetNetworkLibrary();
- netlib->RemoveNetworkManagerObserver(this);
- netlib->RemoveCellularDataPlanObserver(this);
- netlib->RemoveObserverForAllNetworks(this);
+ chromeos::CrosLibrary::Get()->GetNetworkLibrary()->RemoveObserver(this);
}
void InternetOptionsHandler::GetLocalizedValues(
@@ -365,8 +357,10 @@ void InternetOptionsHandler::BuyDataPlanCallback(const ListValue* args) {
browser->OpenMobilePlanTabAndActivate();
}
-void InternetOptionsHandler::RefreshNetworkData(
- chromeos::NetworkLibrary* cros) {
+void InternetOptionsHandler::NetworkChanged(chromeos::NetworkLibrary* cros) {
+ if (!dom_ui_)
+ return;
+
DictionaryValue dictionary;
dictionary.Set("wiredList", GetWiredList());
dictionary.Set("wirelessList", GetWirelessList());
@@ -379,45 +373,7 @@ void InternetOptionsHandler::RefreshNetworkData(
L"options.InternetOptions.refreshNetworkData", dictionary);
}
-void InternetOptionsHandler::OnNetworkManagerChanged(
- chromeos::NetworkLibrary* cros) {
- if (!dom_ui_)
- return;
- MonitorActiveNetwork(cros);
- RefreshNetworkData(cros);
-}
-
-void InternetOptionsHandler::OnNetworkChanged(
- chromeos::NetworkLibrary* cros,
- const chromeos::Network* network) {
- if (dom_ui_)
- RefreshNetworkData(cros);
-}
-
-// Add an observer for the active network, if any, so
-// that we can dynamically display the correct icon for
-// that network's signal strength.
-// TODO(ers) Ideally, on this page we'd monitor all networks for
-// signal strength changes, not just the active network.
-void InternetOptionsHandler::MonitorActiveNetwork(
- chromeos::NetworkLibrary* cros) {
- const chromeos::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 != NULL)
- active_network_ = network->service_path();
- else
- active_network_ = "";
-}
-
-void InternetOptionsHandler::OnCellularDataPlanChanged(
+void InternetOptionsHandler::CellularDataPlanChanged(
chromeos::NetworkLibrary* obj) {
if (!dom_ui_)
return;
@@ -994,7 +950,7 @@ ListValue* InternetOptionsHandler::GetWirelessList() {
cellular_networks.begin(); it != cellular_networks.end(); ++it) {
SkBitmap icon = chromeos::NetworkMenu::IconForNetworkStrength(
(*it)->strength(), true);
- SkBitmap badge = chromeos::NetworkMenu::BadgeForNetworkTechnology(*it);
+ SkBitmap badge = *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_3G);
icon = chromeos::NetworkMenu::IconForDisplay(icon, badge);
list->Append(GetNetwork(
(*it)->service_path(),
diff --git a/chrome/browser/chromeos/dom_ui/internet_options_handler.h b/chrome/browser/chromeos/dom_ui/internet_options_handler.h
index fcecd82..99dd522 100644
--- a/chrome/browser/chromeos/dom_ui/internet_options_handler.h
+++ b/chrome/browser/chromeos/dom_ui/internet_options_handler.h
@@ -16,12 +16,8 @@ class WindowDelegate;
}
// ChromeOS internet options page UI handler.
-class InternetOptionsHandler
- : public OptionsPageUIHandler,
- public chromeos::NetworkLibrary::NetworkManagerObserver,
- public chromeos::NetworkLibrary::NetworkObserver,
- public chromeos::NetworkLibrary::CellularDataPlanObserver {
-
+class InternetOptionsHandler : public OptionsPageUIHandler,
+ public chromeos::NetworkLibrary::Observer {
public:
InternetOptionsHandler();
virtual ~InternetOptionsHandler();
@@ -32,13 +28,9 @@ class InternetOptionsHandler
// DOMMessageHandler implementation.
virtual void RegisterMessages();
- // NetworkLibrary::NetworkManagerObserver implementation.
- virtual void OnNetworkManagerChanged(chromeos::NetworkLibrary* network_lib);
- // NetworkLibrary::NetworkObserver implementation.
- virtual void OnNetworkChanged(chromeos::NetworkLibrary* network_lib,
- const chromeos::Network* network);
- // NetworkLibrary::CellularDataPlanObserver implementation.
- virtual void OnCellularDataPlanChanged(chromeos::NetworkLibrary* network_lib);
+ // NetworkLibrary::Observer implementation.
+ virtual void NetworkChanged(chromeos::NetworkLibrary* obj);
+ virtual void CellularDataPlanChanged(chromeos::NetworkLibrary* obj);
private:
// Passes data needed to show details overlay for network.
@@ -89,13 +81,6 @@ class InternetOptionsHandler
ListValue* GetWirelessList();
// Creates the map of remembered networks
ListValue* GetRememberedList();
- // Refresh the display of network information
- void RefreshNetworkData(chromeos::NetworkLibrary* cros);
- // Monitor the active network, if any
- void MonitorActiveNetwork(chromeos::NetworkLibrary* cros);
-
- // If any network is currently active, this is its service path
- std::string active_network_;
DISALLOW_COPY_AND_ASSIGN(InternetOptionsHandler);
};
diff --git a/chrome/browser/chromeos/dom_ui/mobile_setup_ui.cc b/chrome/browser/chromeos/dom_ui/mobile_setup_ui.cc
index 048f053..0e2d734 100644
--- a/chrome/browser/chromeos/dom_ui/mobile_setup_ui.cc
+++ b/chrome/browser/chromeos/dom_ui/mobile_setup_ui.cc
@@ -124,12 +124,10 @@ class MobileSetupUIHTMLSource : public ChromeURLDataManager::DataSource {
};
// The handler for Javascript messages related to the "register" view.
-class MobileSetupHandler
- : public DOMMessageHandler,
- public chromeos::NetworkLibrary::NetworkManagerObserver,
- public chromeos::NetworkLibrary::NetworkObserver,
- public base::SupportsWeakPtr<MobileSetupHandler> {
-
+class MobileSetupHandler : public DOMMessageHandler,
+ public chromeos::NetworkLibrary::Observer,
+ public chromeos::NetworkLibrary::PropertyObserver,
+ public base::SupportsWeakPtr<MobileSetupHandler> {
public:
explicit MobileSetupHandler(const std::string& service_path);
virtual ~MobileSetupHandler();
@@ -141,11 +139,12 @@ class MobileSetupHandler
virtual DOMMessageHandler* Attach(DOMUI* dom_ui);
virtual void RegisterMessages();
- // NetworkLibrary::NetworkManagerObserver implementation.
- virtual void OnNetworkManagerChanged(chromeos::NetworkLibrary* obj);
- // NetworkLibrary::NetworkObserver implementation.
- virtual void OnNetworkChanged(chromeos::NetworkLibrary* obj,
- const chromeos::Network* network);
+ // NetworkLibrary::Observer implementation.
+ virtual void NetworkChanged(chromeos::NetworkLibrary* obj);
+ // NetworkLibrary::PropertyObserver implementation.
+ virtual void PropertyChanged(const char* service_path,
+ const char* key,
+ const Value* value);
private:
typedef enum PlanActivationState {
@@ -329,8 +328,8 @@ MobileSetupHandler::MobileSetupHandler(const std::string& service_path)
MobileSetupHandler::~MobileSetupHandler() {
chromeos::NetworkLibrary* lib =
chromeos::CrosLibrary::Get()->GetNetworkLibrary();
- lib->RemoveNetworkManagerObserver(this);
- lib->RemoveObserverForAllNetworks(this);
+ lib->RemoveObserver(this);
+ lib->RemoveProperyObserver(this);
ReEnableOtherConnections();
}
@@ -353,25 +352,34 @@ void MobileSetupHandler::RegisterMessages() {
NewCallback(this, &MobileSetupHandler::HandleSetTransactionStatus));
}
-void MobileSetupHandler::OnNetworkManagerChanged(
- chromeos::NetworkLibrary* cros) {
+void MobileSetupHandler::NetworkChanged(chromeos::NetworkLibrary* lib) {
if (state_ == PLAN_ACTIVATION_PAGE_LOADING)
return;
- // Note that even though we get here when the service has
- // reappeared after disappearing earlier in the activation
- // process, there's no need to re-establish the NetworkObserver,
- // because the service path remains the same.
EvaluateCellularNetwork(GetCellularNetwork(service_path_));
}
-void MobileSetupHandler::OnNetworkChanged(chromeos::NetworkLibrary* cros,
- const chromeos::Network* network) {
+void MobileSetupHandler::PropertyChanged(const char* service_path,
+ const char* key,
+ const Value* value) {
+
if (state_ == PLAN_ACTIVATION_PAGE_LOADING)
return;
- DCHECK(network && network->type() == chromeos::TYPE_CELLULAR);
- EvaluateCellularNetwork(
- static_cast<chromeos::CellularNetwork*>(
- const_cast<chromeos::Network*>(network)));
+ chromeos::CellularNetwork* network = GetCellularNetwork(service_path_);
+ if (!network) {
+ EvaluateCellularNetwork(NULL);
+ return;
+ }
+ if (network->service_path() != service_path) {
+ NOTREACHED();
+ return;
+ }
+ std::string value_string;
+ LOG(INFO) << "Cellular property change: " << key << " = " <<
+ value_string.c_str();
+
+ // TODO(zelidrag, ers): Remove this once we flip the notification machanism.
+ chromeos::CrosLibrary::Get()->GetNetworkLibrary()->UpdateSystemInfo();
+ EvaluateCellularNetwork(network);
}
void MobileSetupHandler::HandleCloseTab(const ListValue* args) {
@@ -389,12 +397,14 @@ void MobileSetupHandler::HandleStartActivation(const ListValue* args) {
ChangeState(NULL, PLAN_ACTIVATION_ERROR, std::string());
return;
}
- // Start monitoring network property changes.
- chromeos::NetworkLibrary* lib =
- chromeos::CrosLibrary::Get()->GetNetworkLibrary();
- lib->AddNetworkManagerObserver(this);
- lib->RemoveObserverForAllNetworks(this);
- lib->AddNetworkObserver(network->service_path(), this);
+ chromeos::NetworkLibrary* lib = chromeos::CrosLibrary::Get()->
+ GetNetworkLibrary();
+ lib->RemoveObserver(this);
+ lib->RemoveProperyObserver(this);
+ // Start monitoring network and service property changes.
+ lib->AddObserver(this);
+ lib->AddProperyObserver(network->service_path().c_str(),
+ this);
ChangeState(network, PLAN_ACTIVATION_START, std::string());
EvaluateCellularNetwork(network);
}
@@ -571,8 +581,8 @@ void MobileSetupHandler::CompleteActivation(
network->set_auto_connect(true);
lib->SaveCellularNetwork(network);
}
- lib->RemoveNetworkManagerObserver(this);
- lib->RemoveObserverForAllNetworks(this);
+ lib->RemoveObserver(this);
+ lib->RemoveProperyObserver(this);
// Reactivate other types of connections if we have
// shut them down previously.
ReEnableOtherConnections();
diff --git a/chrome/browser/chromeos/login/login_utils.cc b/chrome/browser/chromeos/login/login_utils.cc
index 724ef85..8136645 100644
--- a/chrome/browser/chromeos/login/login_utils.cc
+++ b/chrome/browser/chromeos/login/login_utils.cc
@@ -296,20 +296,20 @@ bool LoginUtilsImpl::IsBrowserLaunchEnabled() const {
// We use a special class for this so that it can be safely leaked if we
// never connect. At shutdown the order is not well defined, and it's possible
// for the infrastructure needed to unregister might be unstable and crash.
-class WarmingObserver : public NetworkLibrary::NetworkManagerObserver {
+class WarmingObserver : public NetworkLibrary::Observer {
public:
WarmingObserver() {
- NetworkLibrary *netlib = CrosLibrary::Get()->GetNetworkLibrary();
- netlib->AddNetworkManagerObserver(this);
+ NetworkLibrary *network = CrosLibrary::Get()->GetNetworkLibrary();
+ network->AddObserver(this);
}
// If we're now connected, prewarm the auth url.
- void OnNetworkManagerChanged(NetworkLibrary* netlib) {
- if (netlib->Connected()) {
+ void NetworkChanged(NetworkLibrary* network) {
+ if (network->Connected()) {
chrome_browser_net::Preconnect::PreconnectOnUIThread(
GURL(GaiaAuthenticator2::kClientLoginUrl),
chrome_browser_net::UrlInfo::EARLY_LOAD_MOTIVATED);
- netlib->RemoveNetworkManagerObserver(this);
+ network->RemoveObserver(this);
delete this;
}
}
diff --git a/chrome/browser/chromeos/login/network_screen.cc b/chrome/browser/chromeos/login/network_screen.cc
index d760447..76ed69d 100644
--- a/chrome/browser/chromeos/login/network_screen.cc
+++ b/chrome/browser/chromeos/login/network_screen.cc
@@ -77,9 +77,9 @@ void NetworkScreen::ButtonPressed(views::Button* sender,
}
////////////////////////////////////////////////////////////////////////////////
-// NetworkLibrary::NetworkManagerObserver implementation:
+// NetworkLibrary::Observer implementation:
-void NetworkScreen::OnNetworkManagerChanged(NetworkLibrary* network_lib) {
+void NetworkScreen::NetworkChanged(NetworkLibrary* network_lib) {
UpdateStatus(network_lib);
}
@@ -110,7 +110,7 @@ void NetworkScreen::OnHelpLinkActivated() {
void NetworkScreen::Refresh() {
if (CrosLibrary::Get()->EnsureLoaded()) {
SubscribeNetworkNotification();
- OnNetworkManagerChanged(chromeos::CrosLibrary::Get()->GetNetworkLibrary());
+ NetworkChanged(chromeos::CrosLibrary::Get()->GetNetworkLibrary());
}
}
@@ -120,16 +120,14 @@ void NetworkScreen::Refresh() {
void NetworkScreen::SubscribeNetworkNotification() {
if (!is_network_subscribed_) {
is_network_subscribed_ = true;
- chromeos::CrosLibrary::Get()->GetNetworkLibrary()
- ->AddNetworkManagerObserver(this);
+ chromeos::CrosLibrary::Get()->GetNetworkLibrary()->AddObserver(this);
}
}
void NetworkScreen::UnsubscribeNetworkNotification() {
if (is_network_subscribed_) {
is_network_subscribed_ = false;
- chromeos::CrosLibrary::Get()->GetNetworkLibrary()
- ->RemoveNetworkManagerObserver(this);
+ chromeos::CrosLibrary::Get()->GetNetworkLibrary()->RemoveObserver(this);
}
}
diff --git a/chrome/browser/chromeos/login/network_screen.h b/chrome/browser/chromeos/login/network_screen.h
index b3aa531..284ebb0 100644
--- a/chrome/browser/chromeos/login/network_screen.h
+++ b/chrome/browser/chromeos/login/network_screen.h
@@ -47,8 +47,8 @@ class NetworkScreen : public ViewScreen<NetworkSelectionView>,
// views::ButtonListener implementation:
virtual void ButtonPressed(views::Button* sender, const views::Event& event);
- // NetworkLibrary::NetworkManagerObserver implementation:
- virtual void OnNetworkManagerChanged(NetworkLibrary* network_lib);
+ // NetworkLibrary::Observer implementation:
+ virtual void NetworkChanged(NetworkLibrary* network_lib);
protected:
// Subscribes NetworkScreen to the network change notification,
diff --git a/chrome/browser/chromeos/login/network_screen_browsertest.cc b/chrome/browser/chromeos/login/network_screen_browsertest.cc
index 39f3f81..ee9ce21 100644
--- a/chrome/browser/chromeos/login/network_screen_browsertest.cc
+++ b/chrome/browser/chromeos/login/network_screen_browsertest.cc
@@ -88,13 +88,10 @@ class NetworkScreenTest : public WizardInProcessBrowserTest {
EXPECT_CALL(*mock_network_library_, Connecting())
.Times(2)
.WillRepeatedly(Return(false));
+ // Add an AddObserver for prewarming auth url check.
EXPECT_CALL(*mock_network_library_, AddObserver(_))
.Times(3);
EXPECT_CALL(*mock_network_library_, RemoveObserver(_))
- // Add an Observer for prewarming auth url check.
- EXPECT_CALL(*mock_network_library_, AddNetworkManagerObserver(_))
- .Times(3);
- EXPECT_CALL(*mock_network_library_, RemoveNetworkManagerObserver(_))
.Times(2);
cros_mock_->SetStatusAreaMocksExpectations();
@@ -150,7 +147,7 @@ IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Ethernet) {
EXPECT_CALL(*mock_network_library_, ethernet_connecting())
.WillOnce((Return(true)));
- network_screen->OnNetworkManagerChanged(mock_network_library_);
+ network_screen->NetworkChanged(mock_network_library_);
EXPECT_FALSE(network_view->IsContinueEnabled());
EXPECT_FALSE(network_view->IsConnecting());
@@ -159,7 +156,7 @@ IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Ethernet) {
EXPECT_CALL(*mock_network_library_, Connected())
.WillOnce(Return(true));
- network_screen->OnNetworkManagerChanged(mock_network_library_);
+ network_screen->NetworkChanged(mock_network_library_);
EXPECT_TRUE(network_view->IsContinueEnabled());
EmulateContinueButtonExit(network_screen);
@@ -189,7 +186,7 @@ IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Wifi) {
EXPECT_CALL(*mock_network_library_, wifi_network())
.WillOnce(Return(wifi.get()));
- network_screen->OnNetworkManagerChanged(mock_network_library_);
+ network_screen->NetworkChanged(mock_network_library_);
EXPECT_FALSE(network_view->IsContinueEnabled());
EXPECT_FALSE(network_view->IsConnecting());
@@ -198,7 +195,7 @@ IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Wifi) {
EXPECT_CALL(*mock_network_library_, Connected())
.WillOnce(Return(true));
- network_screen->OnNetworkManagerChanged(mock_network_library_);
+ network_screen->NetworkChanged(mock_network_library_);
EXPECT_TRUE(network_view->IsContinueEnabled());
EmulateContinueButtonExit(network_screen);
@@ -230,7 +227,7 @@ IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Cellular) {
EXPECT_CALL(*mock_network_library_, cellular_network())
.WillOnce(Return(cellular.get()));
- network_screen->OnNetworkManagerChanged(mock_network_library_);
+ network_screen->NetworkChanged(mock_network_library_);
EXPECT_FALSE(network_view->IsContinueEnabled());
EXPECT_FALSE(network_view->IsConnecting());
@@ -239,7 +236,7 @@ IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Cellular) {
EXPECT_CALL(*mock_network_library_, Connected())
.WillOnce(Return(true));
- network_screen->OnNetworkManagerChanged(mock_network_library_);
+ network_screen->NetworkChanged(mock_network_library_);
EXPECT_TRUE(network_view->IsContinueEnabled());
EmulateContinueButtonExit(network_screen);
@@ -271,7 +268,7 @@ IN_PROC_BROWSER_TEST_F(NetworkScreenTest, Timeout) {
EXPECT_CALL(*mock_network_library_, Connected())
.WillOnce(Return(false));
- network_screen->OnNetworkManagerChanged(mock_network_library_);
+ network_screen->NetworkChanged(mock_network_library_);
EXPECT_FALSE(network_view->IsContinueEnabled());
EXPECT_FALSE(network_view->IsConnecting());
diff --git a/chrome/browser/chromeos/login/network_screen_delegate.h b/chrome/browser/chromeos/login/network_screen_delegate.h
index e64e380..3a5978a 100644
--- a/chrome/browser/chromeos/login/network_screen_delegate.h
+++ b/chrome/browser/chromeos/login/network_screen_delegate.h
@@ -22,7 +22,7 @@ class LanguageSwitchMenu;
// Interface that NetworkScreen exposes to the NetworkSelectionView.
class NetworkScreenDelegate : public views::ButtonListener,
- public NetworkLibrary::NetworkManagerObserver {
+ public NetworkLibrary::Observer {
public:
// Cleares all error notifications.
virtual void ClearErrors() = 0;
diff --git a/chrome/browser/chromeos/network_list.cc b/chrome/browser/chromeos/network_list.cc
index c22795b..26df2de 100644
--- a/chrome/browser/chromeos/network_list.cc
+++ b/chrome/browser/chromeos/network_list.cc
@@ -49,8 +49,7 @@ bool NetworkList::IsNetworkConnecting(NetworkType type,
return IsInNetworkList(connecting_networks_, type, id);
}
-void NetworkList::OnNetworkManagerChanged(
- chromeos::NetworkLibrary* network_lib) {
+void NetworkList::NetworkChanged(chromeos::NetworkLibrary* network_lib) {
networks_.clear();
connected_networks_.clear();
connecting_networks_.clear();
diff --git a/chrome/browser/chromeos/network_list.h b/chrome/browser/chromeos/network_list.h
index 47c7426..21f0e63 100644
--- a/chrome/browser/chromeos/network_list.h
+++ b/chrome/browser/chromeos/network_list.h
@@ -83,7 +83,7 @@ class NetworkList {
NetworkList::NetworkItem* GetNetworkAt(int index);
// Callback from NetworkLibrary.
- void OnNetworkManagerChanged(chromeos::NetworkLibrary* network_lib);
+ void NetworkChanged(chromeos::NetworkLibrary* network_lib);
private:
typedef std::vector<NetworkItem> NetworkItemVector;
diff --git a/chrome/browser/chromeos/network_message_observer.cc b/chrome/browser/chromeos/network_message_observer.cc
index 32545bd..92bc85a 100644
--- a/chrome/browser/chromeos/network_message_observer.cc
+++ b/chrome/browser/chromeos/network_message_observer.cc
@@ -35,19 +35,11 @@ NetworkMessageObserver::NetworkMessageObserver(Profile* profile)
notification_no_data_(profile, "network_no_data.chromeos",
IDR_NOTIFICATION_BARS_EMPTY,
l10n_util::GetStringUTF16(IDS_NETWORK_OUT_OF_DATA_TITLE)) {
- NetworkLibrary* netlib = CrosLibrary::Get()->GetNetworkLibrary();
- OnNetworkManagerChanged(netlib);
- // Note that this gets added as a NetworkManagerObserver and a
- // CellularDataPlanObserver in browser_init.cc
- netlib->AddNetworkManagerObserver(this);
- netlib->AddCellularDataPlanObserver(this);
+ NetworkChanged(CrosLibrary::Get()->GetNetworkLibrary());
initialized_ = true;
}
NetworkMessageObserver::~NetworkMessageObserver() {
- NetworkLibrary* netlib = CrosLibrary::Get()->GetNetworkLibrary();
- netlib->RemoveNetworkManagerObserver(this);
- netlib->RemoveCellularDataPlanObserver(this);
notification_connection_error_.Hide();
notification_low_data_.Hide();
notification_no_data_.Hide();
@@ -73,7 +65,7 @@ void NetworkMessageObserver::MobileSetup(const ListValue* args) {
BrowserList::GetLastActive()->OpenMobilePlanTabAndActivate();
}
-void NetworkMessageObserver::OnNetworkManagerChanged(NetworkLibrary* obj) {
+void NetworkMessageObserver::NetworkChanged(NetworkLibrary* obj) {
const WifiNetworkVector& wifi_networks = obj->wifi_networks();
const CellularNetworkVector& cellular_networks = obj->cellular_networks();
@@ -158,7 +150,7 @@ void NetworkMessageObserver::OnNetworkManagerChanged(NetworkLibrary* obj) {
CreateModalPopup(view);
}
-void NetworkMessageObserver::OnCellularDataPlanChanged(NetworkLibrary* obj) {
+void NetworkMessageObserver::CellularDataPlanChanged(NetworkLibrary* obj) {
const CellularNetwork* cellular = obj->cellular_network();
if (!cellular)
return;
diff --git a/chrome/browser/chromeos/network_message_observer.h b/chrome/browser/chromeos/network_message_observer.h
index db1ba1b..cdb0a81 100644
--- a/chrome/browser/chromeos/network_message_observer.h
+++ b/chrome/browser/chromeos/network_message_observer.h
@@ -23,8 +23,7 @@ namespace chromeos {
// The network message observer displays a system notification for network
// messages.
-class NetworkMessageObserver : public NetworkLibrary::NetworkManagerObserver,
- public NetworkLibrary::CellularDataPlanObserver {
+class NetworkMessageObserver : public NetworkLibrary::Observer {
public:
explicit NetworkMessageObserver(Profile* profile);
virtual ~NetworkMessageObserver();
@@ -35,10 +34,9 @@ class NetworkMessageObserver : public NetworkLibrary::NetworkManagerObserver,
virtual void CreateModalPopup(views::WindowDelegate* view);
virtual void MobileSetup(const ListValue* args);
- // NetworkLibrary::NetworkManagerObserver implementation.
- virtual void OnNetworkManagerChanged(NetworkLibrary* obj);
- // NetworkLibrary::CellularDataPlanObserver implementation.
- virtual void OnCellularDataPlanChanged(NetworkLibrary* obj);
+ // NetworkLibrary::Observer implementation.
+ virtual void NetworkChanged(NetworkLibrary* obj);
+ virtual void CellularDataPlanChanged(NetworkLibrary* obj);
bool initialized_;
// Wifi networks by service path.
@@ -64,3 +62,4 @@ class NetworkMessageObserver : public NetworkLibrary::NetworkManagerObserver,
} // namespace chromeos
#endif // CHROME_BROWSER_CHROMEOS_NETWORK_MESSAGE_OBSERVER_H_
+
diff --git a/chrome/browser/chromeos/network_state_notifier.cc b/chrome/browser/chromeos/network_state_notifier.cc
index d0552f9..aaaf763 100644
--- a/chrome/browser/chromeos/network_state_notifier.cc
+++ b/chrome/browser/chromeos/network_state_notifier.cc
@@ -34,17 +34,9 @@ NetworkStateNotifier::NetworkStateNotifier()
: ALLOW_THIS_IN_INITIALIZER_LIST(task_factory_(this)),
state_(RetrieveState()),
offline_start_time_(Time::Now()) {
- DCHECK(CrosLibrary::Get()->EnsureLoaded());
- // Note that this gets added as a NetworkManagerObserver
- // in browser_init.cc
-}
-
-NetworkStateNotifier::~NetworkStateNotifier() {
- DCHECK(CrosLibrary::Get()->EnsureLoaded());
- CrosLibrary::Get()->GetNetworkLibrary()->RemoveNetworkManagerObserver(this);
}
-void NetworkStateNotifier::OnNetworkManagerChanged(NetworkLibrary* cros) {
+void NetworkStateNotifier::NetworkChanged(NetworkLibrary* cros) {
DCHECK(CrosLibrary::Get()->EnsureLoaded());
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
diff --git a/chrome/browser/chromeos/network_state_notifier.h b/chrome/browser/chromeos/network_state_notifier.h
index 94e57f4..9d49d94 100644
--- a/chrome/browser/chromeos/network_state_notifier.h
+++ b/chrome/browser/chromeos/network_state_notifier.h
@@ -42,10 +42,10 @@ class NetworkStateDetails {
};
// NetworkStateNotifier sends notification when network state has
-// chagned. Notification is sent in UI thread.
+// chagned. Notificatio is sent in UI thread.
// TODO(oshima): port this to other platform. merge with
// NetworkChangeNotifier if possible.
-class NetworkStateNotifier : public NetworkLibrary::NetworkManagerObserver {
+class NetworkStateNotifier : public NetworkLibrary::Observer {
public:
// Returns the singleton instance of the network state notifier;
static NetworkStateNotifier* Get();
@@ -59,8 +59,8 @@ class NetworkStateNotifier : public NetworkLibrary::NetworkManagerObserver {
return Get()->state_ == NetworkStateDetails::CONNECTED;
}
- // NetworkLibrary::NetworkManagerObserver implementation.
- virtual void OnNetworkManagerChanged(NetworkLibrary* cros);
+ // NetworkLibrary::Observer implementation.
+ virtual void NetworkChanged(NetworkLibrary* cros);
private:
friend struct DefaultSingletonTraits<NetworkStateNotifier>;
@@ -69,7 +69,7 @@ class NetworkStateNotifier : public NetworkLibrary::NetworkManagerObserver {
static NetworkStateDetails::State RetrieveState();
NetworkStateNotifier();
- virtual ~NetworkStateNotifier();
+ virtual ~NetworkStateNotifier() {}
// Update the current state and sends notification to observers.
// This should be invoked in UI thread.
diff --git a/chrome/browser/chromeos/network_state_notifier_browsertest.cc b/chrome/browser/chromeos/network_state_notifier_browsertest.cc
index 47ea0de..126ff13b 100644
--- a/chrome/browser/chromeos/network_state_notifier_browsertest.cc
+++ b/chrome/browser/chromeos/network_state_notifier_browsertest.cc
@@ -70,7 +70,7 @@ IN_PROC_BROWSER_TEST_F(NetworkStateNotifierTest, TestConnected) {
.WillRepeatedly((Return(true)))
.RetiresOnSaturation();
NetworkStateNotifier* notifier = NetworkStateNotifier::Get();
- notifier->OnNetworkManagerChanged(mock_network_library_);
+ notifier->NetworkChanged(mock_network_library_);
WaitForNotification();
EXPECT_EQ(chromeos::NetworkStateDetails::CONNECTED, state_);
}
@@ -88,7 +88,7 @@ IN_PROC_BROWSER_TEST_F(NetworkStateNotifierTest, TestConnecting) {
.WillOnce((Return(true)))
.RetiresOnSaturation();
NetworkStateNotifier* notifier = NetworkStateNotifier::Get();
- notifier->OnNetworkManagerChanged(mock_network_library_);
+ notifier->NetworkChanged(mock_network_library_);
WaitForNotification();
EXPECT_EQ(chromeos::NetworkStateDetails::CONNECTING, state_);
}
@@ -106,7 +106,7 @@ IN_PROC_BROWSER_TEST_F(NetworkStateNotifierTest, TestDisconnected) {
.WillOnce((Return(false)))
.RetiresOnSaturation();
NetworkStateNotifier* notifier = NetworkStateNotifier::Get();
- notifier->OnNetworkManagerChanged(mock_network_library_);
+ notifier->NetworkChanged(mock_network_library_);
WaitForNotification();
EXPECT_EQ(chromeos::NetworkStateDetails::DISCONNECTED, state_);
}
diff --git a/chrome/browser/chromeos/options/internet_page_view.cc b/chrome/browser/chromeos/options/internet_page_view.cc
index 794814a..a9f099f 100644
--- a/chrome/browser/chromeos/options/internet_page_view.cc
+++ b/chrome/browser/chromeos/options/internet_page_view.cc
@@ -301,7 +301,7 @@ class WirelessSection : public NetworkSection {
bool connected, int connection_type);
WifiNetworkVector wifi_networks_;
- CellularNetworkVector cellular_networks_;
+ CellularNetworkVector celluar_networks_;
DISALLOW_COPY_AND_ASSIGN(WirelessSection);
};
@@ -334,34 +334,36 @@ void WirelessSection::InitSection() {
}
// Cellular
- cellular_networks_ = cros->cellular_networks();
- for (size_t i = 0; i < cellular_networks_.size(); ++i) {
- std::wstring name = ASCIIToWide(cellular_networks_[i]->name());
+ celluar_networks_ = cros->cellular_networks();
+ // Cellular networks ssids.
+ for (size_t i = 0; i < celluar_networks_.size(); ++i) {
+ std::wstring name = ASCIIToWide(celluar_networks_[i]->name());
SkBitmap icon = NetworkMenu::IconForNetworkStrength(
- cellular_networks_[i]->strength(), true);
- SkBitmap badge =
- NetworkMenu::BadgeForNetworkTechnology(cellular_networks_[i]);
+ celluar_networks_[i]->strength(), true);
+ // TODO(chocobo): Check cellular network 3g/edge.
+ SkBitmap badge = *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_3G);
+// SkBitmap badge = *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_EDGE);
icon = NetworkMenu::IconForDisplay(icon, badge);
- bool connecting = cellular_networks_[i]->connecting();
- bool connected = cellular_networks_[i]->connected();
+ bool connecting = celluar_networks_[i]->connecting();
+ bool connected = celluar_networks_[i]->connected();
AddWirelessNetwork(i, icon, name, connecting, connected, TYPE_CELLULAR);
}
}
void WirelessSection::ButtonClicked(int button, int connection_type, int id) {
if (connection_type == TYPE_CELLULAR) {
- if (static_cast<int>(cellular_networks_.size()) > id) {
+ if (static_cast<int>(celluar_networks_.size()) > id) {
if (button == CONNECT_BUTTON) {
// Connect to cellular network.
CrosLibrary::Get()->GetNetworkLibrary()->ConnectToCellularNetwork(
- cellular_networks_[id]);
+ celluar_networks_[id]);
} else if (button == DISCONNECT_BUTTON) {
CrosLibrary::Get()->GetNetworkLibrary()->DisconnectFromWirelessNetwork(
- cellular_networks_[id]);
+ celluar_networks_[id]);
} else {
- CreateModalPopup(new NetworkConfigView(cellular_networks_[id]));
+ CreateModalPopup(new NetworkConfigView(celluar_networks_[id]));
}
}
} else if (connection_type == TYPE_WIFI) {
@@ -426,6 +428,7 @@ class RememberedSection : public NetworkSection {
private:
WifiNetworkVector wifi_networks_;
+ CellularNetworkVector celluar_networks_;
DISALLOW_COPY_AND_ASSIGN(RememberedSection);
};
@@ -567,14 +570,14 @@ InternetPageView::InternetPageView(Profile* profile)
scroll_view_(new views::ScrollView) {
NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary();
cros->UpdateSystemInfo();
- cros->AddNetworkManagerObserver(this);
+ cros->AddObserver(this);
}
InternetPageView::~InternetPageView() {
- CrosLibrary::Get()->GetNetworkLibrary()->RemoveNetworkManagerObserver(this);
+ CrosLibrary::Get()->GetNetworkLibrary()->RemoveObserver(this);
}
-void InternetPageView::OnNetworkManagerChanged(NetworkLibrary* obj) {
+void InternetPageView::NetworkChanged(NetworkLibrary* obj) {
// Refresh wired, wireless, and remembered networks.
// Remember the current scroll region, and try to scroll back afterwards.
gfx::Rect rect = scroll_view_->GetVisibleRect();
diff --git a/chrome/browser/chromeos/options/internet_page_view.h b/chrome/browser/chromeos/options/internet_page_view.h
index c5048df..71b7399 100644
--- a/chrome/browser/chromeos/options/internet_page_view.h
+++ b/chrome/browser/chromeos/options/internet_page_view.h
@@ -19,13 +19,13 @@ class InternetPageContentView;
// Internet settings page for Chrome OS
class InternetPageView : public SettingsPageView,
- public NetworkLibrary::NetworkManagerObserver {
+ public NetworkLibrary::Observer {
public:
explicit InternetPageView(Profile* profile);
virtual ~InternetPageView();
- // NetworkLibrary::NetworkManagerObserver implementation.
- virtual void OnNetworkManagerChanged(NetworkLibrary* obj);
+ // NetworkLibrary::Observer implementation.
+ virtual void NetworkChanged(NetworkLibrary* obj);
// views::View overrides:
virtual void Layout();
diff --git a/chrome/browser/chromeos/status/network_dropdown_button.cc b/chrome/browser/chromeos/status/network_dropdown_button.cc
index 8deb193..cade402 100644
--- a/chrome/browser/chromeos/status/network_dropdown_button.cc
+++ b/chrome/browser/chromeos/status/network_dropdown_button.cc
@@ -34,12 +34,12 @@ NetworkDropdownButton::NetworkDropdownButton(bool browser_mode,
parent_window_(parent_window) {
animation_connecting_.SetThrobDuration(kThrobDuration);
animation_connecting_.SetTweenType(Tween::LINEAR);
- OnNetworkManagerChanged(CrosLibrary::Get()->GetNetworkLibrary());
- CrosLibrary::Get()->GetNetworkLibrary()->AddNetworkManagerObserver(this);
+ NetworkChanged(CrosLibrary::Get()->GetNetworkLibrary());
+ CrosLibrary::Get()->GetNetworkLibrary()->AddObserver(this);
}
NetworkDropdownButton::~NetworkDropdownButton() {
- CrosLibrary::Get()->GetNetworkLibrary()->RemoveNetworkManagerObserver(this);
+ CrosLibrary::Get()->GetNetworkLibrary()->RemoveObserver(this);
}
////////////////////////////////////////////////////////////////////////////////
@@ -62,13 +62,13 @@ void NetworkDropdownButton::AnimationProgressed(const Animation* animation) {
}
void NetworkDropdownButton::Refresh() {
- OnNetworkManagerChanged(CrosLibrary::Get()->GetNetworkLibrary());
+ NetworkChanged(CrosLibrary::Get()->GetNetworkLibrary());
}
////////////////////////////////////////////////////////////////////////////////
-// NetworkDropdownButton, NetworkLibrary::NetworkManagerObserver implementation:
+// NetworkDropdownButton, NetworkLibrary::Observer implementation:
-void NetworkDropdownButton::OnNetworkManagerChanged(NetworkLibrary* cros) {
+void NetworkDropdownButton::NetworkChanged(NetworkLibrary* cros) {
// Show network that we will actually use. It could be another network than
// user selected. For example user selected WiFi network but we have Ethernet
// connection and Chrome OS device will actually use Ethernet.
@@ -78,27 +78,28 @@ void NetworkDropdownButton::OnNetworkManagerChanged(NetworkLibrary* cros) {
ResourceBundle& rb = ResourceBundle::GetSharedInstance();
if (CrosLibrary::Get()->EnsureLoaded()) {
- // Always show the active network, if any
- const Network* active_network = cros->active_network();
- const WirelessNetwork* wireless;
- if (active_network != NULL) {
+ // Always show the higher priority connection first. Ethernet then wifi.
+ if (cros->ethernet_connected()) {
animation_connecting_.Stop();
- if (active_network->type() == TYPE_ETHERNET) {
- SetIcon(*rb.GetBitmapNamed(IDR_STATUSBAR_WIRED));
- SetText(l10n_util::GetString(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET));
- } else {
- DCHECK(active_network->type() == TYPE_WIFI ||
- active_network->type() == TYPE_CELLULAR);
- wireless = static_cast<const WirelessNetwork*>(active_network);
- SetIcon(IconForNetworkStrength(wireless->strength(), false));
- SetText(ASCIIToWide(wireless->name()));
- }
+ SetIcon(*rb.GetBitmapNamed(IDR_STATUSBAR_WIRED));
+ SetText(l10n_util::GetString(IDS_STATUSBAR_NETWORK_DEVICE_ETHERNET));
+ } else if (cros->wifi_connected()) {
+ animation_connecting_.Stop();
+ SetIcon(IconForNetworkStrength(
+ cros->wifi_network()->strength(), true));
+ SetText(ASCIIToWide(cros->wifi_network()->name()));
+ } else if (cros->cellular_connected()) {
+ animation_connecting_.Stop();
+ SetIcon(IconForNetworkStrength(
+ cros->cellular_network()->strength(), false));
+ SetText(ASCIIToWide(cros->cellular_network()->name()));
} else if (cros->wifi_connecting() || cros->cellular_connecting()) {
if (!animation_connecting_.is_animating()) {
animation_connecting_.Reset();
animation_connecting_.StartThrobbing(-1);
SetIcon(*rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_BARS1_BLACK));
}
+
if (cros->wifi_connecting())
SetText(ASCIIToWide(cros->wifi_network()->name()));
else if (cros->cellular_connecting())
diff --git a/chrome/browser/chromeos/status/network_dropdown_button.h b/chrome/browser/chromeos/status/network_dropdown_button.h
index 2968e42..47500f6 100644
--- a/chrome/browser/chromeos/status/network_dropdown_button.h
+++ b/chrome/browser/chromeos/status/network_dropdown_button.h
@@ -19,7 +19,7 @@ namespace chromeos {
// See NetworkMenu for more details.
class NetworkDropdownButton : public views::MenuButton,
public NetworkMenu,
- public NetworkLibrary::NetworkManagerObserver {
+ public NetworkLibrary::Observer {
public:
NetworkDropdownButton(bool browser_mode, gfx::NativeWindow parent_window);
virtual ~NetworkDropdownButton();
@@ -27,8 +27,8 @@ class NetworkDropdownButton : public views::MenuButton,
// AnimationDelegate implementation.
virtual void AnimationProgressed(const Animation* animation);
- // NetworkLibrary::NetworkManagerObserver implementation.
- virtual void OnNetworkManagerChanged(NetworkLibrary* obj);
+ // NetworkLibrary::Observer implementation.
+ virtual void NetworkChanged(NetworkLibrary* obj);
// Refreshes button state. Used when language has been changed.
void Refresh();
diff --git a/chrome/browser/chromeos/status/network_menu.cc b/chrome/browser/chromeos/status/network_menu.cc
index 159b09c..428865b 100644
--- a/chrome/browser/chromeos/status/network_menu.cc
+++ b/chrome/browser/chromeos/status/network_menu.cc
@@ -389,47 +389,6 @@ SkBitmap NetworkMenu::IconForNetworkStrength(const CellularNetwork* cellular) {
}
// static
-// TODO(ers) update for GSM when we have the necessary images
-SkBitmap NetworkMenu::BadgeForNetworkTechnology(
- const CellularNetwork* cellular) {
-
- int id;
- if (cellular->network_technology() == NETWORK_TECHNOLOGY_EVDO) {
- switch (cellular->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 if (cellular->network_technology() == NETWORK_TECHNOLOGY_1XRTT) {
- switch (cellular->data_left()) {
- case CellularNetwork::DATA_NONE:
- case CellularNetwork::DATA_VERY_LOW:
- id = IDR_STATUSBAR_NETWORK_1X_ERROR;
- break;
- case CellularNetwork::DATA_LOW:
- id = IDR_STATUSBAR_NETWORK_1X_WARN;
- break;
- case CellularNetwork::DATA_NORMAL:
- id = IDR_STATUSBAR_NETWORK_1X;
- break;
- }
- } else {
- id = -1;
- }
- if (id == -1)
- return SkBitmap();
- else
- return *ResourceBundle::GetSharedInstance().GetBitmapNamed(id);
-}
-
-// static
SkBitmap NetworkMenu::IconForDisplay(SkBitmap icon, SkBitmap badge) {
// Draw badge at (14,14).
static const int kBadgeX = 14;
@@ -570,7 +529,9 @@ void NetworkMenu::InitMenuItems() {
}
SkBitmap icon = IconForNetworkStrength(cell_networks[i]->strength(),
true);
- SkBitmap badge = BadgeForNetworkTechnology(cell_networks[i]);
+ // TODO(chocobo): Check cellular network 3g/edge.
+ SkBitmap badge = *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_3G);
+ // SkBitmap badge = *rb.GetBitmapNamed(IDR_STATUSBAR_NETWORK_EDGE);
int flag = FLAG_CELLULAR;
if (active_cellular &&
cell_networks[i]->service_path() ==
diff --git a/chrome/browser/chromeos/status/network_menu.h b/chrome/browser/chromeos/status/network_menu.h
index a68e928..8f57c61 100644
--- a/chrome/browser/chromeos/status/network_menu.h
+++ b/chrome/browser/chromeos/status/network_menu.h
@@ -115,12 +115,11 @@ class NetworkMenu : public views::ViewMenuDelegate,
// |black| is used to specify whether to return a black icon for display
// on a light background or a white icon for display on a dark background.
static SkBitmap IconForNetworkStrength(int strength, bool black);
+
// Returns the Icon for a network strength for CellularNetwork |cellular|.
// This returns different colored bars depending on cellular data left.
static SkBitmap IconForNetworkStrength(const CellularNetwork* cellular);
- // Returns the Badge for a given network technology.
- // This returns different colored symbols depending on cellular data left.
- static SkBitmap BadgeForNetworkTechnology(const CellularNetwork* cellular);
+
// This method will convert the |icon| bitmap to the correct size for display.
// If the |badge| icon is not empty, it will draw that on top of the icon.
static SkBitmap IconForDisplay(SkBitmap icon, SkBitmap badge);
diff --git a/chrome/browser/chromeos/status/network_menu_button.cc b/chrome/browser/chromeos/status/network_menu_button.cc
index b8cbe00..48b5187 100644
--- a/chrome/browser/chromeos/status/network_menu_button.cc
+++ b/chrome/browser/chromeos/status/network_menu_button.cc
@@ -35,16 +35,12 @@ NetworkMenuButton::NetworkMenuButton(StatusAreaHost* host)
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 @@ void NetworkMenuButton::DrawIcon(gfx::Canvas* canvas) {
}
////////////////////////////////////////////////////////////////////////////////
-// 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 @@ void NetworkMenuButton::OnNetworkManagerChanged(NetworkLibrary* cros) {
} 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 @@ void NetworkMenuButton::OnNetworkChanged(NetworkLibrary* cros,
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 @@ bool NetworkMenuButton::ShouldOpenButtonOptions() const {
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
diff --git a/chrome/browser/chromeos/status/network_menu_button.h b/chrome/browser/chromeos/status/network_menu_button.h
index c2b2e71..f8b27db 100644
--- a/chrome/browser/chromeos/status/network_menu_button.h
+++ b/chrome/browser/chromeos/status/network_menu_button.h
@@ -46,9 +46,7 @@ class StatusAreaHost;
// The label will be BOLD if the network is currently connected.
class NetworkMenuButton : public StatusAreaButton,
public NetworkMenu,
- public NetworkLibrary::NetworkManagerObserver,
- public NetworkLibrary::NetworkObserver,
- public NetworkLibrary::CellularDataPlanObserver {
+ public NetworkLibrary::Observer {
public:
explicit NetworkMenuButton(StatusAreaHost* host);
virtual ~NetworkMenuButton();
@@ -56,12 +54,9 @@ class NetworkMenuButton : public StatusAreaButton,
// AnimationDelegate implementation.
virtual void AnimationProgressed(const Animation* animation);
- // NetworkLibrary::NetworkManagerObserver implementation.
- virtual void OnNetworkManagerChanged(NetworkLibrary* cros);
- // NetworkLibrary::NetworkObserver implementation.
- virtual void OnNetworkChanged(NetworkLibrary* cros, const Network* network);
- // NetworkLibrary::CellularDataPlanObserver implementation.
- virtual void OnCellularDataPlanChanged(NetworkLibrary* cros);
+ // NetworkLibrary::Observer implementation.
+ virtual void NetworkChanged(NetworkLibrary* obj);
+ virtual void CellularDataPlanChanged(NetworkLibrary* obj);
// Sets the badge icon.
void SetBadge(const SkBitmap& badge) { badge_ = badge; }
@@ -78,9 +73,6 @@ class NetworkMenuButton : public StatusAreaButton,
virtual bool ShouldOpenButtonOptions() const;
private:
- void SetNetworkIcon(const Network* network);
- void SetNetworkBadge(NetworkLibrary* cros, const Network* network);
-
// The status area host,
StatusAreaHost* host_;
@@ -93,10 +85,6 @@ class NetworkMenuButton : public StatusAreaButton,
// The duration of the icon throbbing in milliseconds.
static const int kThrobDuration;
- // If any network is currently active, this is the service path of the one
- // whose status is displayed in the network menu button.
- std::string active_network_;
-
DISALLOW_COPY_AND_ASSIGN(NetworkMenuButton);
};