Refactor Servo HSTS file loading, hard-fail if can't load.

Use constructor pattern instead of separate utility function.

Instead of allowing the Servo HSTS file loading to silently fail, we
should expect that file to always exist and be formatted correctly.
This commit is contained in:
Corey Farwell 2016-04-17 12:25:17 -04:00
parent d3b8b6472b
commit faa3d8724b
3 changed files with 11 additions and 14 deletions

View file

@ -70,6 +70,13 @@ impl HSTSList {
.and_then(|c| decode(c).ok())
}
pub fn from_servo_preload() -> HSTSList {
let file_bytes = read_resource_file("hsts_preload.json")
.expect("Could not find Servo HSTS preload file");
HSTSList::from_preload(&file_bytes)
.expect("Servo HSTS preload file is invalid")
}
pub fn is_host_secure(&self, host: &str) -> bool {
// TODO - Should this be faster than O(n)? The HSTS list is only a few
// hundred or maybe thousand entries...
@ -114,12 +121,6 @@ impl HSTSList {
}
}
pub fn preload_hsts_domains() -> Option<HSTSList> {
read_resource_file("hsts_preload.json")
.ok()
.and_then(|bytes| HSTSList::from_preload(&bytes))
}
pub fn secure_url(url: &Url) -> Url {
if &*url.scheme == "http" {
let mut secure_url = url.clone();

View file

@ -10,7 +10,7 @@ use cookie_storage::CookieStorage;
use data_loader;
use devtools_traits::{DevtoolsControlMsg};
use file_loader;
use hsts::{HSTSList, preload_hsts_domains};
use hsts::HSTSList;
use http_loader::{self, Connector, create_http_connector, HttpState};
use hyper::client::pool::Pool;
use hyper::header::{ContentType, Header, SetCookie};
@ -148,11 +148,7 @@ fn start_sending_opt(start_chan: LoadConsumer, metadata: Metadata) -> Result<Pro
/// Create a ResourceThread
pub fn new_resource_thread(user_agent: String,
devtools_chan: Option<Sender<DevtoolsControlMsg>>) -> ResourceThread {
let hsts_preload = match preload_hsts_domains() {
Some(list) => list,
None => HSTSList::new()
};
let hsts_preload = HSTSList::from_servo_preload();
let (setup_chan, setup_port) = ipc::channel().unwrap();
let setup_chan_clone = setup_chan.clone();
spawn_named("ResourceManager".to_owned(), move || {

View file

@ -2,8 +2,8 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use net::hsts::secure_url;
use net::hsts::{HSTSList, HSTSEntry};
use net::hsts::{secure_url, preload_hsts_domains};
use net_traits::IncludeSubdomains;
use time;
use url::Url;
@ -250,7 +250,7 @@ fn test_hsts_list_with_expired_entry_is_not_is_host_secure() {
#[test]
fn test_preload_hsts_domains_well_formed() {
let hsts_list = preload_hsts_domains().unwrap();
let hsts_list = HSTSList::from_servo_preload();
assert!(!hsts_list.entries.is_empty());
}