summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/general/browser_bug427559.js
blob: 29acf0862bc75d3fe97d2feb99c8f60a254cea2e (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
"use strict";

/*
 * Test bug 427559 to make sure focused elements that are no longer on the page
 * will have focus transferred to the window when changing tabs back to that
 * tab with the now-gone element.
 */

// Default focus on a button and have it kill itself on blur.
const URL =
  "data:text/html;charset=utf-8," +
  '<body><button onblur="this.remove()">' +
  "<script>document.body.firstElementChild.focus()</script></body>";

function getFocusedLocalName(browser) {
  return SpecialPowers.spawn(browser, [], async function () {
    return content.document.activeElement.localName;
  });
}

add_task(async function () {
  let testTab = await BrowserTestUtils.openNewForegroundTab(gBrowser, URL);

  let browser = testTab.linkedBrowser;

  is(await getFocusedLocalName(browser), "button", "button is focused");

  let blankTab = await BrowserTestUtils.openNewForegroundTab(
    gBrowser,
    "about:blank"
  );

  await BrowserTestUtils.switchTab(gBrowser, testTab);

  // Make sure focus is given to the window because the element is now gone.
  is(await getFocusedLocalName(browser), "body", "body is focused");

  // Cleanup.
  gBrowser.removeTab(blankTab);
  gBrowser.removeCurrentTab();
});