read cookie_jar, hsts_list, auth_cache, and local_data from file if profile_dir option is present

This commit is contained in:
Daniel 2016-04-21 14:00:44 -04:00
parent ec9e1fe7e6
commit d9c32b273a
8 changed files with 60 additions and 81 deletions

View file

@ -33,7 +33,7 @@ git = "https://github.com/servo/ipc-channel"
git = "https://github.com/servo/webrender_traits" git = "https://github.com/servo/webrender_traits"
[dependencies] [dependencies]
cookie = "0.2" cookie = { version = "0.2.4", features = [ "serialize-rustc" ] }
flate2 = "0.2.0" flate2 = "0.2.0"
hyper = { version = "0.9", features = [ "serde-serialization" ] } hyper = { version = "0.9", features = [ "serde-serialization" ] }
immeta = "0.3.1" immeta = "0.3.1"

View file

@ -8,7 +8,6 @@
use cookie_rs; use cookie_rs;
use net_traits::CookieSource; use net_traits::CookieSource;
use pub_domains::PUB_DOMAINS; use pub_domains::PUB_DOMAINS;
use rustc_serialize::{Encodable, Encoder};
use std::borrow::ToOwned; use std::borrow::ToOwned;
use std::net::{Ipv4Addr, Ipv6Addr}; use std::net::{Ipv4Addr, Ipv6Addr};
use time::{Tm, now, at, Duration}; use time::{Tm, now, at, Duration};
@ -17,7 +16,7 @@ use url::Url;
/// A stored cookie that wraps the definition in cookie-rs. This is used to implement /// A stored cookie that wraps the definition in cookie-rs. This is used to implement
/// various behaviours defined in the spec that rely on an associated request URL, /// various behaviours defined in the spec that rely on an associated request URL,
/// which cookie-rs and hyper's header parsing do not support. /// which cookie-rs and hyper's header parsing do not support.
#[derive(Clone, Debug)] #[derive(Clone, Debug, RustcDecodable, RustcEncodable)]
pub struct Cookie { pub struct Cookie {
pub cookie: cookie_rs::Cookie, pub cookie: cookie_rs::Cookie,
pub host_only: bool, pub host_only: bool,
@ -174,65 +173,3 @@ impl Cookie {
true true
} }
} }
impl Encodable for Cookie {
fn encode<S: Encoder>(&self, s: &mut S) -> Result<(), S::Error> {
s.emit_struct("Cookie", 6, |e| {
try!(e.emit_struct_field("cookie", 0, |e| RsCookie(self.cookie.clone()).encode(e)));
try!(e.emit_struct_field("host_only", 1, |e| self.host_only.encode(e)));
try!(e.emit_struct_field("persistent", 2, |e| self.persistent.encode(e)));
try!(e.emit_struct_field("creation_time", 3, |e| Time(self.creation_time).encode(e)));
try!(e.emit_struct_field("last_access", 4, |e| Time(self.last_access).encode(e)));
match self.expiry_time {
Some(time) => try!(e.emit_struct_field("expiry_time", 5, |e| Time(time).encode(e))),
None => {},
}
Ok(())
})
}
}
struct Time(Tm);
impl Encodable for Time {
fn encode<S: Encoder>(&self, s: &mut S) -> Result<(), S::Error> {
let Time(time) = *self;
s.emit_struct("Time", 11, |e| {
try!(e.emit_struct_field("tm_sec", 0, |e| time.tm_sec.encode(e)));
try!(e.emit_struct_field("tm_min", 1, |e| time.tm_min.encode(e)));
try!(e.emit_struct_field("tm_hour", 2, |e| time.tm_hour.encode(e)));
try!(e.emit_struct_field("tm_mday", 3, |e| time.tm_mday.encode(e)));
try!(e.emit_struct_field("tm_mon", 4, |e| time.tm_mon.encode(e)));
try!(e.emit_struct_field("tm_year", 5, |e| time.tm_year.encode(e)));
try!(e.emit_struct_field("tm_wday", 6, |e| time.tm_wday.encode(e)));
try!(e.emit_struct_field("tm_yday", 7, |e| time.tm_yday.encode(e)));
try!(e.emit_struct_field("tm_isdst", 8, |e| time.tm_isdst.encode(e)));
try!(e.emit_struct_field("tm_utcoff", 9, |e| time.tm_utcoff.encode(e)));
try!(e.emit_struct_field("tm_nsec", 10, |e| time.tm_nsec.encode(e)));
Ok(())
})
}
}
struct RsCookie(cookie_rs::Cookie);
impl Encodable for RsCookie {
fn encode<S: Encoder>(&self, s: &mut S) -> Result<(), S::Error> {
let RsCookie(ref rs_cookie) = *self;
s.emit_struct("RsCookie", 9, |e| {
try!(e.emit_struct_field("name", 0, |e| rs_cookie.name.encode(e)));
try!(e.emit_struct_field("value", 1, |e| rs_cookie.value.encode(e)));
match rs_cookie.expires {
Some(time) => try!(e.emit_struct_field("expires", 2, |e| Time(time).encode(e))),
None => {},
}
try!(e.emit_struct_field("max_age", 3, |e| rs_cookie.max_age.encode(e)));
try!(e.emit_struct_field("domain", 4, |e| rs_cookie.domain.encode(e)));
try!(e.emit_struct_field("path", 5, |e| rs_cookie.path.encode(e)));
try!(e.emit_struct_field("secure", 6, |e| rs_cookie.secure.encode(e)));
try!(e.emit_struct_field("httponly", 7, |e| rs_cookie.httponly.encode(e)));
try!(e.emit_struct_field("custom", 8, |e| rs_cookie.custom.encode(e)));
Ok(())
})
}
}

View file

@ -11,7 +11,7 @@ use rustc_serialize::{Encodable, Encoder};
use std::cmp::Ordering; use std::cmp::Ordering;
use url::Url; use url::Url;
#[derive(RustcEncodable, Clone)] #[derive(Clone, RustcDecodable, RustcEncodable)]
pub struct CookieStorage { pub struct CookieStorage {
version: u32, version: u32,
cookies: Vec<Cookie> cookies: Vec<Cookie>

View file

@ -22,8 +22,8 @@ use net_traits::ProgressMsg::Done;
use net_traits::{AsyncResponseTarget, Metadata, ProgressMsg, ResourceThread, ResponseAction}; use net_traits::{AsyncResponseTarget, Metadata, ProgressMsg, ResourceThread, ResponseAction};
use net_traits::{ControlMsg, CookieSource, LoadConsumer, LoadData, LoadResponse, ResourceId}; use net_traits::{ControlMsg, CookieSource, LoadConsumer, LoadData, LoadResponse, ResourceId};
use net_traits::{NetworkError, WebSocketCommunicate, WebSocketConnectData}; use net_traits::{NetworkError, WebSocketCommunicate, WebSocketConnectData};
use rustc_serialize::Encodable;
use rustc_serialize::json; use rustc_serialize::json;
use rustc_serialize::{Decodable, Encodable};
use std::borrow::ToOwned; use std::borrow::ToOwned;
use std::boxed::FnBox; use std::boxed::FnBox;
use std::cell::Cell; use std::cell::Cell;
@ -219,6 +219,34 @@ impl ResourceChannelManager {
} }
} }
pub fn read_json_from_file<T: Decodable>(data: &mut T, profile_dir: &str, filename: &str) {
let path = Path::new(profile_dir).join(filename);
let display = path.display();
let mut file = match File::open(&path) {
Err(why) => {
warn!("couldn't open {}: {}", display, Error::description(&why));
return;
},
Ok(file) => file,
};
let mut string_buffer: String = String::new();
match file.read_to_string(&mut string_buffer) {
Err(why) => {
panic!("couldn't read from {}: {}", display,
Error::description(&why))
},
Ok(_) => println!("successfully read from {}", display),
}
match json::decode(&string_buffer) {
Ok(decoded_buffer) => *data = decoded_buffer,
Err(why) => warn!("Could not decode buffer{}", why),
}
}
pub fn write_json_to_file<T: Encodable>(data: &T, profile_dir: &str, filename: &str) { pub fn write_json_to_file<T: Encodable>(data: &T, profile_dir: &str, filename: &str) {
let json_encoded: String; let json_encoded: String;
match json::encode(&data) { match json::encode(&data) {
@ -343,12 +371,19 @@ pub struct ResourceManager {
impl ResourceManager { impl ResourceManager {
pub fn new(user_agent: String, pub fn new(user_agent: String,
hsts_list: HstsList, mut hsts_list: HstsList,
devtools_channel: Option<Sender<DevtoolsControlMsg>>) -> ResourceManager { devtools_channel: Option<Sender<DevtoolsControlMsg>>) -> ResourceManager {
let mut auth_cache = AuthCache::new();
let mut cookie_jar = CookieStorage::new();
if let Some(ref profile_dir) = opts::get().profile_dir {
read_json_from_file(&mut auth_cache, profile_dir, "auth_cache.json");
read_json_from_file(&mut hsts_list, profile_dir, "hsts_list.json");
read_json_from_file(&mut cookie_jar, profile_dir, "cookie_jar.json");
}
ResourceManager { ResourceManager {
user_agent: user_agent, user_agent: user_agent,
cookie_jar: Arc::new(RwLock::new(CookieStorage::new())), cookie_jar: Arc::new(RwLock::new(cookie_jar)),
auth_cache: Arc::new(RwLock::new(AuthCache::new())), auth_cache: Arc::new(RwLock::new(auth_cache)),
mime_classifier: Arc::new(MIMEClassifier::new()), mime_classifier: Arc::new(MIMEClassifier::new()),
devtools_chan: devtools_channel, devtools_chan: devtools_channel,
hsts_list: Arc::new(RwLock::new(hsts_list)), hsts_list: Arc::new(RwLock::new(hsts_list)),

View file

@ -37,10 +37,14 @@ struct StorageManager {
impl StorageManager { impl StorageManager {
fn new(port: IpcReceiver<StorageThreadMsg>) -> StorageManager { fn new(port: IpcReceiver<StorageThreadMsg>) -> StorageManager {
let mut local_data = HashMap::new();
if let Some(ref profile_dir) = opts::get().profile_dir {
resource_thread::read_json_from_file(&mut local_data, profile_dir, "local_data.json");
}
StorageManager { StorageManager {
port: port, port: port,
session_data: HashMap::new(), session_data: HashMap::new(),
local_data: HashMap::new(), local_data: local_data,
} }
} }
} }

View file

@ -316,7 +316,7 @@ dependencies = [
[[package]] [[package]]
name = "cookie" name = "cookie"
version = "0.2.3" version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [ dependencies = [
"openssl 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", "openssl 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)",
@ -886,7 +886,7 @@ name = "hyper"
version = "0.9.1" version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [ dependencies = [
"cookie 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "cookie 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
"httparse 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "httparse 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"language-tags 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "language-tags 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1270,7 +1270,7 @@ name = "net"
version = "0.0.1" version = "0.0.1"
dependencies = [ dependencies = [
"brotli 0.3.20 (git+https://github.com/ende76/brotli-rs)", "brotli 0.3.20 (git+https://github.com/ende76/brotli-rs)",
"cookie 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "cookie 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
"devtools_traits 0.0.1", "devtools_traits 0.0.1",
"flate2 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "flate2 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1312,7 +1312,7 @@ dependencies = [
name = "net_tests" name = "net_tests"
version = "0.0.1" version = "0.0.1"
dependencies = [ dependencies = [
"cookie 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "cookie 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
"devtools_traits 0.0.1", "devtools_traits 0.0.1",
"flate2 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "flate2 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2153,6 +2153,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [ dependencies = [
"kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
] ]

7
ports/cef/Cargo.lock generated
View file

@ -286,7 +286,7 @@ dependencies = [
[[package]] [[package]]
name = "cookie" name = "cookie"
version = "0.2.3" version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [ dependencies = [
"openssl 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", "openssl 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)",
@ -806,7 +806,7 @@ name = "hyper"
version = "0.9.1" version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [ dependencies = [
"cookie 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "cookie 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
"httparse 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "httparse 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"language-tags 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "language-tags 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1183,7 +1183,7 @@ name = "net"
version = "0.0.1" version = "0.0.1"
dependencies = [ dependencies = [
"brotli 0.3.20 (git+https://github.com/ende76/brotli-rs)", "brotli 0.3.20 (git+https://github.com/ende76/brotli-rs)",
"cookie 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "cookie 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
"devtools_traits 0.0.1", "devtools_traits 0.0.1",
"flate2 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "flate2 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2030,6 +2030,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [ dependencies = [
"kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
] ]

7
ports/gonk/Cargo.lock generated
View file

@ -279,7 +279,7 @@ dependencies = [
[[package]] [[package]]
name = "cookie" name = "cookie"
version = "0.2.3" version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [ dependencies = [
"openssl 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)", "openssl 0.7.8 (registry+https://github.com/rust-lang/crates.io-index)",
@ -789,7 +789,7 @@ name = "hyper"
version = "0.9.1" version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [ dependencies = [
"cookie 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "cookie 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
"httparse 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "httparse 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"language-tags 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "language-tags 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1166,7 +1166,7 @@ name = "net"
version = "0.0.1" version = "0.0.1"
dependencies = [ dependencies = [
"brotli 0.3.20 (git+https://github.com/ende76/brotli-rs)", "brotli 0.3.20 (git+https://github.com/ende76/brotli-rs)",
"cookie 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", "cookie 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
"devtools_traits 0.0.1", "devtools_traits 0.0.1",
"flate2 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", "flate2 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)", "hyper 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2011,6 +2011,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [ dependencies = [
"kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
] ]