summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/sidebar/browser_sidebar_keys.js
blob: 61e4ce973795022833b2504bd8365a89359a6bb9 (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
/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/ */

async function testSidebarKeyToggle(key, options, expectedSidebarId) {
  EventUtils.synthesizeMouseAtCenter(gURLBar.textbox, {});
  let promiseShown = BrowserTestUtils.waitForEvent(window, "SidebarShown");
  EventUtils.synthesizeKey(key, options);
  await promiseShown;
  Assert.equal(
    document.getElementById("sidebar-box").getAttribute("sidebarcommand"),
    expectedSidebarId
  );
  EventUtils.synthesizeKey(key, options);
  Assert.ok(!SidebarController.isOpen);
}

add_task(async function test_sidebar_keys() {
  registerCleanupFunction(() => SidebarController.hide());

  await testSidebarKeyToggle("b", { accelKey: true }, "viewBookmarksSidebar");

  let options = { accelKey: true, shiftKey: AppConstants.platform == "macosx" };
  await testSidebarKeyToggle("h", options, "viewHistorySidebar");
});

add_task(async function test_sidebar_in_customize_mode() {
  // Test bug 1756385 - widgets to appear unchecked in customize mode. Test that
  // the sidebar button widget doesn't appear checked, and that the sidebar
  // button toggle is inert while in customize mode.
  let { CustomizableUI } = ChromeUtils.importESModule(
    "resource:///modules/CustomizableUI.sys.mjs"
  );
  registerCleanupFunction(() => SidebarController.hide());

  let placement = CustomizableUI.getPlacementOfWidget("sidebar-button");
  if (!(placement?.area == CustomizableUI.AREA_NAVBAR)) {
    CustomizableUI.addWidgetToArea(
      "sidebar-button",
      CustomizableUI.AREA_NAVBAR,
      0
    );
    CustomizableUI.ensureWidgetPlacedInWindow("sidebar-button", window);
    registerCleanupFunction(function () {
      CustomizableUI.removeWidgetFromArea("sidebar-button");
    });
  }

  let widgetIcon = CustomizableUI.getWidget("sidebar-button")
    .forWindow(window)
    .node?.querySelector(".toolbarbutton-icon");
  // Get the alpha value of the sidebar toggle widget's background
  let getBGAlpha = () =>
    InspectorUtils.colorToRGBA(
      getComputedStyle(widgetIcon).getPropertyValue("background-color")
    ).a;

  let promiseShown = BrowserTestUtils.waitForEvent(window, "SidebarShown");
  SidebarController.show("viewBookmarksSidebar");
  await promiseShown;

  Assert.greater(
    getBGAlpha(),
    0,
    "Sidebar widget background should appear checked"
  );

  // Enter customize mode. This should disable the toggle and make the sidebar
  // toggle widget appear unchecked.
  let customizationReadyPromise = BrowserTestUtils.waitForEvent(
    gNavToolbox,
    "customizationready"
  );
  gCustomizeMode.enter();
  await customizationReadyPromise;

  Assert.equal(
    getBGAlpha(),
    0,
    "Sidebar widget background should appear unchecked"
  );

  // Attempt toggle - should fail in customize mode.
  await SidebarController.toggle();
  ok(SidebarController.isOpen, "Sidebar is still open");

  // Exit customize mode. This should re-enable the toggle and make the sidebar
  // toggle widget appear checked again, since toggle() didn't hide the sidebar.
  let afterCustomizationPromise = BrowserTestUtils.waitForEvent(
    gNavToolbox,
    "aftercustomization"
  );
  gCustomizeMode.exit();
  await afterCustomizationPromise;

  Assert.greater(
    getBGAlpha(),
    0,
    "Sidebar widget background should appear checked again"
  );

  await SidebarController.toggle();
  ok(!SidebarController.isOpen, "Sidebar is closed");
  Assert.equal(
    getBGAlpha(),
    0,
    "Sidebar widget background should appear unchecked"
  );
});