mirror of
https://github.com/servo/servo.git
synced 2025-07-24 15:50:21 +01:00
Move the HTTP connector to FetchContext
This commit is contained in:
parent
7b16021a89
commit
016fee016b
6 changed files with 23 additions and 13 deletions
|
@ -3,13 +3,14 @@
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
use blob_loader::load_blob_sync;
|
use blob_loader::load_blob_sync;
|
||||||
|
use connector::Connector;
|
||||||
use data_loader::decode;
|
use data_loader::decode;
|
||||||
use devtools_traits::DevtoolsControlMsg;
|
use devtools_traits::DevtoolsControlMsg;
|
||||||
use fetch::cors_cache::CorsCache;
|
use fetch::cors_cache::CorsCache;
|
||||||
use filemanager_thread::FileManager;
|
use filemanager_thread::FileManager;
|
||||||
use http_loader::{HttpState, determine_request_referrer, http_fetch, set_default_accept_language};
|
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::{Accept, AcceptLanguage, ContentLanguage, ContentType};
|
||||||
use hyper::header::{Header, HeaderFormat, HeaderView, Headers, QualityItem};
|
use hyper::header::{Header, HeaderFormat, HeaderView, Headers, QualityItem};
|
||||||
use hyper::header::{Referer as RefererHeader, q, qitem};
|
use hyper::header::{Referer as RefererHeader, q, qitem};
|
||||||
|
@ -28,6 +29,7 @@ use std::fs::File;
|
||||||
use std::io::Read;
|
use std::io::Read;
|
||||||
use std::mem;
|
use std::mem;
|
||||||
use std::str;
|
use std::str;
|
||||||
|
use std::sync::Arc;
|
||||||
use std::sync::mpsc::{Sender, Receiver};
|
use std::sync::mpsc::{Sender, Receiver};
|
||||||
use subresource_integrity::is_response_integrity_valid;
|
use subresource_integrity::is_response_integrity_valid;
|
||||||
|
|
||||||
|
@ -43,6 +45,7 @@ pub struct FetchContext {
|
||||||
pub user_agent: Cow<'static, str>,
|
pub user_agent: Cow<'static, str>,
|
||||||
pub devtools_chan: Option<Sender<DevtoolsControlMsg>>,
|
pub devtools_chan: Option<Sender<DevtoolsControlMsg>>,
|
||||||
pub filemanager: FileManager,
|
pub filemanager: FileManager,
|
||||||
|
pub connector: Arc<Pool<Connector>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub type DoneChannel = Option<(Sender<Data>, Receiver<Data>)>;
|
pub type DoneChannel = Option<(Sender<Data>, Receiver<Data>)>;
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
use brotli::Decompressor;
|
use brotli::Decompressor;
|
||||||
use connector::{Connector, create_http_connector, create_ssl_client};
|
use connector::Connector;
|
||||||
use cookie;
|
use cookie;
|
||||||
use cookie_storage::CookieStorage;
|
use cookie_storage::CookieStorage;
|
||||||
use devtools_traits::{ChromeToDevtoolsControlMsg, DevtoolsControlMsg, HttpRequest as DevtoolsHttpRequest};
|
use devtools_traits::{ChromeToDevtoolsControlMsg, DevtoolsControlMsg, HttpRequest as DevtoolsHttpRequest};
|
||||||
|
@ -69,17 +69,14 @@ pub struct HttpState {
|
||||||
pub hsts_list: Arc<RwLock<HstsList>>,
|
pub hsts_list: Arc<RwLock<HstsList>>,
|
||||||
pub cookie_jar: Arc<RwLock<CookieStorage>>,
|
pub cookie_jar: Arc<RwLock<CookieStorage>>,
|
||||||
pub auth_cache: Arc<RwLock<AuthCache>>,
|
pub auth_cache: Arc<RwLock<AuthCache>>,
|
||||||
pub connector_pool: Arc<Pool<Connector>>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl HttpState {
|
impl HttpState {
|
||||||
pub fn new(certificate_path: &str) -> HttpState {
|
pub fn new() -> HttpState {
|
||||||
let ssl_client = create_ssl_client(certificate_path);
|
|
||||||
HttpState {
|
HttpState {
|
||||||
hsts_list: Arc::new(RwLock::new(HstsList::new())),
|
hsts_list: Arc::new(RwLock::new(HstsList::new())),
|
||||||
cookie_jar: Arc::new(RwLock::new(CookieStorage::new(150))),
|
cookie_jar: Arc::new(RwLock::new(CookieStorage::new(150))),
|
||||||
auth_cache: Arc::new(RwLock::new(AuthCache::new())),
|
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
|
// Step 4
|
||||||
let factory = NetworkHttpRequestFactory {
|
let factory = NetworkHttpRequestFactory {
|
||||||
connector: context.state.connector_pool.clone(),
|
connector: context.connector.clone(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let url = request.current_url();
|
let url = request.current_url();
|
||||||
|
|
|
@ -42,7 +42,7 @@ extern crate websocket;
|
||||||
|
|
||||||
mod blob_loader;
|
mod blob_loader;
|
||||||
mod chrome_loader;
|
mod chrome_loader;
|
||||||
mod connector;
|
pub mod connector;
|
||||||
pub mod cookie;
|
pub mod cookie;
|
||||||
pub mod cookie_storage;
|
pub mod cookie_storage;
|
||||||
mod data_loader;
|
mod data_loader;
|
||||||
|
|
|
@ -330,12 +330,12 @@ impl CoreResourceManager {
|
||||||
hsts_list: group.hsts_list.clone(),
|
hsts_list: group.hsts_list.clone(),
|
||||||
cookie_jar: group.cookie_jar.clone(),
|
cookie_jar: group.cookie_jar.clone(),
|
||||||
auth_cache: group.auth_cache.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 ua = self.user_agent.clone();
|
||||||
let dc = self.devtools_chan.clone();
|
let dc = self.devtools_chan.clone();
|
||||||
let filemanager = self.filemanager.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 || {
|
thread::Builder::new().name(format!("fetch thread for {}", init.url)).spawn(move || {
|
||||||
let mut request = Request::from_init(init);
|
let mut request = Request::from_init(init);
|
||||||
|
@ -348,6 +348,7 @@ impl CoreResourceManager {
|
||||||
user_agent: ua,
|
user_agent: ua,
|
||||||
devtools_chan: dc,
|
devtools_chan: dc,
|
||||||
filemanager: filemanager,
|
filemanager: filemanager,
|
||||||
|
connector: connector,
|
||||||
};
|
};
|
||||||
fetch(&mut request, &mut sender, &context);
|
fetch(&mut request, &mut sender, &context);
|
||||||
}).expect("Thread spawning failed");
|
}).expect("Thread spawning failed");
|
||||||
|
|
|
@ -23,6 +23,7 @@ use hyper::status::StatusCode;
|
||||||
use hyper::uri::RequestUri;
|
use hyper::uri::RequestUri;
|
||||||
use hyper_openssl;
|
use hyper_openssl;
|
||||||
use msg::constellation_msg::TEST_PIPELINE_ID;
|
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::cors_cache::CorsCache;
|
||||||
use net::fetch::methods::FetchContext;
|
use net::fetch::methods::FetchContext;
|
||||||
use net::filemanager_thread::FileManager;
|
use net::filemanager_thread::FileManager;
|
||||||
|
@ -529,11 +530,15 @@ fn test_fetch_with_hsts() {
|
||||||
//takes an address and something that implements hyper::net::Ssl
|
//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 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 {
|
let context = FetchContext {
|
||||||
state: HttpState::new("self_signed_certificate_for_testing.crt"),
|
state: HttpState::new(),
|
||||||
user_agent: DEFAULT_USER_AGENT.into(),
|
user_agent: DEFAULT_USER_AGENT.into(),
|
||||||
devtools_chan: None,
|
devtools_chan: None,
|
||||||
filemanager: FileManager::new(),
|
filemanager: FileManager::new(),
|
||||||
|
connector: connector,
|
||||||
};
|
};
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
|
@ -34,6 +34,7 @@ extern crate url;
|
||||||
|
|
||||||
use devtools_traits::DevtoolsControlMsg;
|
use devtools_traits::DevtoolsControlMsg;
|
||||||
use hyper::server::{Handler, Listening, Server};
|
use hyper::server::{Handler, Listening, Server};
|
||||||
|
use net::connector::{create_http_connector, create_ssl_client};
|
||||||
use net::fetch::cors_cache::CorsCache;
|
use net::fetch::cors_cache::CorsCache;
|
||||||
use net::fetch::methods::{self, FetchContext};
|
use net::fetch::methods::{self, FetchContext};
|
||||||
use net::filemanager_thread::FileManager;
|
use net::filemanager_thread::FileManager;
|
||||||
|
@ -51,11 +52,14 @@ struct FetchResponseCollector {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn new_fetch_context(dc: Option<Sender<DevtoolsControlMsg>>) -> FetchContext {
|
fn new_fetch_context(dc: Option<Sender<DevtoolsControlMsg>>) -> FetchContext {
|
||||||
|
let ssl_client = create_ssl_client("certs");
|
||||||
|
let connector = create_http_connector(ssl_client);
|
||||||
FetchContext {
|
FetchContext {
|
||||||
state: HttpState::new("certs"),
|
state: HttpState::new(),
|
||||||
user_agent: DEFAULT_USER_AGENT.into(),
|
user_agent: DEFAULT_USER_AGENT.into(),
|
||||||
devtools_chan: dc,
|
devtools_chan: dc,
|
||||||
filemanager: FileManager::new(),
|
filemanager: FileManager::new(),
|
||||||
|
connector: connector,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
impl FetchTaskTarget for FetchResponseCollector {
|
impl FetchTaskTarget for FetchResponseCollector {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue