Index: chrome/browser/chromeos/options/network_connect.cc |
diff --git a/chrome/browser/chromeos/options/network_connect.cc b/chrome/browser/chromeos/options/network_connect.cc |
index 955625b378412fcfd41ac188463d09065c14797a..c4b3eb2e757c8f862fdc62e4267bbbfa8289a96e 100644 |
--- a/chrome/browser/chromeos/options/network_connect.cc |
+++ b/chrome/browser/chromeos/options/network_connect.cc |
@@ -6,29 +6,24 @@ |
#include "ash/shell.h" |
#include "ash/shell_delegate.h" |
+#include "ash/system/chromeos/network/network_observer.h" |
+#include "ash/system/tray/system_tray_notifier.h" |
+#include "base/utf_string_conversions.h" |
#include "chrome/browser/chromeos/cros/cros_library.h" |
#include "chrome/browser/chromeos/cros/network_library.h" |
#include "chrome/browser/chromeos/enrollment_dialog_view.h" |
#include "chrome/browser/chromeos/options/network_config_view.h" |
#include "chrome/browser/profiles/profile_manager.h" |
+#include "chrome/browser/ui/webui/chromeos/mobile_setup_dialog.h" |
+#include "grit/generated_resources.h" |
+#include "third_party/cros_system_api/dbus/service_constants.h" |
+#include "ui/base/l10n/l10n_util.h" |
namespace chromeos { |
namespace network_connect { |
namespace { |
-void ActivateCellular(chromeos::CellularNetwork* cellular) { |
- DCHECK(cellular); |
- chromeos::NetworkLibrary* cros = |
- chromeos::CrosLibrary::Get()->GetNetworkLibrary(); |
- if (cros->CellularDeviceUsesDirectActivation()) { |
- cellular->StartActivation(); |
- } else { |
- ash::Shell::GetInstance()->delegate()->OpenMobileSetup( |
- cellular->service_path()); |
- } |
-} |
- |
void DoConnect(Network* network, gfx::NativeWindow parent_window) { |
NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary(); |
if (network->type() == TYPE_VPN) { |
@@ -65,7 +60,7 @@ void DoConnect(Network* network, gfx::NativeWindow parent_window) { |
CellularNetwork* cellular = static_cast<CellularNetwork*>(network); |
if (cellular->activation_state() != ACTIVATION_STATE_ACTIVATED || |
cellular->out_of_credits()) { |
- ActivateCellular(cellular); |
+ ActivateCellular(cellular->service_path()); |
} else { |
cros->ConnectToCellularNetwork(cellular); |
} |
@@ -74,6 +69,52 @@ void DoConnect(Network* network, gfx::NativeWindow parent_window) { |
} // namespace |
+void ActivateCellular(const std::string& service_path) { |
+ chromeos::NetworkLibrary* cros = |
+ chromeos::CrosLibrary::Get()->GetNetworkLibrary(); |
+ if (!cros->CellularDeviceUsesDirectActivation()) { |
+ // For non direct activation, show the mobile setup dialog which can be |
+ // used to activate the network. |
+ ShowMobileSetup(service_path); |
+ return; |
+ } |
+ chromeos::Network* network = NULL; |
+ network = cros-> FindNetworkByPath(service_path); |
tbarzic
2013/05/24 21:24:34
FindCellularNetworkByPath? That way you don't have
stevenjb
2013/05/24 22:17:45
Yes, done (copy/pasted old code).
|
+ if (!network || network->type() != chromeos::TYPE_CELLULAR) |
+ return; |
+ chromeos::CellularNetwork* cellular = |
+ static_cast<chromeos::CellularNetwork*>(network); |
+ if (cellular->activation_state() != chromeos::ACTIVATION_STATE_ACTIVATED) |
+ cellular->StartActivation(); |
+ return; |
+} |
+ |
+void ShowMobileSetup(const std::string& service_path) { |
+ NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary(); |
+ const CellularNetwork* cellular = |
+ cros->FindCellularNetworkByPath(service_path); |
+ if (cellular && !cellular->activated() && |
+ cellular->activate_over_non_cellular_network() && |
+ (!cros->connected_network() || !cros->connected_network()->online())) { |
+ NetworkTechnology technology = cellular->network_technology(); |
+ ash::NetworkObserver::NetworkType network_type = |
+ (technology == chromeos::NETWORK_TECHNOLOGY_LTE || |
+ technology == chromeos::NETWORK_TECHNOLOGY_LTE_ADVANCED) |
+ ? ash::NetworkObserver::NETWORK_CELLULAR_LTE |
+ : ash::NetworkObserver::NETWORK_CELLULAR; |
+ ash::Shell::GetInstance()->system_tray_notifier()->NotifySetNetworkMessage( |
+ NULL, |
+ ash::NetworkObserver::ERROR_CONNECT_FAILED, |
+ network_type, |
+ l10n_util::GetStringUTF16(IDS_NETWORK_ACTIVATION_ERROR_TITLE), |
+ l10n_util::GetStringFUTF16(IDS_NETWORK_ACTIVATION_NEEDS_CONNECTION, |
+ UTF8ToUTF16((cellular->name()))), |
+ std::vector<string16>()); |
+ return; |
+ } |
+ MobileSetupDialog::Show(service_path); |
+} |
+ |
ConnectResult ConnectToNetwork(const std::string& service_path, |
gfx::NativeWindow parent_window) { |
NetworkLibrary* cros = CrosLibrary::Get()->GetNetworkLibrary(); |
@@ -107,7 +148,7 @@ ConnectResult ConnectToNetwork(const std::string& service_path, |
if (network->type() == TYPE_CELLULAR) { |
CellularNetwork* cellular = static_cast<CellularNetwork*>(network); |
if (cellular->NeedsActivation() || cellular->out_of_credits()) { |
- ActivateCellular(cellular); |
+ ActivateCellular(service_path); |
return CONNECT_STARTED; |
} |
if (cellular->activation_state() == ACTIVATION_STATE_ACTIVATING) |