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

Unified Diff: chrome/browser/chromeos/dom_ui/mobile_setup_ui.cc

Issue 5072001: Improved activation logic to cover few more edge cases. Removed button that w... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 1 month 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
« no previous file with comments | « no previous file | chrome/browser/resources/mobile_setup.html » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/chromeos/dom_ui/mobile_setup_ui.cc
===================================================================
--- chrome/browser/chromeos/dom_ui/mobile_setup_ui.cc (revision 66030)
+++ chrome/browser/chromeos/dom_ui/mobile_setup_ui.cc (working copy)
@@ -15,6 +15,7 @@
#include "base/json/json_reader.h"
#include "base/json/json_writer.h"
#include "base/logging.h"
+#include "base/metrics/histogram.h"
#include "base/string_piece.h"
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
@@ -44,7 +45,6 @@
// Host page JS API function names.
const char kJsApiStartActivation[] = "startActivation";
-const char kJsApiCloseTab[] = "closeTab";
const char kJsApiSetTransactionStatus[] = "setTransactionStatus";
const wchar_t kJsDeviceStatusChangedHandler[] =
@@ -182,7 +182,6 @@
};
// Handlers for JS DOMUI messages.
- void HandleCloseTab(const ListValue* args);
void HandleSetTransactionStatus(const ListValue* args);
void HandleStartActivation(const ListValue* args);
void SetTransactionStatus(const std::string& status);
@@ -196,6 +195,10 @@
// Check the current cellular network for error conditions.
bool GotActivationError(const chromeos::CellularNetwork* network,
std::string* error);
+ // Sends status updates to DOMUI page.
+ void UpdatePage(chromeos::CellularNetwork* network,
+ const std::string& error_description);
+ // Changes internal state.
void ChangeState(chromeos::CellularNetwork* network,
PlanActivationState new_state,
const std::string& error_description);
@@ -239,6 +242,7 @@
bool reenable_cert_check_;
bool transaction_complete_signalled_;
bool activation_status_test_;
+ bool evaluating_;
DISALLOW_COPY_AND_ASSIGN(MobileSetupHandler);
};
@@ -352,7 +356,8 @@
reenable_ethernet_(false),
reenable_cert_check_(false),
transaction_complete_signalled_(false),
- activation_status_test_(false) {
+ activation_status_test_(false),
+ evaluating_(false) {
}
MobileSetupHandler::~MobileSetupHandler() {
@@ -376,8 +381,6 @@
void MobileSetupHandler::RegisterMessages() {
dom_ui_->RegisterMessageCallback(kJsApiStartActivation,
NewCallback(this, &MobileSetupHandler::HandleStartActivation));
- dom_ui_->RegisterMessageCallback(kJsApiCloseTab,
- NewCallback(this, &MobileSetupHandler::HandleCloseTab));
dom_ui_->RegisterMessageCallback(kJsApiSetTransactionStatus,
NewCallback(this, &MobileSetupHandler::HandleSetTransactionStatus));
}
@@ -403,19 +406,11 @@
const_cast<chromeos::Network*>(network)));
}
-void MobileSetupHandler::HandleCloseTab(const ListValue* args) {
- if (!dom_ui_)
- return;
- Browser* browser = BrowserList::FindBrowserWithFeature(
- dom_ui_->GetProfile(), Browser::FEATURE_TABSTRIP);
- if (browser)
- browser->CloseTabContents(tab_contents_);
-}
-
void MobileSetupHandler::HandleStartActivation(const ListValue* args) {
scoped_refptr<TaskProxy> task = new TaskProxy(AsWeakPtr());
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
NewRunnableMethod(task.get(), &TaskProxy::HandleStartActivation));
+ UMA_HISTOGRAM_COUNTS("Cellular.MobileSetupStart", 1);
}
void MobileSetupHandler::HandleSetTransactionStatus(const ListValue* args) {
@@ -454,6 +449,7 @@
// again.
if (LowerCaseEqualsASCII(status, "ok") &&
state_ == PLAN_ACTIVATION_SHOWING_PAYMENT) {
+ UMA_HISTOGRAM_COUNTS("Cellular.PaymentReceived", 1);
if (transaction_complete_signalled_) {
LOG(WARNING) << "Transaction completion signaled more than once!?";
return;
@@ -469,6 +465,8 @@
} else {
EvaluateCellularNetwork(network);
}
+ } else {
+ UMA_HISTOGRAM_COUNTS("Cellular.PaymentFailed", 1);
}
}
@@ -483,6 +481,12 @@
return;
}
+ // Prevent this method from being called if it is already on the stack.
+ // This might happen on some state transitions (ie. connect, disconnect).
+ if (evaluating_)
+ return;
+ evaluating_ = true;
+
LOG(INFO) << "Cellular:\n service=" << network->GetStateString().c_str()
<< "\n ui=" << GetStateDescription(state_)
<< "\n activation=" << network->GetActivationStateString().c_str()
@@ -495,7 +499,7 @@
case chromeos::ACTIVATION_STATE_ACTIVATED: {
if (network->failed_or_disconnected()) {
new_state = PLAN_ACTIVATION_RECONNECTING;
- } else if (network->connection_state() == chromeos::STATE_READY) {
+ } else if (network->connected()) {
if (network->restricted_pool()) {
new_state = PLAN_ACTIVATION_SHOWING_PAYMENT;
} else {
@@ -516,13 +520,16 @@
DisconnectFromWirelessNetwork(network);
// Disconnect will force networks to be reevaluated, so
// we don't want to continue processing on this path anymore.
+ evaluating_ = false;
return;
}
} else {
- if (network->connected())
- new_state = PLAN_ACTIVATION_SHOWING_PAYMENT;
- else
+ if (network->connected()) {
+ if (network->restricted_pool())
+ new_state = PLAN_ACTIVATION_SHOWING_PAYMENT;
+ } else {
new_state = PLAN_ACTIVATION_RECONNECTING;
+ }
break;
}
break;
@@ -538,14 +545,13 @@
DisconnectFromWirelessNetwork(network);
// Disconnect will force networks to be reevaluated, so
// we don't want to continue processing on this path anymore.
+ evaluating_ = false;
return;
}
break;
}
- default: {
- new_state = PLAN_ACTIVATION_INITIATING_ACTIVATION;
+ default:
break;
- }
}
break;
}
@@ -554,7 +560,7 @@
case chromeos::ACTIVATION_STATE_ACTIVATED:
if (network->failed_or_disconnected()) {
new_state = PLAN_ACTIVATION_RECONNECTING;
- } else if (network->connection_state() == chromeos::STATE_READY) {
+ } else if (network->connected()) {
if (network->restricted_pool()) {
new_state = PLAN_ACTIVATION_SHOWING_PAYMENT;
} else {
@@ -563,10 +569,12 @@
}
break;
case chromeos::ACTIVATION_STATE_PARTIALLY_ACTIVATED:
- if (network->connected())
- new_state = PLAN_ACTIVATION_SHOWING_PAYMENT;
- else
+ if (network->connected()) {
+ if (network->restricted_pool())
+ new_state = PLAN_ACTIVATION_SHOWING_PAYMENT;
+ } else {
new_state = PLAN_ACTIVATION_RECONNECTING;
+ }
break;
case chromeos::ACTIVATION_STATE_NOT_ACTIVATED:
// Wait in this state until activation state changes.
@@ -582,12 +590,17 @@
// Wait until the service shows up and gets activated.
switch (network->activation_state()) {
case chromeos::ACTIVATION_STATE_ACTIVATED:
- if (network->connection_state() == chromeos::STATE_READY) {
+ if (network->connected()) {
if (network->restricted_pool()) {
new_state = PLAN_ACTIVATION_SHOWING_PAYMENT;
} 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:
@@ -619,7 +632,8 @@
if ((network->activation_state() ==
chromeos::ACTIVATION_STATE_PARTIALLY_ACTIVATED ||
network->activation_state() == chromeos::ACTIVATION_STATE_ACTIVATING) &&
- network->error() == chromeos::ERROR_UNKNOWN &&
+ (network->error() == chromeos::ERROR_UNKNOWN ||
+ network->error() == chromeos::ERROR_OTASP_FAILED)&&
(state_ == PLAN_ACTIVATION_INITIATING_ACTIVATION ||
state_ == PLAN_ACTIVATION_RECONNECTING) &&
activation_status_test_ &&
@@ -630,6 +644,7 @@
}
}
ChangeState(network, new_state, error_description);
+ evaluating_ = false;
}
// Debugging helper function, will take it out at the end.
@@ -672,6 +687,17 @@
ReEnableOtherConnections();
}
+void MobileSetupHandler::UpdatePage(chromeos::CellularNetwork* network,
+ const std::string& error_description) {
+ DictionaryValue device_dict;
+ if (network)
+ GetDeviceInfo(network, &device_dict);
+ device_dict.SetInteger("state", state_);
+ if (error_description.length())
+ device_dict.SetString("error", error_description);
+ dom_ui_->CallJavascriptFunction(
+ kJsDeviceStatusChangedHandler, device_dict);
+}
void MobileSetupHandler::ChangeState(chromeos::CellularNetwork* network,
PlanActivationState new_state,
@@ -684,16 +710,9 @@
GetStateDescription(new_state);
first_time = false;
state_ = new_state;
- DictionaryValue device_dict;
// Signal to JS layer that the state is changing.
- if (network)
- GetDeviceInfo(network, &device_dict);
- device_dict.SetInteger("state", new_state);
- if (error_description.length())
- device_dict.SetString("error", error_description);
- dom_ui_->CallJavascriptFunction(
- kJsDeviceStatusChangedHandler, device_dict);
+ UpdatePage(network, error_description);
// Decide what to do with network object as a result of the new state.
switch (new_state) {
@@ -702,8 +721,11 @@
case PLAN_ACTIVATION_INITIATING_ACTIVATION:
DCHECK(network);
LOG(INFO) << "Activating service " << network->service_path().c_str();
- if (!network->StartActivation())
- new_state = PLAN_ACTIVATION_ERROR;
+ UMA_HISTOGRAM_COUNTS("Cellular.ActivationTry", 1);
+ if (!network->StartActivation()) {
+ UMA_HISTOGRAM_COUNTS("Cellular.ActivationFailure", 1);
+ ChangeState(network, PLAN_ACTIVATION_ERROR, std::string());
+ }
break;
case PLAN_ACTIVATION_RECONNECTING: {
DCHECK(network);
@@ -722,9 +744,11 @@
case PLAN_ACTIVATION_DONE:
DCHECK(network);
CompleteActivation(network);
+ UMA_HISTOGRAM_COUNTS("Cellular.MobileSetupSucceeded", 1);
break;
case PLAN_ACTIVATION_ERROR: {
CompleteActivation(NULL);
+ UMA_HISTOGRAM_COUNTS("Cellular.PlanFailed", 1);
break;
}
default:
« no previous file with comments | « no previous file | chrome/browser/resources/mobile_setup.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698