summaryrefslogtreecommitdiffstats
path: root/browser/components/customizableui/test/browser_bootstrapped_custom_toolbar.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/customizableui/test/browser_bootstrapped_custom_toolbar.js')
-rw-r--r--browser/components/customizableui/test/browser_bootstrapped_custom_toolbar.js81
1 files changed, 81 insertions, 0 deletions
diff --git a/browser/components/customizableui/test/browser_bootstrapped_custom_toolbar.js b/browser/components/customizableui/test/browser_bootstrapped_custom_toolbar.js
new file mode 100644
index 0000000000..855a9c4bde
--- /dev/null
+++ b/browser/components/customizableui/test/browser_bootstrapped_custom_toolbar.js
@@ -0,0 +1,81 @@
+/* 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/. */
+
+"use strict";
+
+requestLongerTimeout(2);
+
+const kTestBarID = "testBar";
+const kWidgetID = "characterencoding-button";
+
+function createTestBar() {
+ let testBar = document.createXULElement("toolbar");
+ testBar.id = kTestBarID;
+ testBar.setAttribute("customizable", "true");
+ CustomizableUI.registerArea(kTestBarID, {
+ type: CustomizableUI.TYPE_TOOLBAR,
+ });
+ gNavToolbox.appendChild(testBar);
+ CustomizableUI.registerToolbarNode(testBar);
+ return testBar;
+}
+
+/**
+ * Helper function that does the following:
+ *
+ * 1) Creates a custom toolbar and registers it
+ * with CustomizableUI.
+ * 2) Adds the widget with ID aWidgetID to that new
+ * toolbar.
+ * 3) Enters customize mode and makes sure that the
+ * widget is still in the right toolbar.
+ * 4) Exits customize mode, then removes and deregisters
+ * the custom toolbar.
+ * 5) Checks that the widget has no placement.
+ * 6) Re-adds and re-registers a custom toolbar with the same
+ * ID and options as the first one.
+ * 7) Enters customize mode and checks that the widget is
+ * properly back in the toolbar.
+ * 8) Exits customize mode, removes and de-registers the
+ * toolbar, and resets the toolbars to default.
+ */
+function checkRestoredPresence(aWidgetID) {
+ return (async function() {
+ let testBar = createTestBar();
+ CustomizableUI.addWidgetToArea(aWidgetID, kTestBarID);
+ let placement = CustomizableUI.getPlacementOfWidget(aWidgetID);
+ is(
+ placement.area,
+ kTestBarID,
+ "Expected " + aWidgetID + " to be in the test toolbar"
+ );
+
+ CustomizableUI.unregisterArea(testBar.id);
+ testBar.remove();
+
+ placement = CustomizableUI.getPlacementOfWidget(aWidgetID);
+ is(placement, null, "Expected " + aWidgetID + " to be in the palette");
+
+ testBar = createTestBar();
+
+ await startCustomizing();
+ placement = CustomizableUI.getPlacementOfWidget(aWidgetID);
+ is(
+ placement.area,
+ kTestBarID,
+ "Expected " + aWidgetID + " to be in the test toolbar"
+ );
+ await endCustomizing();
+
+ CustomizableUI.unregisterArea(testBar.id);
+ testBar.remove();
+
+ await resetCustomization();
+ })();
+}
+
+add_task(async function() {
+ await checkRestoredPresence("downloads-button");
+ await checkRestoredPresence("characterencoding-button");
+});