From f99ee35b8266e9543e0f0078598f2c8f75583f67 Mon Sep 17 00:00:00 2001 From: Kris Maglione Date: Fri, 10 Aug 2018 13:58:18 -0700 Subject: [PATCH] Bug 1480244: Part 5 - Run most framescripts in shared scope. r=mconley Creating non-shared scopes for frame scripts is fairly expensive. After these changes it's even more expensive. However, many frame scripts have no use for the shared scopes at all. Run-once scripts which execute in closures, for instance, make no use of them. And after bug 1472491, neither do most of our default frame scripts. MozReview-Commit-ID: 9PK7bYdQ0yh --HG-- extra : rebase_source : db2516d2f00a75e233e1957649f2b62a9299b7cd --- browser/base/content/browser.js | 6 +++--- browser/base/content/webext-panels.js | 4 ++-- browser/components/extensions/ExtensionPopups.jsm | 4 ++-- .../components/extensions/test/browser/browser_ext_find.js | 2 +- browser/components/sessionstore/SessionStore.jsm | 2 +- browser/extensions/formautofill/bootstrap.js | 2 +- browser/extensions/onboarding/bootstrap.js | 2 +- mobile/android/chrome/content/browser.js | 4 ++-- services/sync/tps/extensions/tps/resource/modules/tabs.jsm | 2 +- toolkit/components/extensions/ExtensionParent.jsm | 2 +- toolkit/components/extensions/ExtensionXPCShellUtils.jsm | 6 +++--- .../test/xpcshell/test_ext_content_security_policy.js | 2 +- .../extensions/test/xpcshell/test_ext_permissions.js | 2 +- toolkit/components/processsingleton/MainProcessSingleton.js | 4 ++-- toolkit/mozapps/extensions/addonManager.js | 2 +- toolkit/mozapps/extensions/content/extensions.js | 4 ++-- 16 files changed, 25 insertions(+), 25 deletions(-) diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js index 0796133a4532..3fb5dfa3f031 100644 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -1315,8 +1315,8 @@ var gBrowserInit = { ZoomUI.init(window); let mm = window.getGroupMessageManager("browsers"); - mm.loadFrameScript("chrome://browser/content/tab-content.js", true); - mm.loadFrameScript("chrome://browser/content/content.js", true); + mm.loadFrameScript("chrome://browser/content/tab-content.js", true, true); + mm.loadFrameScript("chrome://browser/content/content.js", true, true); mm.loadFrameScript("chrome://global/content/content-HybridContentTelemetry.js", true); window.messageManager.addMessageListener("Browser:LoadURI", RedirectLoad); @@ -5206,7 +5206,7 @@ const AccessibilityRefreshBlocker = { if (!this._loaded) { this._loaded = true; let mm = window.getGroupMessageManager("browsers"); - mm.loadFrameScript("chrome://browser/content/content-refreshblocker.js", true); + mm.loadFrameScript("chrome://browser/content/content-refreshblocker.js", true, true); } } }; diff --git a/browser/base/content/webext-panels.js b/browser/base/content/webext-panels.js index c450bb8a57da..4185f6277141 100644 --- a/browser/base/content/webext-panels.js +++ b/browser/base/content/webext-panels.js @@ -64,12 +64,12 @@ function getBrowser(sidebar) { document.documentElement.appendChild(stack); return readyPromise.then(() => { - browser.messageManager.loadFrameScript("chrome://browser/content/content.js", false); + browser.messageManager.loadFrameScript("chrome://browser/content/content.js", false, true); ExtensionParent.apiManager.emit("extension-browser-inserted", browser); if (sidebar.browserStyle) { browser.messageManager.loadFrameScript( - "chrome://extensions/content/ext-browser-content.js", false); + "chrome://extensions/content/ext-browser-content.js", false, true); browser.messageManager.sendAsyncMessage("Extension:InitBrowser", { stylesheets: ExtensionParent.extensionStylesheets, diff --git a/browser/components/extensions/ExtensionPopups.jsm b/browser/components/extensions/ExtensionPopups.jsm index de6e5d95c3ed..3a7ed31c6c6a 100644 --- a/browser/components/extensions/ExtensionPopups.jsm +++ b/browser/components/extensions/ExtensionPopups.jsm @@ -311,10 +311,10 @@ class BasePopup { let mm = browser.messageManager; // Sets the context information for context menus. - mm.loadFrameScript("chrome://browser/content/content.js", true); + mm.loadFrameScript("chrome://browser/content/content.js", true, true); mm.loadFrameScript( - "chrome://extensions/content/ext-browser-content.js", false); + "chrome://extensions/content/ext-browser-content.js", false, true); mm.sendAsyncMessage("Extension:InitBrowser", { allowScriptsToClose: true, diff --git a/browser/components/extensions/test/browser/browser_ext_find.js b/browser/components/extensions/test/browser/browser_ext_find.js index fa87ca69d3fe..4f2c04b098bc 100644 --- a/browser/components/extensions/test/browser/browser_ext_find.js +++ b/browser/components/extensions/test/browser/browser_ext_find.js @@ -142,7 +142,7 @@ add_task(async function testDuplicatePinnedTab() { let {selectedBrowser} = gBrowser; let frameScriptUrl = `data:,(${frameScript}).call(this)`; - selectedBrowser.messageManager.loadFrameScript(frameScriptUrl, false); + selectedBrowser.messageManager.loadFrameScript(frameScriptUrl, false, true); let message = await waitForMessage(selectedBrowser.messageManager, "test:find:selectionTest"); info("Test that text was highlighted properly."); diff --git a/browser/components/sessionstore/SessionStore.jsm b/browser/components/sessionstore/SessionStore.jsm index 87bb0d5dae19..3b2709a796cf 100644 --- a/browser/components/sessionstore/SessionStore.jsm +++ b/browser/components/sessionstore/SessionStore.jsm @@ -1101,7 +1101,7 @@ var SessionStoreInternal = { }); // Load the frame script after registering listeners. - mm.loadFrameScript("chrome://browser/content/content-sessionStore.js", true); + mm.loadFrameScript("chrome://browser/content/content-sessionStore.js", true, true); // and create its data object this._windows[aWindow.__SSi] = { tabs: [], selected: 0, _closedTabs: [], busy: false }; diff --git a/browser/extensions/formautofill/bootstrap.js b/browser/extensions/formautofill/bootstrap.js index 6d402572b678..45c0165049e4 100644 --- a/browser/extensions/formautofill/bootstrap.js +++ b/browser/extensions/formautofill/bootstrap.js @@ -131,7 +131,7 @@ function startup(data) { ChromeUtils.import("resource://formautofill/FormAutofillContent.jsm"); }, true); /* eslint-enable no-unused-vars */ - Services.mm.loadFrameScript("chrome://formautofill/content/FormAutofillFrameScript.js", true); + Services.mm.loadFrameScript("chrome://formautofill/content/FormAutofillFrameScript.js", true, true); } function shutdown() { diff --git a/browser/extensions/onboarding/bootstrap.js b/browser/extensions/onboarding/bootstrap.js index c8ce3621a4c3..62c0e01b42e6 100644 --- a/browser/extensions/onboarding/bootstrap.js +++ b/browser/extensions/onboarding/bootstrap.js @@ -174,7 +174,7 @@ function onBrowserReady() { OnboardingTourType.check(); OnboardingTelemetry.init(startupData); - Services.mm.loadFrameScript("resource://onboarding/onboarding.js", true); + Services.mm.loadFrameScript("resource://onboarding/onboarding.js", true, true); initContentMessageListener(); } diff --git a/mobile/android/chrome/content/browser.js b/mobile/android/chrome/content/browser.js index 9f28d190f3c4..a81495ff0768 100644 --- a/mobile/android/chrome/content/browser.js +++ b/mobile/android/chrome/content/browser.js @@ -507,10 +507,10 @@ var BrowserApp = { // Don't delay loading content.js because when we restore reader mode tabs, // we require the reader mode scripts in content.js right away. let mm = window.getGroupMessageManager("browsers"); - mm.loadFrameScript("chrome://browser/content/content.js", true); + mm.loadFrameScript("chrome://browser/content/content.js", true, true); // Listen to manifest messages - mm.loadFrameScript("chrome://global/content/manifestMessages.js", true); + mm.loadFrameScript("chrome://global/content/manifestMessages.js", true, true); // We can't delay registering WebChannel listeners: if the first page is // about:accounts, which can happen when starting the Firefox Account flow diff --git a/services/sync/tps/extensions/tps/resource/modules/tabs.jsm b/services/sync/tps/extensions/tps/resource/modules/tabs.jsm index 6ed3ed2ca3f9..6c443f7ae217 100644 --- a/services/sync/tps/extensions/tps/resource/modules/tabs.jsm +++ b/services/sync/tps/extensions/tps/resource/modules/tabs.jsm @@ -25,7 +25,7 @@ Services addEventListener("load", function(event) { let subframe = event.target != content.document; sendAsyncMessage("tps:loadEvent", {subframe: subframe, url: event.target.documentURI}); - }, true)`), true); + }, true)`), true, true); var BrowserTabs = { /** diff --git a/toolkit/components/extensions/ExtensionParent.jsm b/toolkit/components/extensions/ExtensionParent.jsm index f7defc51d18e..3c113b51514d 100644 --- a/toolkit/components/extensions/ExtensionParent.jsm +++ b/toolkit/components/extensions/ExtensionParent.jsm @@ -523,7 +523,7 @@ GlobalManager = { Components.utils.import("resource://gre/modules/Services.jsm"); Services.obs.notifyObservers(this, "tab-content-frameloader-created", ""); - `, false); + `, false, true); let viewType = browser.getAttribute("webextension-view-type"); if (viewType) { diff --git a/toolkit/components/extensions/ExtensionXPCShellUtils.jsm b/toolkit/components/extensions/ExtensionXPCShellUtils.jsm index 503d58837ad9..9e589323bd7c 100644 --- a/toolkit/components/extensions/ExtensionXPCShellUtils.jsm +++ b/toolkit/components/extensions/ExtensionXPCShellUtils.jsm @@ -35,7 +35,7 @@ XPCOMUtils.defineLazyGetter(this, "Management", () => { return Management; }); -Services.mm.loadFrameScript("chrome://global/content/browser-content.js", true); +Services.mm.loadFrameScript("chrome://global/content/browser-content.js", true, true); ActorManagerParent.flush(); @@ -168,7 +168,7 @@ class ContentPage { loadFrameScript(func) { let frameScript = `data:text/javascript,(${encodeURI(func)}).call(this)`; - this.browser.messageManager.loadFrameScript(frameScript, true); + this.browser.messageManager.loadFrameScript(frameScript, true, true); } addFrameScriptHelper(func) { @@ -678,7 +678,7 @@ var ExtensionTestUtils = { // fail sanity checks on debug builds the first time we try to // create a wrapper, because we should never have a global without a // cached wrapper. - Services.mm.loadFrameScript("data:text/javascript,//", true); + Services.mm.loadFrameScript("data:text/javascript,//", true, true); let tmpD = this.profileDir.clone(); diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_content_security_policy.js b/toolkit/components/extensions/test/xpcshell/test_ext_content_security_policy.js index 8fe15f692ff0..0a7830923b2c 100644 --- a/toolkit/components/extensions/test/xpcshell/test_ext_content_security_policy.js +++ b/toolkit/components/extensions/test/xpcshell/test_ext_content_security_policy.js @@ -107,7 +107,7 @@ async function testPolicy(customCSP = null) { }, true); } let frameScriptURL = `data:,(${encodeURI(frameScript)}).call(this)`; - Services.mm.loadFrameScript(frameScriptURL, true); + Services.mm.loadFrameScript(frameScriptURL, true, true); info(`Testing CSP for policy: ${content_security_policy}`); diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_permissions.js b/toolkit/components/extensions/test/xpcshell/test_ext_permissions.js index c8961fe8363d..4cdad121220a 100644 --- a/toolkit/components/extensions/test/xpcshell/test_ext_permissions.js +++ b/toolkit/components/extensions/test/xpcshell/test_ext_permissions.js @@ -36,7 +36,7 @@ async function withHandlingUserInput(extension, fn) { let {messageManager} = extension.extension.groupFrameLoader; if (!extensionHandlers.has(extension)) { - messageManager.loadFrameScript(`data:,(${frameScript}).call(this)`, false); + messageManager.loadFrameScript(`data:,(${frameScript}).call(this)`, false, true); extensionHandlers.add(extension); } diff --git a/toolkit/components/processsingleton/MainProcessSingleton.js b/toolkit/components/processsingleton/MainProcessSingleton.js index 67b572b96194..d04f2e39cbd2 100644 --- a/toolkit/components/processsingleton/MainProcessSingleton.js +++ b/toolkit/components/processsingleton/MainProcessSingleton.js @@ -65,8 +65,8 @@ MainProcessSingleton.prototype = { // Load this script early so that console.* is initialized // before other frame scripts. - Services.mm.loadFrameScript("chrome://global/content/browser-content.js", true); - Services.ppmm.loadProcessScript("chrome://global/content/process-content.js", true); + Services.mm.loadFrameScript("chrome://global/content/browser-content.js", true, true); + Services.ppmm.loadProcessScript("chrome://global/content/process-content.js", true, true); Services.mm.addMessageListener("Search:AddEngine", this.addSearchEngine); Services.ppmm.loadProcessScript("resource:///modules/ContentObservers.js", true); break; diff --git a/toolkit/mozapps/extensions/addonManager.js b/toolkit/mozapps/extensions/addonManager.js index f4e413d790e9..65d5ab894d67 100644 --- a/toolkit/mozapps/extensions/addonManager.js +++ b/toolkit/mozapps/extensions/addonManager.js @@ -43,7 +43,7 @@ function amManager() { ChromeUtils.import("resource://gre/modules/AddonManager.jsm"); /* globals AddonManagerPrivate*/ - Services.mm.loadFrameScript(CHILD_SCRIPT, true); + Services.mm.loadFrameScript(CHILD_SCRIPT, true, true); Services.mm.addMessageListener(MSG_INSTALL_ENABLED, this); Services.mm.addMessageListener(MSG_INSTALL_ADDON, this); Services.mm.addMessageListener(MSG_PROMISE_REQUEST, this); diff --git a/toolkit/mozapps/extensions/content/extensions.js b/toolkit/mozapps/extensions/content/extensions.js index ebf43d4286c4..4ba5d8afb774 100644 --- a/toolkit/mozapps/extensions/content/extensions.js +++ b/toolkit/mozapps/extensions/content/extensions.js @@ -3094,8 +3094,8 @@ var gDetailView = { } mm.loadFrameScript("chrome://extensions/content/ext-browser-content.js", - false); - mm.loadFrameScript("chrome://browser/content/content.js", false); + false, true); + mm.loadFrameScript("chrome://browser/content/content.js", false, true); mm.addMessageListener("Extension:BrowserContentLoaded", messageListener); mm.addMessageListener("Extension:BrowserResized", messageListener);