tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ConstraintValidation.cpp (3053B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #include "ConstraintValidation.h"
      8 
      9 #include "mozilla/ErrorResult.h"
     10 #include "nsAString.h"
     11 #include "nsContentUtils.h"
     12 #include "nsIContent.h"
     13 
     14 namespace mozilla::dom {
     15 
     16 void ConstraintValidation::GetValidationMessage(nsAString& aValidationMessage,
     17                                                ErrorResult& aError) {
     18  aValidationMessage.Truncate();
     19 
     20  if (IsCandidateForConstraintValidation() && !IsValid()) {
     21    if (GetValidityState(VALIDITY_STATE_CUSTOM_ERROR)) {
     22      aValidationMessage.Assign(mCustomValidity);
     23      if (aValidationMessage.Length() > sContentSpecifiedMaxLengthMessage) {
     24        aValidationMessage.Truncate(sContentSpecifiedMaxLengthMessage);
     25      }
     26    } else if (GetValidityState(VALIDITY_STATE_TOO_LONG)) {
     27      GetValidationMessage(aValidationMessage, VALIDITY_STATE_TOO_LONG);
     28    } else if (GetValidityState(VALIDITY_STATE_TOO_SHORT)) {
     29      GetValidationMessage(aValidationMessage, VALIDITY_STATE_TOO_SHORT);
     30    } else if (GetValidityState(VALIDITY_STATE_VALUE_MISSING)) {
     31      GetValidationMessage(aValidationMessage, VALIDITY_STATE_VALUE_MISSING);
     32    } else if (GetValidityState(VALIDITY_STATE_TYPE_MISMATCH)) {
     33      GetValidationMessage(aValidationMessage, VALIDITY_STATE_TYPE_MISMATCH);
     34    } else if (GetValidityState(VALIDITY_STATE_PATTERN_MISMATCH)) {
     35      GetValidationMessage(aValidationMessage, VALIDITY_STATE_PATTERN_MISMATCH);
     36    } else if (GetValidityState(VALIDITY_STATE_RANGE_OVERFLOW)) {
     37      GetValidationMessage(aValidationMessage, VALIDITY_STATE_RANGE_OVERFLOW);
     38    } else if (GetValidityState(VALIDITY_STATE_RANGE_UNDERFLOW)) {
     39      GetValidationMessage(aValidationMessage, VALIDITY_STATE_RANGE_UNDERFLOW);
     40    } else if (GetValidityState(VALIDITY_STATE_STEP_MISMATCH)) {
     41      GetValidationMessage(aValidationMessage, VALIDITY_STATE_STEP_MISMATCH);
     42    } else if (GetValidityState(VALIDITY_STATE_BAD_INPUT)) {
     43      GetValidationMessage(aValidationMessage, VALIDITY_STATE_BAD_INPUT);
     44    } else {
     45      // There should not be other validity states.
     46      aError.Throw(NS_ERROR_UNEXPECTED);
     47      return;
     48    }
     49  } else {
     50    aValidationMessage.Truncate();
     51  }
     52 }
     53 
     54 bool ConstraintValidation::CheckValidity() {
     55  nsCOMPtr<nsIContent> content = do_QueryInterface(this);
     56  MOZ_ASSERT(content, "This class should be inherited by HTML elements only!");
     57  return nsIConstraintValidation::CheckValidity(*content);
     58 }
     59 
     60 ConstraintValidation::ConstraintValidation() = default;
     61 
     62 void ConstraintValidation::SetCustomValidity(const nsAString& aError) {
     63  nsAutoString error(aError);
     64  nsContentUtils::PlatformToDOMLineBreaks(error);
     65  mCustomValidity.Assign(error);
     66  SetValidityState(VALIDITY_STATE_CUSTOM_ERROR, !mCustomValidity.IsEmpty());
     67 }
     68 
     69 }  // namespace mozilla::dom