summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/general/browser_bug406216.js
blob: f8189fb268c782957811e64eb246b0acbb578fe0 (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
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

/*
 * "TabClose" event is possibly used for closing related tabs of the current.
 * "removeTab" method should work correctly even if the number of tabs are
 * changed while "TabClose" event.
 */

var count = 0;
const URIS = [
  "about:config",
  "about:robots",
  "about:buildconfig",
  "data:text/html,<title>OK</title>",
];

function test() {
  waitForExplicitFinish();
  URIS.forEach(addTab);
}

function addTab(aURI, aIndex) {
  var tab = BrowserTestUtils.addTab(gBrowser, aURI);
  if (aIndex == 0) {
    gBrowser.removeTab(gBrowser.tabs[0], { skipPermitUnload: true });
  }

  BrowserTestUtils.browserLoaded(tab.linkedBrowser).then(() => {
    if (++count == URIS.length) {
      executeSoon(doTabsTest);
    }
  });
}

function doTabsTest() {
  is(gBrowser.tabs.length, URIS.length, "Correctly opened all expected tabs");

  // sample of "close related tabs" feature
  gBrowser.tabContainer.addEventListener(
    "TabClose",
    function (event) {
      var closedTab = event.originalTarget;
      var scheme = closedTab.linkedBrowser.currentURI.scheme;
      Array.from(gBrowser.tabs).forEach(function (aTab) {
        if (
          aTab != closedTab &&
          aTab.linkedBrowser.currentURI.scheme == scheme
        ) {
          gBrowser.removeTab(aTab, { skipPermitUnload: true });
        }
      });
    },
    { capture: true, once: true }
  );

  gBrowser.removeTab(gBrowser.tabs[0], { skipPermitUnload: true });
  is(gBrowser.tabs.length, 1, "Related tabs are not closed unexpectedly");

  BrowserTestUtils.addTab(gBrowser, "about:blank");
  gBrowser.removeTab(gBrowser.tabs[0], { skipPermitUnload: true });
  finish();
}