Index: ash/system/chromeos/network/network_connect.cc |
diff --git a/ash/system/chromeos/network/network_connect.cc b/ash/system/chromeos/network/network_connect.cc |
index 1647546a453ab75b9bfa5d5735b6f2a4928bccc9..82c80f58fba4afe89d4b4cc70103c3571e8bb71f 100644 |
--- a/ash/system/chromeos/network/network_connect.cc |
+++ b/ash/system/chromeos/network/network_connect.cc |
@@ -4,12 +4,7 @@ |
#include "ash/system/chromeos/network/network_connect.h" |
-#include "ash/session/session_state_delegate.h" |
-#include "ash/shell.h" |
#include "ash/system/chromeos/network/network_state_notifier.h" |
-#include "ash/system/system_notifier.h" |
-#include "ash/system/tray/system_tray_delegate.h" |
-#include "ash/system/tray/system_tray_notifier.h" |
#include "base/bind.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/strings/string_util.h" |
@@ -48,9 +43,6 @@ namespace ash { |
namespace { |
-// TODO(stevenjb): This should be in service_constants.h |
-const char kErrorInProgress[] = "org.chromium.flimflam.Error.InProgress"; |
- |
// Returns true for carriers that can be activated through Shill instead of |
// through a WebUI dialog. |
bool IsDirectActivatedCarrier(const std::string& carrier) { |
@@ -59,15 +51,84 @@ bool IsDirectActivatedCarrier(const std::string& carrier) { |
return false; |
} |
-void ShowErrorNotification(const std::string& error_name, |
- const std::string& service_path) { |
- Shell::GetInstance()->system_tray_notifier()->network_state_notifier()-> |
- ShowNetworkConnectError(error_name, service_path); |
+const NetworkState* GetNetworkState(const std::string& service_path) { |
+ return NetworkHandler::Get()->network_state_handler()->GetNetworkState( |
+ service_path); |
+} |
+ |
+class NetworkConnectImpl : public NetworkConnect { |
+ public: |
+ explicit NetworkConnectImpl(Delegate* delegate); |
+ ~NetworkConnectImpl() override; |
+ |
+ // NetworkConnect |
+ void ConnectToNetwork(const std::string& service_path) override; |
+ void SetTechnologyEnabled(const chromeos::NetworkTypePattern& technology, |
+ bool enabled_state) override; |
+ void ActivateCellular(const std::string& service_path) override; |
+ void ShowMobileSetup(const std::string& service_path) override; |
+ void ConfigureNetworkAndConnect(const std::string& service_path, |
+ const base::DictionaryValue& properties, |
+ bool shared) override; |
+ void CreateConfigurationAndConnect(base::DictionaryValue* properties, |
+ bool shared) override; |
+ void CreateConfiguration(base::DictionaryValue* properties, |
+ bool shared) override; |
+ base::string16 GetErrorString(const std::string& error, |
+ const std::string& service_path) override; |
+ void ShowNetworkSettings(const std::string& service_path) override; |
+ |
+ private: |
+ void HandleUnconfiguredNetwork(const std::string& service_path); |
+ void OnConnectFailed(const std::string& service_path, |
+ const std::string& error_name, |
+ scoped_ptr<base::DictionaryValue> error_data); |
+ bool GetNetworkProfilePath(bool shared, std::string* profile_path); |
+ void OnConnectSucceeded(const std::string& service_path); |
+ void CallConnectToNetwork(const std::string& service_path, |
+ bool check_error_state); |
+ void OnActivateFailed(const std::string& service_path, |
+ const std::string& error_name, |
+ scoped_ptr<base::DictionaryValue> error_data); |
+ void OnActivateSucceeded(const std::string& service_path); |
+ void OnConfigureFailed(const std::string& error_name, |
+ scoped_ptr<base::DictionaryValue> error_data); |
+ void OnConfigureSucceeded(bool connect_on_configure, |
+ const std::string& service_path); |
+ void CallCreateConfiguration(base::DictionaryValue* properties, |
+ bool shared, |
+ bool connect_on_configure); |
+ void SetPropertiesFailed(const std::string& desc, |
+ const std::string& service_path, |
+ const std::string& config_error_name, |
+ scoped_ptr<base::DictionaryValue> error_data); |
+ void SetPropertiesToClear(base::DictionaryValue* properties_to_set, |
+ std::vector<std::string>* properties_to_clear); |
+ void ClearPropertiesAndConnect( |
+ const std::string& service_path, |
+ const std::vector<std::string>& properties_to_clear); |
+ void ConfigureSetProfileSucceeded( |
+ const std::string& service_path, |
+ scoped_ptr<base::DictionaryValue> properties_to_set); |
+ |
+ Delegate* delegate_; |
+ scoped_ptr<NetworkStateNotifier> network_state_notifier_; |
+ base::WeakPtrFactory<NetworkConnectImpl> weak_factory_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(NetworkConnectImpl); |
+}; |
+ |
+NetworkConnectImpl::NetworkConnectImpl(Delegate* delegate) |
+ : delegate_(delegate), weak_factory_(this) { |
+ network_state_notifier_.reset(new NetworkStateNotifier(this)); |
+} |
+ |
+NetworkConnectImpl::~NetworkConnectImpl() { |
} |
-void HandleUnconfiguredNetwork(const std::string& service_path) { |
- const NetworkState* network = NetworkHandler::Get()->network_state_handler()-> |
- GetNetworkState(service_path); |
+void NetworkConnectImpl::HandleUnconfiguredNetwork( |
+ const std::string& service_path) { |
+ const NetworkState* network = GetNetworkState(service_path); |
if (!network) { |
NET_LOG_ERROR("Configuring unknown network", service_path); |
return; |
@@ -76,32 +137,29 @@ void HandleUnconfiguredNetwork(const std::string& service_path) { |
if (network->type() == shill::kTypeWifi) { |
// Only show the config view for secure networks, otherwise do nothing. |
if (network->security() != shill::kSecurityNone) { |
- ash::Shell::GetInstance()->system_tray_delegate()-> |
- ShowNetworkConfigure(service_path); |
+ delegate_->ShowNetworkConfigure(service_path); |
} |
return; |
} |
if (network->type() == shill::kTypeWimax || |
network->type() == shill::kTypeVPN) { |
- ash::Shell::GetInstance()->system_tray_delegate()-> |
- ShowNetworkConfigure(service_path); |
+ delegate_->ShowNetworkConfigure(service_path); |
return; |
} |
if (network->type() == shill::kTypeCellular) { |
if (network->RequiresActivation()) { |
- ash::network_connect::ActivateCellular(service_path); |
+ ActivateCellular(service_path); |
return; |
} |
if (network->cellular_out_of_credits()) { |
- ash::network_connect::ShowMobileSetup(service_path); |
+ ShowMobileSetup(service_path); |
return; |
} |
// No special configure or setup for |network|, show the settings UI. |
if (chromeos::LoginState::Get()->IsUserLoggedIn()) { |
- ash::Shell::GetInstance()->system_tray_delegate()-> |
- ShowNetworkSettings(service_path); |
+ delegate_->ShowNetworkSettings(service_path); |
} |
return; |
} |
@@ -111,7 +169,8 @@ void HandleUnconfiguredNetwork(const std::string& service_path) { |
// If |shared| is true, sets |profile_path| to the shared profile path. |
// Otherwise sets |profile_path| to the user profile path if authenticated and |
// available. Returns 'false' if unable to set |profile_path|. |
-bool GetNetworkProfilePath(bool shared, std::string* profile_path) { |
+bool NetworkConnectImpl::GetNetworkProfilePath(bool shared, |
+ std::string* profile_path) { |
if (shared) { |
*profile_path = NetworkProfileHandler::GetSharedProfilePath(); |
return true; |
@@ -122,9 +181,8 @@ bool GetNetworkProfilePath(bool shared, std::string* profile_path) { |
return false; |
} |
- const NetworkProfile* profile = |
- NetworkHandler::Get()->network_profile_handler()-> |
- GetDefaultUserProfile(); |
+ const NetworkProfile* profile = |
+ NetworkHandler::Get()->network_profile_handler()->GetDefaultUserProfile(); |
if (!profile) { |
NET_LOG_ERROR("No user profile for unshared network configuration", ""); |
return false; |
@@ -134,15 +192,14 @@ bool GetNetworkProfilePath(bool shared, std::string* profile_path) { |
return true; |
} |
-void OnConnectFailed(const std::string& service_path, |
- const std::string& error_name, |
- scoped_ptr<base::DictionaryValue> error_data) { |
+void NetworkConnectImpl::OnConnectFailed( |
+ const std::string& service_path, |
+ const std::string& error_name, |
+ scoped_ptr<base::DictionaryValue> error_data) { |
NET_LOG_ERROR("Connect Failed: " + error_name, service_path); |
- if (!ash::Shell::HasInstance()) |
- return; |
- |
- // If a new connect attempt canceled this connect, no need to notify the user. |
+ // If a new connect attempt canceled this connect, no need to notify the |
+ // user. |
if (error_name == NetworkConnectionHandler::kErrorConnectCanceled) |
return; |
@@ -155,88 +212,82 @@ void OnConnectFailed(const std::string& service_path, |
} |
if (error_name == NetworkConnectionHandler::kErrorCertificateRequired) { |
- if (!ash::Shell::GetInstance()->system_tray_delegate()->EnrollNetwork( |
- service_path)) { |
+ if (!delegate_->ShowEnrollNetwork(service_path)) { |
HandleUnconfiguredNetwork(service_path); |
} |
return; |
} |
if (error_name == NetworkConnectionHandler::kErrorActivationRequired) { |
- network_connect::ActivateCellular(service_path); |
+ ActivateCellular(service_path); |
return; |
} |
if (error_name == NetworkConnectionHandler::kErrorConnected || |
error_name == NetworkConnectionHandler::kErrorConnecting) { |
- network_connect::ShowNetworkSettings(service_path); |
+ ShowNetworkSettings(service_path); |
return; |
} |
// ConnectFailed or unknown error; show a notification. |
- ShowErrorNotification(error_name, service_path); |
+ network_state_notifier_->ShowNetworkConnectError(error_name, service_path); |
- // Only show a configure dialog if there was a ConnectFailed error and the |
- // screen is not locked. |
- if (error_name != shill::kErrorConnectFailed || |
- Shell::GetInstance()->session_state_delegate()->IsScreenLocked()) |
+ // Only show a configure dialog if there was a ConnectFailed error. |
+ if (error_name != shill::kErrorConnectFailed) |
return; |
// If Shill reports an InProgress error, don't try to configure the network. |
std::string dbus_error_name; |
- error_data.get()->GetString( |
- chromeos::network_handler::kDbusErrorName, &dbus_error_name); |
- if (dbus_error_name == kErrorInProgress) |
+ error_data.get()->GetString(chromeos::network_handler::kDbusErrorName, |
+ &dbus_error_name); |
+ if (dbus_error_name == shill::kErrorResultInProgress) |
return; |
HandleUnconfiguredNetwork(service_path); |
} |
-void OnConnectSucceeded(const std::string& service_path) { |
+void NetworkConnectImpl::OnConnectSucceeded(const std::string& service_path) { |
NET_LOG_USER("Connect Succeeded", service_path); |
- if (!ash::Shell::HasInstance()) |
- return; |
- message_center::MessageCenter::Get()->RemoveNotification( |
- network_connect::kNetworkConnectNotificationId, false /* not by user */); |
+ network_state_notifier_->RemoveConnectNotification(); |
} |
// If |check_error_state| is true, error state for the network is checked, |
// otherwise any current error state is ignored (e.g. for recently configured |
// networks or repeat connect attempts). |
-void CallConnectToNetwork(const std::string& service_path, |
- bool check_error_state) { |
- if (message_center::MessageCenter::Get()) { |
- message_center::MessageCenter::Get()->RemoveNotification( |
- network_connect::kNetworkConnectNotificationId, |
- false /* not by user */); |
- } |
- |
+void NetworkConnectImpl::CallConnectToNetwork(const std::string& service_path, |
+ bool check_error_state) { |
+ network_state_notifier_->RemoveConnectNotification(); |
NetworkHandler::Get()->network_connection_handler()->ConnectToNetwork( |
- service_path, |
- base::Bind(&OnConnectSucceeded, service_path), |
- base::Bind(&OnConnectFailed, service_path), |
+ service_path, base::Bind(&NetworkConnectImpl::OnConnectSucceeded, |
+ weak_factory_.GetWeakPtr(), service_path), |
+ base::Bind(&NetworkConnectImpl::OnConnectFailed, |
+ weak_factory_.GetWeakPtr(), service_path), |
check_error_state); |
} |
-void OnActivateFailed(const std::string& service_path, |
- const std::string& error_name, |
- scoped_ptr<base::DictionaryValue> error_data) { |
+void NetworkConnectImpl::OnActivateFailed( |
+ const std::string& service_path, |
+ const std::string& error_name, |
+ scoped_ptr<base::DictionaryValue> error_data) { |
NET_LOG_ERROR("Unable to activate network", service_path); |
- ShowErrorNotification(network_connect::kErrorActivateFailed, service_path); |
+ network_state_notifier_->ShowNetworkConnectError(kErrorActivateFailed, |
+ service_path); |
} |
-void OnActivateSucceeded(const std::string& service_path) { |
+void NetworkConnectImpl::OnActivateSucceeded(const std::string& service_path) { |
NET_LOG_USER("Activation Succeeded", service_path); |
} |
-void OnConfigureFailed(const std::string& error_name, |
- scoped_ptr<base::DictionaryValue> error_data) { |
+void NetworkConnectImpl::OnConfigureFailed( |
+ const std::string& error_name, |
+ scoped_ptr<base::DictionaryValue> error_data) { |
NET_LOG_ERROR("Unable to configure network", ""); |
- ShowErrorNotification(NetworkConnectionHandler::kErrorConfigureFailed, ""); |
+ network_state_notifier_->ShowNetworkConnectError( |
+ NetworkConnectionHandler::kErrorConfigureFailed, ""); |
} |
-void OnConfigureSucceeded(bool connect_on_configure, |
- const std::string& service_path) { |
+void NetworkConnectImpl::OnConfigureSucceeded(bool connect_on_configure, |
+ const std::string& service_path) { |
NET_LOG_USER("Configure Succeeded", service_path); |
if (!connect_on_configure) |
return; |
@@ -245,33 +296,38 @@ void OnConfigureSucceeded(bool connect_on_configure, |
CallConnectToNetwork(service_path, check_error_state); |
} |
-void CallCreateConfiguration(base::DictionaryValue* properties, |
- bool shared, |
- bool connect_on_configure) { |
+void NetworkConnectImpl::CallCreateConfiguration( |
+ base::DictionaryValue* properties, |
+ bool shared, |
+ bool connect_on_configure) { |
std::string profile_path; |
if (!GetNetworkProfilePath(shared, &profile_path)) { |
- ShowErrorNotification(NetworkConnectionHandler::kErrorConfigureFailed, ""); |
+ network_state_notifier_->ShowNetworkConnectError( |
+ NetworkConnectionHandler::kErrorConfigureFailed, ""); |
return; |
} |
- properties->SetStringWithoutPathExpansion( |
- shill::kProfileProperty, profile_path); |
+ properties->SetStringWithoutPathExpansion(shill::kProfileProperty, |
+ profile_path); |
NetworkHandler::Get()->network_configuration_handler()->CreateConfiguration( |
- *properties, |
- base::Bind(&OnConfigureSucceeded, connect_on_configure), |
- base::Bind(&OnConfigureFailed)); |
+ *properties, base::Bind(&NetworkConnectImpl::OnConfigureSucceeded, |
+ weak_factory_.GetWeakPtr(), connect_on_configure), |
+ base::Bind(&NetworkConnectImpl::OnConfigureFailed, |
+ weak_factory_.GetWeakPtr())); |
} |
-void SetPropertiesFailed(const std::string& desc, |
- const std::string& service_path, |
- const std::string& config_error_name, |
- scoped_ptr<base::DictionaryValue> error_data) { |
+void NetworkConnectImpl::SetPropertiesFailed( |
+ const std::string& desc, |
+ const std::string& service_path, |
+ const std::string& config_error_name, |
+ scoped_ptr<base::DictionaryValue> error_data) { |
NET_LOG_ERROR(desc + ": Failed: " + config_error_name, service_path); |
- ShowErrorNotification( |
+ network_state_notifier_->ShowNetworkConnectError( |
NetworkConnectionHandler::kErrorConfigureFailed, service_path); |
} |
-void SetPropertiesToClear(base::DictionaryValue* properties_to_set, |
- std::vector<std::string>* properties_to_clear) { |
+void NetworkConnectImpl::SetPropertiesToClear( |
+ base::DictionaryValue* properties_to_set, |
+ std::vector<std::string>* properties_to_clear) { |
// Move empty string properties to properties_to_clear. |
for (base::DictionaryValue::Iterator iter(*properties_to_set); |
!iter.IsAtEnd(); iter.Advance()) { |
@@ -286,58 +342,43 @@ void SetPropertiesToClear(base::DictionaryValue* properties_to_set, |
} |
} |
-void ClearPropertiesAndConnect( |
+void NetworkConnectImpl::ClearPropertiesAndConnect( |
const std::string& service_path, |
const std::vector<std::string>& properties_to_clear) { |
NET_LOG_USER("ClearPropertiesAndConnect", service_path); |
// After configuring a network, ignore any (possibly stale) error state. |
const bool check_error_state = false; |
NetworkHandler::Get()->network_configuration_handler()->ClearProperties( |
- service_path, |
- properties_to_clear, |
- base::Bind(&CallConnectToNetwork, |
- service_path, check_error_state), |
- base::Bind(&SetPropertiesFailed, "ClearProperties", service_path)); |
+ service_path, properties_to_clear, |
+ base::Bind(&NetworkConnectImpl::CallConnectToNetwork, |
+ weak_factory_.GetWeakPtr(), service_path, check_error_state), |
+ base::Bind(&NetworkConnectImpl::SetPropertiesFailed, |
+ weak_factory_.GetWeakPtr(), "ClearProperties", service_path)); |
} |
-void ConfigureSetProfileSucceeded( |
+void NetworkConnectImpl::ConfigureSetProfileSucceeded( |
const std::string& service_path, |
scoped_ptr<base::DictionaryValue> properties_to_set) { |
std::vector<std::string> properties_to_clear; |
SetPropertiesToClear(properties_to_set.get(), &properties_to_clear); |
NetworkHandler::Get()->network_configuration_handler()->SetProperties( |
- service_path, |
- *properties_to_set, |
- base::Bind(&ClearPropertiesAndConnect, |
- service_path, |
- properties_to_clear), |
- base::Bind(&SetPropertiesFailed, "SetProperties", service_path)); |
+ service_path, *properties_to_set, |
+ base::Bind(&NetworkConnectImpl::ClearPropertiesAndConnect, |
+ weak_factory_.GetWeakPtr(), service_path, properties_to_clear), |
+ base::Bind(&NetworkConnectImpl::SetPropertiesFailed, |
+ weak_factory_.GetWeakPtr(), "SetProperties", service_path)); |
} |
-const NetworkState* GetNetworkState(const std::string& service_path) { |
- return NetworkHandler::Get()->network_state_handler()-> |
- GetNetworkState(service_path); |
-} |
+// Public methods |
-} // namespace |
- |
-namespace network_connect { |
- |
-const char kNetworkConnectNotificationId[] = |
- "chrome://settings/internet/connect"; |
-const char kNetworkActivateNotificationId[] = |
- "chrome://settings/internet/activate"; |
- |
-const char kErrorActivateFailed[] = "activate-failed"; |
- |
-void ConnectToNetwork(const std::string& service_path) { |
+void NetworkConnectImpl::ConnectToNetwork(const std::string& service_path) { |
NET_LOG_USER("ConnectToNetwork", service_path); |
const NetworkState* network = GetNetworkState(service_path); |
if (network) { |
if (!network->error().empty() && !network->security().empty()) { |
NET_LOG_USER("Configure: " + network->error(), service_path); |
- // If the network is in an error state, show the configuration UI directly |
- // to avoid a spurious notification. |
+ // If the network is in an error state, show the configuration UI |
+ // directly to avoid a spurious notification. |
HandleUnconfiguredNetwork(service_path); |
return; |
} else if (network->RequiresActivation()) { |
@@ -349,12 +390,12 @@ void ConnectToNetwork(const std::string& service_path) { |
CallConnectToNetwork(service_path, check_error_state); |
} |
-void SetTechnologyEnabled(const NetworkTypePattern& technology, |
- bool enabled_state) { |
- std::string log_string = |
- base::StringPrintf("technology %s, target state: %s", |
- technology.ToDebugString().c_str(), |
- (enabled_state ? "ENABLED" : "DISABLED")); |
+void NetworkConnectImpl::SetTechnologyEnabled( |
+ const NetworkTypePattern& technology, |
+ bool enabled_state) { |
+ std::string log_string = base::StringPrintf( |
+ "technology %s, target state: %s", technology.ToDebugString().c_str(), |
+ (enabled_state ? "ENABLED" : "DISABLED")); |
NET_LOG_USER("SetTechnologyEnabled", log_string); |
NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler(); |
bool enabled = handler->IsTechnologyEnabled(technology); |
@@ -364,8 +405,8 @@ void SetTechnologyEnabled(const NetworkTypePattern& technology, |
} |
if (enabled) { |
// User requested to disable the technology. |
- handler->SetTechnologyEnabled( |
- technology, false, chromeos::network_handler::ErrorCallback()); |
+ handler->SetTechnologyEnabled(technology, false, |
+ chromeos::network_handler::ErrorCallback()); |
return; |
} |
// If we're dealing with a mobile network, then handle SIM lock here. |
@@ -380,27 +421,26 @@ void SetTechnologyEnabled(const NetworkTypePattern& technology, |
// The following only applies to cellular. |
if (mobile->type() == shill::kTypeCellular) { |
if (mobile->IsSimAbsent()) { |
- // If this is true, then we have a cellular device with no SIM inserted. |
- // TODO(armansito): Chrome should display a notification here, prompting |
- // the user to insert a SIM card and restart the device to enable |
- // cellular. See crbug.com/125171. |
+ // If this is true, then we have a cellular device with no SIM |
+ // inserted. TODO(armansito): Chrome should display a notification here, |
+ // prompting the user to insert a SIM card and restart the device to |
+ // enable cellular. See crbug.com/125171. |
NET_LOG_USER("Cannot enable cellular device without SIM.", log_string); |
return; |
} |
if (!mobile->sim_lock_type().empty()) { |
// A SIM has been inserted, but it is locked. Let the user unlock it |
// via the dialog. |
- ash::Shell::GetInstance()->system_tray_delegate()-> |
- ShowMobileSimDialog(); |
+ delegate_->ShowMobileSimDialog(); |
return; |
} |
} |
} |
- handler->SetTechnologyEnabled( |
- technology, true, chromeos::network_handler::ErrorCallback()); |
+ handler->SetTechnologyEnabled(technology, true, |
+ chromeos::network_handler::ErrorCallback()); |
} |
-void ActivateCellular(const std::string& service_path) { |
+void NetworkConnectImpl::ActivateCellular(const std::string& service_path) { |
NET_LOG_USER("ActivateCellular", service_path); |
const NetworkState* cellular = GetNetworkState(service_path); |
if (!cellular || cellular->type() != shill::kTypeCellular) { |
@@ -408,8 +448,8 @@ void ActivateCellular(const std::string& service_path) { |
return; |
} |
const DeviceState* cellular_device = |
- NetworkHandler::Get()->network_state_handler()-> |
- GetDeviceState(cellular->device_path()); |
+ NetworkHandler::Get()->network_state_handler()->GetDeviceState( |
+ cellular->device_path()); |
if (!cellular_device) { |
NET_LOG_ERROR("ActivateCellular with no Device", service_path); |
return; |
@@ -428,11 +468,13 @@ void ActivateCellular(const std::string& service_path) { |
NetworkHandler::Get()->network_activation_handler()->Activate( |
service_path, |
"", // carrier |
- base::Bind(&OnActivateSucceeded, service_path), |
- base::Bind(&OnActivateFailed, service_path)); |
+ base::Bind(&NetworkConnectImpl::OnActivateSucceeded, |
+ weak_factory_.GetWeakPtr(), service_path), |
+ base::Bind(&NetworkConnectImpl::OnActivateFailed, |
+ weak_factory_.GetWeakPtr(), service_path)); |
} |
-void ShowMobileSetup(const std::string& service_path) { |
+void NetworkConnectImpl::ShowMobileSetup(const std::string& service_path) { |
NetworkStateHandler* handler = NetworkHandler::Get()->network_state_handler(); |
const NetworkState* cellular = handler->GetNetworkState(service_path); |
if (!cellular || cellular->type() != shill::kTypeCellular) { |
@@ -442,57 +484,52 @@ void ShowMobileSetup(const std::string& service_path) { |
if (cellular->activation_state() != shill::kActivationStateActivated && |
cellular->activation_type() == shill::kActivationTypeNonCellular && |
!handler->DefaultNetwork()) { |
- 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(&ash::network_connect::ShowNetworkSettings, |
- service_path))); |
+ network_state_notifier_->ShowMobileActivationError(service_path); |
return; |
} |
- ash::Shell::GetInstance()->system_tray_delegate()->ShowMobileSetupDialog( |
- service_path); |
+ delegate_->ShowMobileSetupDialog(service_path); |
} |
-void ConfigureNetworkAndConnect(const std::string& service_path, |
- const base::DictionaryValue& properties, |
- bool shared) { |
+void NetworkConnectImpl::ConfigureNetworkAndConnect( |
+ const std::string& service_path, |
+ const base::DictionaryValue& properties, |
+ bool shared) { |
NET_LOG_USER("ConfigureNetworkAndConnect", service_path); |
scoped_ptr<base::DictionaryValue> properties_to_set(properties.DeepCopy()); |
std::string profile_path; |
if (!GetNetworkProfilePath(shared, &profile_path)) { |
- ShowErrorNotification( |
+ network_state_notifier_->ShowNetworkConnectError( |
NetworkConnectionHandler::kErrorConfigureFailed, service_path); |
return; |
} |
NetworkHandler::Get()->network_configuration_handler()->SetNetworkProfile( |
service_path, profile_path, |
- base::Bind(&ConfigureSetProfileSucceeded, |
- service_path, base::Passed(&properties_to_set)), |
- base::Bind(&SetPropertiesFailed, |
- "SetProfile: " + profile_path, service_path)); |
+ base::Bind(&NetworkConnectImpl::ConfigureSetProfileSucceeded, |
+ weak_factory_.GetWeakPtr(), service_path, |
+ base::Passed(&properties_to_set)), |
+ base::Bind(&NetworkConnectImpl::SetPropertiesFailed, |
+ weak_factory_.GetWeakPtr(), "SetProfile: " + profile_path, |
+ service_path)); |
} |
-void CreateConfigurationAndConnect(base::DictionaryValue* properties, |
- bool shared) { |
+void NetworkConnectImpl::CreateConfigurationAndConnect( |
+ base::DictionaryValue* properties, |
+ bool shared) { |
NET_LOG_USER("CreateConfigurationAndConnect", ""); |
CallCreateConfiguration(properties, shared, true /* connect_on_configure */); |
} |
-void CreateConfiguration(base::DictionaryValue* properties, bool shared) { |
+void NetworkConnectImpl::CreateConfiguration(base::DictionaryValue* properties, |
+ bool shared) { |
NET_LOG_USER("CreateConfiguration", ""); |
CallCreateConfiguration(properties, shared, false /* connect_on_configure */); |
} |
-base::string16 ErrorString(const std::string& error, |
- const std::string& service_path) { |
+base::string16 NetworkConnectImpl::GetErrorString( |
+ const std::string& error, |
+ const std::string& service_path) { |
if (error.empty()) |
return base::string16(); |
if (error == shill::kErrorOutOfRange) |
@@ -573,12 +610,39 @@ base::string16 ErrorString(const std::string& error, |
base::UTF8ToUTF16(error)); |
} |
-void ShowNetworkSettings(const std::string& service_path) { |
- if (!ash::Shell::HasInstance()) |
- return; |
- ash::Shell::GetInstance()->system_tray_delegate()->ShowNetworkSettings( |
- service_path); |
+void NetworkConnectImpl::ShowNetworkSettings(const std::string& service_path) { |
+ delegate_->ShowNetworkSettings(service_path); |
+} |
+ |
+} // namespace |
+ |
+const char NetworkConnect::kErrorActivateFailed[] = "activate-failed"; |
+ |
+static NetworkConnect* g_network_connect = NULL; |
+ |
+// static |
+void NetworkConnect::Initialize(Delegate* delegate) { |
+ CHECK(g_network_connect == NULL); |
+ g_network_connect = new NetworkConnectImpl(delegate); |
+} |
+ |
+// static |
+void NetworkConnect::Shutdown() { |
+ CHECK(g_network_connect); |
+ delete g_network_connect; |
+ g_network_connect = NULL; |
+} |
+ |
+// static |
+NetworkConnect* NetworkConnect::Get() { |
+ CHECK(g_network_connect); |
+ return g_network_connect; |
+} |
+ |
+NetworkConnect::NetworkConnect() { |
+} |
+ |
+NetworkConnect::~NetworkConnect() { |
} |
-} // network_connect |
} // ash |