diff --git a/resources/static/dialog/resources/channel.js b/resources/static/dialog/resources/channel.js index b8ba0f92c790ede7a170862535b570ce06f7c468..a2dad83d7475d8e0d7cd0a1f97ac01afb4e38ba1 100644 --- a/resources/static/dialog/resources/channel.js +++ b/resources/static/dialog/resources/channel.js @@ -90,24 +90,24 @@ // In a native channel, do nothing. } else { - var REGISTERED_METHODS = { - 'get': function(origin, params, onsuccess, onerror) { - // check for old controller methods - // FIXME KILL THIS SOON - if (controller.get) { - return controller.get(origin, params, onsuccess, onerror); - } else { - return controller.getVerifiedEmail(origin, onsuccess, onerror); + getRelayWindow(); + + if (_relayWindow) { + var REGISTERED_METHODS = { + // The relay frame will give us the origin and a function to call when + // dialog processing is complete. + 'get': function(origin, params, onsuccess, onerror) { + // check for old controller methods + // FIXME KILL THIS SOON + if (controller.get) { + return controller.get(origin, params, onsuccess, onerror); + } else { + return controller.getVerifiedEmail(origin, onsuccess, onerror); + } } - } - }; + }; - // The relay frame will give us the origin and a function to call when - // dialog processing is complete. - var frameWindow = getRelayWindow(); - - if (frameWindow) { - frameWindow.BrowserID.Relay.registerClient(REGISTERED_METHODS); + _relayWindow.BrowserID.Relay.registerClient(REGISTERED_METHODS); } else { throw "relay frame not found"; @@ -123,15 +123,11 @@ } function close() { - var frameWindow = getRelayWindow(); - - if (frameWindow) { - frameWindow.BrowserID.Relay.unregisterClient(); + // Only tear down if a channel has been established with a relay frame. + if (_relayWindow) { + _relayWindow.BrowserID.Relay.unregisterClient(); _relayWindow = null; } - else { - throw "relay frame not found"; - } } function init(options) { diff --git a/resources/static/test/qunit/controllers/dialog_unit_test.js b/resources/static/test/qunit/controllers/dialog_unit_test.js index 23941014f4bc74e8533f55d88914cff4aef97623..e6c2ea1a6b280bce3106765788e92a8fa50dc7e9 100644 --- a/resources/static/test/qunit/controllers/dialog_unit_test.js +++ b/resources/static/test/qunit/controllers/dialog_unit_test.js @@ -204,7 +204,7 @@ error = e; } - equal(typeof error, "undefined", "no error thrown when unloading window"); + equal(typeof error, "undefined", "unexpected error thrown when unloading window (" + error + ")"); }); }()); diff --git a/resources/static/test/qunit/resources/channel_unit_test.js b/resources/static/test/qunit/resources/channel_unit_test.js index 878f2acbe0de4fe59db27a0b5052980c717e1536..6caff044943d0001347279d77a9e051c7d9d2bb2 100644 --- a/resources/static/test/qunit/resources/channel_unit_test.js +++ b/resources/static/test/qunit/resources/channel_unit_test.js @@ -159,5 +159,18 @@ } }); + test("close on a channel that has not been opened expects no errors", function() { + var error; + + try { + channel.close(); + } + catch(e) { + error = e; + } + + equal(typeof error, "undefined", "unexpected error when closing channel (" + error + ")"); + }); + }());