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