You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by jo...@apache.org on 2009/05/28 02:48:46 UTC

svn commit: r779380 - in /incubator/shindig/trunk: features/src/main/javascript/features/rpc/fe.transport.js features/src/main/javascript/features/rpc/rpc.js javascript/container/rpctest_container.html

Author: johnh
Date: Thu May 28 00:48:45 2009
New Revision: 779380

URL: http://svn.apache.org/viewvc?rev=779380&view=rev
Log:
Slight robustness additions, making it possible to setAuthToken before rendering a target IFRAME - not recommended practice, but widely used.


Modified:
    incubator/shindig/trunk/features/src/main/javascript/features/rpc/fe.transport.js
    incubator/shindig/trunk/features/src/main/javascript/features/rpc/rpc.js
    incubator/shindig/trunk/javascript/container/rpctest_container.html

Modified: incubator/shindig/trunk/features/src/main/javascript/features/rpc/fe.transport.js
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/features/src/main/javascript/features/rpc/fe.transport.js?rev=779380&r1=779379&r2=779380&view=diff
==============================================================================
--- incubator/shindig/trunk/features/src/main/javascript/features/rpc/fe.transport.js (original)
+++ incubator/shindig/trunk/features/src/main/javascript/features/rpc/fe.transport.js Thu May 28 00:48:45 2009
@@ -79,7 +79,6 @@
         }
       }
     } catch (e) {
-      return false;
     }
     return true;
   }
@@ -118,14 +117,11 @@
         var ackFn = function() {
           window.setTimeout(function() {
             gadgets.rpc.call(receiverId, gadgets.rpc.ACK)
-          }, 0);
-        }
-        if (document.body) {
-          // TODO Consider moving document.body check to registerOnLoadHandler
-          ackFn();
-        } else {
-          gadgets.util.registerOnLoadHandler(ackFn);
+          }, 500);
         }
+        // Setup to container always happens before onload.
+        // If it didn't, the correct fix would be in gadgets.util.
+        gadgets.util.registerOnLoadHandler(ackFn);
       }
       return true;
     },

Modified: incubator/shindig/trunk/features/src/main/javascript/features/rpc/rpc.js
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/features/src/main/javascript/features/rpc/rpc.js?rev=779380&r1=779379&r2=779380&view=diff
==============================================================================
--- incubator/shindig/trunk/features/src/main/javascript/features/rpc/rpc.js (original)
+++ incubator/shindig/trunk/features/src/main/javascript/features/rpc/rpc.js Thu May 28 00:48:45 2009
@@ -68,6 +68,11 @@
   // Special service name for acknowledgements.
   var ACK = '__ack';
 
+  // Timeout and number of setup attempts between each
+  // for when setAuthToken is called before the target it specifies exists.
+  var SETUP_FRAME_TIMEOUT = 500;
+  var SETUP_FRAME_MAX_TRIES = 10;
+
   var services = {};
   var relayUrl = {};
   var useLegacyProtocol = {};
@@ -283,15 +288,31 @@
    * of the channel once they send their first messages.
    */
   function setupFrame(frameId, token) {
-    if (setup[frameId]) {
+    if (setup[frameId] === true) {
       return;
     }
 
-    if (transport.setup(frameId, token) === false) {
-      transport = fallbackTransport;
+    if (typeof setup[frameId] === 'undefined') {
+      setup[frameId] = 0;
+    }
+
+    var tgtFrame = document.getElementById(frameId);
+    if (frameId === '..' || tgtFrame != null) {
+      if (transport.setup(frameId, token) === true) {
+        setup[frameId] = true;
+        return;
+      }
     }
 
-    setup[frameId] = true;
+    if (setup[frameId] !== true && setup[frameId]++ < SETUP_FRAME_MAX_TRIES) {
+      // Try again in a bit, assuming that frame will soon exist.
+      window.setTimeout(function() { setupFrame(frameId, token) },
+                        SETUP_FRAME_TIMEOUT);
+    } else {
+      // Fail: fall back.
+      transport = fallbackTransport;
+      setup[frameId] = true;
+    }
   }
 
   /**

Modified: incubator/shindig/trunk/javascript/container/rpctest_container.html
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/javascript/container/rpctest_container.html?rev=779380&r1=779379&r2=779380&view=diff
==============================================================================
--- incubator/shindig/trunk/javascript/container/rpctest_container.html (original)
+++ incubator/shindig/trunk/javascript/container/rpctest_container.html Thu May 28 00:48:45 2009
@@ -63,8 +63,15 @@
       function appendGadget() {
         var secret = Math.round(Math.random() * 10000000);
         var container = document.getElementById("container");
-        container.innerHTML = "<iframe id='gadget' name='gadget' height=400 width=800 src='" + gadgetUrl + "?parent=" + containerRelay + "#rpctoken=" + secret + "'></iframe>";
-        gadgets.rpc.setAuthToken('gadget', secret);
+        if (window.location.search.indexOf('&ua=backward') !== -1) {
+          // incorrect but likely widely used
+          gadgets.rpc.setAuthToken('gadget', secret);
+          container.innerHTML = "<iframe id='gadget' name='gadget' height=400 width=800 src='" + gadgetUrl + "?parent=" + containerRelay + "#rpctoken=" + secret + "'></iframe>";
+        } else {
+          // "correct" way.
+          container.innerHTML = "<iframe id='gadget' name='gadget' height=400 width=800 src='" + gadgetUrl + "?parent=" + containerRelay + "#rpctoken=" + secret + "'></iframe>";
+          gadgets.rpc.setAuthToken('gadget', secret);
+        }
       }
 
       function initTest() {