michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: "use strict"; michael@0: const kWidgetId = 'test-981418-widget-onbeforecreated'; michael@0: michael@0: // Should be able to add broken view widget michael@0: add_task(function testAddOnBeforeCreatedWidget() { michael@0: let viewShownDeferred = Promise.defer(); michael@0: let onBeforeCreatedCalled = false; michael@0: let widgetSpec = { michael@0: id: kWidgetId, michael@0: type: 'view', michael@0: viewId: kWidgetId + 'idontexistyet', michael@0: onBeforeCreated: function(doc) { michael@0: let view = doc.createElement("panelview"); michael@0: view.id = kWidgetId + 'idontexistyet'; michael@0: let label = doc.createElement("label"); michael@0: label.setAttribute("value", "Hello world"); michael@0: label.className = 'panel-subview-header'; michael@0: view.appendChild(label); michael@0: document.getElementById("PanelUI-multiView").appendChild(view); michael@0: onBeforeCreatedCalled = true; michael@0: }, michael@0: onViewShowing: function() { michael@0: viewShownDeferred.resolve(); michael@0: } michael@0: }; michael@0: michael@0: let noError = true; michael@0: try { michael@0: CustomizableUI.createWidget(widgetSpec); michael@0: CustomizableUI.addWidgetToArea(kWidgetId, CustomizableUI.AREA_NAVBAR); michael@0: } catch (ex) { michael@0: Cu.reportError(ex); michael@0: noError = false; michael@0: } michael@0: ok(noError, "Should not throw an exception trying to add the widget."); michael@0: ok(onBeforeCreatedCalled, "onBeforeCreated should have been called"); michael@0: michael@0: let widgetNode = document.getElementById(kWidgetId); michael@0: ok(widgetNode, "Widget should exist"); michael@0: if (widgetNode) { michael@0: try { michael@0: widgetNode.click(); michael@0: michael@0: let shownTimeout = setTimeout(() => viewShownDeferred.reject("Panel not shown within 20s"), 20000); michael@0: yield viewShownDeferred.promise; michael@0: clearTimeout(shownTimeout); michael@0: ok(true, "Found view shown"); michael@0: michael@0: let tempPanel = document.getElementById("customizationui-widget-panel"); michael@0: let panelHiddenPromise = promisePanelElementHidden(window, tempPanel); michael@0: tempPanel.hidePopup(); michael@0: yield panelHiddenPromise; michael@0: michael@0: CustomizableUI.addWidgetToArea(kWidgetId, CustomizableUI.AREA_PANEL); michael@0: yield PanelUI.show(); michael@0: michael@0: viewShownDeferred = Promise.defer(); michael@0: widgetNode.click(); michael@0: michael@0: shownTimeout = setTimeout(() => viewShownDeferred.reject("Panel not shown within 20s"), 20000); michael@0: yield viewShownDeferred.promise; michael@0: clearTimeout(shownTimeout); michael@0: ok(true, "Found view shown"); michael@0: michael@0: let panelHidden = promisePanelHidden(window); michael@0: PanelUI.hide(); michael@0: yield panelHidden; michael@0: } catch (ex) { michael@0: ok(false, "Unexpected exception (like a timeout for one of the yields) " + michael@0: "when testing view widget."); michael@0: } michael@0: } michael@0: michael@0: noError = true; michael@0: try { michael@0: CustomizableUI.destroyWidget(kWidgetId); michael@0: } catch (ex) { michael@0: Cu.reportError(ex); michael@0: noError = false; michael@0: } michael@0: ok(noError, "Should not throw an exception trying to remove the broken view widget."); michael@0: }); michael@0: michael@0: add_task(function asyncCleanup() { michael@0: yield resetCustomization(); michael@0: });