summaryrefslogtreecommitdiffstats
path: root/browser/components/firefoxview/tests/browser/browser_keyboard_focus.js
blob: 254c315fdb8d0474d452bb926719313f3dc99a7e (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
/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/ */

ChromeUtils.defineESModuleGetters(globalThis, {
  SyncedTabs: "resource://services-sync/SyncedTabs.sys.mjs",
});

const SYNCED_URI = syncedTabsData1[0].tabs[1].url;

add_task(async function test_keyboard_focus() {
  await SpecialPowers.pushPrefEnv({
    set: [["accessibility.tabfocus", 7]],
  });

  await withFirefoxView({}, async browser => {
    const { document } = browser.contentWindow;

    const sandbox = setupRecentDeviceListMocks();
    const syncedTabsMock = sandbox.stub(SyncedTabs, "getRecentTabs");
    let mockTabs1 = getMockTabData(syncedTabsData1);
    syncedTabsMock.returns(mockTabs1);

    await setupListState(browser);

    testVisibility(browser, {
      expectedVisible: {
        "ol.synced-tabs-list": true,
      },
    });

    let tabPickupEle = document.querySelector(".synced-tab-a");
    document.querySelector(".page-section-header").focus();

    EventUtils.synthesizeKey("KEY_Tab");

    is(
      tabPickupEle,
      document.activeElement,
      "The first tab pickup link is focused"
    );

    let newTabPromise = BrowserTestUtils.waitForNewTab(gBrowser, SYNCED_URI);
    EventUtils.synthesizeKey("KEY_Enter");
    await newTabPromise;

    is(
      SYNCED_URI,
      gBrowser.selectedBrowser.currentURI.displaySpec,
      "We opened the tab via keyboard"
    );

    let sessionStorePromise = BrowserTestUtils.waitForSessionStoreUpdate(
      gBrowser.selectedTab
    );
    gBrowser.removeTab(gBrowser.selectedTab);
    await sessionStorePromise;

    window.FirefoxViewHandler.openTab();

    let recentlyClosedEle = await TestUtils.waitForCondition(() =>
      document.querySelector(".closed-tab-li-main")
    );
    document.querySelectorAll(".page-section-header")[1].focus();

    EventUtils.synthesizeKey("KEY_Tab");

    is(
      recentlyClosedEle,
      document.activeElement,
      "The recently closed tab is focused"
    );

    newTabPromise = BrowserTestUtils.waitForNewTab(gBrowser, SYNCED_URI);
    EventUtils.synthesizeKey("KEY_Enter");
    await newTabPromise;
    is(
      SYNCED_URI,
      gBrowser.selectedBrowser.currentURI.displaySpec,
      "We opened the tab via keyboard"
    );
    gBrowser.removeTab(gBrowser.selectedTab);

    sessionStorePromise = TestUtils.topicObserved(
      "sessionstore-closed-objects-changed"
    );
    SessionStore.forgetClosedTab(window, 0);
    await sessionStorePromise;

    sandbox.restore();
  });
});