diff --git a/dom/html/HTMLInputElement.cpp b/dom/html/HTMLInputElement.cpp
index c1707afb38a1..496b167e026c 100644
--- a/dom/html/HTMLInputElement.cpp
+++ b/dom/html/HTMLInputElement.cpp
@@ -2015,7 +2015,10 @@ HTMLInputElement::SetWidth(uint32_t aWidth)
NS_IMETHODIMP
HTMLInputElement::GetValue(nsAString& aValue)
{
- GetValueInternal(aValue);
+ nsresult rv = GetValueInternal(aValue);
+ if (NS_FAILED(rv)) {
+ return rv;
+ }
// Don't return non-sanitized value for types that are experimental on mobile.
if (IsExperimentalMobileType(mType)) {
@@ -2032,8 +2035,8 @@ HTMLInputElement::GetValueInternal(nsAString& aValue) const
case VALUE_MODE_VALUE:
if (IsSingleLineTextControl(false)) {
mInputData.mState->GetValue(aValue, true);
- } else {
- aValue.Assign(mInputData.mValue);
+ } else if (!aValue.Assign(mInputData.mValue, fallible)) {
+ return NS_ERROR_OUT_OF_MEMORY;
}
return NS_OK;
@@ -2169,6 +2172,15 @@ HTMLInputElement::GetValueAsDecimal() const
: decimalValue;
}
+void
+HTMLInputElement::GetValue(nsAString& aValue, ErrorResult& aRv)
+{
+ nsresult rv = GetValue(aValue);
+ if (NS_FAILED(rv)) {
+ aRv.Throw(rv);
+ }
+}
+
void
HTMLInputElement::SetValue(const nsAString& aValue, ErrorResult& aRv)
{
@@ -6314,9 +6326,12 @@ HTMLInputElement::SaveState()
inputState = new HTMLInputElementState();
nsAutoString value;
- GetValue(value);
- nsresult rv =
- nsLinebreakConverter::ConvertStringLineBreaks(
+ nsresult rv = GetValue(value);
+ if (NS_FAILED(rv)) {
+ return rv;
+ }
+
+ rv = nsLinebreakConverter::ConvertStringLineBreaks(
value,
nsLinebreakConverter::eLinebreakPlatform,
nsLinebreakConverter::eLinebreakContent);
diff --git a/dom/html/HTMLInputElement.h b/dom/html/HTMLInputElement.h
index df77ceed5471..b9154328e8aa 100644
--- a/dom/html/HTMLInputElement.h
+++ b/dom/html/HTMLInputElement.h
@@ -632,7 +632,7 @@ public:
SetHTMLAttr(nsGkAtoms::value, aValue, aRv);
}
- // XPCOM GetValue() is OK
+ void GetValue(nsAString& aValue, ErrorResult& aRv);
void SetValue(const nsAString& aValue, ErrorResult& aRv);
Nullable GetValueAsDate(ErrorResult& aRv);
diff --git a/dom/webidl/HTMLInputElement.webidl b/dom/webidl/HTMLInputElement.webidl
index b15f8a126960..3fd7f48ea070 100644
--- a/dom/webidl/HTMLInputElement.webidl
+++ b/dom/webidl/HTMLInputElement.webidl
@@ -86,7 +86,7 @@ interface HTMLInputElement : HTMLElement {
attribute DOMString type;
[Pure, SetterThrows]
attribute DOMString defaultValue;
- [Pure, TreatNullAs=EmptyString, SetterThrows]
+ [Pure, TreatNullAs=EmptyString, Throws]
attribute DOMString value;
[Throws, Pref="dom.experimental_forms"]
attribute Date? valueAsDate;