forked from mirrors/gecko-dev
MozReview-Commit-ID: 4PV4z870GTb --HG-- rename : browser/components/extensions/ext-browser.js => browser/components/extensions/ext-browser.json rename : toolkit/components/extensions/ext-toolkit.js => toolkit/components/extensions/ext-toolkit.json extra : rebase_source : d0909d381724c65877517873b57e78d474948376
76 lines
2.3 KiB
JavaScript
76 lines
2.3 KiB
JavaScript
"use strict";
|
|
|
|
// The ext-* files are imported into the same scopes.
|
|
/* import-globals-from ext-utils.js */
|
|
|
|
global.EventEmitter = ExtensionUtils.EventEmitter;
|
|
|
|
// This function is pretty tightly tied to Extension.jsm.
|
|
// Its job is to fill in the |tab| property of the sender.
|
|
const 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, {
|
|
triggeringPrincipal: extension.principal,
|
|
});
|
|
return Promise.resolve();
|
|
}
|
|
|
|
let viewId = `addons://detail/${encodeURIComponent(extension.id)}/preferences`;
|
|
|
|
return window.BrowserOpenAddonsMgr(viewId);
|
|
};
|