forked from mirrors/gecko-dev
MozReview-Commit-ID: JqAm9x1XGCM --HG-- extra : rebase_source : e9215288195f1fe683832db53d87dbe77c697b4c
232 lines
6.5 KiB
JavaScript
232 lines
6.5 KiB
JavaScript
"use strict";
|
|
|
|
XPCOMUtils.defineLazyModuleGetter(global, "EventEmitter",
|
|
"resource://gre/modules/EventEmitter.jsm");
|
|
|
|
// This function is pretty tightly tied to Extension.jsm.
|
|
// Its job is to fill in the |tab| property of the sender.
|
|
function getSender(extension, target, sender) {
|
|
let tabId;
|
|
if ("tabId" in sender) {
|
|
// The message came from a privileged extension page running in a tab. In
|
|
// that case, it should include a tabId property (which is filled in by the
|
|
// page-open listener below).
|
|
tabId = sender.tabId;
|
|
delete sender.tabId;
|
|
} else if (target instanceof Ci.nsIDOMXULElement) {
|
|
tabId = tabTracker.getBrowserData(target).tabId;
|
|
}
|
|
|
|
if (tabId) {
|
|
let tab = extension.tabManager.get(tabId, null);
|
|
if (tab) {
|
|
sender.tab = tab.convert();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Used by Extension.jsm
|
|
global.tabGetSender = getSender;
|
|
|
|
/* eslint-disable mozilla/balanced-listeners */
|
|
extensions.on("uninstall", (msg, extension) => {
|
|
if (extension.uninstallURL) {
|
|
let browser = windowTracker.topWindow.gBrowser;
|
|
browser.addTab(extension.uninstallURL, {relatedToCurrent: true});
|
|
}
|
|
});
|
|
|
|
extensions.on("page-shutdown", (type, context) => {
|
|
if (context.viewType == "tab") {
|
|
if (context.extension.id !== context.xulBrowser.contentPrincipal.addonId) {
|
|
// Only close extension tabs.
|
|
// This check prevents about:addons from closing when it contains a
|
|
// WebExtension as an embedded inline options page.
|
|
return;
|
|
}
|
|
let {gBrowser} = context.xulBrowser.ownerGlobal;
|
|
if (gBrowser) {
|
|
let nativeTab = gBrowser.getTabForBrowser(context.xulBrowser);
|
|
if (nativeTab) {
|
|
gBrowser.removeTab(nativeTab);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
/* eslint-enable mozilla/balanced-listeners */
|
|
|
|
global.openOptionsPage = (extension) => {
|
|
let window = windowTracker.topWindow;
|
|
if (!window) {
|
|
return Promise.reject({message: "No browser window available"});
|
|
}
|
|
|
|
if (extension.manifest.options_ui.open_in_tab) {
|
|
window.switchToTabHavingURI(extension.manifest.options_ui.page, true);
|
|
return Promise.resolve();
|
|
}
|
|
|
|
let viewId = `addons://detail/${encodeURIComponent(extension.id)}/preferences`;
|
|
|
|
return window.BrowserOpenAddonsMgr(viewId);
|
|
};
|
|
|
|
extensions.registerModules({
|
|
bookmarks: {
|
|
url: "chrome://browser/content/ext-bookmarks.js",
|
|
schema: "chrome://browser/content/schemas/bookmarks.json",
|
|
scopes: ["addon_parent"],
|
|
paths: [
|
|
["bookmarks"],
|
|
],
|
|
},
|
|
browserAction: {
|
|
url: "chrome://browser/content/ext-browserAction.js",
|
|
schema: "chrome://browser/content/schemas/browser_action.json",
|
|
scopes: ["addon_parent"],
|
|
manifest: ["browser_action"],
|
|
paths: [
|
|
["browserAction"],
|
|
],
|
|
},
|
|
browsingData: {
|
|
url: "chrome://browser/content/ext-browsingData.js",
|
|
schema: "chrome://browser/content/schemas/browsing_data.json",
|
|
scopes: ["addon_parent"],
|
|
paths: [
|
|
["browsingData"],
|
|
],
|
|
},
|
|
chrome_settings_overrides: {
|
|
url: "chrome://browser/content/ext-chrome-settings-overrides.js",
|
|
scopes: [],
|
|
schema: "chrome://browser/content/schemas/chrome_settings_overrides.json",
|
|
manifest: ["chrome_settings_overrides"],
|
|
},
|
|
commands: {
|
|
url: "chrome://browser/content/ext-commands.js",
|
|
schema: "chrome://browser/content/schemas/commands.json",
|
|
scopes: ["addon_parent"],
|
|
manifest: ["commands"],
|
|
paths: [
|
|
["commands"],
|
|
],
|
|
},
|
|
contextMenus: {
|
|
url: "chrome://browser/content/ext-contextMenus.js",
|
|
schema: "chrome://browser/content/schemas/context_menus.json",
|
|
scopes: ["addon_parent"],
|
|
paths: [
|
|
["contextMenus"],
|
|
],
|
|
},
|
|
devtools: {
|
|
url: "chrome://browser/content/ext-devtools.js",
|
|
schema: "chrome://browser/content/schemas/devtools.json",
|
|
scopes: ["devtools_parent"],
|
|
manifest: ["devtools_page"],
|
|
paths: [
|
|
["devtools"],
|
|
],
|
|
},
|
|
devtools_inspectedWindow: {
|
|
url: "chrome://browser/content/ext-devtools-inspectedWindow.js",
|
|
schema: "chrome://browser/content/schemas/devtools_inspected_window.json",
|
|
scopes: ["devtools_parent"],
|
|
paths: [
|
|
["devtools", "inspectedWindow"],
|
|
],
|
|
},
|
|
devtools_network: {
|
|
url: "chrome://browser/content/ext-devtools-network.js",
|
|
schema: "chrome://browser/content/schemas/devtools_network.json",
|
|
scopes: ["devtools_parent"],
|
|
paths: [
|
|
["devtools", "network"],
|
|
],
|
|
},
|
|
devtools_panels: {
|
|
url: "chrome://browser/content/ext-devtools-panels.js",
|
|
schema: "chrome://browser/content/schemas/devtools_panels.json",
|
|
scopes: ["devtools_parent"],
|
|
paths: [
|
|
["devtools", "panels"],
|
|
],
|
|
},
|
|
history: {
|
|
url: "chrome://browser/content/ext-history.js",
|
|
schema: "chrome://browser/content/schemas/history.json",
|
|
scopes: ["addon_parent"],
|
|
paths: [
|
|
["history"],
|
|
],
|
|
},
|
|
omnibox: {
|
|
url: "chrome://browser/content/ext-omnibox.js",
|
|
schema: "chrome://browser/content/schemas/omnibox.json",
|
|
scopes: ["addon_parent"],
|
|
manifest: ["omnibox"],
|
|
paths: [
|
|
["omnibox"],
|
|
],
|
|
},
|
|
pageAction: {
|
|
url: "chrome://browser/content/ext-pageAction.js",
|
|
schema: "chrome://browser/content/schemas/page_action.json",
|
|
scopes: ["addon_parent"],
|
|
manifest: ["page_action"],
|
|
paths: [
|
|
["pageAction"],
|
|
],
|
|
},
|
|
geckoProfiler: {
|
|
url: "chrome://browser/content/ext-geckoProfiler.js",
|
|
schema: "chrome://browser/content/schemas/geckoProfiler.json",
|
|
scopes: ["addon_parent"],
|
|
paths: [
|
|
["geckoProfiler"],
|
|
],
|
|
},
|
|
sessions: {
|
|
url: "chrome://browser/content/ext-sessions.js",
|
|
schema: "chrome://browser/content/schemas/sessions.json",
|
|
scopes: ["addon_parent"],
|
|
paths: [
|
|
["sessions"],
|
|
],
|
|
},
|
|
sidebarAction: {
|
|
url: "chrome://browser/content/ext-sidebarAction.js",
|
|
schema: "chrome://browser/content/schemas/sidebar_action.json",
|
|
scopes: ["addon_parent"],
|
|
manifest: ["sidebar_action"],
|
|
paths: [
|
|
["sidebarAction"],
|
|
],
|
|
},
|
|
tabs: {
|
|
url: "chrome://browser/content/ext-tabs.js",
|
|
schema: "chrome://browser/content/schemas/tabs.json",
|
|
scopes: ["addon_parent"],
|
|
paths: [
|
|
["tabs"],
|
|
],
|
|
},
|
|
urlOverrides: {
|
|
url: "chrome://browser/content/ext-url-overrides.js",
|
|
schema: "chrome://browser/content/schemas/url_overrides.json",
|
|
scopes: ["addon_parent"],
|
|
manifest: ["chrome_url_overrides"],
|
|
paths: [
|
|
["urlOverrides"],
|
|
],
|
|
},
|
|
windows: {
|
|
url: "chrome://browser/content/ext-windows.js",
|
|
schema: "chrome://browser/content/schemas/windows.json",
|
|
scopes: ["addon_parent"],
|
|
paths: [
|
|
["windows"],
|
|
],
|
|
},
|
|
});
|