diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2016-03-23 00:12:57 +0530 |
---|---|---|
committer | bors-servo <lbergstrom+bors@mozilla.com> | 2016-03-23 00:12:57 +0530 |
commit | 50193e9119c567c2c511a53749ff188b9c7ec49e (patch) | |
tree | bfb19eae5a59f80cac79df9e34a4e3841363e90e | |
parent | 805aa3a3ab6506cd7178cebf7886c306802137a5 (diff) | |
parent | f55b0765d17c06bccd7bf411563e3a404de0a56a (diff) | |
download | servo-50193e9119c567c2c511a53749ff188b9c7ec49e.tar.gz servo-50193e9119c567c2c511a53749ff188b9c7ec49e.zip |
Auto merge of #9518 - shinglyu:responseurl, r=jdm
Implemented XMLHttpRequest.responseURL
Resolves #8830
<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.svg" height="40" alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/9518)
<!-- Reviewable:end -->
4 files changed, 49 insertions, 9 deletions
diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs index 65ccb435dbf..8d1456a73ae 100644 --- a/components/script/dom/xmlhttprequest.rs +++ b/components/script/dom/xmlhttprequest.rs @@ -118,7 +118,7 @@ pub struct XMLHttpRequest { timeout: Cell<u32>, with_credentials: Cell<bool>, upload: JS<XMLHttpRequestUpload>, - response_url: String, + response_url: DOMRefCell<String>, status: Cell<u16>, status_text: DOMRefCell<ByteString>, response: DOMRefCell<ByteString>, @@ -160,7 +160,7 @@ impl XMLHttpRequest { timeout: Cell::new(0u32), with_credentials: Cell::new(false), upload: JS::from_rooted(&XMLHttpRequestUpload::new(global)), - response_url: String::from(""), + response_url: DOMRefCell::new(String::from("")), status: Cell::new(0), status_text: DOMRefCell::new(ByteString::new(vec!())), response: DOMRefCell::new(ByteString::new(vec!())), @@ -691,7 +691,7 @@ impl XMLHttpRequestMethods for XMLHttpRequest { // https://xhr.spec.whatwg.org/#the-responseurl-attribute fn ResponseURL(&self) -> USVString { - USVString(self.response_url.clone()) + USVString(self.response_url.borrow().clone()) } // https://xhr.spec.whatwg.org/#the-status-attribute @@ -876,6 +876,8 @@ impl XMLHttpRequest { } } + *self.response_url.borrow_mut() = metadata.final_url.serialize_no_fragment(); + // XXXManishearth Clear cache entries in case of a network error self.process_partial_response(XHRProgress::HeadersReceived(gen_id, metadata.headers, @@ -980,6 +982,7 @@ impl XMLHttpRequest { // Subsubsteps 5-7 self.send_flag.set(false); + self.change_ready_state(XMLHttpRequestState::Done); return_if_fetch_was_terminated!(); // Subsubsteps 10-12 diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index feefdc2077e..b317fc48432 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -34794,6 +34794,12 @@ "deleted": [], "items": { "testharness": { + "XMLHttpRequest/responseurl.html": [ + { + "path": "XMLHttpRequest/responseurl.html", + "url": "/XMLHttpRequest/responseurl.html" + } + ], "html/semantics/forms/textfieldselection/selection-after-content-change.html": [ { "path": "html/semantics/forms/textfieldselection/selection-after-content-change.html", diff --git a/tests/wpt/metadata/XMLHttpRequest/responsexml-document-properties.htm.ini b/tests/wpt/metadata/XMLHttpRequest/responsexml-document-properties.htm.ini index 743902575c9..32ef6273117 100644 --- a/tests/wpt/metadata/XMLHttpRequest/responsexml-document-properties.htm.ini +++ b/tests/wpt/metadata/XMLHttpRequest/responsexml-document-properties.htm.ini @@ -3,12 +3,6 @@ [domain] expected: FAIL - [URL] - expected: FAIL - - [documentURI] - expected: FAIL - [referrer] expected: FAIL diff --git a/tests/wpt/web-platform-tests/XMLHttpRequest/responseurl.html b/tests/wpt/web-platform-tests/XMLHttpRequest/responseurl.html new file mode 100644 index 00000000000..b730e045d8d --- /dev/null +++ b/tests/wpt/web-platform-tests/XMLHttpRequest/responseurl.html @@ -0,0 +1,37 @@ +<!doctype html> +<html> + <head> + <title>XMLHttpRequest: responseURL test</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <link rel="help" href="https://xhr.spec.whatwg.org/#the-responseurl-attribute"/> + </head> + <body> + <div id="log"></div> + <script> + test(function() { + var client = new XMLHttpRequest() + assert_equals(client.responseURL, "") + + client.open("GET", "foo.html", false) + client.send() + + expected = location.href.replace(/[^/]*$/, 'foo.html') + assert_equals(client.status, 404) + assert_equals(client.responseURL, expected) + }, "404 response has proper responseURL") + test(function() { + var client = new XMLHttpRequest() + assert_equals(client.responseURL, "") + + target = "image.gif" + client.open("GET", "resources/redirect.py?location=" + target, false) + client.send() + + expected = location.href.replace(/[^/]*$/, "resources/" + target) + assert_equals(client.status, 200) + assert_equals(client.responseURL, expected) + }, "Redirected response has proper responseURL") + </script> + </body> +</html> |