diff options
author | lambroslambrou@chromium.org <lambroslambrou@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-28 17:44:04 +0000 |
---|---|---|
committer | lambroslambrou@chromium.org <lambroslambrou@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-06-28 17:44:04 +0000 |
commit | a9b62a20a765d2c36c4f76a72394c8940fe96636 (patch) | |
tree | dd948a2959654fffa804aa72c32626c98189e7c1 /remoting/webapp/host_controller.js | |
parent | aa8101382f9e46bbfefb89cac05b91c715e7175b (diff) | |
download | chromium_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.js | 189 |
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() { |