/* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; // NB: This is testing what happens if something that /isn't/ a customizable // widget gets used in CustomizableUI APIs. Don't use this as an example of // what should happen in a "normal" case or how you should use the API. function test() { // First create a button that isn't customizable, and add it in the nav-bar, // but not in the customizable part of it (the customization target) but // next to the main (hamburger) menu button. const buttonID = "Test-non-widget-non-removable-button"; let btn = document.createXULElement("toolbarbutton"); btn.id = buttonID; btn.label = "Hi"; btn.setAttribute("style", "width: 20px; height: 20px; background-color: red"); document.getElementById("nav-bar").appendChild(btn); registerCleanupFunction(function () { btn.remove(); }); // Now try to add this non-customizable button to the tabstrip. This will // update the internal bookkeeping (ie placements) information, but shouldn't // move the node. CustomizableUI.addWidgetToArea(buttonID, CustomizableUI.AREA_TABSTRIP); let placement = CustomizableUI.getPlacementOfWidget(buttonID); // Check our bookkeeping ok(placement, "Button should be placed"); is( placement && placement.area, CustomizableUI.AREA_TABSTRIP, "Should be placed on tabstrip." ); // Check we didn't move the node. is( btn.parentNode && btn.parentNode.id, "nav-bar", "Actual button should still be on navbar." ); // Now remove the node again. This should remove the bookkeeping, but again // not affect the actual node. CustomizableUI.removeWidgetFromArea(buttonID); placement = CustomizableUI.getPlacementOfWidget(buttonID); // Check our bookkeeping: ok(!placement, "Button should no longer have a placement."); // Check our node. is( btn.parentNode && btn.parentNode.id, "nav-bar", "Actual button should still be on navbar." ); }