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() {