| Index: chrome/browser/chromeos/dom_ui/mobile_setup_ui.cc
|
| ===================================================================
|
| --- chrome/browser/chromeos/dom_ui/mobile_setup_ui.cc (revision 66346)
|
| +++ chrome/browser/chromeos/dom_ui/mobile_setup_ui.cc (working copy)
|
| @@ -69,6 +69,11 @@
|
| const char kVersionField[] = "version";
|
| const char kErrorsField[] = "errors";
|
|
|
| +// Number of times we will retry to reconnect if connection fails.
|
| +const int kMaxConnectionRetry = 10;
|
| +// Connection timeout in seconds.
|
| +const int kConnectionTimeoutSeconds = 30;
|
| +
|
| chromeos::CellularNetwork* GetCellularNetwork() {
|
| chromeos::NetworkLibrary* lib = chromeos::CrosLibrary::Get()->
|
| GetNetworkLibrary();
|
| @@ -190,6 +195,10 @@
|
| // Sends message to host registration page with system/user info data.
|
| void SendDeviceInfo();
|
|
|
| + // Connects to cellular network, resets connection timer.
|
| + void ConnectToNetwork(chromeos::CellularNetwork* network);
|
| + // Reports connection timeout.
|
| + bool ConnectionTimeout();
|
| // Verify the state of cellular network and modify internal state.
|
| void EvaluateCellularNetwork(chromeos::CellularNetwork* network);
|
| // Check the current cellular network for error conditions.
|
| @@ -243,6 +252,10 @@
|
| bool transaction_complete_signalled_;
|
| bool activation_status_test_;
|
| bool evaluating_;
|
| + // Connection retry counter.
|
| + int connection_retry_count_;
|
| + // Connection start time.
|
| + base::Time connection_start_time_;
|
| DISALLOW_COPY_AND_ASSIGN(MobileSetupHandler);
|
| };
|
|
|
| @@ -328,6 +341,8 @@
|
| l10n_util::GetStringUTF16(IDS_MOBILE_COMPLETED_HEADER));
|
| strings.SetString("completed_text",
|
| l10n_util::GetStringUTF16(IDS_MOBILE_COMPLETED_TEXT));
|
| + strings.SetString("close_button",
|
| + l10n_util::GetStringUTF16(IDS_CLOSE));
|
| SetFontAndTextDirection(&strings);
|
|
|
| static const base::StringPiece html(
|
| @@ -357,7 +372,8 @@
|
| reenable_cert_check_(false),
|
| transaction_complete_signalled_(false),
|
| activation_status_test_(false),
|
| - evaluating_(false) {
|
| + evaluating_(false),
|
| + connection_retry_count_(0) {
|
| }
|
|
|
| MobileSetupHandler::~MobileSetupHandler() {
|
| @@ -470,6 +486,19 @@
|
| }
|
| }
|
|
|
| +
|
| +void MobileSetupHandler::ConnectToNetwork(chromeos::CellularNetwork* network) {
|
| + connection_retry_count_++;
|
| + connection_start_time_ = base::Time::Now();
|
| + chromeos::CrosLibrary::Get()->GetNetworkLibrary()->
|
| + ConnectToCellularNetwork(network);
|
| +}
|
| +
|
| +bool MobileSetupHandler::ConnectionTimeout() {
|
| + return (base::Time::Now() -
|
| + connection_start_time_).InSeconds() > kConnectionTimeoutSeconds;
|
| +}
|
| +
|
| void MobileSetupHandler::EvaluateCellularNetwork(
|
| chromeos::CellularNetwork* network) {
|
| if (!dom_ui_)
|
| @@ -587,30 +616,35 @@
|
| break;
|
| }
|
| case PLAN_ACTIVATION_RECONNECTING: {
|
| - // Wait until the service shows up and gets activated.
|
| - switch (network->activation_state()) {
|
| - case chromeos::ACTIVATION_STATE_ACTIVATED:
|
| - if (network->connected()) {
|
| - if (network->restricted_pool()) {
|
| + if (network->connected()) {
|
| + // Wait until the service shows up and gets activated.
|
| + switch (network->activation_state()) {
|
| + case chromeos::ACTIVATION_STATE_ACTIVATED:
|
| + if (network->restricted_pool())
|
| new_state = PLAN_ACTIVATION_SHOWING_PAYMENT;
|
| - } else {
|
| + else
|
| new_state = PLAN_ACTIVATION_DONE;
|
| - }
|
| - } else if (network->failed()) {
|
| - chromeos::CrosLibrary::Get()->GetNetworkLibrary()->
|
| - ConnectToCellularNetwork(network);
|
| - evaluating_ = false;
|
| - return;
|
| - }
|
| - break;
|
| - case chromeos::ACTIVATION_STATE_PARTIALLY_ACTIVATED:
|
| - if (network->connected()) {
|
| + break;
|
| + case chromeos::ACTIVATION_STATE_PARTIALLY_ACTIVATED:
|
| if (network->restricted_pool())
|
| new_state = PLAN_ACTIVATION_SHOWING_PAYMENT;
|
| - }
|
| - break;
|
| - default:
|
| - break;
|
| + break;
|
| + default:
|
| + break;
|
| + }
|
| + } else if (network->failed() || ConnectionTimeout()) {
|
| + // Try to reconnect again if reconnect failed, or if for some
|
| + // reasons we are still not connected after 30 seconds.
|
| + if (connection_retry_count_ < kMaxConnectionRetry) {
|
| + UMA_HISTOGRAM_COUNTS("Cellular.ConnectionRetry", 1);
|
| + ConnectToNetwork(network);
|
| + evaluating_ = false;
|
| + return;
|
| + } else {
|
| + // We simply can't connect anymore after all these tries.
|
| + UMA_HISTOGRAM_COUNTS("Cellular.ConnectionFailed", 1);
|
| + new_state = PLAN_ACTIVATION_ERROR;
|
| + }
|
| }
|
| break;
|
| }
|
| @@ -625,7 +659,8 @@
|
| }
|
|
|
| std::string error_description;
|
| - if (GotActivationError(network, &error_description)) {
|
| + if (new_state != PLAN_ACTIVATION_ERROR &&
|
| + GotActivationError(network, &error_description)) {
|
| // Check for this special case when we try to do activate partially
|
| // activated device. If that attempt failed, try to disconnect to clear the
|
| // state and reconnect again.
|
| @@ -728,11 +763,10 @@
|
| }
|
| break;
|
| case PLAN_ACTIVATION_RECONNECTING: {
|
| - DCHECK(network);
|
| - if (network) {
|
| - chromeos::CrosLibrary::Get()->GetNetworkLibrary()->
|
| - ConnectToCellularNetwork(network);
|
| - }
|
| + // Reset connection metrics and try to connect.
|
| + connection_retry_count_ = 0;
|
| + connection_start_time_ = base::Time::Now();
|
| + ConnectToNetwork(network);
|
| break;
|
| }
|
| case PLAN_ACTIVATION_PAGE_LOADING:
|
|
|