summaryrefslogtreecommitdiffstats
path: root/remoting/webapp/host_controller.js
diff options
context:
space:
mode:
authorlambroslambrou@chromium.org <lambroslambrou@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-28 17:44:04 +0000
committerlambroslambrou@chromium.org <lambroslambrou@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-06-28 17:44:04 +0000
commita9b62a20a765d2c36c4f76a72394c8940fe96636 (patch)
treedd948a2959654fffa804aa72c32626c98189e7c1 /remoting/webapp/host_controller.js
parentaa8101382f9e46bbfefb89cac05b91c715e7175b (diff)
downloadchromium_src-a9b62a20a765d2c36c4f76a72394c8940fe96636.zip
chromium_src-a9b62a20a765d2c36c4f76a72394c8940fe96636.tar.gz
chromium_src-a9b62a20a765d2c36c4f76a72394c8940fe96636.tar.bz2
Change HostController methods to accept onError callbacks.
The HostController methods which took a |callback| parameter now accept an additional |onError| callback. Previously, an AsyncResult was passed to |callback| to indicate success/failure. Instead, |callback| takes no parameters, and |onError| is called on failure, passing in a remoting.Error code. New error-codes have been added to correspond to AsyncResult.CANCELED and AsyncResult.FAILED_DIRECTORY. HostSetupDialog has been modified to use the new interface, and no longer uses HostController.AsyncResult. In particular, HostSetupFlow.switchToNextStep(AsyncResult result) has been split into two methods for the success and failure cases. BUG=249970 TEST=Verify host setup flow under normal and error conditions. R=jamiewalch@chromium.org, sergeyu@chromium.org Review URL: https://codereview.chromium.org/17764004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@209175 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting/webapp/host_controller.js')
-rw-r--r--remoting/webapp/host_controller.js189
1 files changed, 99 insertions, 90 deletions
diff --git a/remoting/webapp/host_controller.js b/remoting/webapp/host_controller.js
index 1529e3c..de1a0a9 100644
--- a/remoting/webapp/host_controller.js
+++ b/remoting/webapp/host_controller.js
@@ -58,12 +58,13 @@ remoting.HostController.AsyncResult = {
};
/**
- * @param {function(boolean, boolean, boolean):void} callback Callback to be
+ * @param {function(boolean, boolean, boolean):void} onDone Callback to be
* called when done.
+ * @param {function(remoting.Error):void} onError Callback to be called on
+ * error.
*/
-remoting.HostController.prototype.getConsent = function(callback) {
- this.hostDispatcher_.getUsageStatsConsent(callback,
- remoting.showErrorMessage);
+remoting.HostController.prototype.getConsent = function(onDone, onError) {
+ this.hostDispatcher_.getUsageStatsConsent(onDone, onError);
};
/**
@@ -71,11 +72,13 @@ remoting.HostController.prototype.getConsent = function(callback) {
*
* @param {string} hostPin Host PIN.
* @param {boolean} consent The user's consent to crash dump reporting.
- * @param {function(remoting.HostController.AsyncResult):void} callback
- * callback Callback to be called when done.
+ * @param {function():void} onDone Callback to be called when done.
+ * @param {function(remoting.Error):void} onError Callback to be called on
+ * error.
* @return {void} Nothing.
*/
-remoting.HostController.prototype.start = function(hostPin, consent, callback) {
+remoting.HostController.prototype.start = function(hostPin, consent, onDone,
+ onError) {
/** @type {remoting.HostController} */
var that = this;
@@ -95,39 +98,28 @@ remoting.HostController.prototype.start = function(hostPin, consent, callback) {
var newHostId = generateUuid();
- /** @param {function(remoting.HostController.AsyncResult):void} callback
- * @param {remoting.HostController.AsyncResult} result
- * @param {string} hostName
- * @param {string} publicKey */
- function onStarted(callback, result, hostName, publicKey) {
- if (result == remoting.HostController.AsyncResult.OK) {
- remoting.hostList.onLocalHostStarted(hostName, newHostId, publicKey);
- } else {
- // Unregister the host if we failed to start it.
- remoting.HostList.unregisterHostById(newHostId);
- }
- callback(result);
- };
+ /** @param {remoting.Error} error */
+ function onStartError(error) {
+ // Unregister the host if we failed to start it.
+ remoting.HostList.unregisterHostById(newHostId);
+ onError(error);
+ }
/**
* @param {string} hostName
* @param {string} publicKey
- * @param {string} privateKey
- * @param {XMLHttpRequest} xhr
+ * @param {remoting.HostController.AsyncResult} result
*/
- function onRegistered(hostName, publicKey, privateKey, xhr) {
- var success = (xhr.status == 200);
-
- if (success) {
- that.hostDispatcher_.getPinHash(newHostId, hostPin,
- startHostWithHash.bind(null, hostName, publicKey, privateKey, xhr),
- remoting.showErrorMessage);
+ function onStarted(hostName, publicKey, result) {
+ if (result == remoting.HostController.AsyncResult.OK) {
+ remoting.hostList.onLocalHostStarted(hostName, newHostId, publicKey);
+ onDone();
+ } else if (result == remoting.HostController.AsyncResult.CANCELLED) {
+ onStartError(remoting.Error.CANCELLED);
} else {
- console.log('Failed to register the host. Status: ' + xhr.status +
- ' response: ' + xhr.responseText);
- callback(remoting.HostController.AsyncResult.FAILED_DIRECTORY);
+ onStartError(remoting.Error.UNEXPECTED);
}
- };
+ }
/**
* @param {string} hostName
@@ -146,16 +138,33 @@ remoting.HostController.prototype.start = function(hostPin, consent, callback) {
host_secret_hash: hostSecretHash,
private_key: privateKey
};
- /** @param {remoting.HostController.AsyncResult} result */
- var onStartDaemon = function(result) {
- onStarted(callback, result, hostName, publicKey);
- };
- that.hostDispatcher_.startDaemon(hostConfig, consent, onStartDaemon,
- remoting.showErrorMessage);
+ that.hostDispatcher_.startDaemon(hostConfig, consent,
+ onStarted.bind(null, hostName, publicKey),
+ onStartError);
}
/**
* @param {string} hostName
+ * @param {string} publicKey
+ * @param {string} privateKey
+ * @param {XMLHttpRequest} xhr
+ */
+ function onRegistered(hostName, publicKey, privateKey, xhr) {
+ var success = (xhr.status == 200);
+
+ if (success) {
+ that.hostDispatcher_.getPinHash(newHostId, hostPin,
+ startHostWithHash.bind(null, hostName, publicKey, privateKey, xhr),
+ onError);
+ } else {
+ console.log('Failed to register the host. Status: ' + xhr.status +
+ ' response: ' + xhr.responseText);
+ onError(remoting.Error.REGISTRATION_FAILED);
+ }
+ };
+
+ /**
+ * @param {string} hostName
* @param {string} privateKey
* @param {string} publicKey
* @param {string} oauthToken
@@ -173,8 +182,7 @@ remoting.HostController.prototype.start = function(hostPin, consent, callback) {
} };
remoting.xhr.post(
remoting.settings.DIRECTORY_API_BASE_URL + '/@me/hosts/',
- /** @param {XMLHttpRequest} xhr */
- function (xhr) { onRegistered(hostName, publicKey, privateKey, xhr); },
+ onRegistered.bind(null, hostName, publicKey, privateKey),
JSON.stringify(newHostDetails),
headers);
};
@@ -186,15 +194,8 @@ remoting.HostController.prototype.start = function(hostPin, consent, callback) {
*/
function onKeyGenerated(hostName, privateKey, publicKey) {
remoting.identity.callWithToken(
- /** @param {string} oauthToken */
- function(oauthToken) {
- doRegisterHost(hostName, privateKey, publicKey, oauthToken);
- },
- /** @param {remoting.Error} error */
- function(error) {
- // TODO(jamiewalch): Have a more specific error code here?
- callback(remoting.HostController.AsyncResult.FAILED);
- });
+ doRegisterHost.bind(null, hostName, privateKey, publicKey),
+ onError);
};
/**
@@ -203,48 +204,43 @@ remoting.HostController.prototype.start = function(hostPin, consent, callback) {
*/
function startWithHostname(hostName) {
that.hostDispatcher_.generateKeyPair(onKeyGenerated.bind(null, hostName),
- remoting.showErrorMessage);
+ onError);
}
- this.hostDispatcher_.getHostName(startWithHostname,
- remoting.showErrorMessage);
+ this.hostDispatcher_.getHostName(startWithHostname, onError);
};
/**
* Stop the daemon process.
- * @param {function(remoting.HostController.AsyncResult):void} callback
- * Callback to be called when finished.
+ * @param {function():void} onDone Callback to be called when done.
+ * @param {function(remoting.Error):void} onError Callback to be called on
+ * error.
* @return {void} Nothing.
*/
-remoting.HostController.prototype.stop = function(callback) {
+remoting.HostController.prototype.stop = function(onDone, onError) {
/** @type {remoting.HostController} */
var that = this;
- /**
- * @param {remoting.HostController.AsyncResult} result The result of the
- * stopDaemon call, to be passed to the callback.
- * @param {string?} hostId The host id of the local host.
- */
- function unregisterHost(result, hostId) {
+ /** @param {string?} hostId The host id of the local host. */
+ function unregisterHost(hostId) {
if (hostId) {
remoting.HostList.unregisterHostById(hostId);
}
- callback(result);
+ onDone();
};
- /**
- * @param {remoting.HostController.AsyncResult} result The result of the
- * stopDaemon call, to be passed to the callback.
- */
+ /** @param {remoting.HostController.AsyncResult} result */
function onStopped(result) {
- if (result != remoting.HostController.AsyncResult.OK) {
- callback(result);
- return;
+ if (result == remoting.HostController.AsyncResult.OK) {
+ that.getLocalHostId(unregisterHost);
+ } else if (result == remoting.HostController.AsyncResult.CANCELLED) {
+ onError(remoting.Error.CANCELLED);
+ } else {
+ onError(remoting.Error.UNEXPECTED);
}
- that.getLocalHostId(unregisterHost.bind(null, result));
- };
+ }
- this.hostDispatcher_.stopDaemon(onStopped, remoting.showErrorMessage);
+ this.hostDispatcher_.stopDaemon(onStopped, onError);
};
/**
@@ -260,24 +256,25 @@ function isHostConfigValid_(config) {
/**
* @param {string} newPin The new PIN to set
- * @param {function(remoting.HostController.AsyncResult):void} callback
- * Callback to be called when finished.
+ * @param {function():void} onDone Callback to be called when done.
+ * @param {function(remoting.Error):void} onError Callback to be called on
+ * error.
* @return {void} Nothing.
*/
-remoting.HostController.prototype.updatePin = function(newPin, callback) {
+remoting.HostController.prototype.updatePin = function(newPin, onDone,
+ onError) {
/** @type {remoting.HostController} */
var that = this;
- /** @param {Object} config */
- function onConfig(config) {
- if (!isHostConfigValid_(config)) {
- callback(remoting.HostController.AsyncResult.FAILED);
- return;
+ /** @param {remoting.HostController.AsyncResult} result */
+ function onConfigUpdated(result) {
+ if (result == remoting.HostController.AsyncResult.OK) {
+ onDone();
+ } else if (result == remoting.HostController.AsyncResult.CANCELLED) {
+ onError(remoting.Error.CANCELLED);
+ } else {
+ onError(remoting.Error.UNEXPECTED);
}
- /** @type {string} */
- var hostId = config['host_id'];
- that.hostDispatcher_.getPinHash(hostId, newPin, updateDaemonConfigWithHash,
- remoting.showErrorMessage);
}
/** @param {string} pinHash */
@@ -285,20 +282,32 @@ remoting.HostController.prototype.updatePin = function(newPin, callback) {
var newConfig = {
host_secret_hash: pinHash
};
- that.hostDispatcher_.updateDaemonConfig(newConfig, callback,
- remoting.showErrorMessage);
+ that.hostDispatcher_.updateDaemonConfig(newConfig, onConfigUpdated,
+ onError);
+ }
+
+ /** @param {Object} config */
+ function onConfig(config) {
+ if (!isHostConfigValid_(config)) {
+ onError(remoting.Error.UNEXPECTED);
+ return;
+ }
+ /** @type {string} */
+ var hostId = config['host_id'];
+ that.hostDispatcher_.getPinHash(hostId, newPin, updateDaemonConfigWithHash,
+ onError);
}
// TODO(sergeyu): When crbug.com/121518 is fixed: replace this call
// with an unprivileged version if that is necessary.
- this.hostDispatcher_.getDaemonConfig(onConfig, remoting.showErrorMessage);
+ this.hostDispatcher_.getDaemonConfig(onConfig, onError);
};
/**
* Get the state of the local host.
*
- * @param {function(remoting.HostController.State):void} onDone
- * Completion callback.
+ * @param {function(remoting.HostController.State):void} onDone Completion
+ * callback.
*/
remoting.HostController.prototype.getLocalHostState = function(onDone) {
this.hostDispatcher_.getDaemonState(onDone, function() {