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
|
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set sts=2 sw=2 et tw=80: */
"use strict";
SimpleTest.requestCompleteLog();
loadTestSubscript("head_sessions.js");
async function run_test_extension(incognitoOverride) {
function background() {
browser.test.onMessage.addListener((msg, filter) => {
if (msg == "check-sessions") {
browser.sessions.getRecentlyClosed(filter).then(recentlyClosed => {
browser.test.sendMessage("recentlyClosed", recentlyClosed);
});
}
});
}
let extension = ExtensionTestUtils.loadExtension({
manifest: {
permissions: ["sessions", "tabs"],
},
background,
incognitoOverride,
});
// Open a private browsing window.
let privateWin = await BrowserTestUtils.openNewBrowserWindow({
private: true,
});
await extension.startup();
const {
Management: {
global: { windowTracker },
},
} = ChromeUtils.importESModule("resource://gre/modules/Extension.sys.mjs");
let privateWinId = windowTracker.getId(privateWin);
extension.sendMessage("check-sessions");
let recentlyClosed = await extension.awaitMessage("recentlyClosed");
recordInitialTimestamps(recentlyClosed.map(item => item.lastModified));
// Open and close two tabs in the private window
let tab = await BrowserTestUtils.openNewForegroundTab(
privateWin.gBrowser,
"http://example.com"
);
BrowserTestUtils.removeTab(tab);
tab = await BrowserTestUtils.openNewForegroundTab(
privateWin.gBrowser,
"http://example.com"
);
let sessionPromise = BrowserTestUtils.waitForSessionStoreUpdate(tab);
BrowserTestUtils.removeTab(tab);
await sessionPromise;
extension.sendMessage("check-sessions");
recentlyClosed = await extension.awaitMessage("recentlyClosed");
let expectedCount =
!incognitoOverride || incognitoOverride == "not_allowed" ? 0 : 2;
checkRecentlyClosed(
recentlyClosed.filter(onlyNewItemsFilter),
expectedCount,
privateWinId,
true
);
// Close the private window.
await BrowserTestUtils.closeWindow(privateWin);
extension.sendMessage("check-sessions");
recentlyClosed = await extension.awaitMessage("recentlyClosed");
is(
recentlyClosed.filter(onlyNewItemsFilter).length,
0,
"the closed private window info was not found in recently closed data"
);
await extension.unload();
}
add_task(async function test_sessions_get_recently_closed_default() {
await run_test_extension();
});
add_task(async function test_sessions_get_recently_closed_private_incognito() {
await run_test_extension("spanning");
await run_test_extension("not_allowed");
});
|