mirror of
https://github.com/roytam1/UXP.git
synced 2026-05-26 05:38:39 +00:00
7b6e3a2d4a
This removes a lot of the plumbing for having the platform embed itself through IPC which was required for B2G running the browser as both shell and browser application.
84 lines
2.4 KiB
JavaScript
84 lines
2.4 KiB
JavaScript
/* 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/. */
|
|
|
|
"use strict";
|
|
|
|
var { classes: Cc, interfaces: Ci, results: Cr, utils: Cu } = Components;
|
|
Cu.import("resource://gre/modules/Services.jsm");
|
|
|
|
function debug(msg) {
|
|
//dump("BrowserElementChild - " + msg + "\n");
|
|
}
|
|
|
|
// NB: this must happen before we process any messages from
|
|
// mozbrowser API clients.
|
|
docShell.isActive = true;
|
|
|
|
function parentDocShell(docshell) {
|
|
if (!docshell) {
|
|
return null;
|
|
}
|
|
let treeitem = docshell.QueryInterface(Ci.nsIDocShellTreeItem);
|
|
return treeitem.parent ? treeitem.parent.QueryInterface(Ci.nsIDocShell) : null;
|
|
}
|
|
|
|
function isTopBrowserElement(docShell) {
|
|
while (docShell) {
|
|
docShell = parentDocShell(docShell);
|
|
if (docShell && docShell.isMozBrowser) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
var BrowserElementIsReady;
|
|
|
|
debug(`Might load BE scripts: BEIR: ${BrowserElementIsReady}`);
|
|
if (!BrowserElementIsReady) {
|
|
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) {
|
|
}
|
|
}
|
|
}
|
|
|
|
if(Services.appinfo.processType == Services.appinfo.PROCESS_TYPE_CONTENT) {
|
|
// general content apps
|
|
if (isTopBrowserElement(docShell)) {
|
|
Services.scriptloader.loadSubScript("chrome://global/content/BrowserElementCopyPaste.js");
|
|
}
|
|
} else {
|
|
// rocketbar in system app and other in-process case (ex. B2G desktop client)
|
|
Services.scriptloader.loadSubScript("chrome://global/content/BrowserElementCopyPaste.js");
|
|
}
|
|
|
|
Services.scriptloader.loadSubScript("chrome://global/content/BrowserElementChildPreload.js");
|
|
}
|
|
|
|
function onDestroy() {
|
|
removeMessageListener("browser-element-api:destroy", onDestroy);
|
|
|
|
if (api) {
|
|
api.destroy();
|
|
}
|
|
if ("CopyPasteAssistent" in this) {
|
|
CopyPasteAssistent.destroy();
|
|
}
|
|
|
|
BrowserElementIsReady = false;
|
|
}
|
|
addMessageListener("browser-element-api:destroy", onDestroy);
|
|
|
|
BrowserElementIsReady = true;
|
|
} else {
|
|
debug("BE already loaded, abort");
|
|
}
|
|
|
|
sendAsyncMessage('browser-element-api:call', { 'msg_name': 'hello' });
|