1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
<!DOCTYPE HTML>
<html>
<head>
<title>Tabs create Test</title>
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/ExtensionTestUtils.js"></script>
<script type="text/javascript" src="head.js"></script>
<link rel="stylesheet" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<script type="text/javascript">
"use strict";
add_setup(async () => {
// TODO bug 1799344: remove this when the pref is true by default.
await SpecialPowers.pushPrefEnv({
"set": [
["extensions.openPopupWithoutUserGesture.enabled", true],
],
});
});
async function test_query(query) {
let extension = ExtensionTestUtils.loadExtension({
manifest: {
browser_specific_settings: {
gecko: {
id: "current-window@tests.mozilla.org",
}
},
permissions: ["tabs"],
browser_action: {
default_popup: "popup.html",
},
},
useAddonManager: "permanent",
background: async function() {
let query = await new Promise(resolve => {
browser.test.onMessage.addListener(message => {
resolve(message);
});
});
let tab = await browser.tabs.create({ url: "http://www.example.com", active: true });
browser.runtime.onMessage.addListener(message => {
if (message === "popup-loaded") {
browser.runtime.sendMessage({ tab, query });
}
});
browser.browserAction.openPopup();
},
files: {
"popup.html": `<!DOCTYPE html><meta charset="utf-8"><script src="popup.js"><\/script>`,
"popup.js"() {
browser.runtime.onMessage.addListener(async function({ tab, query }) {
let tabs = await browser.tabs.query(query);
browser.test.assertEq(tabs.length, 1, `Got one tab`);
browser.test.assertEq(tabs[0].id, tab.id, "The tab is the right one");
// Create a new tab and verify that we still see the right result
let newTab = await browser.tabs.create({ url: "http://www.example.com", active: true });
tabs = await browser.tabs.query(query);
browser.test.assertEq(tabs.length, 1, `Got one tab`);
browser.test.assertEq(tabs[0].id, newTab.id, "Got the newly-created tab");
await browser.tabs.remove(newTab.id);
// Remove the tab and verify that we see the old tab
tabs = await browser.tabs.query(query);
browser.test.assertEq(tabs.length, 1, `Got one tab`);
browser.test.assertEq(tabs[0].id, tab.id, "Got the tab that was active before");
// Cleanup
await browser.tabs.remove(tab.id);
browser.test.notifyPass("tabs.query");
});
browser.runtime.sendMessage("popup-loaded");
},
},
});
await extension.startup();
extension.sendMessage(query);
await extension.awaitFinish("tabs.query");
await extension.unload();
}
add_task(function test_query_currentWindow_from_popup() {
return test_query({ currentWindow: true, active: true });
});
add_task(function test_query_lastActiveWindow_from_popup() {
return test_query({ lastFocusedWindow: true, active: true });
});
</script>
</body>
</html>
|