summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzelidrag@chromium.org <zelidrag@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-04 04:00:14 +0000
committerzelidrag@chromium.org <zelidrag@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-04 04:00:14 +0000
commit07e8576a50b5caf791b6f77810d26482995e7385 (patch)
tree69451aafeec1abe88a1b38ae50facff573f11a9b
parentdbfca0f6d0315d245a9080452fcaf4897f66b373 (diff)
downloadchromium_src-07e8576a50b5caf791b6f77810d26482995e7385.zip
chromium_src-07e8576a50b5caf791b6f77810d26482995e7385.tar.gz
chromium_src-07e8576a50b5caf791b6f77810d26482995e7385.tar.bz2
Merge 65016 - Remaining fixes for activation process.
BUG=chromium-os:8400 TEST=make sure cellular connection can be activated from chrome:mobilesetup Review URL: http://codereview.chromium.org/4333002 TBR=zelidrag@chromium.org Review URL: http://codereview.chromium.org/4430002 git-svn-id: svn://svn.chromium.org/chrome/branches/552/src@65021 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/chromeos/dom_ui/mobile_setup_ui.cc106
-rw-r--r--chrome/browser/resources/mobile_setup.js12
2 files changed, 91 insertions, 27 deletions
diff --git a/chrome/browser/chromeos/dom_ui/mobile_setup_ui.cc b/chrome/browser/chromeos/dom_ui/mobile_setup_ui.cc
index 17160cf..cbbaf01 100644
--- a/chrome/browser/chromeos/dom_ui/mobile_setup_ui.cc
+++ b/chrome/browser/chromeos/dom_ui/mobile_setup_ui.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Copyright (c) 2006-2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -157,10 +157,35 @@ class MobileSetupHandler : public DOMMessageHandler,
PLAN_ACTIVATION_ERROR = 5,
} PlanActivationState;
+ class TaskProxy : public base::RefCountedThreadSafe<TaskProxy> {
+ public:
+ explicit TaskProxy(const base::WeakPtr<MobileSetupHandler>& handler)
+ : handler_(handler) {
+ }
+ TaskProxy(const base::WeakPtr<MobileSetupHandler>& handler,
+ const std::string& status)
+ : handler_(handler), status_(status) {
+ }
+ void HandleStartActivation() {
+ if (handler_)
+ handler_->StartActivation();
+ }
+ void HandleSetTransactionStatus() {
+ if (handler_)
+ handler_->SetTransactionStatus(status_);
+ }
+ private:
+ base::WeakPtr<MobileSetupHandler> handler_;
+ std::string status_;
+ DISALLOW_COPY_AND_ASSIGN(TaskProxy);
+ };
+
// Handlers for JS DOMUI messages.
- void HandleStartActivation(const ListValue* args);
void HandleCloseTab(const ListValue* args);
void HandleSetTransactionStatus(const ListValue* args);
+ void HandleStartActivation(const ListValue* args);
+ void SetTransactionStatus(const std::string& status);
+ void StartActivation();
// Sends message to host registration page with system/user info data.
void SendDeviceInfo();
@@ -211,6 +236,7 @@ class MobileSetupHandler : public DOMMessageHandler,
bool reenable_wifi_;
bool reenable_ethernet_;
bool reenable_cert_check_;
+ bool transaction_complete_signalled_;
DISALLOW_COPY_AND_ASSIGN(MobileSetupHandler);
};
@@ -322,7 +348,8 @@ MobileSetupHandler::MobileSetupHandler(const std::string& service_path)
service_path_(service_path),
reenable_wifi_(false),
reenable_ethernet_(false),
- reenable_cert_check_(false) {
+ reenable_cert_check_(false),
+ transaction_complete_signalled_(false) {
}
MobileSetupHandler::~MobileSetupHandler() {
@@ -364,6 +391,9 @@ void MobileSetupHandler::PropertyChanged(const char* service_path,
if (state_ == PLAN_ACTIVATION_PAGE_LOADING)
return;
+ // TODO(zelidrag, ers): Remove this once we flip the notification machanism.
+ chromeos::CrosLibrary::Get()->GetNetworkLibrary()->UpdateSystemInfo();
+
chromeos::CellularNetwork* network = GetCellularNetwork(service_path_);
if (!network) {
EvaluateCellularNetwork(NULL);
@@ -377,8 +407,6 @@ void MobileSetupHandler::PropertyChanged(const char* service_path,
LOG(INFO) << "Cellular property change: " << key << " = " <<
value_string.c_str();
- // TODO(zelidrag, ers): Remove this once we flip the notification machanism.
- chromeos::CrosLibrary::Get()->GetNetworkLibrary()->UpdateSystemInfo();
EvaluateCellularNetwork(network);
}
@@ -392,6 +420,26 @@ void MobileSetupHandler::HandleCloseTab(const ListValue* args) {
}
void MobileSetupHandler::HandleStartActivation(const ListValue* args) {
+ scoped_refptr<TaskProxy> task = new TaskProxy(AsWeakPtr());
+ BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
+ NewRunnableMethod(task.get(), &TaskProxy::HandleStartActivation));
+}
+
+void MobileSetupHandler::HandleSetTransactionStatus(const ListValue* args) {
+ const size_t kSetTransactionStatusParamCount = 1;
+ if (args->GetSize() != kSetTransactionStatusParamCount)
+ return;
+ // Get change callback function name.
+ std::string status;
+ if (!args->GetString(0, &status))
+ return;
+ scoped_refptr<TaskProxy> task = new TaskProxy(AsWeakPtr(), status);
+ BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
+ NewRunnableMethod(task.get(), &TaskProxy::HandleSetTransactionStatus));
+}
+
+void MobileSetupHandler::StartActivation() {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
chromeos::CellularNetwork* network = GetCellularNetwork(service_path_);
if (!network) {
ChangeState(NULL, PLAN_ACTIVATION_ERROR, std::string());
@@ -405,29 +453,26 @@ void MobileSetupHandler::HandleStartActivation(const ListValue* args) {
lib->AddObserver(this);
lib->AddProperyObserver(network->service_path().c_str(),
this);
- ChangeState(network, PLAN_ACTIVATION_START, std::string());
+ state_ = PLAN_ACTIVATION_START;
EvaluateCellularNetwork(network);
}
-void MobileSetupHandler::HandleSetTransactionStatus(const ListValue* args) {
- const size_t kSetTransactionStatusParamCount = 1;
- if (args->GetSize() != kSetTransactionStatusParamCount)
- return;
-
- // Get change callback function name.
- std::string status;
- if (!args->GetString(0, &status))
- return;
-
+void MobileSetupHandler::SetTransactionStatus(const std::string& status) {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
// The payment is received, try to reconnect and check the status all over
// again.
- if (LowerCaseEqualsASCII(status, "ok")) {
- ChangeState(GetCellularNetwork(), PLAN_ACTIVATION_START, std::string());
+ if (LowerCaseEqualsASCII(status, "ok") &&
+ state_ == PLAN_ACTIVATION_SHOWING_PAYMENT) {
+ if (transaction_complete_signalled_) {
+ LOG(WARNING) << "Transaction completion signaled more than once!?";
+ return;
+ }
+ transaction_complete_signalled_ = true;
+ state_ = PLAN_ACTIVATION_START;
EvaluateCellularNetwork(GetCellularNetwork());
}
}
-
void MobileSetupHandler::EvaluateCellularNetwork(
chromeos::CellularNetwork* network) {
if (!dom_ui_)
@@ -469,6 +514,9 @@ void MobileSetupHandler::EvaluateCellularNetwork(
network->service_path().c_str();
chromeos::CrosLibrary::Get()->GetNetworkLibrary()->
DisconnectFromWirelessNetwork(network);
+ // Disconnect will force networks to be reevaluated, so
+ // we don't want to continue processing on this path anymore.
+ return;
}
break;
default:
@@ -600,6 +648,18 @@ void MobileSetupHandler::ChangeState(chromeos::CellularNetwork* network,
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);
+
+ // Decide what to do with network object as a result of the new state.
switch (new_state) {
case PLAN_ACTIVATION_START:
break;
@@ -635,14 +695,6 @@ void MobileSetupHandler::ChangeState(chromeos::CellularNetwork* network,
default:
break;
}
- DictionaryValue device_dict;
- 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);
}
void MobileSetupHandler::ReEnableOtherConnections() {
diff --git a/chrome/browser/resources/mobile_setup.js b/chrome/browser/resources/mobile_setup.js
index 65f7676..8428ee7 100644
--- a/chrome/browser/resources/mobile_setup.js
+++ b/chrome/browser/resources/mobile_setup.js
@@ -24,6 +24,8 @@ cr.define('mobile', function() {
// Mobile device information.
deviceInfo_: null,
frameName_ : '',
+ initialized_ : false,
+ faked_transaction_ : false,
// UI states.
state_ : -1,
STATE_UNKNOWN_: "unknown",
@@ -34,14 +36,23 @@ cr.define('mobile', function() {
STATE_CONNECTED_: "connected",
initialize: function(frame_name) {
+ if (this.initialized_) {
+ console.log('calling initialize() again?');
+ return;
+ }
+ this.initialized_ = true;
self = this;
this.frameName_ = frame_name;
window.addEventListener('message', function(e) {
self.onMessageReceived_(e);
});
$('cheat').addEventListener('click', function(e) {
+ console.log('calling setTransactionStatus from cheat.onclick');
+ if (self.faked_transaction_)
+ return;
$('paymentForm').classList.add('hidden');
chrome.send('setTransactionStatus', ['OK']);
+ self.faked_transaction_ = true;
});
$(frame_name).addEventListener('load', function(e) {
// Flip the visibility of the payment page only after the frame is
@@ -76,6 +87,7 @@ cr.define('mobile', function() {
if (e.data.type == 'requestDeviceInfoMsg') {
this.sendDeviceInfo_();
} else if (e.data.type == 'reportTransactionStatusMsg') {
+ console.log('calling setTransactionStatus from onMessageReceived_');
$('paymentForm').classList.add('hidden');
chrome.send('setTransactionStatus', [e.data.status]);
}