Closed Bug 1465001 Opened 7 years ago Closed 6 years ago

Basically, any field in a pop-up dialog that allows the user to enter a new value in TextInput, it not working.

Categories

(Core :: General, defect, P3)

defect

Tracking

()

RESOLVED INCOMPLETE

People

(Reporter: neelesh.bizoara, Unassigned, NeedInfo)

Details

(Keywords: testcase-wanted)

Attachments

(1 file)

Attached image Firefox.png
User Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0 Build ID: 20180516032328 Steps to reproduce: Firefox: 60.0.1(64bit) Flash Player: 20.0.0.171 Windows 7 Basically, any InputText field in a pop-up dialog that allows the user to enter a new value, it not working. Actual results: User needs to tab on another window then it allow to enter in InputText box. Expected results: InputText field in a pop-up dialog that allows the user to enter a new value.
Neelesh, can you attach a simple example that demonstrates the problem please? (or a public URL to one)
Flags: needinfo?(neelesh.bizoara)
Keywords: testcase-wanted
Priority: -- → P3
my abc.mxml Component when popup() is called popup appears and then i am not able to enter number in Inputtext. abc.mxml extends BaseDialog which is also added after abc.mxml <?xml version="1.0" encoding="utf-8"?> <!-- Copyright 2014, abc, Inc. All rights reserved. --> <BaseDialog xmlns="com.abc.view.dialogs.*" xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:controls="com.abc.view.controls.*" initialize="onInitialize()" paddingLeft="10" paddingRight="10" paddingBottom="10" width="510" xmlns:spinner="com.adobe.community.spinner.*" styleName="generalDialog" title="Configure QoS of {model.vmsDescription}" close="onClosing()" xmlns:component="com.abc.view.component.*"> <mx:Script> <![CDATA[ import com.iwobanas.effects.SlideDown; import com.iwobanas.effects.SlideUp; import com.abc.intelligence.event.VirtualMachineEvent; import com.abc.model.DataGridPm; import com.abc.model.UpdateQoSModel; import com.abc.model.VirtualMachineRowPm; import com.abc.model.validators.ValidatorCollection; import com.abc.utils.AppConstant; import com.abc.utils.StringUtils; import com.abc.utils.abcUtils; import flash.utils.setTimeout; import mx.collections.ArrayCollection; import mx.controls.LinkButton; import mx.controls.Menu; import mx.events.FlexEvent; import mx.events.FlexMouseEvent; import mx.events.MenuEvent; import mx.managers.FocusManager; import mx.managers.PopUpManager; import mx.utils.StringUtil; import org.swizframework.events.BeanEvent; protected const MIN_MAX_INPUT_WIDTH:int = 100; protected const MIN_MAX_INPUT_GRID_ITEM_WIDTH:int = 140; [Bindable] [Inject] public var model : UpdateQoSModel; [Bindable] private var multipleSelection : Boolean = false; [Bindable] private var hasErrors : Boolean = false; [Bindable] private var onSaveErrorMessage : String = ""; [Bindable] private var effMaxBandwidth : String = ""; [Bindable] private var effMinBandwidth : String = ""; [Bindable] private var totalMinAllocIops : String = ""; [Bindable] private var madeChanges : Boolean = false; public static var singleton : UpdateQoS = null; protected function onInitialize() : void { addEventListener( FlexMouseEvent.MOUSE_DOWN_OUTSIDE, mouseDownOutsideHandler ); addEventListener( Event.DEACTIVATE, deactivateHandler ); } protected function onClosing() : void { model.operationInProgress = false; } public static function popup( displayObject : DisplayObject, selectedVms : Array ) : void { if ( singleton == null ) { singleton = new UpdateQoS(); PopUpManager.addPopUp( singleton, displayObject, true /* modal */ ); PopUpManager.centerPopUp( singleton ); if (singleton.model == null) { // For RIATest we need to manually add any classes with [Mediate] or [EventHandler] or [Inject] abcUtils.getabcVmStoreApp().dispatchEvent( new BeanEvent( BeanEvent.SET_UP_BEAN, singleton ) ); } } else if ( singleton != null ) { // createPopUp already adds PopUpManager.addPopUp( singleton, displayObject, true /* modal */ ); PopUpManager.centerPopUp( singleton ); } singleton.reset(); if(singleton.model == null) { // For RIATest we need to manually create the model and invode the SET_UP_BEAN event. singleton.model = new UpdateQoSModel(); abcUtils.getabcVmStoreApp().dispatchEvent( new BeanEvent( BeanEvent.SET_UP_BEAN, singleton.model ) ); } singleton.setIsMultipleSelection( selectedVms != null && selectedVms.length > 1 ); singleton.model.initialize( selectedVms, singleton.onQoSModelUpdateCompleted ); } private function reset() : void { multipleSelection = false; qosMinInput_cb.selected = false; qosMaxInput_cb.selected = false; qosMaxInput.errorString = null; qosMinInput.errorString = null; } public function setIsMultipleSelection( value : Boolean ) : void { multipleSelection = value; } /** * @private * Override stylesInitialized() function to initialize effects. */ override public function stylesInitialized() : void { super.stylesInitialized(); initializeEffects(); } /** * Initialize effects applied to the dropdown when it opens/closes. */ protected function initializeEffects() : void { var closeDuration : Number = 200; var openDuration : Number = 200; var slideDown : SlideDown = new SlideDown(); slideDown.duration = openDuration; setStyle( "creationCompleteEffect", slideDown ); // FIXME: causes addChild index out of bound var slideUp : SlideUp = new SlideUp(); slideUp.duration = closeDuration; setStyle( "removedEffect", slideUp ); } protected function onSave( event : MouseEvent = null ) : void { this.validateMinMax(); if ( StringUtils.isEmpty(qosMinInput.errorString) && StringUtils.isEmpty(qosMaxInput.errorString) ) { onSaveErrorMessage = ""; model.onSave(onSaveCompleteCallback); } } protected function onSaveCompleteCallback(isFail:Boolean):void { if ( !isFail ) { var nextEvent:VirtualMachineEvent = new VirtualMachineEvent(VirtualMachineEvent.REFRESH_VM_PAGE); eventDispatcher.dispatchEvent(nextEvent); this.removeThisPopup(false); } } protected function mouseDownOutsideHandler( event : FlexMouseEvent ) : void { if ( model.operationInProgress ) { return; } removeThisPopup(false); } protected function deactivateHandler( event : Event ) : void { removeThisPopup(false); } protected function removeThisPopup(refreshVmList:Boolean=true) : void { if (refreshVmList) { var nextEvent:VirtualMachineEvent = new VirtualMachineEvent(VirtualMachineEvent.REFRESH_VM_PAGE); eventDispatcher.dispatchEvent(nextEvent); } PopUpManager.removePopUp( this ); } public function onQoSModelUpdateCompleted() : void { if ( model.selectedMaxIops > 0 || model.selectedMaxIopsTxtVal == AppConstant.MULTI_VALUE ) { if ( model.selectedMaxIopsTxtVal != AppConstant.MULTI_VALUE ) { effMaxBandwidth = abcUtils.formatNumber(abcUtils.calculateMBpsForIops(model.selectedMaxIops), 1); } else { effMaxBandwidth = AppConstant.MULTI_VALUE; } qosMaxInput_cb.selected = true; } else { qosMaxInput.text = ""; effMaxBandwidth = ""; } if ( model.selectedMinIops > 0 || model.selectedMinIopsTxtVal == AppConstant.MULTI_VALUE ) { if ( model.selectedMinIopsTxtVal != AppConstant.MULTI_VALUE ) { effMinBandwidth = abcUtils.formatNumber(abcUtils.calculateMBpsForIops(model.selectedMinIops), 1); } else { effMinBandwidth = AppConstant.MULTI_VALUE; } qosMinInput_cb.selected = true; } else { qosMinInput.text = ""; effMinBandwidth = ""; } madeChanges = model.madeChanges(); hasErrors = (!StringUtils.isEmpty(qosMinInput.errorString) || !StringUtils.isEmpty(qosMaxInput.errorString)); onSaveErrorMessage = ""; } protected function qosMinInputCheckboxChange(event:Event):void { if ( !qosMinInput_cb.selected ) { model.selectedMinIops = 0; qosMinInput.errorString = null; model.selectedMinIopsTxtVal = ""; } else if ( model.selectedMinIopsTxtVal != AppConstant.MULTI_VALUE ) { if ( model.origSelectedMinIopsTxtVal == AppConstant.MULTI_VALUE ) { model.selectedMinIopsTxtVal = AppConstant.MULTI_VALUE; } else { model.selectedMinIops = (model.origMinIops > 0) ? model.origMinIops : 0; } } onQoSModelUpdateCompleted(); } protected function qosMaxInputCheckboxChange(event:Event):void { if ( !qosMaxInput_cb.selected ) { model.selectedMaxIops = 0; qosMaxInput.errorString = null; model.selectedMaxIopsTxtVal = ""; } else if ( model.selectedMaxIopsTxtVal != AppConstant.MULTI_VALUE ) { if ( model.origSelectedMaxIopsTxtVal == AppConstant.MULTI_VALUE ) { model.selectedMaxIopsTxtVal = AppConstant.MULTI_VALUE; } else { model.selectedMaxIops = (model.origMaxIops > 0) ? model.origMaxIops : 0; } } onQoSModelUpdateCompleted(); } protected function qosMinInputFocusInHandler(event:Event=null):void { // update the min checkbox to unselected if the entry is blank if ( qosMaxInput_cb.selected && model.selectedMaxIops == 0 && model.selectedMaxIopsTxtVal != AppConstant.MULTI_VALUE ) { qosMaxInput_cb.selected = false; } } protected function qosMaxInputFocusInHandler(event:Event=null):void { // update the min checkbox to unselected if the entry is blank if ( qosMinInput_cb.selected && model.selectedMinIops == 0 && model.selectedMinIopsTxtVal != AppConstant.MULTI_VALUE ) { qosMinInput_cb.selected = false; } } protected function validateMinMax():void { qosMaxInput.errorString = null; qosMinInput.errorString = null; onSaveErrorMessage = ""; // set the error(s) on the input fields that have changed var invalidMinMax:Boolean = false; var changedMinVal:Boolean = (model.selectedMinIopsTxtVal != AppConstant.MULTI_VALUE && model.origMinIops != model.selectedMinIops); var changedMaxVal:Boolean = (model.selectedMaxIopsTxtVal != AppConstant.MULTI_VALUE && model.origMaxIops != model.selectedMaxIops); // 1st check: verify the set min is less than the max and the min is not set to multi-value if ( model.selectedMinIopsTxtVal != AppConstant.MULTI_VALUE && qosMinInput_cb.selected && model.selectedMinIops != 0 ) { if ( model.minIsGreaterThanMax(model.selectedMinIops ) && qosMaxInput_cb.selected ) { invalidMinMax = true; } } // next basic check, is the max less than the min if ( !invalidMinMax && model.selectedMaxIopsTxtVal != AppConstant.MULTI_VALUE && qosMaxInput_cb.selected && model.selectedMaxIops != 0 ) { if ( model.maxIsLessThanMin(model.selectedMaxIops ) && qosMinInput_cb.selected ) { invalidMinMax = true; } } if ( invalidMinMax ) { onSaveErrorMessage = "Max is less than minimum. Please update your settings or set it to zero if you would like to reset it to default QoS utilization."; if ( changedMaxVal ) { var highestMinIopsVal:Number = model.getHighestMinNormalizedIops(); qosMaxInput.errorString = "Increase the maximum above " + highestMinIopsVal + " or set it to zero if you would like to reset it to default QoS utilization."; } if ( changedMinVal ) { var lowestMaxIopsVal:Number = model.getLowestMaxNormalizedIops(); qosMinInput.errorString = "Decrease the minimum below " + lowestMaxIopsVal + " or set it to zero if you would like to reset it to default QoS utilization."; } return; } if ( qosMaxInput_cb.selected && model.selectedMaxIops == 0 && model.selectedMaxIopsTxtVal != AppConstant.MULTI_VALUE ) { qosMaxInput_cb.selected = false; } if ( qosMinInput_cb.selected && model.selectedMinIops == 0 && model.selectedMinIopsTxtVal != AppConstant.MULTI_VALUE ) { qosMinInput_cb.selected = false; } } protected function qosMin_changeHandler(event:Event):void { qosMinInput.errorString = this.validateNumericInput(qosMinInput.text); if ( !StringUtils.isEmpty(qosMinInput.errorString) ) { qosMinInput.text = ""; return; } model.selectedMinIops = Number(qosMinInput.text); if ( isNaN(model.selectedMinIops) ) { model.selectedMinIops = 0; } onQoSModelUpdateCompleted(); } protected function qosMax_changeHandler(event:Event):void { qosMaxInput.errorString = this.validateNumericInput(qosMaxInput.text); if ( !StringUtils.isEmpty(qosMaxInput.errorString) ) { qosMaxInput.text = ""; return; } model.selectedMaxIops = Number(qosMaxInput.text); if ( isNaN(model.selectedMaxIops) ) { model.selectedMaxIops = 0; } onQoSModelUpdateCompleted(); } protected function checkLimits():void { if ( model.selectedMinIopsTxtVal != AppConstant.MULTI_VALUE ) { qosMinInput.errorString = this.validateNumericInput(qosMinInput.text); } else { qosMinInput.errorString = null; } if ( model.selectedMaxIopsTxtVal != AppConstant.MULTI_VALUE ) { qosMaxInput.errorString = this.validateNumericInput(qosMaxInput.text); } else { qosMaxInput.errorString = null; } var minGrtrThanMax:Boolean = ( model.selectedMinIops > 0 && model.selectedMinIops >= model.selectedMaxIops ); if ( qosMaxInput_cb.selected && model.selectedMaxIops == 0 && model.selectedMaxIopsTxtVal != AppConstant.MULTI_VALUE ) { qosMaxInput.text = ""; effMaxBandwidth = ""; } if ( qosMinInput_cb.selected && model.selectedMinIops == 0 && model.selectedMinIopsTxtVal != AppConstant.MULTI_VALUE ) { qosMinInput.text = ""; effMinBandwidth = ""; } if ( StringUtils.isEmpty(qosMaxInput.errorString) && StringUtils.isEmpty(qosMaxInput.errorString) && !minGrtrThanMax ) { this.onSaveErrorMessage = ""; } } protected function validateNumericInput(value:String):String { var val : Number = Number(value); if ( isNaN(val) || val < 0) { return "Value must be greater than or equal to 0. Set it to zero if you would like to reset it to default QoS utilization."; } return null; } ]]> </mx:Script> <!-- Take snaphot now --> <mx:Grid width="100%" paddingLeft="20" paddingTop="20" paddingBottom="20" paddingRight="20"> <mx:GridRow width="100%"> <mx:GridItem colSpan="2"> </mx:GridItem> <mx:GridItem> <mx:Text text="Normalized IOPS" fontWeight="bold"/> </mx:GridItem> <mx:GridItem horizontalAlign="right"> <mx:Text text="Effective MBps" fontWeight="bold"/> </mx:GridItem> </mx:GridRow> <mx:GridRow width="100%"> <mx:GridItem horizontalAlign="right"> <mx:Text text="Maximum:"/> </mx:GridItem> <mx:GridItem paddingTop="0" paddingRight="10"> <mx:CheckBox id="qosMaxInput_cb" automationName="qosMaxInput_cb" label="" change="qosMaxInputCheckboxChange(event)" paddingTop="2"/> </mx:GridItem> <mx:GridItem width="{MIN_MAX_INPUT_GRID_ITEM_WIDTH}"> <mx:HBox> <mx:TextInput id="qosMaxInput" automationName="qosMaxInput" text="{model.selectedMaxIopsTxtVal}" width="{MIN_MAX_INPUT_WIDTH}" change="qosMax_changeHandler(event)" visible="{qosMaxInput_cb.selected}" includeInLayout="{qosMaxInput_cb.selected}" focusIn="qosMaxInputFocusInHandler(event)" focusOut="qosMinInputFocusInHandler(event)"/> <mx:Text text="Unbounded" visible="{!qosMaxInput_cb.selected}" includeInLayout="{!qosMaxInput_cb.selected}"/> </mx:HBox> </mx:GridItem> <mx:GridItem horizontalAlign="right"> <mx:Text text="{effMaxBandwidth}"/> </mx:GridItem> </mx:GridRow> <mx:GridRow width="100%"> <mx:GridItem horizontalAlign="right"> <mx:Text text="Minimum:"/> </mx:GridItem> <mx:GridItem paddingTop="0" paddingRight="10"> <mx:CheckBox id="qosMinInput_cb" automationName="qosMinInput_cb" label="" change="qosMinInputCheckboxChange(event)" paddingTop="2"/> </mx:GridItem> <mx:GridItem width="{MIN_MAX_INPUT_GRID_ITEM_WIDTH}"> <mx:HBox> <mx:TextInput id="qosMinInput" automationName="qosMinInput" text="{model.selectedMinIopsTxtVal}" width="{MIN_MAX_INPUT_WIDTH}" change="qosMin_changeHandler(event)" visible="{qosMinInput_cb.selected}" includeInLayout="{qosMinInput_cb.selected}" focusIn="qosMinInputFocusInHandler(event)" focusOut="qosMaxInputFocusInHandler(event)"/> <mx:Text text="Not set" visible="{!qosMinInput_cb.selected}" includeInLayout="{!qosMinInput_cb.selected}"/> </mx:HBox> </mx:GridItem> <mx:GridItem horizontalAlign="right"> <mx:Text text="{effMinBandwidth}"/> </mx:GridItem> </mx:GridRow> </mx:Grid> <mx:Box width="100%" id="qos_iopsTotalsBlocklets" automationName="qos_iopsTotalsBlocklets" showInAutomationHierarchy="true" paddingBottom="20" horizontalAlign="center"> <mx:HBox horizontalGap="2" verticalAlign="middle"> <mx:Text text="System provisioned normalized IOPS" toolTip="Sum of minimum allocated IOPS ({abcUtils.formatNumber(model.minAllocatedIops, 1)} IOPS)"/> <mx:Text text="{model.minAllocatedIopsPercent} %" styleName="dashboardBlockLabelSmall"/> </mx:HBox> </mx:Box> <mx:HBox width="100%" horizontalAlign="right"> <mx:Text id="onSaveErrorStr" automationName="onSaveErrorStr" text="{onSaveErrorMessage}" styleName="ErrorMessageText" width="230"/> <mx:Spacer width="100%"/> <spinner:Spinner go="{model.operationInProgress}" visible="{model.operationInProgress}"/> <mx:Button label="Configure" toolTip="Configure VM QoS." enabled="{ !model.operationInProgress &amp;&amp; madeChanges }" click="onSave(event)"/> <mx:Button id="buttonCancel" automationName="buttonCancel" label="Cancel" click="onClose(event);"/> </mx:HBox> </BaseDialog> ---------------------------------------------------------------------------------------------------------------------------------------------------------- BaseDialog.mxml <?xml version="1.0" encoding="utf-8"?> <!-- Copyright 2010, abc, Inc. All rights reserved. --> <ResizableWindow xmlns="com.abc.view.dialogs.resizablewindow.*" xmlns:mx="http://www.adobe.com/2006/mxml" showCloseButton="true" creationComplete="init();" close="onClose(null);" keyDown="titleWindow_keyDown(event);" > <mx:Script> <![CDATA[ import com.abc.intelligence.event.ApplicationEvent; import com.abc.utils.abcUtils; import mx.events.CloseEvent; import mx.managers.PopUpManager; [Dispatcher] public var eventDispatcher:IEventDispatcher; public var dispatcher:DisplayObject; [Bindable] public var params:Object; [Bindable] public var abc:abcDesign = null; /* * Loading and applying data */ protected function init() : void{ abc = abcUtils.getabcVmStoreApp(); } // Handle the close button and Cancel button. protected function onClose(event:MouseEvent):void { PopUpManager.removePopUp(this); } protected function titleWindow_keyDown( evt : KeyboardEvent ) : void { if ( evt.charCode == Keyboard.ESCAPE ) { this.dispatchEvent(new CloseEvent(CloseEvent.CLOSE)); this.dispatchEvent(new ApplicationEvent( ApplicationEvent.STAGE_CLICK ) ); } ExternalInterface.call('console.log', 'titleWindow_keyDown ' + evt.charCode) } /* * All derived class must use this metiod to create a popup; and also use dispatcher.dispatchEvent(event) to dispatch any event instead of using the dispatcehEvent(event) method * If the rules above are not followed, the event may not be dispatched correctly NOR will the dialog/events will work with RIATestLoader. * * Note: We should probably need to have an addPopUp, see mx.managers.PopUpManager.as, in the future if we ever going to use this method in * the derived class and if we would find that there are problems with events dispatching or with RIATest. */ public static function createPopUp(displayObject: DisplayObject, dialogClass:Class, modal:Boolean=true, childList:String=null, params:Object=null) : BaseDialog { var win:BaseDialog = PopUpManager.createPopUp(displayObject, dialogClass, modal ,childList) as BaseDialog; win.dispatcher = displayObject; win.params = params; return win; } ]]> </mx:Script> </ResizableWindow>
Flags: needinfo?(neelesh.bizoara)
Checked on different version of Firefox 1. 45.0.1 version - working 2. 47.0 version - not working 3. 60.0.1 version - not working
Hey Neelesh, We need some more information. 1. Which Firefox browser version are you using? Is it v60.3.0esr? 2. How can I reproduce the issue using your code? (I need a more easily understandable test case to reproduce and verify it). 3. Does it also occur on the latest Release version? What about the latest Nightly version? Thank you for your contribution!
Flags: needinfo?(neelesh.bizoara)

Hi,

I'm marking this as Resolved-Incomplete due to lack of response. If the issue is still reproducible with the latest Firefox version, feel free to reopen the bug with more information.

Regards, Flor.

Status: UNCONFIRMED → RESOLVED
Closed: 6 years ago
Resolution: --- → INCOMPLETE
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: