annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
1 /*
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
2 * Copyright (C) 2018 Guido Berhoerster <guido+open-incognito@berhoerster.name>
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
3 *
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
4 * This Source Code Form is subject to the terms of the Mozilla Public
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
6 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
7 */
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
8
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
9 'use strict';
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
10
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
11 function onMenuShown(info, tab) {
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
12 let enabled = !tab.incognito &&
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
13 typeof info.linkUrl !== 'undefined' &&
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
14 (info.linkUrl.startsWith('http:') ||
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
15 info.linkUrl.startsWith('https:') ||
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
16 info.linkUrl.startsWith('ftp:'));
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
17 browser.menus.update('open-link-in-private-mode', {enabled});
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
18 browser.menus.refresh();
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
19 }
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
20
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
21 async function onClicked(info, tab) {
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
22 let activeTabs = await browser.tabs.query({
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
23 active: true,
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
24 currentWindow: false,
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
25 windowType: 'normal'
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
26 });
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
27 console.log('active tabs:', activeTabs);
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
28 let [windowId, ] = activeTabs.reduce((accumulator, currentTab) =>
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
29 (currentTab.incognito && accumulator[1] < currentTab.lastAccessed) ?
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
30 [currentTab.windowId, currentTab.lastAccessed] : accumulator,
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
31 [-1, 0]);
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
32 if (windowId < 0) {
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
33 browser.windows.create({
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
34 incognito: true,
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
35 url: info.linkUrl
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
36 });
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
37 } else {
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
38 browser.tabs.create({
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
39 url: info.linkUrl,
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
40 windowId
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
41 });
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
42 }
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
43 }
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
44
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
45 browser.menus.create({
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
46 id: 'open-link-in-private-mode',
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
47 title: browser.i18n.getMessage('openLinkInPrivateWindow'),
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
48 enabled: false,
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
49 contexts: ['link']
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
50 },
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
51 () => {
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
52 if (browser.runtime.lastError) {
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
53 console.error('Failed to create menu item:', browser.runtime.lastError);
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
54 return;
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
55 }
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
56 browser.menus.onShown.addListener(onMenuShown);
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
57 browser.menus.onClicked.addListener(onClicked);
3353f3c48b6b Initial revision
Guido Berhoerster <guido+open-incognito@berhoerster.name>
parents:
diff changeset
58 });