aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/bindings/trace.rs2
-rw-r--r--components/script/dom/webidls/XMLHttpRequest.webidl3
-rw-r--r--components/script/dom/xmlhttprequest.rs21
-rw-r--r--tests/wpt/metadata/XMLHttpRequest/interfaces.html.ini9
-rw-r--r--tests/wpt/metadata/XMLHttpRequest/overridemimetype-done-state.htm.ini5
-rw-r--r--tests/wpt/metadata/XMLHttpRequest/overridemimetype-invalid-mime-type.htm.ini5
-rw-r--r--tests/wpt/metadata/XMLHttpRequest/overridemimetype-loading-state.htm.ini5
-rw-r--r--tests/wpt/metadata/XMLHttpRequest/overridemimetype-open-state-force-utf-8.htm.ini1
-rw-r--r--tests/wpt/metadata/XMLHttpRequest/overridemimetype-open-state-force-xml.htm.ini3
-rw-r--r--tests/wpt/metadata/XMLHttpRequest/overridemimetype-unsent-state-force-shiftjis.htm.ini1
-rw-r--r--tests/wpt/metadata/XMLHttpRequest/send-entity-body-document.htm.ini3
11 files changed, 32 insertions, 26 deletions
diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs
index 6c2f9367350..df5c84d3778 100644
--- a/components/script/dom/bindings/trace.rs
+++ b/components/script/dom/bindings/trace.rs
@@ -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]
diff --git a/components/script/dom/webidls/XMLHttpRequest.webidl b/components/script/dom/webidls/XMLHttpRequest.webidl
index 3285e859691..aba1569957b 100644
--- a/components/script/dom/webidls/XMLHttpRequest.webidl
+++ b/components/script/dom/webidls/XMLHttpRequest.webidl
@@ -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;
diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs
index 10bc4cd8d57..e8025880f2e 100644
--- a/components/script/dom/xmlhttprequest.rs
+++ b/components/script/dom/xmlhttprequest.rs
@@ -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() {
diff --git a/tests/wpt/metadata/XMLHttpRequest/interfaces.html.ini b/tests/wpt/metadata/XMLHttpRequest/interfaces.html.ini
index af28495ed67..fcfceffb01d 100644
--- a/tests/wpt/metadata/XMLHttpRequest/interfaces.html.ini
+++ b/tests/wpt/metadata/XMLHttpRequest/interfaces.html.ini
@@ -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
diff --git a/tests/wpt/metadata/XMLHttpRequest/overridemimetype-done-state.htm.ini b/tests/wpt/metadata/XMLHttpRequest/overridemimetype-done-state.htm.ini
deleted file mode 100644
index 30899db29ab..00000000000
--- a/tests/wpt/metadata/XMLHttpRequest/overridemimetype-done-state.htm.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[overridemimetype-done-state.htm]
- type: testharness
- [XMLHttpRequest: overrideMimeType() in DONE state]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/XMLHttpRequest/overridemimetype-invalid-mime-type.htm.ini b/tests/wpt/metadata/XMLHttpRequest/overridemimetype-invalid-mime-type.htm.ini
deleted file mode 100644
index 8dc44ad2646..00000000000
--- a/tests/wpt/metadata/XMLHttpRequest/overridemimetype-invalid-mime-type.htm.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[overridemimetype-invalid-mime-type.htm]
- type: testharness
- [XMLHttpRequest: overrideMimeType() in unsent state, invalid MIME types]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/XMLHttpRequest/overridemimetype-loading-state.htm.ini b/tests/wpt/metadata/XMLHttpRequest/overridemimetype-loading-state.htm.ini
deleted file mode 100644
index 393a4127f9d..00000000000
--- a/tests/wpt/metadata/XMLHttpRequest/overridemimetype-loading-state.htm.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[overridemimetype-loading-state.htm]
- type: testharness
- [XMLHttpRequest: overrideMimeType() in LOADING state]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/XMLHttpRequest/overridemimetype-open-state-force-utf-8.htm.ini b/tests/wpt/metadata/XMLHttpRequest/overridemimetype-open-state-force-utf-8.htm.ini
index 3a367188e48..68d82dd90ec 100644
--- a/tests/wpt/metadata/XMLHttpRequest/overridemimetype-open-state-force-utf-8.htm.ini
+++ b/tests/wpt/metadata/XMLHttpRequest/overridemimetype-open-state-force-utf-8.htm.ini
@@ -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
diff --git a/tests/wpt/metadata/XMLHttpRequest/overridemimetype-open-state-force-xml.htm.ini b/tests/wpt/metadata/XMLHttpRequest/overridemimetype-open-state-force-xml.htm.ini
index ac428599347..adbc58f3fd3 100644
--- a/tests/wpt/metadata/XMLHttpRequest/overridemimetype-open-state-force-xml.htm.ini
+++ b/tests/wpt/metadata/XMLHttpRequest/overridemimetype-open-state-force-xml.htm.ini
@@ -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
diff --git a/tests/wpt/metadata/XMLHttpRequest/overridemimetype-unsent-state-force-shiftjis.htm.ini b/tests/wpt/metadata/XMLHttpRequest/overridemimetype-unsent-state-force-shiftjis.htm.ini
index c2b822106e0..be43cd7a16e 100644
--- a/tests/wpt/metadata/XMLHttpRequest/overridemimetype-unsent-state-force-shiftjis.htm.ini
+++ b/tests/wpt/metadata/XMLHttpRequest/overridemimetype-unsent-state-force-shiftjis.htm.ini
@@ -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
diff --git a/tests/wpt/metadata/XMLHttpRequest/send-entity-body-document.htm.ini b/tests/wpt/metadata/XMLHttpRequest/send-entity-body-document.htm.ini
index 3d2bb0da7ba..3922bf69def 100644
--- a/tests/wpt/metadata/XMLHttpRequest/send-entity-body-document.htm.ini
+++ b/tests/wpt/metadata/XMLHttpRequest/send-entity-body-document.htm.ini
@@ -8,3 +8,6 @@
[XML document, windows-1252]
expected: FAIL
+ [HTML document, invalid UTF-8]
+ expected: FAIL
+