summaryrefslogtreecommitdiffstats
path: root/browser/components/extensions/test/browser/browser_ext_sessions_forgetClosedTab.js
blob: 31968a61b5cfd5ab0fdd57f1768142b3653fcb6a (plain)
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set sts=2 sw=2 et tw=80: */
"use strict";

function getExtension(incognitoOverride) {
  function background() {
    browser.test.onMessage.addListener((msg, windowId, sessionId) => {
      if (msg === "check-sessions") {
        browser.sessions.getRecentlyClosed().then(recentlyClosed => {
          browser.test.sendMessage("recentlyClosed", recentlyClosed);
        });
      } else if (msg === "forget-tab") {
        browser.sessions.forgetClosedTab(windowId, sessionId).then(
          () => {
            browser.test.sendMessage("forgot-tab");
          },
          error => {
            browser.test.sendMessage("forget-reject", error.message);
          }
        );
      }
    });
  }

  return ExtensionTestUtils.loadExtension({
    manifest: {
      permissions: ["sessions", "tabs"],
    },
    background,
    incognitoOverride,
  });
}

add_task(async function test_sessions_forget_closed_tab() {
  let extension = getExtension();
  await extension.startup();

  let tabUrl = "http://example.com";
  let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, tabUrl);
  BrowserTestUtils.removeTab(tab);
  tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, tabUrl);
  let sessionUpdatePromise = BrowserTestUtils.waitForSessionStoreUpdate(tab);
  BrowserTestUtils.removeTab(tab);
  await sessionUpdatePromise;

  extension.sendMessage("check-sessions");
  let recentlyClosed = await extension.awaitMessage("recentlyClosed");
  let recentlyClosedLength = recentlyClosed.length;
  let recentlyClosedTab = recentlyClosed[0].tab;

  // Check that forgetting a tab works properly
  extension.sendMessage(
    "forget-tab",
    recentlyClosedTab.windowId,
    recentlyClosedTab.sessionId
  );
  await extension.awaitMessage("forgot-tab");
  extension.sendMessage("check-sessions");
  let remainingClosed = await extension.awaitMessage("recentlyClosed");
  is(
    remainingClosed.length,
    recentlyClosedLength - 1,
    "One tab was forgotten."
  );
  is(
    remainingClosed[0].tab.sessionId,
    recentlyClosed[1].tab.sessionId,
    "The correct tab was forgotten."
  );

  // Check that re-forgetting the same tab fails properly
  extension.sendMessage(
    "forget-tab",
    recentlyClosedTab.windowId,
    recentlyClosedTab.sessionId
  );
  let errormsg = await extension.awaitMessage("forget-reject");
  is(
    errormsg,
    `Could not find closed tab using sessionId ${recentlyClosedTab.sessionId}.`
  );

  extension.sendMessage("check-sessions");
  remainingClosed = await extension.awaitMessage("recentlyClosed");
  is(
    remainingClosed.length,
    recentlyClosedLength - 1,
    "No extra tab was forgotten."
  );
  is(
    remainingClosed[0].tab.sessionId,
    recentlyClosed[1].tab.sessionId,
    "The correct tab remains."
  );

  await extension.unload();
});

add_task(async function test_sessions_forget_closed_tab_private() {
  let pb_extension = getExtension("spanning");
  await pb_extension.startup();
  let extension = getExtension();
  await extension.startup();

  // Open a private browsing window.
  let privateWin = await BrowserTestUtils.openNewBrowserWindow({
    private: true,
  });

  let tabUrl = "http://example.com";
  let tab = await BrowserTestUtils.openNewForegroundTab(
    privateWin.gBrowser,
    tabUrl
  );
  BrowserTestUtils.removeTab(tab);
  tab = await BrowserTestUtils.openNewForegroundTab(
    privateWin.gBrowser,
    tabUrl
  );
  let sessionUpdatePromise = BrowserTestUtils.waitForSessionStoreUpdate(tab);
  BrowserTestUtils.removeTab(tab);
  await sessionUpdatePromise;

  pb_extension.sendMessage("check-sessions");
  let recentlyClosed = await pb_extension.awaitMessage("recentlyClosed");
  let recentlyClosedTab = recentlyClosed[0].tab;

  // Check that forgetting a tab works properly
  extension.sendMessage(
    "forget-tab",
    recentlyClosedTab.windowId,
    recentlyClosedTab.sessionId
  );
  let errormsg = await extension.awaitMessage("forget-reject");
  ok(/Invalid window ID/.test(errormsg), "could not access window");

  await BrowserTestUtils.closeWindow(privateWin);
  await extension.unload();
  await pb_extension.unload();
});