diff options
-rw-r--r-- | components/net/fetch/methods.rs | 7 | ||||
-rw-r--r-- | components/net/http_loader.rs | 9 | ||||
-rw-r--r-- | components/net/lib.rs | 2 | ||||
-rw-r--r-- | components/net/resource_thread.rs | 5 | ||||
-rw-r--r-- | tests/unit/net/fetch.rs | 7 | ||||
-rw-r--r-- | tests/unit/net/lib.rs | 6 |
6 files changed, 23 insertions, 13 deletions
diff --git a/components/net/fetch/methods.rs b/components/net/fetch/methods.rs index 55d1c0ecd48..438a630e4f9 100644 --- a/components/net/fetch/methods.rs +++ b/components/net/fetch/methods.rs @@ -3,13 +3,14 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use blob_loader::load_blob_sync; +use connector::Connector; use data_loader::decode; use devtools_traits::DevtoolsControlMsg; use fetch::cors_cache::CorsCache; use filemanager_thread::FileManager; use http_loader::{HttpState, determine_request_referrer, http_fetch, set_default_accept_language}; -use hyper::Error; -use hyper::error::Result as HyperResult; +use hyper::{Error, Result as HyperResult}; +use hyper::client::Pool; use hyper::header::{Accept, AcceptLanguage, ContentLanguage, ContentType}; use hyper::header::{Header, HeaderFormat, HeaderView, Headers, QualityItem}; use hyper::header::{Referer as RefererHeader, q, qitem}; @@ -28,6 +29,7 @@ use std::fs::File; use std::io::Read; use std::mem; use std::str; +use std::sync::Arc; use std::sync::mpsc::{Sender, Receiver}; use subresource_integrity::is_response_integrity_valid; @@ -43,6 +45,7 @@ pub struct FetchContext { pub user_agent: Cow<'static, str>, pub devtools_chan: Option<Sender<DevtoolsControlMsg>>, pub filemanager: FileManager, + pub connector: Arc<Pool<Connector>>, } pub type DoneChannel = Option<(Sender<Data>, Receiver<Data>)>; diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs index 4712a8dc6ea..7f300202782 100644 --- a/components/net/http_loader.rs +++ b/components/net/http_loader.rs @@ -3,7 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use brotli::Decompressor; -use connector::{Connector, create_http_connector, create_ssl_client}; +use connector::Connector; use cookie; use cookie_storage::CookieStorage; use devtools_traits::{ChromeToDevtoolsControlMsg, DevtoolsControlMsg, HttpRequest as DevtoolsHttpRequest}; @@ -69,17 +69,14 @@ pub struct HttpState { pub hsts_list: Arc<RwLock<HstsList>>, pub cookie_jar: Arc<RwLock<CookieStorage>>, pub auth_cache: Arc<RwLock<AuthCache>>, - pub connector_pool: Arc<Pool<Connector>>, } impl HttpState { - pub fn new(certificate_path: &str) -> HttpState { - let ssl_client = create_ssl_client(certificate_path); + pub fn new() -> HttpState { HttpState { hsts_list: Arc::new(RwLock::new(HstsList::new())), cookie_jar: Arc::new(RwLock::new(CookieStorage::new(150))), auth_cache: Arc::new(RwLock::new(AuthCache::new())), - connector_pool: create_http_connector(ssl_client), } } } @@ -1048,7 +1045,7 @@ fn http_network_fetch(request: &Request, // Step 4 let factory = NetworkHttpRequestFactory { - connector: context.state.connector_pool.clone(), + connector: context.connector.clone(), }; let url = request.current_url(); diff --git a/components/net/lib.rs b/components/net/lib.rs index 648118d10c0..34018dc6a65 100644 --- a/components/net/lib.rs +++ b/components/net/lib.rs @@ -42,7 +42,7 @@ extern crate websocket; mod blob_loader; mod chrome_loader; -mod connector; +pub mod connector; pub mod cookie; pub mod cookie_storage; mod data_loader; diff --git a/components/net/resource_thread.rs b/components/net/resource_thread.rs index 8df207eda24..c58d71fd992 100644 --- a/components/net/resource_thread.rs +++ b/components/net/resource_thread.rs @@ -330,12 +330,12 @@ impl CoreResourceManager { hsts_list: group.hsts_list.clone(), cookie_jar: group.cookie_jar.clone(), auth_cache: group.auth_cache.clone(), - // FIXME(#15694): use group.connector.clone() instead. - connector_pool: create_http_connector(group.ssl_client.clone()), }; let ua = self.user_agent.clone(); let dc = self.devtools_chan.clone(); let filemanager = self.filemanager.clone(); + // FIXME(#15694): use group.connector.clone() instead. + let connector = create_http_connector(group.ssl_client.clone()); thread::Builder::new().name(format!("fetch thread for {}", init.url)).spawn(move || { let mut request = Request::from_init(init); @@ -348,6 +348,7 @@ impl CoreResourceManager { user_agent: ua, devtools_chan: dc, filemanager: filemanager, + connector: connector, }; fetch(&mut request, &mut sender, &context); }).expect("Thread spawning failed"); diff --git a/tests/unit/net/fetch.rs b/tests/unit/net/fetch.rs index 7df0af9643c..8ae9ae8c784 100644 --- a/tests/unit/net/fetch.rs +++ b/tests/unit/net/fetch.rs @@ -23,6 +23,7 @@ use hyper::status::StatusCode; use hyper::uri::RequestUri; use hyper_openssl; use msg::constellation_msg::TEST_PIPELINE_ID; +use net::connector::{create_http_connector, create_ssl_client}; use net::fetch::cors_cache::CorsCache; use net::fetch::methods::FetchContext; use net::filemanager_thread::FileManager; @@ -529,11 +530,15 @@ fn test_fetch_with_hsts() { //takes an address and something that implements hyper::net::Ssl let mut server = Server::https("0.0.0.0:0", ssl).unwrap().handle_threads(handler, 1).unwrap(); + let ssl_client = create_ssl_client("self_signed_certificate_for_testing.crt"); + let connector = create_http_connector(ssl_client); + let context = FetchContext { - state: HttpState::new("self_signed_certificate_for_testing.crt"), + state: HttpState::new(), user_agent: DEFAULT_USER_AGENT.into(), devtools_chan: None, filemanager: FileManager::new(), + connector: connector, }; { diff --git a/tests/unit/net/lib.rs b/tests/unit/net/lib.rs index 30a57ee6027..740a7e6c505 100644 --- a/tests/unit/net/lib.rs +++ b/tests/unit/net/lib.rs @@ -34,6 +34,7 @@ extern crate url; use devtools_traits::DevtoolsControlMsg; use hyper::server::{Handler, Listening, Server}; +use net::connector::{create_http_connector, create_ssl_client}; use net::fetch::cors_cache::CorsCache; use net::fetch::methods::{self, FetchContext}; use net::filemanager_thread::FileManager; @@ -51,11 +52,14 @@ struct FetchResponseCollector { } fn new_fetch_context(dc: Option<Sender<DevtoolsControlMsg>>) -> FetchContext { + let ssl_client = create_ssl_client("certs"); + let connector = create_http_connector(ssl_client); FetchContext { - state: HttpState::new("certs"), + state: HttpState::new(), user_agent: DEFAULT_USER_AGENT.into(), devtools_chan: dc, filemanager: FileManager::new(), + connector: connector, } } impl FetchTaskTarget for FetchResponseCollector { |