Merge pull request #920 from gsquire/referrer-update
Referrer-Policy Header
This commit is contained in:
		| @@ -54,19 +54,23 @@ impl Header for ReferrerPolicy { | |||||||
|  |  | ||||||
|     fn parse_header(raw: &Raw) -> ::Result<ReferrerPolicy> { |     fn parse_header(raw: &Raw) -> ::Result<ReferrerPolicy> { | ||||||
|         use self::ReferrerPolicy::*; |         use self::ReferrerPolicy::*; | ||||||
|         parsing::from_one_raw_str(raw).and_then(|s: String| { |         // See https://www.w3.org/TR/referrer-policy/#determine-policy-for-token | ||||||
|             let slice = &s.to_ascii_lowercase()[..]; |         let headers: Vec<String> = try!(parsing::from_comma_delimited(raw)); | ||||||
|             // See https://www.w3.org/TR/referrer-policy/#determine-policy-for-token |  | ||||||
|  |         for h in headers.iter().rev() { | ||||||
|  |             let slice = &h.to_ascii_lowercase()[..]; | ||||||
|             match slice { |             match slice { | ||||||
|                 "no-referrer" | "never" => Ok(NoReferrer), |                 "no-referrer" | "never" => return Ok(NoReferrer), | ||||||
|                 "no-referrer-when-downgrade" | "default" => Ok(NoReferrerWhenDowngrade), |                 "no-referrer-when-downgrade" | "default" => return Ok(NoReferrerWhenDowngrade), | ||||||
|                 "same-origin" => Ok(SameOrigin), |                 "same-origin" => return Ok(SameOrigin), | ||||||
|                 "origin" => Ok(Origin), |                 "origin" => return Ok(Origin), | ||||||
|                 "origin-when-cross-origin" => Ok(OriginWhenCrossOrigin), |                 "origin-when-cross-origin" => return Ok(OriginWhenCrossOrigin), | ||||||
|                 "unsafe-url" | "always" => Ok(UnsafeUrl), |                 "unsafe-url" | "always" => return Ok(UnsafeUrl), | ||||||
|                 _ => Err(::Error::Header), |                 _ => continue, | ||||||
|             } |             } | ||||||
|         }) |         } | ||||||
|  |  | ||||||
|  |         Err(::Error::Header) | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { |     fn fmt_header(&self, f: &mut fmt::Formatter) -> fmt::Result { | ||||||
| @@ -90,3 +94,10 @@ fn test_parse_header() { | |||||||
|     let e: ::Result<ReferrerPolicy> = Header::parse_header(&"foobar".into()); |     let e: ::Result<ReferrerPolicy> = Header::parse_header(&"foobar".into()); | ||||||
|     assert!(e.is_err()); |     assert!(e.is_err()); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | #[test] | ||||||
|  | fn test_rightmost_header() { | ||||||
|  |     let a: ReferrerPolicy = Header::parse_header(&"same-origin, origin, foobar".into()).unwrap(); | ||||||
|  |     let b = ReferrerPolicy::Origin; | ||||||
|  |     assert_eq!(a, b); | ||||||
|  | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user