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
|
"use strict";
var overflowPanel = document.getElementById("widget-overflow");
var originalWindowWidth;
registerCleanupFunction(function() {
overflowPanel.removeAttribute("animate");
window.resizeTo(originalWindowWidth, window.outerHeight);
let navbar = document.getElementById(CustomizableUI.AREA_NAVBAR);
return TestUtils.waitForCondition(() => !navbar.hasAttribute("overflowing"));
});
// Right-click on an item within the overflow panel should
// show a context menu with options to move it.
add_task(async function() {
overflowPanel.setAttribute("animate", "false");
originalWindowWidth = window.outerWidth;
let navbar = document.getElementById(CustomizableUI.AREA_NAVBAR);
ok(
!navbar.hasAttribute("overflowing"),
"Should start with a non-overflowing toolbar."
);
window.resizeTo(kForceOverflowWidthPx, window.outerHeight);
await TestUtils.waitForCondition(() => navbar.hasAttribute("overflowing"));
ok(navbar.hasAttribute("overflowing"), "Should have an overflowing toolbar.");
let chevron = document.getElementById("nav-bar-overflow-button");
let shownPanelPromise = promisePanelElementShown(window, overflowPanel);
chevron.click();
await shownPanelPromise;
let contextMenu = document.getElementById(
"customizationPanelItemContextMenu"
);
let shownContextPromise = popupShown(contextMenu);
let sidebarButton = document.getElementById("sidebar-button");
ok(sidebarButton, "sidebar-button was found");
is(
sidebarButton.getAttribute("overflowedItem"),
"true",
"Sidebar button is overflowing"
);
EventUtils.synthesizeMouse(sidebarButton, 2, 2, {
type: "contextmenu",
button: 2,
});
await shownContextPromise;
is(
overflowPanel.state,
"open",
"The widget overflow panel should still be open."
);
let expectedEntries = [
[".customize-context-moveToPanel", true],
[".customize-context-removeFromPanel", true],
["---"],
[".viewCustomizeToolbar", true],
];
checkContextMenu(contextMenu, expectedEntries);
let hiddenContextPromise = popupHidden(contextMenu);
let hiddenPromise = promisePanelElementHidden(window, overflowPanel);
let moveToPanel = contextMenu.querySelector(".customize-context-moveToPanel");
if (moveToPanel) {
moveToPanel.click();
}
contextMenu.hidePopup();
await hiddenContextPromise;
await hiddenPromise;
let sidebarButtonPlacement = CustomizableUI.getPlacementOfWidget(
"sidebar-button"
);
ok(sidebarButtonPlacement, "Sidebar button should still have a placement");
is(
sidebarButtonPlacement && sidebarButtonPlacement.area,
CustomizableUI.AREA_FIXED_OVERFLOW_PANEL,
"Sidebar button should be pinned now"
);
CustomizableUI.reset();
// In some cases, it can take a tick for the navbar to overflow again. Wait for it:
await TestUtils.waitForCondition(() =>
sidebarButton.hasAttribute("overflowedItem")
);
ok(navbar.hasAttribute("overflowing"), "Should have an overflowing toolbar.");
sidebarButtonPlacement = CustomizableUI.getPlacementOfWidget(
"sidebar-button"
);
ok(sidebarButtonPlacement, "Sidebar button should still have a placement");
is(
sidebarButtonPlacement && sidebarButtonPlacement.area,
"nav-bar",
"Sidebar button should be back in the navbar now"
);
is(
sidebarButton.getAttribute("overflowedItem"),
"true",
"Sidebar button should still be overflowed"
);
});
|