docs: function (charCode, keyCode, currentText, caretPosStart, caretPosEnd, event) {
              var dataModel = this._dataModel, domEvent = ariaDomEvent, report, selectionKey;
  
              if (this._listWidget) {
                  selectionKey = this.checkSelectionKeys(event);
              }
              if (!domEvent.isNavigationKey(keyCode) && !selectionKey) {
                  // value that should be in the input after this keystroke and also the caret positions
                  var nextValueObject;
                  var isDelKey = (keyCode == domEvent.KC_DELETE || keyCode == domEvent.KC_BACKSPACE);
                  if (isDelKey) {
                      nextValueObject = this._getTypedValueOnDelete(keyCode, currentText, caretPosStart, caretPosEnd);
                  } else {
                      nextValueObject = this._getTypedValue(charCode, currentText, caretPosStart, caretPosEnd);
                  }
  
                  dataModel.initialInput = nextValueObject.nextValue;
  
                  return this._checkInputKey(charCode, keyCode, nextValueObject.nextValue, nextValueObject.caretPosStart, nextValueObject.caretPosEnd);
              }
  
              // Handling for navigation. First if dropdown list is opened
              if (this._listWidget) {
                  if (!selectionKey && keyCode == domEvent.KC_ESCAPE) {
                      report = this.checkText(dataModel.initialInput);
                      if (!report) {
                          report = new ariaWidgetsControllersReportsDropDownControllerReport();
                      }
                      report.displayDropDown = false; // close the dropdown
                      report.text = dataModel.initialInput;
                      // data Model value reset on escape to retain error no escape PTR 05163905
                      report.value = report.text;
                      report.cancelKeyStroke = true;
                      dataModel.value = null;
                      return report;
  
                  } else if (selectionKey || keyCode == domEvent.KC_TAB) {
                      if (dataModel.selectedIdx != -1) {
                          if (dataModel.selectedIdx != null) {
                              dataModel.text = this._getLabelFromListValue(dataModel.listContent[dataModel.selectedIdx]);
                              dataModel.value = dataModel.listContent[dataModel.selectedIdx].value;
                          }
                          report = this.checkDropdownValue(dataModel.value);
                      } else {
                          var report = new ariaWidgetsControllersReportsDropDownControllerReport();
                      }
                      report.displayDropDown = false; // close the dropdown
                      if (keyCode != domEvent.KC_TAB) {
                          report.cancelKeyStroke = true; // prevent fieldset onSubmit when typing ENTER
                      }
                      return report;
                  } else if (keyCode == domEvent.KC_ARROW_LEFT) {
                      return;
                  } else {
                      report = new ariaWidgetsControllersReportsDropDownControllerReport();
  
                      var oldIdx = dataModel.selectedIdx;
                      this._listWidget.sendKey(0, keyCode);
                      var newIdx = dataModel.selectedIdx;
                      if (oldIdx != newIdx) {
                          report.ok = true;
                          if (newIdx == -1) {
                              dataModel.value = null;
                              dataModel.text = dataModel.initialInput;
                          } else {
                              dataModel.value = dataModel.listContent[newIdx].value;
                              dataModel.text = this._getLabelFromListValue(dataModel.listContent[newIdx]);
                          }
                          report.text = dataModel.text;
                      }
                      return report;
                  }
              } else {
                  // otherwise open list dropdown on arrow down if needed
                  if (keyCode == domEvent.KC_ARROW_DOWN) {
                      report = this._checkInputKey(charCode, keyCode, currentText, caretPosStart, caretPosEnd);
                  } else {
                      report = new ariaWidgetsControllersReportsDropDownControllerReport();
                  }
                  // domEvent.KC_ESCAPE for issue#697 on FF
                  if (report && keyCode != domEvent.KC_TAB && keyCode != domEvent.KC_ARROW_DOWN) {
                      // domEvent.KC_ESCAPE for issue#697 on FF
                      report.cancelKeyStrokeDefaultBehavior = (keyCode == domEvent.KC_ESCAPE);
                  }
                  return report;
              }
          }