From 2d730f2ae947a369e6f82869dd4e6f3604b40709 Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Sat, 21 Feb 2015 09:25:23 -0500 Subject: [PATCH] Remove the sniffer task. --- components/net/about_loader.rs | 17 ++++------ components/net/data_loader.rs | 24 +++++--------- components/net/file_loader.rs | 11 +++---- components/net/http_loader.rs | 50 +++++++++++++--------------- components/net/lib.rs | 1 - components/net/mime_classifier.rs | 2 ++ components/net/resource_task.rs | 54 +++++++++---------------------- components/net/sniffer_task.rs | 2 +- 8 files changed, 60 insertions(+), 101 deletions(-) diff --git a/components/net/about_loader.rs b/components/net/about_loader.rs index 7f3b93d293e..140d4d7df59 100644 --- a/components/net/about_loader.rs +++ b/components/net/about_loader.rs @@ -4,7 +4,7 @@ use net_traits::{LoadData, Metadata}; use net_traits::ProgressMsg::Done; -use resource_task::{TargetedLoadResponse, start_sending, ResponseSenders}; +use resource_task::start_sending; use file_loader; use url::Url; @@ -13,16 +13,12 @@ use util::resource_files::resources_dir_path; use std::borrow::IntoCow; use std::fs::PathExt; -use std::sync::mpsc::Sender; -pub fn factory(mut load_data: LoadData, start_chan: Sender) { - let senders = ResponseSenders { - immediate_consumer: start_chan.clone(), - eventual_consumer: load_data.consumer.clone(), - }; +pub fn factory(mut load_data: LoadData) { match load_data.url.non_relative_scheme_data().unwrap() { "blank" => { - let chan = start_sending(senders, Metadata { + let start_chan = load_data.consumer; + let chan = start_sending(start_chan, Metadata { final_url: load_data.url, content_type: Some(("text".to_string(), "html".to_string())), charset: Some("utf-8".to_string()), @@ -40,10 +36,11 @@ pub fn factory(mut load_data: LoadData, start_chan: Sender load_data.url = Url::from_file_path(&*path).unwrap(); } _ => { - start_sending(senders, Metadata::default(load_data.url)) + let start_chan = load_data.consumer; + start_sending(start_chan, Metadata::default(load_data.url)) .send(Done(Err("Unknown about: URL.".to_string()))).unwrap(); return } }; - file_loader::factory(load_data, start_chan) + file_loader::factory(load_data) } diff --git a/components/net/data_loader.rs b/components/net/data_loader.rs index 013563bfa1e..e052abc8d07 100644 --- a/components/net/data_loader.rs +++ b/components/net/data_loader.rs @@ -4,34 +4,28 @@ use net_traits::{LoadData, Metadata}; use net_traits::ProgressMsg::{Payload, Done}; -use resource_task::{TargetedLoadResponse, start_sending, ResponseSenders}; +use resource_task::start_sending; use rustc_serialize::base64::FromBase64; use hyper::mime::Mime; use url::{percent_decode, SchemeData}; -use std::sync::mpsc::Sender; - -pub fn factory(load_data: LoadData, start_chan: Sender) { +pub fn factory(load_data: LoadData) { // NB: we don't spawn a new task. // Hypothesis: data URLs are too small for parallel base64 etc. to be worth it. // Should be tested at some point. // Left in separate function to allow easy moving to a task, if desired. - load(load_data, start_chan) + load(load_data) } -fn load(load_data: LoadData, start_chan: Sender) { +fn load(load_data: LoadData) { + let start_chan = load_data.consumer; let url = load_data.url; assert!(&*url.scheme == "data"); let mut metadata = Metadata::default(url.clone()); - let senders = ResponseSenders { - immediate_consumer: start_chan, - eventual_consumer: load_data.consumer, - }; - // Split out content type and data. let mut scheme_data = match url.scheme_data { SchemeData::NonRelative(scheme_data) => scheme_data, @@ -46,7 +40,7 @@ fn load(load_data: LoadData, start_chan: Sender) { } let parts: Vec<&str> = scheme_data.splitn(1, ',').collect(); if parts.len() != 2 { - start_sending(senders, metadata).send(Done(Err("invalid data uri".to_string()))).unwrap(); + start_sending(start_chan, metadata).send(Done(Err("invalid data uri".to_string()))).unwrap(); return; } @@ -64,7 +58,7 @@ fn load(load_data: LoadData, start_chan: Sender) { let content_type: Option = ct_str.parse().ok(); metadata.set_content_type(content_type.as_ref()); - let progress_chan = start_sending(senders, metadata); + let progress_chan = start_sending(start_chan, metadata); let bytes = percent_decode(parts[1].as_bytes()); if is_base64 { @@ -93,11 +87,9 @@ fn assert_parse(url: &'static str, data: Option>) { use std::sync::mpsc::channel; use url::Url; - use sniffer_task; let (start_chan, start_port) = channel(); - let sniffer_task = sniffer_task::new_mock_sniffer_task(); - load(LoadData::new(Url::parse(url).unwrap(), start_chan), sniffer_task); + load(LoadData::new(Url::parse(url).unwrap(), start_chan)); let response = start_port.recv().unwrap(); assert_eq!(&response.metadata.content_type, &content_type); diff --git a/components/net/file_loader.rs b/components/net/file_loader.rs index 636c14f60e5..389afd48c0f 100644 --- a/components/net/file_loader.rs +++ b/components/net/file_loader.rs @@ -4,7 +4,7 @@ use net_traits::{LoadData, Metadata, ProgressMsg}; use net_traits::ProgressMsg::{Payload, Done}; -use resource_task::{start_sending, TargetedLoadResponse, ResponseSenders}; +use resource_task::start_sending; use std::borrow::ToOwned; use std::io; @@ -30,14 +30,11 @@ fn read_all(reader: &mut io::Read, progress_chan: &Sender) } } -pub fn factory(load_data: LoadData, start_chan: Sender) { +pub fn factory(load_data: LoadData) { let url = load_data.url; + let start_chan = load_data.consumer; assert!(&*url.scheme == "file"); - let senders = ResponseSenders { - immediate_consumer: start_chan, - eventual_consumer: load_data.consumer, - }; - let progress_chan = start_sending(senders, Metadata::default(url.clone())); + let progress_chan = start_sending(start_chan, Metadata::default(url.clone())); spawn_named("file_loader".to_owned(), move || { let file_path: Result = url.to_file_path(); match file_path { diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs index 2dadcdfa3d9..cd984823bc8 100644 --- a/components/net/http_loader.rs +++ b/components/net/http_loader.rs @@ -2,10 +2,10 @@ * 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_traits::{ControlMsg, CookieSource, LoadData, Metadata}; +use net_traits::{ControlMsg, CookieSource, LoadData, LoadResponse, Metadata}; use net_traits::ProgressMsg; use net_traits::ProgressMsg::{Payload, Done}; -use resource_task::{TargetedLoadResponse, start_sending_opt, ResponseSenders}; +use resource_task::start_sending_opt; use log; use std::collections::HashSet; @@ -31,36 +31,32 @@ use url::{Url, UrlParser}; use std::borrow::ToOwned; pub fn factory(cookies_chan: Sender) - -> Box)> + Send> { - box move |(load_data, start_chan)| { - spawn_named("http_loader".to_owned(), move || load(load_data, start_chan, cookies_chan)) + -> Box + Send> { + box move |(load_data,)| { + spawn_named("http_loader".to_owned(), move || load(load_data, cookies_chan)) } } -fn send_error(url: Url, err: String, senders: ResponseSenders) { +fn send_error(url: Url, err: String, start_chan: Sender) { let mut metadata: Metadata = Metadata::default(url); metadata.status = None; - match start_sending_opt(senders, metadata) { + match start_sending_opt(start_chan, metadata) { Ok(p) => p.send(Done(Err(err))).unwrap(), _ => {} }; } -fn load(mut load_data: LoadData, start_chan: Sender, cookies_chan: Sender) { +fn load(mut load_data: LoadData, cookies_chan: Sender) { // FIXME: At the time of writing this FIXME, servo didn't have any central // location for configuration. If you're reading this and such a // repository DOES exist, please update this constant to use it. let max_redirects = 50u; let mut iters = 0u; + let start_chan = load_data.consumer; let mut url = load_data.url.clone(); let mut redirected_to = HashSet::new(); - let senders = ResponseSenders { - immediate_consumer: start_chan, - eventual_consumer: load_data.consumer - }; - // If the URL is a view-source scheme then the scheme data contains the // real URL that should be used for which the source is to be viewed. // Change our existing URL to that and keep note that we are viewing @@ -73,7 +69,7 @@ fn load(mut load_data: LoadData, start_chan: Sender, cooki "http" | "https" => {} _ => { let s = format!("The {} scheme with view-source is not supported", url.scheme); - send_error(url, s, senders); + send_error(url, s, start_chan); return; } }; @@ -84,7 +80,7 @@ fn load(mut load_data: LoadData, start_chan: Sender, cooki iters = iters + 1; if iters > max_redirects { - send_error(url, "too many redirects".to_string(), senders); + send_error(url, "too many redirects".to_string(), start_chan); return; } @@ -92,7 +88,7 @@ fn load(mut load_data: LoadData, start_chan: Sender, cooki "http" | "https" => {} _ => { let s = format!("{} request, but we don't support that scheme", url.scheme); - send_error(url, s, senders); + send_error(url, s, start_chan); return; } } @@ -125,13 +121,13 @@ reason: \"certificate verify failed\" }]"; ) => { let mut image = resources_dir_path(); image.push("badcert.html"); - let load_data = LoadData::new(Url::from_file_path(&*image).unwrap(), senders.eventual_consumer); - file_loader::factory(load_data, senders.immediate_consumer); + let load_data = LoadData::new(Url::from_file_path(&*image).unwrap(), start_chan); + file_loader::factory(load_data); return; }, Err(e) => { println!("{:?}", e); - send_error(url, e.description().to_string(), senders); + send_error(url, e.description().to_string(), start_chan); return; } }; @@ -179,13 +175,13 @@ reason: \"certificate verify failed\" }]"; let mut writer = match req.start() { Ok(w) => w, Err(e) => { - send_error(url, e.description().to_string(), senders); + send_error(url, e.description().to_string(), start_chan); return; } }; match writer.write_all(&*data) { Err(e) => { - send_error(url, e.description().to_string(), senders); + send_error(url, e.description().to_string(), start_chan); return; } _ => {} @@ -200,7 +196,7 @@ reason: \"certificate verify failed\" }]"; match req.start() { Ok(w) => w, Err(e) => { - send_error(url, e.description().to_string(), senders); + send_error(url, e.description().to_string(), start_chan); return; } } @@ -209,7 +205,7 @@ reason: \"certificate verify failed\" }]"; let mut response = match writer.send() { Ok(r) => r, Err(e) => { - send_error(url, e.description().to_string(), senders); + send_error(url, e.description().to_string(), start_chan); return; } }; @@ -240,7 +236,7 @@ reason: \"certificate verify failed\" }]"; Some(ref c) => { if c.preflight { // The preflight lied - send_error(url, "Preflight fetch inconsistent with main fetch".to_string(), senders); + send_error(url, "Preflight fetch inconsistent with main fetch".to_string(), start_chan); return; } else { // XXXManishearth There are some CORS-related steps here, @@ -252,7 +248,7 @@ reason: \"certificate verify failed\" }]"; let new_url = match UrlParser::new().base_url(&url).parse(&new_url) { Ok(u) => u, Err(e) => { - send_error(url, e.to_string(), senders); + send_error(url, e.to_string(), start_chan); return; } }; @@ -268,7 +264,7 @@ reason: \"certificate verify failed\" }]"; } if redirected_to.contains(&url) { - send_error(url, "redirect loop".to_string(), senders); + send_error(url, "redirect loop".to_string(), start_chan); return; } @@ -291,7 +287,7 @@ reason: \"certificate verify failed\" }]"; metadata.headers = Some(adjusted_headers); metadata.status = Some(response.status_raw().clone()); - let progress_chan = match start_sending_opt(senders, metadata) { + let progress_chan = match start_sending_opt(start_chan, metadata) { Ok(p) => p, _ => return }; diff --git a/components/net/lib.rs b/components/net/lib.rs index c4461330c31..bd2bd882570 100644 --- a/components/net/lib.rs +++ b/components/net/lib.rs @@ -46,7 +46,6 @@ pub mod image_cache_task; pub mod pub_domains; pub mod resource_task; pub mod storage_task; -mod sniffer_task; mod mime_classifier; /// An implementation of the [Fetch spec](http://fetch.spec.whatwg.org/) diff --git a/components/net/mime_classifier.rs b/components/net/mime_classifier.rs index e75056c980f..58ea4f09cfe 100644 --- a/components/net/mime_classifier.rs +++ b/components/net/mime_classifier.rs @@ -2,6 +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/. */ +#![allow(dead_code)] + use std::borrow::ToOwned; use std::cmp::max; diff --git a/components/net/resource_task.rs b/components/net/resource_task.rs index 2865a03f657..76146cb97e5 100644 --- a/components/net/resource_task.rs +++ b/components/net/resource_task.rs @@ -8,8 +8,6 @@ use about_loader; use data_loader; use file_loader; use http_loader; -use sniffer_task; -use sniffer_task::SnifferTask; use cookie_storage::CookieStorage; use cookie; @@ -58,32 +56,17 @@ pub fn global_init() { } } -/// A LoadResponse directed at a particular consumer -pub struct TargetedLoadResponse { - pub load_response: LoadResponse, - pub consumer: Sender, -} - -// Data structure containing ports -pub struct ResponseSenders { - pub immediate_consumer: Sender, - pub eventual_consumer: Sender, +/// For use by loaders in responding to a Load message. +pub fn start_sending(start_chan: Sender, metadata: Metadata) -> Sender { + start_sending_opt(start_chan, metadata).ok().unwrap() } /// For use by loaders in responding to a Load message. -pub fn start_sending(senders: ResponseSenders, metadata: Metadata) -> Sender { - start_sending_opt(senders, metadata).ok().unwrap() -} - -/// For use by loaders in responding to a Load message. -pub fn start_sending_opt(senders: ResponseSenders, metadata: Metadata) -> Result, ()> { +pub fn start_sending_opt(start_chan: Sender, metadata: Metadata) -> Result, ()> { let (progress_chan, progress_port) = channel(); - let result = senders.immediate_consumer.send(TargetedLoadResponse { - load_response: LoadResponse { - metadata: metadata, - progress_port: progress_port, - }, - consumer: senders.eventual_consumer + let result = start_chan.send(LoadResponse { + metadata: metadata, + progress_port: progress_port, }); match result { Ok(_) => Ok(progress_chan), @@ -94,10 +77,9 @@ pub fn start_sending_opt(senders: ResponseSenders, metadata: Metadata) -> Result /// Create a ResourceTask pub fn new_resource_task(user_agent: Option) -> ResourceTask { let (setup_chan, setup_port) = channel(); - let sniffer_task = sniffer_task::new_sniffer_task(); let setup_chan_clone = setup_chan.clone(); spawn_named("ResourceManager".to_owned(), move || { - ResourceManager::new(setup_port, user_agent, sniffer_task, setup_chan_clone).start(); + ResourceManager::new(setup_port, user_agent, setup_chan_clone).start(); }); setup_chan } @@ -139,18 +121,16 @@ pub fn replace_hosts(mut load_data: LoadData, host_table: *mut HashMap, user_agent: Option, - sniffer_task: SnifferTask, cookie_storage: CookieStorage, resource_task: Sender, } impl ResourceManager { - fn new(from_client: Receiver, user_agent: Option, sniffer_task: SnifferTask, + fn new(from_client: Receiver, user_agent: Option, resource_task: Sender) -> ResourceManager { ResourceManager { from_client: from_client, user_agent: user_agent, - sniffer_task: sniffer_task, cookie_storage: CookieStorage::new(), resource_task: resource_task, } @@ -193,15 +173,11 @@ impl ResourceManager { } self.user_agent.as_ref().map(|ua| load_data.headers.set(UserAgent(ua.clone()))); - let senders = ResponseSenders { - immediate_consumer: self.sniffer_task.clone(), - eventual_consumer: load_data.consumer.clone(), - }; - fn from_factory(factory: fn(LoadData, Sender)) - -> Box)> + Send> { - box move |(load_data, start_chan)| { - factory(load_data, start_chan) + fn from_factory(factory: fn(LoadData,)) + -> Box + Send> { + box move |(load_data,)| { + factory(load_data) } } @@ -212,14 +188,14 @@ impl ResourceManager { "about" => from_factory(about_loader::factory), _ => { debug!("resource_task: no loader for scheme {}", load_data.url.scheme); - start_sending(senders, Metadata::default(load_data.url)) + start_sending(load_data.consumer, Metadata::default(load_data.url)) .send(ProgressMsg::Done(Err("no loader for scheme".to_string()))).unwrap(); return } }; debug!("resource_task: loading url: {}", load_data.url.serialize()); - loader.invoke((load_data, self.sniffer_task.clone())); + loader.invoke((load_data,)); } } diff --git a/components/net/sniffer_task.rs b/components/net/sniffer_task.rs index 04f6bfac6fb..a5cdd2f69ff 100644 --- a/components/net/sniffer_task.rs +++ b/components/net/sniffer_task.rs @@ -6,7 +6,7 @@ use std::sync::mpsc::{channel, Receiver, Sender}; use std::thread::Builder; use mime_classifier::MIMEClassifier; -use resource_task::{TargetedLoadResponse, LoadResponse, ProgressMsg}; +use resource_task::{LoadResponse, LoadResponse, ProgressMsg}; pub type SnifferTask = Sender;