Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

M1504: Implement support for missing XMLHttpRequest APIs #8182

Merged
merged 1 commit into from Nov 6, 2015
Merged
Changes from all commits
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Implement the overrideMimeType method for XMLHttpRequest

  • Loading branch information
jitendra29 committed Nov 6, 2015
commit ed809a60bf9ca1ac5babb1ed6575fd1c0c4f6600
@@ -45,6 +45,7 @@ use euclid::size::Size2D;
use html5ever::tree_builder::QuirksMode;
use hyper::header::Headers;
use hyper::method::Method;
use hyper::mime::Mime;
use ipc_channel::ipc::{IpcReceiver, IpcSender};
use js::jsapi::JS_CallUnbarrieredObjectTracer;
use js::jsapi::{GCTraceKindToAscii, Heap, JSGCTraceKind, JSObject, JSTracer, JS_CallObjectTracer, JS_CallValueTracer};
@@ -286,6 +287,7 @@ no_jsmanaged_fields!(PseudoElement);
no_jsmanaged_fields!(Length);
no_jsmanaged_fields!(ElementState);
no_jsmanaged_fields!(DOMString);
no_jsmanaged_fields!(Mime);

impl JSTraceable for Box<ScriptChan + Send> {
#[inline]
@@ -65,7 +65,8 @@ interface XMLHttpRequest : XMLHttpRequestEventTarget {
readonly attribute ByteString statusText;
ByteString? getResponseHeader(ByteString name);
ByteString getAllResponseHeaders();
// void overrideMimeType(DOMString mime);
[Throws]
void overrideMimeType(DOMString mime);
[SetterThrows]
attribute XMLHttpRequestResponseType responseType;
readonly attribute any response;
@@ -121,6 +121,9 @@ pub struct XMLHttpRequest {
response_xml: MutNullableHeap<JS<Document>>,
#[ignore_heap_size_of = "Defined in hyper"]
response_headers: DOMRefCell<Headers>,
override_mime_type: DOMRefCell<Option<Mime>>,
#[ignore_heap_size_of = "Defined in rust-encoding"]
override_charset: DOMRefCell<Option<EncodingRef>>,

// Associated concepts
request_method: DOMRefCell<Method>,
@@ -158,6 +161,8 @@ impl XMLHttpRequest {
response_type: Cell::new(_empty),
response_xml: Default::default(),
response_headers: DOMRefCell::new(Headers::new()),
override_mime_type: DOMRefCell::new(None),
override_charset: DOMRefCell::new(None),

request_method: DOMRefCell::new(Method::Get),
request_url: DOMRefCell::new(None),
@@ -644,6 +649,21 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
ByteString::new(self.filter_response_headers().to_string().into_bytes())
}

// https://xhr.spec.whatwg.org/#the-overridemimetype()-method
fn OverrideMimeType(&self, mime: DOMString) -> ErrorResult {
match self.ready_state.get() {
XMLHttpRequestState::Loading | XMLHttpRequestState::Done => return Err(Error::InvalidState),
_ => {},
}
let override_mime = try!(mime.parse::<Mime>().map_err(|_| Error::Syntax));
*self.override_mime_type.borrow_mut() = Some(override_mime.clone());
let value = override_mime.get_param(mime::Attr::Charset);
*self.override_charset.borrow_mut() = value.and_then(|value| {
encoding_from_whatwg_label(value)
});
Ok(())
}

// https://xhr.spec.whatwg.org/#the-responsetype-attribute
fn ResponseType(&self) -> XMLHttpRequestResponseType {
self.response_type.get()
@@ -987,6 +1007,7 @@ impl XMLHttpRequest {
}
}

//FIXME: add support for override_mime_type and override_charset
fn text_response(&self) -> String {
let mut encoding = UTF_8 as EncodingRef;
match self.response_headers.borrow().get() {
@@ -1,20 +1,11 @@
[interfaces.html]
type: testharness
[XMLHttpRequest interface: operation overrideMimeType(DOMString)]
expected: FAIL

[XMLHttpRequest interface: calling overrideMimeType(DOMString) on new XMLHttpRequest() with too few arguments must throw TypeError]
expected: FAIL

[FormData interface: new FormData() must inherit property "getAll" with the proper type (4)]
expected: FAIL

[FormData interface: new FormData(form) must inherit property "getAll" with the proper type (4)]
expected: FAIL

[XMLHttpRequest interface: new XMLHttpRequest() must inherit property "overrideMimeType" with the proper type (20)]
expected: FAIL

[FormData interface: operation getAll(USVString)]
expected: FAIL

This file was deleted.

This file was deleted.

This file was deleted.

@@ -1,5 +1,6 @@
[overridemimetype-open-state-force-utf-8.htm]
type: testharness
expected: CRASH
[XMLHttpRequest: overrideMimeType() in open state, enforcing UTF-8 encoding]
expected: FAIL

@@ -1,5 +1,6 @@
[overridemimetype-open-state-force-xml.htm]
type: testharness
expected: TIMEOUT
[XMLHttpRequest: overrideMimeType() in open state, XML MIME type with UTF-8 charset]
expected: FAIL
expected: TIMEOUT

@@ -1,5 +1,6 @@
[overridemimetype-unsent-state-force-shiftjis.htm]
type: testharness
expected: CRASH
[XMLHttpRequest: overrideMimeType() in unsent state, enforcing Shift-JIS encoding]
expected: FAIL

@@ -8,3 +8,6 @@
[XML document, windows-1252]
expected: FAIL

[HTML document, invalid UTF-8]
expected: FAIL

ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.