aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/net/http_loader.rs13
-rw-r--r--components/net/resource_task.rs14
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) => {