summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/mochitest/test_ext_extension_getViews.html
blob: 9309d45cdf235321ace122f19b62ea605f710d7c (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
<!DOCTYPE HTML>
<html>
<head>
  <title>extension.getViews 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";

function genericChecker() {
  const params = new URLSearchParams(window.location.search);
  const kind = params.get("kind");
  const createdTabIds = [];

  browser.test.onMessage.addListener(async msg => {
    if (msg == `${kind}-test-get-views`) {
      try {
        let result = browser.extension.getViews({});
        browser.test.assertEq(3, result.length, "Expect 3 extension views to be found");

        result = browser.extension.getViews({ type: "tab" });
        browser.test.assertEq(1, result.length, "Expect 1 tab extension view to be found");

        result = browser.extension.getViews({ type: "popup" });
        browser.test.assertEq(1, result.length, "Expect 1 popup extension view to be found");

        browser.test.sendMessage(`${msg}:done`);
      } catch (err) {
        browser.test.fail(`browser.extension.getViews exception: ${err}`);
        browser.test.sendMessage(`${msg}:done`);
      }
    } else if (msg == `${kind}-open-tab`) {
      const tab = await browser.tabs.create({ url: "/page.html?kind=tab" });
      createdTabIds.push(tab.id);
    } else if (msg == `${kind}-close-tabs`) {
      await browser.tabs.remove(createdTabIds);
      browser.test.sendMessage(`${msg}:done`);
    }
  });

  browser.test.log(`${kind} extension page loaded`);
  browser.test.sendMessage(`${kind}-loaded`);
}

add_task(async function test_runtime_getContexts() {
  const EXT_ID = "runtime-getContexts@mochitest";
  let extension = ExtensionTestUtils.loadExtension({
    useAddonManager: "temporary", // To automatically show sidebar on load.
    incognitoOverride: "spanning",
    manifest: {
      manifest_version: 3,
      browser_specific_settings: { gecko: { id: EXT_ID } },

      action: {
        default_popup: "page.html?kind=action",
        default_area: "navbar",
      },

      background: {
        page: "page.html?kind=background",
      },
    },

    files: {
      "page.html": `
      <!DOCTYPE html>
      <html>
      <head><meta charset="utf-8"><\/head>
      <body>
      <script src="page.js"><\/script>
      <\/body>
      <\/html>
      `,

      "page.js": genericChecker,
    },
  });

  await extension.startup();
  await extension.awaitMessage("background-loaded");

  extension.sendMessage("background-open-tab");
  await extension.awaitMessage("tab-loaded");

  await AppTestDelegate.clickBrowserAction(window, extension);
  await extension.awaitMessage("action-loaded");

  extension.sendMessage("background-test-get-views");
  await extension.awaitMessage("background-test-get-views:done");

  // Close popup window.
  await AppTestDelegate.closeBrowserAction(window, extension);

  // Close extension page tabs.
  extension.sendMessage("background-close-tabs");
  await extension.awaitMessage("background-close-tabs:done");

  await extension.unload();
});

</script>
</body>
</html>