diff --git a/resources/static/dialog/controllers/dialog_controller.js b/resources/static/dialog/controllers/dialog_controller.js index 7bffc9bb41da665f7a7a638dc88c79fb5373d2a8..9efb1d683554618f92b77130bc7d8aa32a552622 100644 --- a/resources/static/dialog/controllers/dialog_controller.js +++ b/resources/static/dialog/controllers/dialog_controller.js @@ -118,8 +118,13 @@ self.doCheckAuth(); dom.bindEvent(win, "unload", function() { - bid.Storage.setStagedOnBehalfOf(""); - self.doCancel(); + // do this only if something else hasn't + // declared success + if (!self.success) { + bid.Storage.setStagedOnBehalfOf(""); + self.doCancel(); + } + window.teardownChannel(); }); }, @@ -295,6 +300,7 @@ // calls window.close, which would trigger the onerror callback if we // tried this afterwards. self.onerror = null; + self.success = true; self.onsuccess(assertion); }, diff --git a/resources/static/dialog/resources/channel.js b/resources/static/dialog/resources/channel.js index d98f44680cc76dcbf8887d0579b779ba7909256d..5e51e0e21ef80a63d1090851193e4bcf613ed194 100644 --- a/resources/static/dialog/resources/channel.js +++ b/resources/static/dialog/resources/channel.js @@ -110,6 +110,16 @@ setupIFrameChannel(controller); } + function close() { + var frameWindow = getRelayWindow(); + + if (frameWindow) { + frameWindow.BrowserID.Relay.unregisterClient(); + } + else { + throw "relay frame not found"; + } + } function init(options) { onCompleteCallback = undefined; @@ -139,7 +149,12 @@ * @param {object} options - contains: * * options.getVerifiedEmail {function} - function to /get */ - open: open + open: open, + + /** + * Close the channel + */ + close: close }; } @@ -148,4 +163,5 @@ * window.setupChannel; */ window.setupChannel = open; + window.teardownChannel = close; }()); diff --git a/resources/static/relay/relay.js b/resources/static/relay/relay.js index 2c434508d6f866eb6c97929c892d3b5dcadaccf1..73dd22d89f1a0e50cd2cd2a6cdfea23749d02a24 100644 --- a/resources/static/relay/relay.js +++ b/resources/static/relay/relay.js @@ -124,6 +124,10 @@ forwardCall(); } + function unregisterClient() { + registeredMethods = null; + } + function getVerboseMessage(code) { var msgs = { "canceled": "user canceled selection", @@ -157,7 +161,8 @@ * Register a client to use the relay * @method registerClient */ - registerClient: registerClient + registerClient: registerClient, + unregisterClient: unregisterClient }; }());