mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-08 20:28:42 +02:00
Differential Revision: https://phabricator.services.mozilla.com/D49785 --HG-- extra : moz-landing-system : lando
135 lines
4 KiB
JavaScript
135 lines
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/. */
|
|
|
|
/* globals browser, main, communication, manifest */
|
|
/* This file handles:
|
|
clicks on the WebExtension page action
|
|
browser.contextMenus.onClicked
|
|
browser.runtime.onMessage
|
|
and loads the rest of the background page in response to those events, forwarding
|
|
the events to main.onClicked, main.onClickedContextMenu, or communication.onMessage
|
|
*/
|
|
const startTime = Date.now();
|
|
|
|
// Set up to be able to use fluent:
|
|
(function() {
|
|
let link = document.createElement("link");
|
|
link.setAttribute("rel", "localization");
|
|
link.setAttribute("href", "browser/screenshots.ftl");
|
|
document.head.appendChild(link);
|
|
|
|
link = document.createElement("link");
|
|
link.setAttribute("rel", "localization");
|
|
link.setAttribute("href", "browser/branding/brandings.ftl");
|
|
document.head.appendChild(link);
|
|
})();
|
|
|
|
this.getStrings = async function(ids) {
|
|
if (document.readyState != "complete") {
|
|
await new Promise(resolve => window.addEventListener("load", resolve, {once: true}));
|
|
}
|
|
await document.l10n.ready;
|
|
return document.l10n.formatValues(ids);
|
|
}
|
|
|
|
this.startBackground = (function() {
|
|
const exports = {startTime};
|
|
|
|
const backgroundScripts = [
|
|
"log.js",
|
|
"makeUuid.js",
|
|
"catcher.js",
|
|
"blobConverters.js",
|
|
"background/selectorLoader.js",
|
|
"background/communication.js",
|
|
"background/auth.js",
|
|
"background/senderror.js",
|
|
"build/raven.js",
|
|
"build/shot.js",
|
|
"build/thumbnailGenerator.js",
|
|
"background/analytics.js",
|
|
"background/deviceInfo.js",
|
|
"background/takeshot.js",
|
|
"background/main.js",
|
|
];
|
|
|
|
browser.pageAction.onClicked.addListener(tab => {
|
|
loadIfNecessary().then(() => {
|
|
main.onClicked(tab);
|
|
}).catch(error => {
|
|
console.error("Error loading Screenshots:", error);
|
|
});
|
|
});
|
|
|
|
this.getStrings([{id: "screenshots-context-menu"}]).then(msgs => {
|
|
browser.contextMenus.create({
|
|
id: "create-screenshot",
|
|
title: msgs[0],
|
|
contexts: ["page", "selection"],
|
|
documentUrlPatterns: ["<all_urls>", "about:reader*"],
|
|
});
|
|
});
|
|
|
|
browser.contextMenus.onClicked.addListener((info, tab) => {
|
|
loadIfNecessary().then(() => {
|
|
main.onClickedContextMenu(info, tab);
|
|
}).catch((error) => {
|
|
console.error("Error loading Screenshots:", error);
|
|
});
|
|
});
|
|
|
|
browser.commands.onCommand.addListener((cmd) => {
|
|
if (cmd !== "take-screenshot") {
|
|
return;
|
|
}
|
|
loadIfNecessary().then(() => {
|
|
browser.tabs.query({currentWindow: true, active: true}).then((tabs) => {
|
|
const activeTab = tabs[0];
|
|
main.onCommand(activeTab);
|
|
}).catch((error) => {
|
|
throw error;
|
|
});
|
|
}).catch((error) => {
|
|
console.error("Error toggling Screenshots via keyboard shortcut: ", error);
|
|
});
|
|
});
|
|
|
|
browser.runtime.onMessage.addListener((req, sender, sendResponse) => {
|
|
loadIfNecessary().then(() => {
|
|
return communication.onMessage(req, sender, sendResponse);
|
|
}).catch((error) => {
|
|
console.error("Error loading Screenshots:", error);
|
|
});
|
|
return true;
|
|
});
|
|
|
|
let loadedPromise;
|
|
|
|
function loadIfNecessary() {
|
|
if (loadedPromise) {
|
|
return loadedPromise;
|
|
}
|
|
loadedPromise = Promise.resolve();
|
|
backgroundScripts.forEach((script) => {
|
|
loadedPromise = loadedPromise.then(() => {
|
|
return new Promise((resolve, reject) => {
|
|
const tag = document.createElement("script");
|
|
tag.src = browser.extension.getURL(script);
|
|
tag.onload = () => {
|
|
resolve();
|
|
};
|
|
tag.onerror = (error) => {
|
|
const exc = new Error(`Error loading script: ${error.message}`);
|
|
exc.scriptName = script;
|
|
reject(exc);
|
|
};
|
|
document.head.appendChild(tag);
|
|
});
|
|
});
|
|
});
|
|
return loadedPromise;
|
|
}
|
|
|
|
return exports;
|
|
})();
|