view background.js @ 2:0e8c61f3373d

Added tag version-1 for changeset e998dc498645
author Guido Berhoerster <guido+open-incognito@berhoerster.name>
date Fri, 14 Dec 2018 22:18:02 +0100
parents 3353f3c48b6b
children 89239e60d9e1
line wrap: on
line source

/*
 * 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);
});