mirror of
https://github.com/servo/servo.git
synced 2025-08-04 05:00:08 +01:00
update XHR send to use XMLHttpRequestBodyInit
This commit is contained in:
parent
8536cee72c
commit
dc690653da
2 changed files with 16 additions and 31 deletions
|
@ -12,8 +12,11 @@
|
||||||
* http://www.openwebfoundation.org/legal/the-owf-1-0-agreements/owfa-1-0.
|
* http://www.openwebfoundation.org/legal/the-owf-1-0-agreements/owfa-1-0.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
// https://fetch.spec.whatwg.org/#typedefdef-xmlhttprequestbodyinit
|
||||||
|
typedef (Blob or BufferSource or FormData or DOMString or URLSearchParams) XMLHttpRequestBodyInit;
|
||||||
|
|
||||||
// https://fetch.spec.whatwg.org/#bodyinit
|
// https://fetch.spec.whatwg.org/#bodyinit
|
||||||
typedef (Blob or BufferSource or FormData or DOMString or URLSearchParams or ReadableStream) BodyInit;
|
typedef (ReadableStream or XMLHttpRequestBodyInit) BodyInit;
|
||||||
|
|
||||||
enum XMLHttpRequestResponseType {
|
enum XMLHttpRequestResponseType {
|
||||||
"",
|
"",
|
||||||
|
@ -54,7 +57,7 @@ interface XMLHttpRequest : XMLHttpRequestEventTarget {
|
||||||
attribute boolean withCredentials;
|
attribute boolean withCredentials;
|
||||||
readonly attribute XMLHttpRequestUpload upload;
|
readonly attribute XMLHttpRequestUpload upload;
|
||||||
[Throws]
|
[Throws]
|
||||||
void send(optional (Document or BodyInit)? data = null);
|
void send(optional (Document or XMLHttpRequestBodyInit)? data = null);
|
||||||
void abort();
|
void abort();
|
||||||
|
|
||||||
// response
|
// response
|
||||||
|
|
|
@ -8,7 +8,7 @@ use crate::dom::bindings::cell::DomRefCell;
|
||||||
use crate::dom::bindings::codegen::Bindings::WindowBinding::WindowMethods;
|
use crate::dom::bindings::codegen::Bindings::WindowBinding::WindowMethods;
|
||||||
use crate::dom::bindings::codegen::Bindings::XMLHttpRequestBinding::XMLHttpRequestMethods;
|
use crate::dom::bindings::codegen::Bindings::XMLHttpRequestBinding::XMLHttpRequestMethods;
|
||||||
use crate::dom::bindings::codegen::Bindings::XMLHttpRequestBinding::XMLHttpRequestResponseType;
|
use crate::dom::bindings::codegen::Bindings::XMLHttpRequestBinding::XMLHttpRequestResponseType;
|
||||||
use crate::dom::bindings::codegen::UnionTypes::DocumentOrBodyInit;
|
use crate::dom::bindings::codegen::UnionTypes::DocumentOrXMLHttpRequestBodyInit;
|
||||||
use crate::dom::bindings::conversions::ToJSValConvertible;
|
use crate::dom::bindings::conversions::ToJSValConvertible;
|
||||||
use crate::dom::bindings::error::{Error, ErrorResult, Fallible};
|
use crate::dom::bindings::error::{Error, ErrorResult, Fallible};
|
||||||
use crate::dom::bindings::inheritance::Castable;
|
use crate::dom::bindings::inheritance::Castable;
|
||||||
|
@ -547,7 +547,7 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://xhr.spec.whatwg.org/#the-send()-method
|
// https://xhr.spec.whatwg.org/#the-send()-method
|
||||||
fn Send(&self, data: Option<DocumentOrBodyInit>) -> ErrorResult {
|
fn Send(&self, data: Option<DocumentOrXMLHttpRequestBodyInit>) -> ErrorResult {
|
||||||
// Step 1, 2
|
// Step 1, 2
|
||||||
if self.ready_state.get() != XMLHttpRequestState::Opened || self.send_flag.get() {
|
if self.ready_state.get() != XMLHttpRequestState::Opened || self.send_flag.get() {
|
||||||
return Err(Error::InvalidState);
|
return Err(Error::InvalidState);
|
||||||
|
@ -560,7 +560,7 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
|
||||||
};
|
};
|
||||||
// Step 4 (first half)
|
// Step 4 (first half)
|
||||||
let mut extracted_or_serialized = match data {
|
let mut extracted_or_serialized = match data {
|
||||||
Some(DocumentOrBodyInit::Document(ref doc)) => {
|
Some(DocumentOrXMLHttpRequestBodyInit::Document(ref doc)) => {
|
||||||
let bytes = Vec::from(serialize_document(&doc)?.as_ref());
|
let bytes = Vec::from(serialize_document(&doc)?.as_ref());
|
||||||
let content_type = if doc.is_html_document() {
|
let content_type = if doc.is_html_document() {
|
||||||
"text/html;charset=UTF-8"
|
"text/html;charset=UTF-8"
|
||||||
|
@ -577,7 +577,7 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
|
||||||
source: BodySource::Object,
|
source: BodySource::Object,
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
Some(DocumentOrBodyInit::Blob(ref b)) => {
|
Some(DocumentOrXMLHttpRequestBodyInit::Blob(ref b)) => {
|
||||||
let extracted_body = b.extract(&self.global()).expect("Couldn't extract body.");
|
let extracted_body = b.extract(&self.global()).expect("Couldn't extract body.");
|
||||||
if !extracted_body.in_memory() && self.sync.get() {
|
if !extracted_body.in_memory() && self.sync.get() {
|
||||||
warn!("Sync XHR with not in-memory Blob as body not supported");
|
warn!("Sync XHR with not in-memory Blob as body not supported");
|
||||||
|
@ -586,20 +586,20 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
|
||||||
Some(extracted_body)
|
Some(extracted_body)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Some(DocumentOrBodyInit::FormData(ref formdata)) => Some(
|
Some(DocumentOrXMLHttpRequestBodyInit::FormData(ref formdata)) => Some(
|
||||||
formdata
|
formdata
|
||||||
.extract(&self.global())
|
.extract(&self.global())
|
||||||
.expect("Couldn't extract body."),
|
.expect("Couldn't extract body."),
|
||||||
),
|
),
|
||||||
Some(DocumentOrBodyInit::String(ref str)) => {
|
Some(DocumentOrXMLHttpRequestBodyInit::String(ref str)) => {
|
||||||
Some(str.extract(&self.global()).expect("Couldn't extract body."))
|
Some(str.extract(&self.global()).expect("Couldn't extract body."))
|
||||||
},
|
},
|
||||||
Some(DocumentOrBodyInit::URLSearchParams(ref urlsp)) => Some(
|
Some(DocumentOrXMLHttpRequestBodyInit::URLSearchParams(ref urlsp)) => Some(
|
||||||
urlsp
|
urlsp
|
||||||
.extract(&self.global())
|
.extract(&self.global())
|
||||||
.expect("Couldn't extract body."),
|
.expect("Couldn't extract body."),
|
||||||
),
|
),
|
||||||
Some(DocumentOrBodyInit::ArrayBuffer(ref typedarray)) => {
|
Some(DocumentOrXMLHttpRequestBodyInit::ArrayBuffer(ref typedarray)) => {
|
||||||
let bytes = typedarray.to_vec();
|
let bytes = typedarray.to_vec();
|
||||||
let total_bytes = bytes.len();
|
let total_bytes = bytes.len();
|
||||||
let global = self.global();
|
let global = self.global();
|
||||||
|
@ -611,7 +611,7 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
|
||||||
source: BodySource::Object,
|
source: BodySource::Object,
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
Some(DocumentOrBodyInit::ArrayBufferView(ref typedarray)) => {
|
Some(DocumentOrXMLHttpRequestBodyInit::ArrayBufferView(ref typedarray)) => {
|
||||||
let bytes = typedarray.to_vec();
|
let bytes = typedarray.to_vec();
|
||||||
let total_bytes = bytes.len();
|
let total_bytes = bytes.len();
|
||||||
let global = self.global();
|
let global = self.global();
|
||||||
|
@ -623,25 +623,6 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
|
||||||
source: BodySource::Object,
|
source: BodySource::Object,
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
Some(DocumentOrBodyInit::ReadableStream(ref stream)) => {
|
|
||||||
if self.sync.get() {
|
|
||||||
warn!("Sync XHR with ReadableStream as body not supported");
|
|
||||||
None
|
|
||||||
} else {
|
|
||||||
if stream.is_locked() || stream.is_disturbed() {
|
|
||||||
return Err(Error::Type(
|
|
||||||
"The body's stream is disturbed or locked".to_string(),
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
Some(ExtractedBody {
|
|
||||||
stream: stream.clone(),
|
|
||||||
total_bytes: None,
|
|
||||||
content_type: None,
|
|
||||||
source: BodySource::Null,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
},
|
|
||||||
None => None,
|
None => None,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -725,7 +706,8 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
|
||||||
match content_type {
|
match content_type {
|
||||||
Some(content_type) => {
|
Some(content_type) => {
|
||||||
let encoding = match data {
|
let encoding = match data {
|
||||||
Some(DocumentOrBodyInit::String(_)) | Some(DocumentOrBodyInit::Document(_)) =>
|
Some(DocumentOrXMLHttpRequestBodyInit::String(_)) |
|
||||||
|
Some(DocumentOrXMLHttpRequestBodyInit::Document(_)) =>
|
||||||
// XHR spec differs from http, and says UTF-8 should be in capitals,
|
// XHR spec differs from http, and says UTF-8 should be in capitals,
|
||||||
// instead of "utf-8", which is what Hyper defaults to. So not
|
// instead of "utf-8", which is what Hyper defaults to. So not
|
||||||
// using content types provided by Hyper.
|
// using content types provided by Hyper.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue