Commit 0ee37644 authored by Emilio Cobos Álvarez's avatar Emilio Cobos Álvarez
Browse files

Bug 1649569 - Simplify a bit GetValidationMessage. r=edgar

This doesn't really need so many temporary strings.

Differential Revision: https://phabricator.services.mozilla.com/D82403
parent 012cd8f8
Loading
Loading
Loading
Loading
+43 −95
Original line number Diff line number Diff line
@@ -6,6 +6,8 @@

#include "mozilla/dom/InputType.h"

#include "mozilla/Assertions.h"
#include "mozilla/Likely.h"
#include "nsIFormControl.h"
#include "mozilla/dom/ButtonInputTypes.h"
#include "mozilla/dom/CheckableInputTypes.h"
@@ -152,11 +154,10 @@ bool InputType::HasBadInput() const { return false; }
nsresult InputType::GetValidationMessage(
    nsAString& aValidationMessage,
    nsIConstraintValidation::ValidityStateType aType) {
  nsresult rv = NS_OK;
  aValidationMessage.Truncate();

  switch (aType) {
    case nsIConstraintValidation::VALIDITY_STATE_TOO_LONG: {
      nsAutoString message;
      int32_t maxLength = mInputElement->MaxLength();
      int32_t textLength = mInputElement->InputTextLength(CallerType::System);
      nsAutoString strMaxLength;
@@ -165,14 +166,12 @@ nsresult InputType::GetValidationMessage(
      strMaxLength.AppendInt(maxLength);
      strTextLength.AppendInt(textLength);

      rv = nsContentUtils::FormatMaybeLocalizedString(
          message, nsContentUtils::eDOM_PROPERTIES, "FormValidationTextTooLong",
          mInputElement->OwnerDoc(), strMaxLength, strTextLength);
      aValidationMessage = message;
      break;
      return nsContentUtils::FormatMaybeLocalizedString(
          aValidationMessage, nsContentUtils::eDOM_PROPERTIES,
          "FormValidationTextTooLong", mInputElement->OwnerDoc(), strMaxLength,
          strTextLength);
    }
    case nsIConstraintValidation::VALIDITY_STATE_TOO_SHORT: {
      nsAutoString message;
      int32_t minLength = mInputElement->MinLength();
      int32_t textLength = mInputElement->InputTextLength(CallerType::System);
      nsAutoString strMinLength;
@@ -181,79 +180,41 @@ nsresult InputType::GetValidationMessage(
      strMinLength.AppendInt(minLength);
      strTextLength.AppendInt(textLength);

      rv = nsContentUtils::FormatMaybeLocalizedString(
          message, nsContentUtils::eDOM_PROPERTIES,
      return nsContentUtils::FormatMaybeLocalizedString(
          aValidationMessage, nsContentUtils::eDOM_PROPERTIES,
          "FormValidationTextTooShort", mInputElement->OwnerDoc(), strMinLength,
          strTextLength);

      aValidationMessage = message;
      break;
    }
    case nsIConstraintValidation::VALIDITY_STATE_VALUE_MISSING: {
      nsAutoString message;
      rv = GetValueMissingMessage(message);
      if (NS_FAILED(rv)) {
        return rv;
      }

      aValidationMessage = message;
      break;
    }
    case nsIConstraintValidation::VALIDITY_STATE_VALUE_MISSING:
      return GetValueMissingMessage(aValidationMessage);
    case nsIConstraintValidation::VALIDITY_STATE_TYPE_MISMATCH: {
      nsAutoString message;
      rv = GetTypeMismatchMessage(message);
      if (NS_FAILED(rv)) {
        return rv;
      }

      aValidationMessage = message;
      break;
      return GetTypeMismatchMessage(aValidationMessage);
    }
    case nsIConstraintValidation::VALIDITY_STATE_PATTERN_MISMATCH: {
      nsAutoString message;
      nsAutoString title;
      mInputElement->GetAttr(kNameSpaceID_None, nsGkAtoms::title, title);
      mInputElement->GetAttr(nsGkAtoms::title, title);

      if (title.IsEmpty()) {
        rv = nsContentUtils::GetMaybeLocalizedString(
        return nsContentUtils::GetMaybeLocalizedString(
            nsContentUtils::eDOM_PROPERTIES, "FormValidationPatternMismatch",
            mInputElement->OwnerDoc(), message);
      } else {
            mInputElement->OwnerDoc(), aValidationMessage);
      }

      if (title.Length() >
          nsIConstraintValidation::sContentSpecifiedMaxLengthMessage) {
        title.Truncate(
            nsIConstraintValidation::sContentSpecifiedMaxLengthMessage);
      }
        rv = nsContentUtils::FormatMaybeLocalizedString(
            message, nsContentUtils::eDOM_PROPERTIES,
      return nsContentUtils::FormatMaybeLocalizedString(
          aValidationMessage, nsContentUtils::eDOM_PROPERTIES,
          "FormValidationPatternMismatchWithTitle", mInputElement->OwnerDoc(),
          title);
    }
      aValidationMessage = message;
      break;
    }
    case nsIConstraintValidation::VALIDITY_STATE_RANGE_OVERFLOW: {
      nsAutoString message;
      rv = GetRangeOverflowMessage(message);
      if (NS_FAILED(rv)) {
        return rv;
      }

      aValidationMessage = message;
      break;
    }
    case nsIConstraintValidation::VALIDITY_STATE_RANGE_UNDERFLOW: {
      nsAutoString message;
      rv = GetRangeUnderflowMessage(message);
      if (NS_FAILED(rv)) {
        return rv;
      }

      aValidationMessage = message;
      break;
    }
    case nsIConstraintValidation::VALIDITY_STATE_RANGE_OVERFLOW:
      return GetRangeOverflowMessage(aValidationMessage);
    case nsIConstraintValidation::VALIDITY_STATE_RANGE_UNDERFLOW:
      return GetRangeUnderflowMessage(aValidationMessage);
    case nsIConstraintValidation::VALIDITY_STATE_STEP_MISMATCH: {
      nsAutoString message;

      Decimal value = mInputElement->GetValueAsDecimal();
      if (MOZ_UNLIKELY(NS_WARN_IF(value.isNaN()))) {
        // TODO(bug 1651070): This should ideally never happen, but we don't
@@ -277,44 +238,31 @@ nsresult InputType::GetValidationMessage(
        ConvertNumberToString(valueHigh, valueHighStr);

        if (valueLowStr.Equals(valueHighStr)) {
          rv = nsContentUtils::FormatMaybeLocalizedString(
              message, nsContentUtils::eDOM_PROPERTIES,
          return nsContentUtils::FormatMaybeLocalizedString(
              aValidationMessage, nsContentUtils::eDOM_PROPERTIES,
              "FormValidationStepMismatchOneValue", mInputElement->OwnerDoc(),
              valueLowStr);
        } else {
          rv = nsContentUtils::FormatMaybeLocalizedString(
              message, nsContentUtils::eDOM_PROPERTIES,
        }
        return nsContentUtils::FormatMaybeLocalizedString(
            aValidationMessage, nsContentUtils::eDOM_PROPERTIES,
            "FormValidationStepMismatch", mInputElement->OwnerDoc(),
            valueLowStr, valueHighStr);
      }
      } else {

      nsAutoString valueLowStr;
      ConvertNumberToString(valueLow, valueLowStr);

        rv = nsContentUtils::FormatMaybeLocalizedString(
            message, nsContentUtils::eDOM_PROPERTIES,
      return nsContentUtils::FormatMaybeLocalizedString(
          aValidationMessage, nsContentUtils::eDOM_PROPERTIES,
          "FormValidationStepMismatchOneValue", mInputElement->OwnerDoc(),
          valueLowStr);
    }

      aValidationMessage = message;
      break;
    }
    case nsIConstraintValidation::VALIDITY_STATE_BAD_INPUT: {
      nsAutoString message;
      rv = GetBadInputMessage(message);
      if (NS_FAILED(rv)) {
        return rv;
      }

      aValidationMessage = message;
      break;
    }
    case nsIConstraintValidation::VALIDITY_STATE_BAD_INPUT:
      return GetBadInputMessage(aValidationMessage);
    default:
      MOZ_ASSERT_UNREACHABLE("Unknown validity state");
      return NS_ERROR_UNEXPECTED;
  }

  return rv;
}

nsresult InputType::GetValueMissingMessage(nsAString& aMessage) {