diff background.js @ 0:3353f3c48b6b

Initial revision
author Guido Berhoerster <guido+open-incognito@berhoerster.name>
date Fri, 14 Dec 2018 15:59:37 +0100
parents
children 89239e60d9e1
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/background.js	Fri Dec 14 15:59:37 2018 +0100
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2018 Guido Berhoerster <guido+open-incognito@berhoerster.name>
+ *
+ * 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';
+
+function onMenuShown(info, tab) {
+    let enabled = !tab.incognito &&
+            typeof info.linkUrl !== 'undefined' &&
+            (info.linkUrl.startsWith('http:') ||
+            info.linkUrl.startsWith('https:') ||
+            info.linkUrl.startsWith('ftp:'));
+    browser.menus.update('open-link-in-private-mode', {enabled});
+    browser.menus.refresh();
+}
+
+async function onClicked(info, tab) {
+    let activeTabs = await browser.tabs.query({
+        active: true,
+        currentWindow: false,
+        windowType: 'normal'
+    });
+    console.log('active tabs:', activeTabs);
+    let [windowId, ] = activeTabs.reduce((accumulator, currentTab) =>
+            (currentTab.incognito && accumulator[1] < currentTab.lastAccessed) ?
+            [currentTab.windowId, currentTab.lastAccessed] : accumulator,
+            [-1, 0]);
+    if (windowId < 0) {
+        browser.windows.create({
+            incognito: true,
+            url: info.linkUrl
+        });
+    } else {
+        browser.tabs.create({
+            url: info.linkUrl,
+            windowId
+        });
+    }
+}
+
+browser.menus.create({
+        id: 'open-link-in-private-mode',
+        title: browser.i18n.getMessage('openLinkInPrivateWindow'),
+        enabled: false,
+        contexts: ['link']
+    },
+    () => {
+    if (browser.runtime.lastError) {
+        console.error('Failed to create menu item:', browser.runtime.lastError);
+        return;
+    }
+    browser.menus.onShown.addListener(onMenuShown);
+    browser.menus.onClicked.addListener(onClicked);
+});