Bug 1301514 - Clarify ownership of BrowserElementIsReady. r=kanru
It wasn't immediately obvious to me that BrowserElementIsReady was correctly
guarding against re-running the browser element scripts in a frame. After more
testing, it was working, but I've added some debug lines for future clarity.
No functionality changes in this patch.
MozReview-Commit-ID: CW4o2TsGKmj
--- a/dom/browser-element/BrowserElementChild.js
+++ b/dom/browser-element/BrowserElementChild.js
@@ -28,18 +28,22 @@ function isTopBrowserElement(docShell) {
docShell = parentDocShell(docShell);
if (docShell && docShell.isMozBrowserOrApp) {
return false;
}
}
return true;
}
+var BrowserElementIsReady;
+
+debug(`Might load BE scripts: BEIR: ${BrowserElementIsReady}`);
if (!BrowserElementIsReady) {
- if (!('BrowserElementIsPreloaded' in this)) {
+ debug("Loading BE scripts")
+ if (!("BrowserElementIsPreloaded" in this)) {
if (isTopBrowserElement(docShell)) {
if (Services.prefs.getBoolPref("dom.mozInputMethod.enabled")) {
try {
Services.scriptloader.loadSubScript("chrome://global/content/forms.js");
} catch (e) {
}
}
}
@@ -68,13 +72,14 @@ if (!BrowserElementIsReady) {
} else {
if (Services.prefs.getIntPref("dom.w3c_touch_events.enabled") != 0) {
if (docShell.asyncPanZoomEnabled === false) {
ContentPanningAPZDisabled.init();
}
ContentPanning.init();
}
}
+ BrowserElementIsReady = true;
+} else {
+ debug("BE already loaded, abort");
}
-var BrowserElementIsReady = true;
-
sendAsyncMessage('browser-element-api:call', { 'msg_name': 'hello' });
--- a/dom/browser-element/BrowserElementChildPreload.js
+++ b/dom/browser-element/BrowserElementChildPreload.js
@@ -5,17 +5,17 @@
"use strict";
function debug(msg) {
// dump("BrowserElementChildPreload - " + msg + "\n");
}
debug("loaded");
-var BrowserElementIsReady = false;
+var BrowserElementIsReady;
var { classes: Cc, interfaces: Ci, results: Cr, utils: Cu } = Components;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/BrowserElementPromptService.jsm");
Cu.import("resource://gre/modules/Task.jsm");
Cu.import("resource://gre/modules/ExtensionContent.jsm");
@@ -32,32 +32,34 @@ var kLongestReturnedString = 128;
const Timer = Components.Constructor("@mozilla.org/timer;1",
"nsITimer",
"initWithCallback");
function sendAsyncMsg(msg, data) {
// Ensure that we don't send any messages before BrowserElementChild.js
// finishes loading.
- if (!BrowserElementIsReady)
+ if (!BrowserElementIsReady) {
return;
+ }
if (!data) {
data = { };
}
data.msg_name = msg;
sendAsyncMessage('browser-element-api:call', data);
}
function sendSyncMsg(msg, data) {
// Ensure that we don't send any messages before BrowserElementChild.js
// finishes loading.
- if (!BrowserElementIsReady)
+ if (!BrowserElementIsReady) {
return;
+ }
if (!data) {
data = { };
}
data.msg_name = msg;
return sendSyncMessage('browser-element-api:call', data);
}