From d00ed79599fcd755ada4ce5e787bed7ec66ba2dc Mon Sep 17 00:00:00 2001 From: Shane Tomlinson <stomlinson@mozilla.com> Date: Tue, 13 Dec 2011 15:15:03 +0000 Subject: [PATCH] Only attempt to close the channel if a channel is established to a relay frame. close #748 --- resources/static/dialog/resources/channel.js | 42 +++++++++---------- .../qunit/controllers/dialog_unit_test.js | 2 +- .../test/qunit/resources/channel_unit_test.js | 13 ++++++ 3 files changed, 33 insertions(+), 24 deletions(-) diff --git a/resources/static/dialog/resources/channel.js b/resources/static/dialog/resources/channel.js index b8ba0f92c..a2dad83d7 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 23941014f..e6c2ea1a6 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 878f2acbe..6caff0449 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 + ")"); + }); + }()); -- GitLab