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