summaryrefslogtreecommitdiffstats
path: root/browser/components/extensions/test/browser/browser_ext_sidebarAction_runtime.js
blob: 55c83ee0b147d4176cca2b44ad0b35b796804fcb (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
"use strict";

function background() {
  browser.runtime.onConnect.addListener(port => {
    browser.test.assertEq(port.name, "ernie", "port name correct");
    port.onDisconnect.addListener(() => {
      browser.test.assertEq(
        null,
        port.error,
        "The port is implicitly closed without errors when the other context unloads"
      );
      port.disconnect();
      browser.test.sendMessage("disconnected");
    });
    browser.test.sendMessage("connected");
  });
}

let extensionData = {
  background,
  manifest: {
    sidebar_action: {
      default_panel: "sidebar.html",
    },
  },
  useAddonManager: "temporary",

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

    "sidebar.js": function () {
      window.onload = () => {
        browser.runtime.connect({ name: "ernie" });
      };
    },
  },
};

add_task(async function test_sidebar_disconnect() {
  let extension = ExtensionTestUtils.loadExtension(extensionData);
  let connected = extension.awaitMessage("connected");
  await extension.startup();
  await connected;

  // Bug 1445080 fixes currentURI, test to avoid future breakage.
  let currentURI = window.SidebarUI.browser.contentDocument.getElementById(
    "webext-panels-browser"
  ).currentURI;
  is(currentURI.scheme, "moz-extension", "currentURI is set correctly");

  // switching sidebar to another extension
  let extension2 = ExtensionTestUtils.loadExtension(extensionData);
  let switched = Promise.all([
    extension.awaitMessage("disconnected"),
    extension2.awaitMessage("connected"),
  ]);
  await extension2.startup();
  await switched;

  // switching sidebar to built-in sidebar
  let disconnected = extension2.awaitMessage("disconnected");
  window.SidebarUI.show("viewBookmarksSidebar");
  await disconnected;

  await extension.unload();
  await extension2.unload();
});