Bug 1340750 fix remote handling of sidebar browser, r?kmag
MozReview-Commit-ID: 3hamdXtxKjh
--- a/browser/base/content/webext-panels.js
+++ b/browser/base/content/webext-panels.js
@@ -1,32 +1,64 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 4 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
XPCOMUtils.defineLazyModuleGetter(this, "ExtensionParent",
"resource://gre/modules/ExtensionParent.jsm");
+Cu.import("resource://gre/modules/ExtensionUtils.jsm");
+
+var {
+ promiseEvent,
+} = ExtensionUtils;
+
+const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+
+function getBrowser(sidebar) {
+ let browser = document.getElementById("webext-panels-browser");
+ if (browser) {
+ return Promise.resolve(browser);
+ }
+
+ browser = document.createElementNS(XUL_NS, "browser");
+ browser.setAttribute("id", "webext-panels-browser");
+ browser.setAttribute("type", "content");
+ browser.setAttribute("flex", "1");
+ browser.setAttribute("disableglobalhistory", "true");
+ browser.setAttribute("webextension-view-type", "sidebar");
+ browser.setAttribute("context", "contentAreaContextMenu");
+ browser.setAttribute("tooltip", "aHTMLTooltip");
+ browser.setAttribute("onclick", "window.parent.contentAreaClick(event, true);");
+
+ let readyPromise;
+ if (sidebar.remote) {
+ browser.setAttribute("remote", "true");
+ browser.setAttribute("remoteType",
+ E10SUtils.getRemoteTypeForURI(sidebar.uri, true,
+ E10SUtils.EXTENSION_REMOTE_TYPE));
+ readyPromise = promiseEvent(browser, "XULFrameLoaderCreated");
+ } else {
+ readyPromise = Promise.resolve();
+ }
+ document.documentElement.appendChild(browser);
+
+ return readyPromise.then(() => {
+ browser.messageManager.loadFrameScript("chrome://browser/content/content.js", false);
+ ExtensionParent.apiManager.emit("extension-browser-inserted", browser);
+ return browser;
+ });
+}
function loadWebPanel() {
let sidebarURI = new URL(location);
- let uri = sidebarURI.searchParams.get("panel");
- let remote = sidebarURI.searchParams.get("remote");
- let browser = document.getElementById("webext-panels-browser");
- if (remote) {
- let remoteType = E10SUtils.getRemoteTypeForURI(uri, true,
- E10SUtils.EXTENSION_REMOTE_TYPE);
- browser.setAttribute("remote", "true");
- browser.setAttribute("remoteType", remoteType);
- } else {
- browser.removeAttribute("remote");
- browser.removeAttribute("remoteType");
- }
- browser.loadURI(uri);
+ let sidebar = {
+ uri: sidebarURI.searchParams.get("panel"),
+ remote: sidebarURI.searchParams.get("remote"),
+ };
+ getBrowser(sidebar).then(browser => {
+ browser.loadURI(sidebar.uri);
+ });
}
function load() {
- let browser = document.getElementById("webext-panels-browser");
- browser.messageManager.loadFrameScript("chrome://browser/content/content.js", true);
- ExtensionParent.apiManager.emit("extension-browser-inserted", browser);
-
this.loadWebPanel();
}
--- a/browser/base/content/webext-panels.xul
+++ b/browser/base/content/webext-panels.xul
@@ -60,14 +60,9 @@
return;
gContextMenu.hiding();
gContextMenu = null;">
#include browser-context.inc
</menupopup>
</popupset>
<commandset id="editMenuCommands"/>
- <browser id="webext-panels-browser"
- type="content" flex="1"
- webextension-view-type="sidebar"
- context="contentAreaContextMenu" tooltip="aHTMLTooltip"
- onclick="window.parent.contentAreaClick(event, true);"/>
</page>