aboutsummaryrefslogtreecommitdiffstats
path: root/components/net/resource_thread.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/net/resource_thread.rs')
-rw-r--r--components/net/resource_thread.rs43
1 files changed, 39 insertions, 4 deletions
diff --git a/components/net/resource_thread.rs b/components/net/resource_thread.rs
index 77891931120..622ac054085 100644
--- a/components/net/resource_thread.rs
+++ b/components/net/resource_thread.rs
@@ -22,8 +22,8 @@ use net_traits::ProgressMsg::Done;
use net_traits::{AsyncResponseTarget, Metadata, ProgressMsg, ResourceThread, ResponseAction};
use net_traits::{ControlMsg, CookieSource, LoadConsumer, LoadData, LoadResponse, ResourceId};
use net_traits::{NetworkError, WebSocketCommunicate, WebSocketConnectData};
-use rustc_serialize::Encodable;
use rustc_serialize::json;
+use rustc_serialize::{Decodable, Encodable};
use std::borrow::ToOwned;
use std::boxed::FnBox;
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) {
let json_encoded: String;
match json::encode(&data) {
@@ -343,12 +371,19 @@ pub struct ResourceManager {
impl ResourceManager {
pub fn new(user_agent: String,
- hsts_list: HstsList,
+ mut hsts_list: HstsList,
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 {
user_agent: user_agent,
- cookie_jar: Arc::new(RwLock::new(CookieStorage::new())),
- auth_cache: Arc::new(RwLock::new(AuthCache::new())),
+ cookie_jar: Arc::new(RwLock::new(cookie_jar)),
+ auth_cache: Arc::new(RwLock::new(auth_cache)),
mime_classifier: Arc::new(MIMEClassifier::new()),
devtools_chan: devtools_channel,
hsts_list: Arc::new(RwLock::new(hsts_list)),