summaryrefslogtreecommitdiffstats
path: root/remoting
diff options
context:
space:
mode:
authorjamiewalch@google.com <jamiewalch@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-14 18:17:23 +0000
committerjamiewalch@google.com <jamiewalch@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-10-14 18:17:23 +0000
commit9208bd558d6d5616862e46d8dd970812933be0e5 (patch)
treeed64415159c1a639cc8701f5b67daac112aff192 /remoting
parent220661ce5581f9fc83e74ab1c3a5dab51430eec6 (diff)
downloadchromium_src-9208bd558d6d5616862e46d8dd970812933be0e5.zip
chromium_src-9208bd558d6d5616862e46d8dd970812933be0e5.tar.gz
chromium_src-9208bd558d6d5616862e46d8dd970812933be0e5.tar.bz2
Implemented cancel connect.
BUG=None TEST=Manual Review URL: http://codereview.chromium.org/8273024 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@105525 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'remoting')
-rw-r--r--remoting/webapp/me2mom/choice.html7
-rw-r--r--remoting/webapp/me2mom/remoting.js78
-rw-r--r--remoting/webapp/me2mom/xhr.js3
3 files changed, 63 insertions, 25 deletions
diff --git a/remoting/webapp/me2mom/choice.html b/remoting/webapp/me2mom/choice.html
index a873d78..17bab6a 100644
--- a/remoting/webapp/me2mom/choice.html
+++ b/remoting/webapp/me2mom/choice.html
@@ -205,11 +205,6 @@ found in the LICENSE file.
</div> <!-- code-entry-row -->
</div> <!-- client.unconnected -->
- <!-- TODO(jamiewalch): Implement Cancel, being careful when ignoring
- the eventual server response not to ignore responses for any
- subsequent requests. This should be unified with the host-side
- Cancel button in the footer.
- -->
<div data-ui-mode="client.connecting" class="message"
i18n-content="VERIFYING_CODE">
</div> <!-- client.connecting -->
@@ -247,7 +242,7 @@ found in the LICENSE file.
</div> <!-- client-footer-text-cros -->
<div id="waiting-footer"
- data-ui-mode="host.waiting-for-connection host.waiting-for-code">
+ data-ui-mode="host.waiting-for-connection host.waiting-for-code client.connecting">
<img src="spinner.gif">
<span class="waiting icon-label" i18n-content="FOOTER_WAITING"></span>
<button id="cancel-button" class="big-button"
diff --git a/remoting/webapp/me2mom/remoting.js b/remoting/webapp/me2mom/remoting.js
index 170571f..e7c5496 100644
--- a/remoting/webapp/me2mom/remoting.js
+++ b/remoting/webapp/me2mom/remoting.js
@@ -157,6 +157,8 @@ remoting.init = function() {
remoting.oauth2 = new remoting.OAuth2();
remoting.debug =
new remoting.DebugLog(document.getElementById('debug-messages'));
+ /** @type {XMLHttpRequest} */
+ remoting.supportHostsXhr = null;
refreshEmail_();
var email = getEmail();
@@ -378,20 +380,20 @@ function onStateChanged_() {
}
/**
-* This is the callback that the host plugin invokes to indicate that there
-* is additional debug log info to display.
-* @param {string} msg The message (which will not be localized) to be logged.
-*/
+ * This is the callback that the host plugin invokes to indicate that there
+ * is additional debug log info to display.
+ * @param {string} msg The message (which will not be localized) to be logged.
+ */
function debugInfoCallback_(msg) {
remoting.debug.log('plugin: ' + msg);
}
/**
-* Show a host-side error message.
-*
-* @param {string} errorTag The error message to be localized and displayed.
-* @return {void} Nothing.
-*/
+ * Show a host-side error message.
+ *
+ * @param {string} errorTag The error message to be localized and displayed.
+ * @return {void} Nothing.
+ */
function showShareError_(errorTag) {
var errorDiv = document.getElementById('host-plugin-error');
l10n.localizeElementFromTag(errorDiv, errorTag);
@@ -399,6 +401,11 @@ function showShareError_(errorTag) {
remoting.setMode(remoting.AppMode.HOST_SHARE_FAILED);
}
+/**
+ * Cancel an active or pending share operation.
+ *
+ * @return {void} Nothing.
+ */
remoting.cancelShare = function() {
remoting.debug.log('Canceling share...');
remoting.lastShareWasCancelled = true;
@@ -418,6 +425,23 @@ remoting.cancelShare = function() {
disableTimeoutCountdown_();
}
+/**
+ * Cancel an incomplete connect operation.
+ *
+ * @return {void} Nothing.
+ */
+remoting.cancelConnect = function() {
+ if (remoting.supportHostsXhr) {
+ remoting.supportHostsXhr.abort();
+ remoting.supportHostsXhr = null;
+ }
+ if (remoting.session) {
+ remoting.session.removePlugin();
+ remoting.session = null;
+ }
+ remoting.setMode(remoting.AppMode.HOME);
+}
+
function updateStatistics() {
if (!remoting.session)
return;
@@ -460,6 +484,11 @@ function showToolbarPreview_() {
}
function onClientStateChange_(oldState) {
+ if (!remoting.session) {
+ // If the connection has been cancelled, then we no longer have a reference
+ // to the session object and should ignore any state changes.
+ return;
+ }
var state = remoting.session.state;
if (state == remoting.ClientSession.State.CREATED) {
remoting.debug.log('Created plugin');
@@ -470,12 +499,12 @@ function onClientStateChange_(oldState) {
} else if (state == remoting.ClientSession.State.INITIALIZING) {
remoting.debug.log('Initializing connection');
} else if (state == remoting.ClientSession.State.CONNECTED) {
- remoting.setMode(remoting.AppMode.IN_SESSION);
- recenterToolbar_();
- showToolbarPreview_();
- updateStatistics();
- var accessCode = document.getElementById('access-code-entry');
- accessCode.value = '';
+ if (remoting.session) {
+ remoting.setMode(remoting.AppMode.IN_SESSION);
+ recenterToolbar_();
+ showToolbarPreview_();
+ updateStatistics();
+ }
} else if (state == remoting.ClientSession.State.CLOSED) {
if (oldState == remoting.ClientSession.State.CONNECTED) {
remoting.session.removePlugin();
@@ -515,6 +544,8 @@ function onClientStateChange_(oldState) {
function startSession_() {
remoting.debug.log('Starting session...');
+ var accessCode = document.getElementById('access-code-entry');
+ accessCode.value = ''; // The code has been validated and won't work again.
remoting.username =
/** @type {string} email must be non-NULL to get here */ getEmail();
remoting.session =
@@ -547,7 +578,12 @@ function showConnectError_(errorTag) {
remoting.setMode(remoting.AppMode.CLIENT_CONNECT_FAILED);
}
+/**
+ * @param {XMLHttpRequest} xhr The XMLHttpRequest object.
+ * @return {void} Nothing.
+ */
function parseServerResponse_(xhr) {
+ remoting.supportHostsXhr = null;
remoting.debug.log('parseServerResponse: status = ' + xhr.status);
if (xhr.status == 200) {
var host = JSON.parse(xhr.responseText);
@@ -582,7 +618,7 @@ function resolveSupportId(supportId) {
'Authorization': 'OAuth ' + remoting.oauth2.getAccessToken()
};
- remoting.xhr.get(
+ remoting.supportHostsXhr = remoting.xhr.get(
'https://www.googleapis.com/chromoting/v1/support-hosts/' +
encodeURIComponent(supportId),
parseServerResponse_,
@@ -591,6 +627,7 @@ function resolveSupportId(supportId) {
}
remoting.tryConnect = function() {
+ document.getElementById('cancel-button').disabled = false;
if (remoting.oauth2.needsNewAccessToken()) {
remoting.oauth2.refreshAccessToken(function(xhr) {
if (remoting.oauth2.needsNewAccessToken()) {
@@ -635,8 +672,13 @@ remoting.tryConnectWithWcs = function() {
remoting.cancelPendingOperation = function() {
document.getElementById('cancel-button').disabled = true;
- if (remoting.getMajorMode() == remoting.AppMode.HOST) {
- remoting.cancelShare();
+ switch (remoting.getMajorMode()) {
+ case remoting.AppMode.HOST:
+ remoting.cancelShare();
+ break;
+ case remoting.AppMode.CLIENT:
+ remoting.cancelConnect();
+ break;
}
}
diff --git a/remoting/webapp/me2mom/xhr.js b/remoting/webapp/me2mom/xhr.js
index 9c8674a..0353bb0 100644
--- a/remoting/webapp/me2mom/xhr.js
+++ b/remoting/webapp/me2mom/xhr.js
@@ -48,7 +48,7 @@ remoting.xhr.urlencodeParamHash = function(paramHash) {
* request.
* @param {boolean} opt_withCredentials Set the withCredentials flags in the
* XHR.
- * @return {void} Nothing.
+ * @return {XMLHttpRequest} The request object.
*/
remoting.xhr.get = function(url, onDone, opt_parameters, opt_headers,
opt_withCredentials) {
@@ -94,6 +94,7 @@ remoting.xhr.get = function(url, onDone, opt_parameters, opt_headers,
}
xhr.send(null);
+ return xhr;
}
/**