Author: ssievers
Date: Wed Feb 19 13:07:37 2014
New Revision: 1569732

URL: http://svn.apache.org/r1569732
Log:
SHINDIG-1965 | iframe onload events firing more than once cause gadget iframe 
to empty

Modified:
    
shindig/trunk/features/src/main/javascript/features/container.site.gadget/gadget_site.js
    shindig/trunk/features/src/main/javascript/features/container/container.js

Modified: 
shindig/trunk/features/src/main/javascript/features/container.site.gadget/gadget_site.js
URL: 
http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/container.site.gadget/gadget_site.js?rev=1569732&r1=1569731&r2=1569732&view=diff
==============================================================================
--- 
shindig/trunk/features/src/main/javascript/features/container.site.gadget/gadget_site.js
 (original)
+++ 
shindig/trunk/features/src/main/javascript/features/container.site.gadget/gadget_site.js
 Wed Feb 19 13:07:37 2014
@@ -338,12 +338,17 @@ osapi.container.GadgetSite.prototype.ren
 osapi.container.GadgetSite.prototype.onRender = function() {
   this.swapBuffers_();
 
-  if (this.currentGadgetHolder_) {
-    this.currentGadgetHolder_.dispose();
-  }
+  // Only dispose the current holder set it to the loading holder if a loading 
holder exists.
+  // This protects this method from re-entrant code that can cause the current 
holder to be
+  // removed without a loading holder to take its place
+  if (this.loadingGadgetHolder_) {
+    if (this.currentGadgetHolder_) {
+      this.currentGadgetHolder_.dispose();
+    }
 
-  this.currentGadgetHolder_ = this.loadingGadgetHolder_;
-  this.loadingGadgetHolder_ = null;
+    this.currentGadgetHolder_ = this.loadingGadgetHolder_;
+    this.loadingGadgetHolder_ = null;
+  }
 };
 
 

Modified: 
shindig/trunk/features/src/main/javascript/features/container/container.js
URL: 
http://svn.apache.org/viewvc/shindig/trunk/features/src/main/javascript/features/container/container.js?rev=1569732&r1=1569731&r2=1569732&view=diff
==============================================================================
--- shindig/trunk/features/src/main/javascript/features/container/container.js 
(original)
+++ shindig/trunk/features/src/main/javascript/features/container/container.js 
Wed Feb 19 13:07:37 2014
@@ -139,9 +139,13 @@ osapi.container.Container = function(opt
   this.tokenRefreshTimer_ = null;
 
   var self = this;
+  var rendered = {};
   window[osapi.container.CallbackType.GADGET_ON_LOAD] = function(gadgetUrl, 
siteId) {
-    self.getSiteById(siteId).onRender();
-    self.applyLifecycleCallbacks_(osapi.container.CallbackType.ON_RENDER, 
gadgetUrl, siteId);
+    if (!rendered.hasOwnProperty(siteId)) {
+      self.getSiteById(siteId).onRender();
+      self.applyLifecycleCallbacks_(osapi.container.CallbackType.ON_RENDER, 
gadgetUrl, siteId);
+      rendered[siteId] = true;
+    }
   };
 
   this.initializeMixins_();


Reply via email to