Index: firstRun.js |
=================================================================== |
--- a/firstRun.js |
+++ b/firstRun.js |
@@ -156,25 +156,58 @@ |
var glassPane = E("glass-pane"); |
var popupMessageReceived = false; |
+ // Firefox 38+ no longer allows messaging using postMessage so we need |
+ // to have a fake top level frame to avoid problems with scripts that try to |
+ // communicate with the first-run page |
+ var isGecko = ("Components" in window); |
+ if (isGecko) |
+ { |
+ try |
+ { |
+ var Ci = Components.interfaces; |
+ iframe.contentWindow |
+ .QueryInterface(Ci.nsIInterfaceRequestor) |
+ .getInterface(Ci.nsIDocShell) |
+ .setIsBrowserInsideApp(Ci.nsIScriptSecurityManager.UNKNOWN_APP_ID); |
+ } |
+ catch(ex) |
+ { |
+ console.error(ex); |
+ } |
+ } |
+ |
+ function resizePopup(width, height) |
+ { |
+ iframe.width = width; |
+ iframe.height = height; |
+ iframe.style.marginTop = -height / 2 + "px"; |
+ iframe.style.marginLeft = -width / 2 + "px"; |
+ popupMessageReceived = true; |
+ window.removeEventListener("message", popupMessageListener); |
+ } |
+ |
var popupMessageListener = function(event) |
{ |
if (!/[.\/]adblockplus\.org$/.test(event.origin)) |
return; |
- var width = event.data.width; |
- var height = event.data.height; |
- iframe.width = width; |
- iframe.height = height; |
- iframe.style.marginTop = -height/2 + "px"; |
- iframe.style.marginLeft = -width/2 + "px"; |
- popupMessageReceived = true; |
- window.removeEventListener("message", popupMessageListener); |
+ resizePopup(event.data.width, event.data.height); |
}; |
- // Firefox requires last parameter to be true to be triggered by unprivileged pages |
+ // Firefox requires last parameter to be true to be triggered by |
+ // unprivileged pages |
window.addEventListener("message", popupMessageListener, false, true); |
var popupLoadListener = function() |
{ |
+ if (!popupMessageReceived && isGecko) |
+ { |
+ var rootElement = iframe.contentDocument.documentElement; |
+ var width = rootElement.dataset.width; |
+ var height = rootElement.dataset.height; |
+ if (width && height) |
+ resizePopup(width, height); |
+ } |
+ |
if (popupMessageReceived) |
{ |
iframe.className = "visible"; |