forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			68 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* 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";
 | |
| 
 | |
| var kWidgetId = "test-removable-widget-default";
 | |
| const kNavBar = CustomizableUI.AREA_NAVBAR;
 | |
| var widgetCounter = 0;
 | |
| 
 | |
| registerCleanupFunction(removeCustomToolbars);
 | |
| 
 | |
| // Sanity checks
 | |
| add_task(function() {
 | |
|   let brokenSpec = {id: kWidgetId + (widgetCounter++), removable: false};
 | |
|   SimpleTest.doesThrow(() => CustomizableUI.createWidget(brokenSpec),
 | |
|                        "Creating non-removable widget without defaultArea should throw.");
 | |
| 
 | |
|   // Widget without removable set should be removable:
 | |
|   let wrapper = CustomizableUI.createWidget({id: kWidgetId + (widgetCounter++)});
 | |
|   ok(CustomizableUI.isWidgetRemovable(wrapper.id), "Should be removable by default.");
 | |
|   CustomizableUI.destroyWidget(wrapper.id);
 | |
| });
 | |
| 
 | |
| // Test non-removable widget with defaultArea
 | |
| add_task(async function() {
 | |
|   // Non-removable widget with defaultArea should work:
 | |
|   let spec = {id: kWidgetId + (widgetCounter++), removable: false,
 | |
|               defaultArea: kNavBar};
 | |
|   let widgetWrapper;
 | |
|   try {
 | |
|     widgetWrapper = CustomizableUI.createWidget(spec);
 | |
|   } catch (ex) {
 | |
|     ok(false, "Creating a non-removable widget with a default area should not throw.");
 | |
|     return;
 | |
|   }
 | |
| 
 | |
|   let placement = CustomizableUI.getPlacementOfWidget(spec.id);
 | |
|   ok(placement, "Widget should be placed.");
 | |
|   is(placement.area, kNavBar, "Widget should be in navbar");
 | |
|   let singleWrapper = widgetWrapper.forWindow(window);
 | |
|   ok(singleWrapper, "Widget should exist in window.");
 | |
|   ok(singleWrapper.node, "Widget node should exist in window.");
 | |
|   let expectedParent = CustomizableUI.getCustomizeTargetForArea(kNavBar, window);
 | |
|   is(singleWrapper.node.parentNode, expectedParent, "Widget should be in navbar.");
 | |
| 
 | |
|   let otherWin = await openAndLoadWindow(true);
 | |
|   placement = CustomizableUI.getPlacementOfWidget(spec.id);
 | |
|   ok(placement, "Widget should be placed.");
 | |
|   is(placement && placement.area, kNavBar, "Widget should be in navbar");
 | |
| 
 | |
|   singleWrapper = widgetWrapper.forWindow(otherWin);
 | |
|   ok(singleWrapper, "Widget should exist in other window.");
 | |
|   if (singleWrapper) {
 | |
|     ok(singleWrapper.node, "Widget node should exist in other window.");
 | |
|     if (singleWrapper.node) {
 | |
|       let expectedParentInOtherWin = CustomizableUI.getCustomizeTargetForArea(kNavBar, otherWin);
 | |
|       is(singleWrapper.node.parentNode, expectedParentInOtherWin,
 | |
|          "Widget should be in navbar in other window.");
 | |
|     }
 | |
|   }
 | |
|   CustomizableUI.destroyWidget(spec.id);
 | |
|   await promiseWindowClosed(otherWin);
 | |
| });
 | |
| 
 | |
| add_task(async function asyncCleanup() {
 | |
|   await resetCustomization();
 | |
| });
 | 
