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 efe0bd1b7aff7ef66a6a94257321412d551dd6d8..7867b924fe04f56edaeefdb1d6d93deb07a19ae0 100644 |
--- a/ash/system/chromeos/network/network_state_notifier.cc |
+++ b/ash/system/chromeos/network/network_state_notifier.cc |
@@ -4,10 +4,10 @@ |
#include "ash/system/chromeos/network/network_state_notifier.h" |
-#include "ash/shell.h" |
#include "ash/system/chromeos/network/network_connect.h" |
#include "ash/system/system_notifier.h" |
-#include "ash/system/tray/system_tray_delegate.h" |
+#include "base/bind.h" |
+#include "base/location.h" |
#include "base/strings/string16.h" |
#include "base/strings/string_util.h" |
#include "base/strings/utf_string_conversions.h" |
@@ -34,9 +34,6 @@ using chromeos::NetworkTypePattern; |
namespace { |
-const char kNetworkOutOfCreditsNotificationId[] = |
- "chrome://settings/internet/out-of-credits"; |
- |
const int kMinTimeBetweenOutOfCreditsNotifySeconds = 10 * 60; |
// Ignore in-progress error. |
@@ -58,7 +55,7 @@ base::string16 GetConnectErrorString(const std::string& error_name) { |
return l10n_util::GetStringUTF16( |
IDS_CHROMEOS_NETWORK_ERROR_CERTIFICATES_NOT_LOADED); |
} |
- if (error_name == ash::network_connect::kErrorActivateFailed) { |
+ if (error_name == ash::NetworkConnect::kErrorActivateFailed) { |
return l10n_util::GetStringUTF16( |
IDS_CHROMEOS_NETWORK_ERROR_ACTIVATION_FAILED); |
} |
@@ -70,27 +67,31 @@ void ShowErrorNotification(const std::string& notification_id, |
const base::string16& title, |
const base::string16& message, |
const base::Closure& callback) { |
- int icon_id = (network_type == shill::kTypeCellular) ? |
- IDR_AURA_UBER_TRAY_CELLULAR_NETWORK_FAILED : |
- IDR_AURA_UBER_TRAY_NETWORK_FAILED; |
+ int icon_id = (network_type == shill::kTypeCellular) |
+ ? IDR_AURA_UBER_TRAY_CELLULAR_NETWORK_FAILED |
+ : IDR_AURA_UBER_TRAY_NETWORK_FAILED; |
const gfx::Image& icon = |
ui::ResourceBundle::GetSharedInstance().GetImageNamed(icon_id); |
message_center::MessageCenter::Get()->AddNotification( |
message_center::Notification::CreateSystemNotification( |
- notification_id, |
- title, |
- message, |
- icon, |
- ash::system_notifier::kNotifierNetworkError, |
- callback)); |
+ notification_id, title, message, icon, |
+ ash::system_notifier::kNotifierNetworkError, callback)); |
} |
} // namespace |
namespace ash { |
-NetworkStateNotifier::NetworkStateNotifier() |
- : did_show_out_of_credits_(false), |
+const char NetworkStateNotifier::kNetworkConnectNotificationId[] = |
+ "chrome://settings/internet/connect"; |
+const char NetworkStateNotifier::kNetworkActivateNotificationId[] = |
+ "chrome://settings/internet/activate"; |
+const char NetworkStateNotifier::kNetworkOutOfCreditsNotificationId[] = |
+ "chrome://settings/internet/out-of-credits"; |
+ |
+NetworkStateNotifier::NetworkStateNotifier(NetworkConnect* network_connect) |
+ : network_connect_(network_connect), |
+ did_show_out_of_credits_(false), |
weak_ptr_factory_(this) { |
if (!NetworkHandler::IsInitialized()) |
return; |
@@ -102,8 +103,8 @@ NetworkStateNotifier::NetworkStateNotifier() |
NetworkStateNotifier::~NetworkStateNotifier() { |
if (!NetworkHandler::IsInitialized()) |
return; |
- NetworkHandler::Get()->network_state_handler()->RemoveObserver( |
- this, FROM_HERE); |
+ NetworkHandler::Get()->network_state_handler()->RemoveObserver(this, |
+ FROM_HERE); |
} |
void NetworkStateNotifier::DefaultNetworkChanged(const NetworkState* network) { |
@@ -149,7 +150,8 @@ void NetworkStateNotifier::UpdateCellularOutOfCredits( |
if (default_network && default_network != cellular) |
return; |
if (handler->ConnectingNetworkByType(NetworkTypePattern::NonVirtual()) || |
- NetworkHandler::Get()->network_connection_handler() |
+ NetworkHandler::Get() |
+ ->network_connection_handler() |
->HasPendingConnectRequest()) |
return; |
@@ -158,14 +160,12 @@ void NetworkStateNotifier::UpdateCellularOutOfCredits( |
if (dtime.InSeconds() > kMinTimeBetweenOutOfCreditsNotifySeconds) { |
out_of_credits_notify_time_ = base::Time::Now(); |
base::string16 error_msg = l10n_util::GetStringFUTF16( |
- IDS_NETWORK_OUT_OF_CREDITS_BODY, |
- base::UTF8ToUTF16(cellular->name())); |
+ IDS_NETWORK_OUT_OF_CREDITS_BODY, base::UTF8ToUTF16(cellular->name())); |
ShowErrorNotification( |
- kNetworkOutOfCreditsNotificationId, |
- cellular->type(), |
- l10n_util::GetStringUTF16(IDS_NETWORK_OUT_OF_CREDITS_TITLE), |
- error_msg, |
- base::Bind(&network_connect::ShowNetworkSettings, cellular->path())); |
+ kNetworkOutOfCreditsNotificationId, cellular->type(), |
+ l10n_util::GetStringUTF16(IDS_NETWORK_OUT_OF_CREDITS_TITLE), error_msg, |
+ base::Bind(&NetworkStateNotifier::ShowNetworkSettings, |
+ weak_ptr_factory_.GetWeakPtr(), cellular->path())); |
} |
} |
@@ -193,14 +193,13 @@ void NetworkStateNotifier::UpdateCellularActivating( |
ui::ResourceBundle::GetSharedInstance().GetImageNamed(icon_id); |
message_center::MessageCenter::Get()->AddNotification( |
message_center::Notification::CreateSystemNotification( |
- ash::network_connect::kNetworkActivateNotificationId, |
+ kNetworkActivateNotificationId, |
l10n_util::GetStringUTF16(IDS_NETWORK_CELLULAR_ACTIVATED_TITLE), |
l10n_util::GetStringFUTF16(IDS_NETWORK_CELLULAR_ACTIVATED, |
base::UTF8ToUTF16((cellular->name()))), |
- icon, |
- system_notifier::kNotifierNetwork, |
- base::Bind(&ash::network_connect::ShowNetworkSettings, |
- cellular->path()))); |
+ icon, system_notifier::kNotifierNetwork, |
+ base::Bind(&NetworkStateNotifier::ShowNetworkSettings, |
+ weak_ptr_factory_.GetWeakPtr(), cellular->path()))); |
} |
void NetworkStateNotifier::ShowNetworkConnectError( |
@@ -220,6 +219,38 @@ void NetworkStateNotifier::ShowNetworkConnectError( |
weak_ptr_factory_.GetWeakPtr(), error_name, service_path)); |
} |
+void NetworkStateNotifier::ShowMobileActivationError( |
+ const std::string& service_path) { |
+ const NetworkState* cellular = |
+ NetworkHandler::Get()->network_state_handler()->GetNetworkState( |
+ service_path); |
+ if (!cellular || cellular->type() != shill::kTypeCellular) { |
+ NET_LOG_ERROR("ShowMobileActivationError without Cellular network", |
+ service_path); |
+ return; |
+ } |
+ message_center::MessageCenter::Get()->AddNotification( |
+ message_center::Notification::CreateSystemNotification( |
+ kNetworkActivateNotificationId, |
+ l10n_util::GetStringUTF16(IDS_NETWORK_ACTIVATION_ERROR_TITLE), |
+ l10n_util::GetStringFUTF16(IDS_NETWORK_ACTIVATION_NEEDS_CONNECTION, |
+ base::UTF8ToUTF16(cellular->name())), |
+ ui::ResourceBundle::GetSharedInstance().GetImageNamed( |
+ IDR_AURA_UBER_TRAY_CELLULAR_NETWORK_FAILED), |
+ ash::system_notifier::kNotifierNetworkError, |
+ base::Bind(&NetworkStateNotifier::ShowNetworkSettings, |
+ weak_ptr_factory_.GetWeakPtr(), service_path))); |
+} |
+ |
+void NetworkStateNotifier::RemoveConnectNotification() { |
+ message_center::MessageCenter* message_center = |
+ message_center::MessageCenter::Get(); |
+ if (message_center) { |
+ message_center->RemoveNotification(kNetworkConnectNotificationId, |
+ false /* not by user */); |
+ } |
+} |
+ |
void NetworkStateNotifier::ConnectErrorPropertiesSucceeded( |
const std::string& error_name, |
const std::string& service_path, |
@@ -228,8 +259,8 @@ void NetworkStateNotifier::ConnectErrorPropertiesSucceeded( |
shill_properties.GetStringWithoutPathExpansion(shill::kStateProperty, &state); |
if (chromeos::NetworkState::StateIsConnected(state) || |
chromeos::NetworkState::StateIsConnecting(state)) { |
- // Network is no longer in an error state. This can happen if an unexpected |
- // Idle state transition occurs, see crbug.com/333955. |
+ // Network is no longer in an error state. This can happen if an |
+ // unexpected idle state transition occurs, see crbug.com/333955. |
return; |
} |
ShowConnectErrorNotification(error_name, service_path, shill_properties); |
@@ -269,9 +300,9 @@ void NetworkStateNotifier::ShowConnectErrorNotification( |
service_path); |
if (network) { |
// Always log last_error, but only use it if shill_error is empty. |
- // TODO(stevenjb): This shouldn't ever be necessary, but is kept here as a |
- // failsafe since more information is better than less when debugging and |
- // we have encountered some strange edge cases before. |
+ // TODO(stevenjb): This shouldn't ever be necessary, but is kept here as |
+ // a failsafe since more information is better than less when debugging |
+ // and we have encountered some strange edge cases before. |
NET_LOG_DEBUG("Notify Network.last_error: " + network->last_error(), |
service_path); |
if (shill_error.empty()) |
@@ -283,7 +314,7 @@ void NetworkStateNotifier::ShowConnectErrorNotification( |
return; |
} |
- error = network_connect::ErrorString(shill_error, service_path); |
+ error = network_connect_->GetErrorString(shill_error, service_path); |
if (error.empty()) |
error = l10n_util::GetStringUTF16(IDS_CHROMEOS_NETWORK_ERROR_UNKNOWN); |
} |
@@ -302,16 +333,15 @@ void NetworkStateNotifier::ShowConnectErrorNotification( |
// network_name should't be empty if network_error_details is set. |
error_msg = l10n_util::GetStringFUTF16( |
IDS_NETWORK_CONNECTION_ERROR_MESSAGE_WITH_SERVER_MESSAGE, |
- base::UTF8ToUTF16(network_name), |
- error, |
+ base::UTF8ToUTF16(network_name), error, |
base::UTF8ToUTF16(network_error_details)); |
} else if (network_name.empty()) { |
error_msg = l10n_util::GetStringFUTF16( |
IDS_NETWORK_CONNECTION_ERROR_MESSAGE_NO_NAME, error); |
} else { |
- error_msg = l10n_util::GetStringFUTF16(IDS_NETWORK_CONNECTION_ERROR_MESSAGE, |
- base::UTF8ToUTF16(network_name), |
- error); |
+ error_msg = |
+ l10n_util::GetStringFUTF16(IDS_NETWORK_CONNECTION_ERROR_MESSAGE, |
+ base::UTF8ToUTF16(network_name), error); |
} |
std::string network_type; |
@@ -319,11 +349,15 @@ void NetworkStateNotifier::ShowConnectErrorNotification( |
&network_type); |
ShowErrorNotification( |
- network_connect::kNetworkConnectNotificationId, |
- network_type, |
- l10n_util::GetStringUTF16(IDS_NETWORK_CONNECTION_ERROR_TITLE), |
- error_msg, |
- base::Bind(&network_connect::ShowNetworkSettings, service_path)); |
+ kNetworkConnectNotificationId, network_type, |
+ l10n_util::GetStringUTF16(IDS_NETWORK_CONNECTION_ERROR_TITLE), error_msg, |
+ base::Bind(&NetworkStateNotifier::ShowNetworkSettings, |
+ weak_ptr_factory_.GetWeakPtr(), service_path)); |
+} |
+ |
+void NetworkStateNotifier::ShowNetworkSettings( |
+ const std::string& service_path) { |
+ network_connect_->ShowNetworkSettings(service_path); |
} |
} // namespace ash |