summaryrefslogtreecommitdiffstats
path: root/browser/extensions/screenshots/background/startBackground.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/extensions/screenshots/background/startBackground.js')
-rw-r--r--browser/extensions/screenshots/background/startBackground.js135
1 files changed, 135 insertions, 0 deletions
diff --git a/browser/extensions/screenshots/background/startBackground.js b/browser/extensions/screenshots/background/startBackground.js
new file mode 100644
index 0000000000..b32dc3d6f7
--- /dev/null
+++ b/browser/extensions/screenshots/background/startBackground.js
@@ -0,0 +1,135 @@
+/* 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;
+})();