Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(283)

Unified Diff: ash/system/chromeos/network/network_state_notifier.cc

Issue 22340006: Show notifications for Network Config errors (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase + move comment Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ash/system/chromeos/network/network_state_notifier.cc
diff --git a/ash/system/chromeos/network/network_state_notifier.cc b/ash/system/chromeos/network/network_state_notifier.cc
index a90350507b190b3f22c8a4327b283130af1b5415..1c971a32a44360d4df4b71d6c223f8e70343b96d 100644
--- a/ash/system/chromeos/network/network_state_notifier.cc
+++ b/ash/system/chromeos/network/network_state_notifier.cc
@@ -32,6 +32,12 @@ const int kMinTimeBetweenOutOfCreditsNotifySeconds = 10 * 60;
string16 GetConnectErrorString(const std::string& error_name) {
if (error_name == NetworkConnectionHandler::kErrorNotFound)
return l10n_util::GetStringUTF16(IDS_CHROMEOS_NETWORK_ERROR_CONNECT_FAILED);
+ if (error_name == NetworkConnectionHandler::kErrorConfigureFailed)
+ return l10n_util::GetStringUTF16(
+ IDS_CHROMEOS_NETWORK_ERROR_CONFIGURE_FAILED);
+ if (error_name == NetworkConnectionHandler::kErrorActivateFailed)
+ return l10n_util::GetStringUTF16(
+ IDS_CHROMEOS_NETWORK_ERROR_ACTIVATION_FAILED);
return string16();
}
@@ -41,17 +47,31 @@ namespace ash {
NetworkStateNotifier::NetworkStateNotifier()
: cellular_out_of_credits_(false) {
- if (NetworkHandler::IsInitialized()) {
- NetworkHandler::Get()->network_state_handler()->AddObserver(
- this, FROM_HERE);
- InitializeNetworks();
- }
+ if (!NetworkHandler::IsInitialized())
+ return;
+ NetworkHandler::Get()->network_state_handler()->AddObserver(this, FROM_HERE);
+
+ // Initialize |last_active_network_|.
+ const NetworkState* default_network =
+ NetworkHandler::Get()->network_state_handler()->DefaultNetwork();
+ if (default_network && default_network->IsConnectedState())
+ last_active_network_ = default_network->path();
}
NetworkStateNotifier::~NetworkStateNotifier() {
- if (NetworkHandler::IsInitialized()) {
- NetworkHandler::Get()->network_state_handler()->RemoveObserver(
- this, FROM_HERE);
+ if (!NetworkHandler::IsInitialized())
+ return;
+ NetworkHandler::Get()->network_state_handler()->RemoveObserver(
+ this, FROM_HERE);
+}
+
+void NetworkStateNotifier::NetworkListChanged() {
+ // Trigger any pending connect failed error if the network list changes
+ // (which indicates all NetworkState entries are up to date). This is in
+ // case a connect attempt fails because a network is no longer visible.
+ if (!connect_failed_network_.empty()) {
+ ShowNetworkConnectError(
+ NetworkConnectionHandler::kErrorConnectFailed, connect_failed_network_);
}
}
@@ -65,40 +85,15 @@ void NetworkStateNotifier::DefaultNetworkChanged(const NetworkState* network) {
}
}
-void NetworkStateNotifier::NetworkConnectionStateChanged(
- const NetworkState* network) {
- NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler();
- std::string prev_state;
- std::string new_state = network->connection_state();
- CachedStateMap::iterator iter = cached_state_.find(network->path());
- if (iter != cached_state_.end()) {
- prev_state = iter->second;
- if (prev_state == new_state)
- return; // No state change
- VLOG(1) << "NetworkStateNotifier: State: " << prev_state
- << " ->: " << new_state;
- iter->second = new_state;
- } else {
- VLOG(1) << "NetworkStateNotifier: New Service: " << network->path()
- << " State: " << new_state;
- cached_state_[network->path()] = new_state;
- return; // New network, no state change
- }
-
- if (new_state != flimflam::kStateFailure)
- return;
-
- if (network->path() != handler->connecting_network())
- return; // Only show notifications for explicitly connected networks
-
- NET_LOG_EVENT("ConnectionFailure", network->path());
-
- ShowConnectError("", network);
-}
-
void NetworkStateNotifier::NetworkPropertiesUpdated(
const NetworkState* network) {
DCHECK(network);
+ // Trigger a pending connect failed error for |network| when the Error
+ // property has been set.
+ if (network->path() == connect_failed_network_ && !network->error().empty()) {
+ ShowNetworkConnectError(
+ NetworkConnectionHandler::kErrorConnectFailed, connect_failed_network_);
+ }
// Trigger "Out of credits" notification if the cellular network is the most
// recent default network (i.e. we have not switched to another network).
if (network->type() == flimflam::kTypeCellular &&
@@ -146,17 +141,24 @@ void NetworkStateNotifier::ShowNetworkConnectError(
const std::string& service_path) {
const NetworkState* network = NetworkHandler::Get()->network_state_handler()->
GetNetworkState(service_path);
- ShowConnectError(error_name, network);
-}
+ if (error_name == NetworkConnectionHandler::kErrorConnectFailed &&
+ service_path != connect_failed_network_) {
+ // Shill may not have set the Error property yet. First request an update
+ // and wait for either the update to complete or the network list to be
+ // updated before displaying the error.
+ connect_failed_network_ = service_path;
+ return;
+ }
+ connect_failed_network_.clear();
-void NetworkStateNotifier::ShowConnectError(const std::string& error_name,
- const NetworkState* network) {
- std::vector<string16> no_links;
string16 error = GetConnectErrorString(error_name);
if (error.empty() && network)
error = network_connect::ErrorString(network->error());
if (error.empty())
error = l10n_util::GetStringUTF16(IDS_CHROMEOS_NETWORK_ERROR_UNKNOWN);
+ NET_LOG_ERROR("Connect error notification: " + UTF16ToUTF8(error),
+ service_path);
+
std::string name = network ? network->name() : "";
string16 error_msg;
if (network && !network->error_details().empty()) {
@@ -168,6 +170,8 @@ void NetworkStateNotifier::ShowConnectError(const std::string& error_name,
IDS_NETWORK_CONNECTION_ERROR_MESSAGE_WITH_DETAILS,
UTF8ToUTF16(name), error);
}
+
+ std::vector<string16> no_links;
ash::Shell::GetInstance()->system_tray_notifier()->NotifySetNetworkMessage(
this,
NetworkObserver::ERROR_CONNECT_FAILED,
@@ -177,21 +181,4 @@ void NetworkStateNotifier::ShowConnectError(const std::string& error_name,
no_links);
}
-void NetworkStateNotifier::InitializeNetworks() {
- NetworkStateHandler::NetworkStateList network_list;
- NetworkHandler::Get()->network_state_handler()->GetNetworkList(&network_list);
- VLOG(1) << "NetworkStateNotifier:InitializeNetworks: "
- << network_list.size();
- for (NetworkStateHandler::NetworkStateList::iterator iter =
- network_list.begin(); iter != network_list.end(); ++iter) {
- const NetworkState* network = *iter;
- VLOG(2) << " Network: " << network->path();
- cached_state_[network->path()] = network->connection_state();
- }
- const NetworkState* default_network =
- NetworkHandler::Get()->network_state_handler()->DefaultNetwork();
- if (default_network && default_network->IsConnectedState())
- last_active_network_ = default_network->path();
-}
-
} // namespace ash
« no previous file with comments | « ash/system/chromeos/network/network_state_notifier.h ('k') | ash/system/chromeos/network/network_state_notifier_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698