diff --git a/dom/base/FormData.cpp b/dom/base/FormData.cpp index 73d54e749f88..9a61ce5e288c 100644 --- a/dom/base/FormData.cpp +++ b/dom/base/FormData.cpp @@ -80,6 +80,16 @@ FormData nsISupports * aOwner +NotNull +< +const +Encoding +* +> +aEncoding +Element +* +aOriginatingElement ) : HTMLFormSubmission @@ -88,8 +98,8 @@ nullptr EmptyString ( ) -UTF_8_ENCODING -nullptr +aEncoding +aOriginatingElement ) mOwner ( @@ -97,6 +107,46 @@ aOwner ) { } +FormData +: +: +FormData +( +const +FormData +& +aFormData +) +: +HTMLFormSubmission +( +aFormData +. +mActionURL +aFormData +. +mTarget +aFormData +. +mEncoding +aFormData +. +mOriginatingElement +) +{ +mOwner += +aFormData +. +mOwner +; +mFormData += +aFormData +. +mFormData +; +} namespace { already_AddRefed @@ -1524,11 +1574,36 @@ Value ( ) . -WalkFormElements +ConstructEntryList ( formData ) ; +if +( +NS_WARN_IF +( +aRv +. +Failed +( +) +) +) +{ +return +nullptr +; +} +formData += +formData +- +> +Clone +( +) +; } return formData @@ -1571,9 +1646,114 @@ UTF_8_ENCODING nullptr ) ; +nsresult +rv += +CopySubmissionDataTo +( +& +fs +) +; +NS_ENSURE_SUCCESS +( +rv +rv +) +; +fs +. +GetContentType +( +aContentTypeWithCharset +) +; +aCharset +. +Truncate +( +) +; +* +aContentLength += +0 +; +NS_ADDREF +( +* +aBody += +fs +. +GetSubmissionBody +( +aContentLength +) +) +; +return +NS_OK +; +} +already_AddRefed +< +FormData +> +FormData +: +: +Clone +( +) +{ +RefPtr +< +FormData +> +formData += +new +FormData +( +* +this +) +; +return +formData +. +forget +( +) +; +} +nsresult +FormData +: +: +CopySubmissionDataTo +( +HTMLFormSubmission +* +aFormSubmission +) +const +{ +MOZ_ASSERT +( +aFormSubmission +" +Must +have +FormSubmission +! +" +) +; for ( -uint32_t +size_t i = 0 @@ -1615,8 +1795,9 @@ IsUSVString ) ) ; -fs -. +aFormSubmission +- +> AddNameBlobOrNullPair ( mFormData @@ -1644,8 +1825,9 @@ IsUSVString ) ) { -fs -. +aFormSubmission +- +> AddNameValuePair ( mFormData @@ -1682,8 +1864,9 @@ IsBlob ) ) { -fs -. +aFormSubmission +- +> AddNameBlobOrNullPair ( mFormData @@ -1721,8 +1904,9 @@ IsDirectory ) ) ; -fs -. +aFormSubmission +- +> AddNameDirectoryPair ( mFormData @@ -1745,37 +1929,6 @@ GetAsDirectory ; } } -fs -. -GetContentType -( -aContentTypeWithCharset -) -; -aCharset -. -Truncate -( -) -; -* -aContentLength -= -0 -; -NS_ADDREF -( -* -aBody -= -fs -. -GetSubmissionBody -( -aContentLength -) -) -; return NS_OK ; diff --git a/dom/base/FormData.h b/dom/base/FormData.h index 41d381032dc1..54ec3bb600c0 100644 --- a/dom/base/FormData.h +++ b/dom/base/FormData.h @@ -105,6 +105,14 @@ nsWrapperCache { private : +FormData +( +const +FormData +& +aFormData +) +; ~ FormData ( @@ -195,6 +203,28 @@ nsISupports aOwner = nullptr +NotNull +< +const +Encoding +* +> +aEncoding += +UTF_8_ENCODING +Element +* +aOriginatingElement += +nullptr +) +; +already_AddRefed +< +FormData +> +Clone +( ) ; NS_DECL_CYCLE_COLLECTING_ISUPPORTS @@ -621,6 +651,15 @@ aCharset ) const ; +nsresult +CopySubmissionDataTo +( +HTMLFormSubmission +* +aFormSubmission +) +const +; private : nsCOMPtr diff --git a/dom/html/HTMLFormElement.cpp b/dom/html/HTMLFormElement.cpp index 2f0f531059bc..7b3d1c3d003b 100644 --- a/dom/html/HTMLFormElement.cpp +++ b/dom/html/HTMLFormElement.cpp @@ -277,6 +277,17 @@ include " mozilla / +dom +/ +FormDataEvent +. +h +" +# +include +" +mozilla +/ Telemetry . h @@ -672,6 +683,10 @@ mEverTriedInvalidSubmit ( false ) +mIsConstructingEntryList +( +false +) { AddStatesSilently ( @@ -2304,6 +2319,9 @@ aMessage { if ( +mIsConstructingEntryList +| +| ! doc | @@ -2523,6 +2541,22 @@ aEvent ; if ( +rv += += +NS_ERROR_NOT_AVAILABLE +) +{ +mIsSubmitting += +false +; +return +NS_OK +; +} +if +( NS_FAILED ( rv @@ -2701,6 +2735,58 @@ originator nsresult rv ; +auto +encoding += +GetSubmitEncoding +( +) +- +> +OutputEncoding +( +) +; +RefPtr +< +FormData +> +formData += +new +FormData +( +GetOwnerGlobal +( +) +encoding +originatingElement +) +; +rv += +ConstructEntryList +( +formData +) +; +NS_ENSURE_SUBMIT_SUCCESS +( +rv +) +; +if +( +! +GetComposedDoc +( +) +) +{ +return +NS_ERROR_NOT_AVAILABLE +; +} rv = HTMLFormSubmission @@ -2710,6 +2796,7 @@ GetFromForm ( this originatingElement +encoding aFormSubmission ) ; @@ -2720,7 +2807,10 @@ rv ; rv = -WalkFormElements +formData +- +> +CopySubmissionDataTo ( * aFormSubmission @@ -3798,13 +3888,46 @@ nsresult HTMLFormElement : : -WalkFormElements +ConstructEntryList ( -HTMLFormSubmission +FormData * -aFormSubmission +aFormData ) { +MOZ_ASSERT +( +aFormData +" +Must +have +FormData +! +" +) +; +if +( +mIsConstructingEntryList +) +{ +return +NS_ERROR_DOM_INVALID_STATE_ERR +; +} +AutoRestore +< +bool +> +resetConstructingEntryList +( +mIsConstructingEntryList +) +; +mIsConstructingEntryList += +true +; AutoTArray < RefPtr @@ -3865,14 +3988,258 @@ i > SubmitNamesValues ( -aFormSubmission +aFormData ) ; } +FormDataEventInit +init +; +init +. +mBubbles += +true +; +init +. +mCancelable += +false +; +init +. +mFormData += +aFormData +; +RefPtr +< +FormDataEvent +> +event += +FormDataEvent +: +: +Constructor +( +this +NS_LITERAL_STRING +( +" +formdata +" +) +init +) +; +event +- +> +SetTrusted +( +true +) +; +EventDispatcher +: +: +DispatchDOMEvent +( +ToSupports +( +this +) +nullptr +event +nullptr +nullptr +) +; return NS_OK ; } +NotNull +< +const +Encoding +* +> +HTMLFormElement +: +: +GetSubmitEncoding +( +) +{ +nsAutoString +acceptCharsetValue +; +GetAttr +( +kNameSpaceID_None +nsGkAtoms +: +: +acceptcharset +acceptCharsetValue +) +; +int32_t +charsetLen += +acceptCharsetValue +. +Length +( +) +; +if +( +charsetLen +> +0 +) +{ +int32_t +offset += +0 +; +int32_t +spPos += +0 +; +do +{ +spPos += +acceptCharsetValue +. +FindChar +( +char16_t +( +' +' +) +offset +) +; +int32_t +cnt += +( +( +- +1 += += +spPos +) +? +( +charsetLen +- +offset +) +: +( +spPos +- +offset +) +) +; +if +( +cnt +> +0 +) +{ +nsAutoString +uCharset +; +acceptCharsetValue +. +Mid +( +uCharset +offset +cnt +) +; +auto +encoding += +Encoding +: +: +ForLabelNoReplacement +( +uCharset +) +; +if +( +encoding +) +{ +return +WrapNotNull +( +encoding +) +; +} +} +offset += +spPos ++ +1 +; +} +while +( +spPos +! += +- +1 +) +; +} +Document +* +doc += +GetComposedDoc +( +) +; +if +( +doc +) +{ +return +doc +- +> +GetDocumentCharacterSet +( +) +; +} +return +UTF_8_ENCODING +; +} NS_IMETHODIMP_ ( uint32_t diff --git a/dom/html/HTMLFormElement.h b/dom/html/HTMLFormElement.h index ad40c0844eff..59c6bc034120 100644 --- a/dom/html/HTMLFormElement.h +++ b/dom/html/HTMLFormElement.h @@ -25,17 +25,6 @@ h # include " -mozilla -/ -dom -/ -HTMLFormSubmission -. -h -" -# -include -" nsAutoPtr . h @@ -149,6 +138,9 @@ class HTMLImageElement ; class +FormData +; +class HTMLFormElement final : @@ -698,11 +690,11 @@ aSubmitter ) ; nsresult -WalkFormElements +ConstructEntryList ( -HTMLFormSubmission +FormData * -aFormSubmission +aFormData ) ; bool @@ -1603,8 +1595,21 @@ mNotifiedObserversResult bool mEverTriedInvalidSubmit ; +bool +mIsConstructingEntryList +; private : +NotNull +< +const +Encoding +* +> +GetSubmitEncoding +( +) +; ~ HTMLFormElement ( diff --git a/dom/html/HTMLFormSubmission.cpp b/dom/html/HTMLFormSubmission.cpp index 6ee229e2ba86..d552c1479b1e 100644 --- a/dom/html/HTMLFormSubmission.cpp +++ b/dom/html/HTMLFormSubmission.cpp @@ -3460,191 +3460,6 @@ NS_OK } namespace { -NotNull -< -const -Encoding -* -> -GetSubmitEncoding -( -nsGenericHTMLElement -* -aForm -) -{ -nsAutoString -acceptCharsetValue -; -aForm -- -> -GetAttr -( -kNameSpaceID_None -nsGkAtoms -: -: -acceptcharset -acceptCharsetValue -) -; -int32_t -charsetLen -= -acceptCharsetValue -. -Length -( -) -; -if -( -charsetLen -> -0 -) -{ -int32_t -offset -= -0 -; -int32_t -spPos -= -0 -; -do -{ -spPos -= -acceptCharsetValue -. -FindChar -( -char16_t -( -' -' -) -offset -) -; -int32_t -cnt -= -( -( -- -1 -= -= -spPos -) -? -( -charsetLen -- -offset -) -: -( -spPos -- -offset -) -) -; -if -( -cnt -> -0 -) -{ -nsAutoString -uCharset -; -acceptCharsetValue -. -Mid -( -uCharset -offset -cnt -) -; -auto -encoding -= -Encoding -: -: -ForLabelNoReplacement -( -uCharset -) -; -if -( -encoding -) -{ -return -WrapNotNull -( -encoding -) -; -} -} -offset -= -spPos -+ -1 -; -} -while -( -spPos -! -= -- -1 -) -; -} -Document -* -doc -= -aForm -- -> -GetComposedDoc -( -) -; -if -( -doc -) -{ -return -doc -- -> -GetDocumentCharacterSet -( -) -; -} -return -UTF_8_ENCODING -; -} void GetEnumAttr ( @@ -3716,6 +3531,14 @@ aForm nsGenericHTMLElement * aOriginatingElement +NotNull +< +const +Encoding +* +> +& +aEncoding HTMLFormSubmission * * @@ -3979,19 +3802,6 @@ method ) ; } -auto -encoding -= -GetSubmitEncoding -( -aForm -) -- -> -OutputEncoding -( -) -; if ( method @@ -4014,7 +3824,7 @@ FSMultipartFormData ( actionURL target -encoding +aEncoding aOriginatingElement ) ; @@ -4042,7 +3852,7 @@ FSTextPlain ( actionURL target -encoding +aEncoding aOriginatingElement ) ; @@ -4158,7 +3968,7 @@ FSURLEncoded ( actionURL target -encoding +aEncoding method doc aOriginatingElement diff --git a/dom/html/HTMLFormSubmission.h b/dom/html/HTMLFormSubmission.h index 4f90a0f773e8..3750c4795a52 100644 --- a/dom/html/HTMLFormSubmission.h +++ b/dom/html/HTMLFormSubmission.h @@ -98,6 +98,14 @@ aForm nsGenericHTMLElement * aOriginatingElement +NotNull +< +const +Encoding +* +> +& +aEncoding HTMLFormSubmission * *