diff options
-rw-r--r-- | components/net/http_loader.rs | 13 | ||||
-rw-r--r-- | components/net/resource_task.rs | 14 |
2 files changed, 17 insertions, 10 deletions
diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs index de1be171e8f..f6590ab2292 100644 --- a/components/net/http_loader.rs +++ b/components/net/http_loader.rs @@ -11,7 +11,7 @@ use log; use std::collections::HashSet; use file_loader; use hyper::client::Request; -use hyper::header::common::{ContentLength, ContentType, Host, Location, SetCookie}; +use hyper::header::common::{ContentLength, ContentType, Host, Location}; use hyper::HttpError; use hyper::method::Method; use hyper::net::HttpConnector; @@ -189,9 +189,14 @@ reason: \"certificate verify failed\" }]"; } } - if let Some(&SetCookie(ref cookies)) = response.headers.get::<SetCookie>() { - cookies_chan.send(ControlMsg::SetCookies(cookies.clone(), url.clone(), - CookieSource::HTTP)); + if let Some(cookies) = response.headers.get_raw("set-cookie") { + for cookie in cookies.iter() { + if let Ok(cookies) = String::from_utf8(cookie.clone()) { + cookies_chan.send(ControlMsg::SetCookiesForUrl(url.clone(), + cookies, + CookieSource::HTTP)); + } + } } if response.status.class() == StatusClass::Redirection { diff --git a/components/net/resource_task.rs b/components/net/resource_task.rs index 1f100a514cf..b9c22b996e8 100644 --- a/components/net/resource_task.rs +++ b/components/net/resource_task.rs @@ -10,14 +10,13 @@ use file_loader; use http_loader; use sniffer_task; use sniffer_task::SnifferTask; -use cookie_rs::Cookie; use cookie_storage::{CookieStorage, CookieSource}; use cookie; use util::task::spawn_named; use hyper::header::common::UserAgent; -use hyper::header::Headers; +use hyper::header::{Headers, Header, SetCookie}; use hyper::http::RawStatus; use hyper::method::Method; use hyper::mime::{Mime, Attr}; @@ -31,7 +30,7 @@ pub enum ControlMsg { /// Request the data associated with a particular URL Load(LoadData), /// Store a set of cookies for a given originating URL - SetCookies(Vec<Cookie>, Url, CookieSource), + SetCookiesForUrl(Url, String, CookieSource), /// Retrieve the stored cookies for a given URL GetCookiesForUrl(Url, Sender<Option<String>>, CookieSource), Exit @@ -229,11 +228,14 @@ impl ResourceManager { ControlMsg::Load(load_data) => { self.load(load_data) } - ControlMsg::SetCookies(vector, request, source) => { - for cookie in vector.into_iter() { + ControlMsg::SetCookiesForUrl(request, cookies, source) => { + let header = Header::parse_header([cookies.into_bytes()].as_slice()); + if let Some(SetCookie(cookies)) = header { + for cookie in cookies.into_iter() { if let Some(cookie) = cookie::Cookie::new_wrapped(cookie, &request, source) { - self.cookie_storage.push(cookie, source); + self.cookie_storage.push(cookie, source); } + } } } ControlMsg::GetCookiesForUrl(url, consumer, source) => { |