aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeith Yeung <kungfukeith11@gmail.com>2015-01-31 20:41:34 +0800
committerKeith Yeung <kungfukeith11@gmail.com>2015-02-02 23:51:36 +0800
commit2093291539b6011fd76733414d145e61c92c0814 (patch)
tree38bc92a71d0ee924933772fa295148917b1d72d8
parent2010fbf0ddabdaf3bcb52c5f2075e7d994fc63ec (diff)
downloadservo-2093291539b6011fd76733414d145e61c92c0814.tar.gz
servo-2093291539b6011fd76733414d145e61c92c0814.zip
Added error checking on XMLHttpRequest::setWithCredentials
-rw-r--r--components/script/dom/webidls/XMLHttpRequest.webidl1
-rw-r--r--components/script/dom/xmlhttprequest.rs17
-rw-r--r--tests/wpt/metadata/XMLHttpRequest/XMLHttpRequest-withCredentials.html.ini8
-rw-r--r--tests/wpt/metadata/XMLHttpRequest/XMLHttpRequest-withCredentials.worker.ini5
4 files changed, 16 insertions, 15 deletions
diff --git a/components/script/dom/webidls/XMLHttpRequest.webidl b/components/script/dom/webidls/XMLHttpRequest.webidl
index ba100ca23ad..6066ba9c17b 100644
--- a/components/script/dom/webidls/XMLHttpRequest.webidl
+++ b/components/script/dom/webidls/XMLHttpRequest.webidl
@@ -50,6 +50,7 @@ interface XMLHttpRequest : XMLHttpRequestEventTarget {
void setRequestHeader(ByteString name, ByteString value);
[SetterThrows]
attribute unsigned long timeout;
+ [SetterThrows]
attribute boolean withCredentials;
readonly attribute XMLHttpRequestUpload upload;
[Throws]
diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs
index 0f6e9551272..961125bf25b 100644
--- a/components/script/dom/xmlhttprequest.rs
+++ b/components/script/dom/xmlhttprequest.rs
@@ -489,8 +489,21 @@ impl<'a> XMLHttpRequestMethods for JSRef<'a, XMLHttpRequest> {
fn WithCredentials(self) -> bool {
self.with_credentials.get()
}
- fn SetWithCredentials(self, with_credentials: bool) {
- self.with_credentials.set(with_credentials);
+ // Spec for SetWithCredentials: https://xhr.spec.whatwg.org/#dom-xmlhttprequest-withcredentials
+ fn SetWithCredentials(self, with_credentials: bool) -> ErrorResult {
+ match self.ready_state.get() {
+ XMLHttpRequestState::HeadersReceived |
+ XMLHttpRequestState::Loading |
+ XMLHttpRequestState::XHRDone => Err(InvalidState),
+ _ if self.send_flag.get() => Err(InvalidState),
+ _ => match self.global.root() {
+ GlobalRoot::Window(_) if self.sync.get() => Err(InvalidAccess),
+ _ => {
+ self.with_credentials.set(with_credentials);
+ Ok(())
+ },
+ },
+ }
}
fn Upload(self) -> Temporary<XMLHttpRequestUpload> {
Temporary::new(self.upload)
diff --git a/tests/wpt/metadata/XMLHttpRequest/XMLHttpRequest-withCredentials.html.ini b/tests/wpt/metadata/XMLHttpRequest/XMLHttpRequest-withCredentials.html.ini
deleted file mode 100644
index 3c608dca283..00000000000
--- a/tests/wpt/metadata/XMLHttpRequest/XMLHttpRequest-withCredentials.html.ini
+++ /dev/null
@@ -1,8 +0,0 @@
-[XMLHttpRequest-withCredentials.html]
- type: testharness
- [setting on synchronous XHR]
- expected: FAIL
-
- [setting withCredentials when not in UNSENT, OPENED state]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/XMLHttpRequest/XMLHttpRequest-withCredentials.worker.ini b/tests/wpt/metadata/XMLHttpRequest/XMLHttpRequest-withCredentials.worker.ini
deleted file mode 100644
index 46e66dde6ba..00000000000
--- a/tests/wpt/metadata/XMLHttpRequest/XMLHttpRequest-withCredentials.worker.ini
+++ /dev/null
@@ -1,5 +0,0 @@
-[XMLHttpRequest-withCredentials.worker]
- type: testharness
- [setting withCredentials when not in UNSENT, OPENED state]
- expected: FAIL
-