Author: johnh
Date: Mon Jun  1 16:05:19 2009
New Revision: 780700

URL: http://svn.apache.org/viewvc?rev=780700&view=rev
Log:
Only do early-rpc queueing when opted-in by a query param. This essentially 
disables the functionality for now. While I'd tested it to work on each 
transport, in-the-field reports suggest that this may break rpc on a few 
browsers and in some timing-sensitive scenarios (eg. different ordering of code 
than in the rpc profile/test harness; still being analyzed). Thus this change 
restores the status quo and mitigates risk.


Modified:
    incubator/shindig/trunk/features/src/main/javascript/features/rpc/rpc.js

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=780700&r1=780699&r2=780700&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 
Mon Jun  1 16:05:19 2009
@@ -95,6 +95,13 @@
 
   authToken['..'] = params.rpctoken || params.ifpctok || 0;
 
+  // Indicates whether to support early-message queueing, which is designed
+  // to ensure that all messages sent by gadgets.rpc.call, irrespective
+  // when they were made (before/after setAuthToken, before/after transport
+  // setup complete), are sent. Hiding behind a query param to allow opt-in
+  // for a time while this technique is proven.
+  var useEarlyQueueing = (params['rpc_earlyq'] === "1");
+
   /*
    * Return a transport representing the best available cross-domain
    * message-passing mechanism available to the browser.
@@ -131,7 +138,8 @@
     receiverTx[receiverId] = tx;
 
     // If there are any early-queued messages, send them now directly through
-    // the needed transport.
+    // the needed transport. This queue will only have contents if
+    // useEarlyQueueing === true (see call method).
     var earlyQueue = earlyRpcQueue[receiverId] || [];
     for (var i = 0; i < earlyQueue.length; ++i) {
       var rpc = earlyQueue[i];
@@ -524,7 +532,7 @@
       }
 
       // Attempt to make call via a cross-domain transport.
-      var channel = receiverTx[targetId];
+      var channel = useEarlyQueueing ? receiverTx[targetId] : transport;
 
       if (!channel) {
         // Not set up yet. Enqueue the rpc for such time as it is.


Reply via email to