summaryrefslogtreecommitdiffstats
path: root/browser/components/extensions/test/browser/browser_ext_windows_remove.js
blob: 455987a9083aee96b6801452544d5a40579f50a2 (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
/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set sts=2 sw=2 et tw=80: */
"use strict";

add_task(async function testWindowRemove() {
  let extension = ExtensionTestUtils.loadExtension({
    async background() {
      async function closeWindow(id) {
        let window = await browser.windows.get(id);
        return new Promise(function (resolve) {
          browser.windows.onRemoved.addListener(async function listener(
            windowId
          ) {
            browser.windows.onRemoved.removeListener(listener);
            await browser.test.assertEq(
              windowId,
              window.id,
              "The right window was closed"
            );
            await browser.test.assertRejects(
              browser.windows.get(windowId),
              new RegExp(`Invalid window ID: ${windowId}`),
              "The window was really closed."
            );
            resolve();
          });
          browser.windows.remove(id);
        });
      }

      browser.test.log("Create a new window and close it by its ID");
      let newWindow = await browser.windows.create();
      await closeWindow(newWindow.id);

      browser.test.log("Create a new window and close it by WINDOW_ID_CURRENT");
      await browser.windows.create();
      await closeWindow(browser.windows.WINDOW_ID_CURRENT);

      browser.test.log("Assert failure for bad parameter.");
      await browser.test.assertThrows(
        () => browser.windows.remove(-3),
        /-3 is too small \(must be at least -2\)/,
        "Invalid windowId throws"
      );

      browser.test.notifyPass("window-remove");
    },
  });

  await extension.startup();
  await extension.awaitFinish("window-remove");
  await extension.unload();
});