aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2016-03-23 00:12:57 +0530
committerbors-servo <lbergstrom+bors@mozilla.com>2016-03-23 00:12:57 +0530
commit50193e9119c567c2c511a53749ff188b9c7ec49e (patch)
treebfb19eae5a59f80cac79df9e34a4e3841363e90e
parent805aa3a3ab6506cd7178cebf7886c306802137a5 (diff)
parentf55b0765d17c06bccd7bf411563e3a404de0a56a (diff)
downloadservo-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 -->
-rw-r--r--components/script/dom/xmlhttprequest.rs9
-rw-r--r--tests/wpt/metadata/MANIFEST.json6
-rw-r--r--tests/wpt/metadata/XMLHttpRequest/responsexml-document-properties.htm.ini6
-rw-r--r--tests/wpt/web-platform-tests/XMLHttpRequest/responseurl.html37
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>