From 6229c1ac22da9f75796fef8f069d08978ef20220 Mon Sep 17 00:00:00 2001
From: Ben Adida <ben@adida.net>
Date: Wed, 16 Nov 2011 15:58:48 -0800
Subject: [PATCH] unregister the dialog callbacks from relay frame so that on
 second click we wait for the new callbacks to be registered, fixes #589

---
 .../dialog/controllers/dialog_controller.js    |  1 +
 resources/static/dialog/resources/channel.js   | 18 +++++++++++++++++-
 resources/static/relay/relay.js                |  7 ++++++-
 3 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/resources/static/dialog/controllers/dialog_controller.js b/resources/static/dialog/controllers/dialog_controller.js
index e2c7f3b97..fce5176da 100644
--- a/resources/static/dialog/controllers/dialog_controller.js
+++ b/resources/static/dialog/controllers/dialog_controller.js
@@ -124,6 +124,7 @@
             bid.Storage.setStagedOnBehalfOf("");
             self.doCancel();
           }
+          window.teardownChannel();
         });
       },
 
diff --git a/resources/static/dialog/resources/channel.js b/resources/static/dialog/resources/channel.js
index d98f44680..5e51e0e21 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 2c434508d..73dd22d89 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
     };
   }());
 
-- 
GitLab