aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
authorTim Neumann <mail@timnn.me>2016-02-16 20:57:56 +0100
committerTim Neumann <mail@timnn.me>2016-02-23 15:21:35 +0100
commit746f7dd29eb5d71b211a48b3b5a2b70d7a7f340e (patch)
treebad110f87f177e4ae2b64080fcbf49b606053723 /components/script
parent3af3926d632cf913bb55e944df54e744e0b52534 (diff)
downloadservo-746f7dd29eb5d71b211a48b3b5a2b70d7a7f340e.tar.gz
servo-746f7dd29eb5d71b211a48b3b5a2b70d7a7f340e.zip
move method from ByteString to module where it was used
Diffstat (limited to 'components/script')
-rw-r--r--components/script/dom/bindings/str.rs64
-rw-r--r--components/script/dom/xmlhttprequest.rs66
2 files changed, 65 insertions, 65 deletions
diff --git a/components/script/dom/bindings/str.rs b/components/script/dom/bindings/str.rs
index 021d154191a..6276c2c19bd 100644
--- a/components/script/dom/bindings/str.rs
+++ b/components/script/dom/bindings/str.rs
@@ -48,70 +48,6 @@ impl ByteString {
pub fn to_lower(&self) -> ByteString {
ByteString::new(self.0.to_ascii_lowercase())
}
-
- /// Returns whether `self` is a `field-value`, as defined by
- /// [RFC 2616](http://tools.ietf.org/html/rfc2616#page-32).
- pub fn is_field_value(&self) -> bool {
- // Classifications of characters necessary for the [CRLF] (SP|HT) rule
- #[derive(PartialEq)]
- enum PreviousCharacter {
- Other,
- CR,
- LF,
- SPHT, // SP or HT
- }
- let mut prev = PreviousCharacter::Other; // The previous character
- self.0.iter().all(|&x| {
- // http://tools.ietf.org/html/rfc2616#section-2.2
- match x {
- 13 => { // CR
- if prev == PreviousCharacter::Other || prev == PreviousCharacter::SPHT {
- prev = PreviousCharacter::CR;
- true
- } else {
- false
- }
- },
- 10 => { // LF
- if prev == PreviousCharacter::CR {
- prev = PreviousCharacter::LF;
- true
- } else {
- false
- }
- },
- 32 => { // SP
- if prev == PreviousCharacter::LF || prev == PreviousCharacter::SPHT {
- prev = PreviousCharacter::SPHT;
- true
- } else if prev == PreviousCharacter::Other {
- // Counts as an Other here, since it's not preceded by a CRLF
- // SP is not a CTL, so it can be used anywhere
- // though if used immediately after a CR the CR is invalid
- // We don't change prev since it's already Other
- true
- } else {
- false
- }
- },
- 9 => { // HT
- if prev == PreviousCharacter::LF || prev == PreviousCharacter::SPHT {
- prev = PreviousCharacter::SPHT;
- true
- } else {
- false
- }
- },
- 0...31 | 127 => false, // CTLs
- x if x > 127 => false, // non ASCII
- _ if prev == PreviousCharacter::Other || prev == PreviousCharacter::SPHT => {
- prev = PreviousCharacter::Other;
- true
- },
- _ => false // Previous character was a CR/LF but not part of the [CRLF] (SP|HT) rule
- }
- })
- }
}
impl Into<Vec<u8>> for ByteString {
diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs
index 947835f11b9..45fa9e1f58f 100644
--- a/components/script/dom/xmlhttprequest.rs
+++ b/components/script/dom/xmlhttprequest.rs
@@ -413,7 +413,7 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
}
// FIXME(#9548): Step 3. Normalize value
// Step 4
- if !is_token(&name) || !value.is_field_value() {
+ if !is_token(&name) || !is_field_value(&value) {
return Err(Error::Syntax);
}
let name_lower = name.to_lower();
@@ -1388,3 +1388,67 @@ impl Extractable for SendParam {
}
}
}
+
+/// Returns whether `bs` is a `field-value`, as defined by
+/// [RFC 2616](http://tools.ietf.org/html/rfc2616#page-32).
+pub fn is_field_value(slice: &[u8]) -> bool {
+ // Classifications of characters necessary for the [CRLF] (SP|HT) rule
+ #[derive(PartialEq)]
+ enum PreviousCharacter {
+ Other,
+ CR,
+ LF,
+ SPHT, // SP or HT
+ }
+ let mut prev = PreviousCharacter::Other; // The previous character
+ slice.iter().all(|&x| {
+ // http://tools.ietf.org/html/rfc2616#section-2.2
+ match x {
+ 13 => { // CR
+ if prev == PreviousCharacter::Other || prev == PreviousCharacter::SPHT {
+ prev = PreviousCharacter::CR;
+ true
+ } else {
+ false
+ }
+ },
+ 10 => { // LF
+ if prev == PreviousCharacter::CR {
+ prev = PreviousCharacter::LF;
+ true
+ } else {
+ false
+ }
+ },
+ 32 => { // SP
+ if prev == PreviousCharacter::LF || prev == PreviousCharacter::SPHT {
+ prev = PreviousCharacter::SPHT;
+ true
+ } else if prev == PreviousCharacter::Other {
+ // Counts as an Other here, since it's not preceded by a CRLF
+ // SP is not a CTL, so it can be used anywhere
+ // though if used immediately after a CR the CR is invalid
+ // We don't change prev since it's already Other
+ true
+ } else {
+ false
+ }
+ },
+ 9 => { // HT
+ if prev == PreviousCharacter::LF || prev == PreviousCharacter::SPHT {
+ prev = PreviousCharacter::SPHT;
+ true
+ } else {
+ false
+ }
+ },
+ 0...31 | 127 => false, // CTLs
+ x if x > 127 => false, // non ASCII
+ _ if prev == PreviousCharacter::Other || prev == PreviousCharacter::SPHT => {
+ prev = PreviousCharacter::Other;
+ true
+ },
+ _ => false // Previous character was a CR/LF but not part of the [CRLF] (SP|HT) rule
+ }
+ })
+}