diff options
author | Bogdan Cuza <bogdan.cuza@hotmail.com> | 2015-04-13 15:13:15 +0300 |
---|---|---|
committer | Bogdan Cuza <bogdan.cuza@hotmail.com> | 2015-04-14 22:03:21 +0300 |
commit | 19ffab82f15edc58faae4074872bfca6f4613345 (patch) | |
tree | 808a5557d3595ba8a162d5c05f9bee6a5da60650 /components/net | |
parent | fe81ce942a36b08ece8ef6d58de72624a961eeaa (diff) | |
download | servo-19ffab82f15edc58faae4074872bfca6f4613345.tar.gz servo-19ffab82f15edc58faae4074872bfca6f4613345.zip |
Make Metadata use ContentType
Diffstat (limited to 'components/net')
-rw-r--r-- | components/net/about_loader.rs | 4 | ||||
-rw-r--r-- | components/net/resource_task.rs | 34 |
2 files changed, 33 insertions, 5 deletions
diff --git a/components/net/about_loader.rs b/components/net/about_loader.rs index 3fd1a09c315..cd7d40671fd 100644 --- a/components/net/about_loader.rs +++ b/components/net/about_loader.rs @@ -9,7 +9,9 @@ use resource_task::start_sending; use file_loader; use url::Url; +use hyper::header::ContentType; use hyper::http::RawStatus; +use hyper::mime::{Mime, TopLevel, SubLevel}; use util::resource_files::resources_dir_path; use std::borrow::IntoCow; @@ -22,7 +24,7 @@ pub fn factory(mut load_data: LoadData, classifier: Arc<MIMEClassifier>) { 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())), + content_type: Some(ContentType(Mime(TopLevel::Text, SubLevel::Html, vec![]))), charset: Some("utf-8".to_string()), headers: None, status: Some(RawStatus(200, "OK".into_cow())), diff --git a/components/net/resource_task.rs b/components/net/resource_task.rs index 4d29526a989..a1ae7991100 100644 --- a/components/net/resource_task.rs +++ b/components/net/resource_task.rs @@ -18,8 +18,8 @@ use net_traits::ProgressMsg::Done; use util::opts; use util::task::spawn_named; -use hyper::header::UserAgent; -use hyper::header::{Header, SetCookie}; +use hyper::header::{ContentType, Header, SetCookie, UserAgent}; +use hyper::mime::{Mime, TopLevel, SubLevel}; use std::borrow::ToOwned; use std::boxed; @@ -27,6 +27,7 @@ use std::collections::HashMap; use std::env; use std::fs::File; use std::io::{BufReader, Read}; +use std::str::FromStr; use std::sync::Arc; use std::sync::mpsc::{channel, Receiver, Sender}; use std::thunk::Invoke; @@ -78,8 +79,33 @@ pub fn start_sending_sniffed_opt(start_chan: Sender<LoadResponse>, mut metadata: let nosniff = false; let check_for_apache_bug = false; - metadata.content_type = classifier.classify(nosniff, check_for_apache_bug, - &metadata.content_type, &partial_body); + metadata.content_type = match metadata.content_type { + Some(ContentType(Mime(toplevel, sublevel, _))) => { + let content_type = classifier.classify(nosniff, check_for_apache_bug, + &Some((format!("{}", toplevel), format!("{}", sublevel))), &partial_body); + match content_type { + Some((tp, sb)) => { + let mime_tp: TopLevel = FromStr::from_str(&tp).unwrap(); + let mime_sb: SubLevel = FromStr::from_str(&sb).unwrap(); + Some(ContentType(Mime(mime_tp, mime_sb, vec!()))) + } + None => None + } + } + None => { + let content_type = classifier.classify(nosniff, check_for_apache_bug, + &None, &partial_body); + + match content_type { + Some((tp, sb)) => { + let mime_tp: TopLevel = FromStr::from_str(&tp).unwrap(); + let mime_sb: SubLevel = FromStr::from_str(&sb).unwrap(); + Some(ContentType(Mime(mime_tp, mime_sb, vec!()))) + } + None => None + } + } + } } |