Mercurial > addons > firefox-addons > open-incognito
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); +});