diff options
Diffstat (limited to 'components/net/resource_task.rs')
-rw-r--r-- | components/net/resource_task.rs | 34 |
1 files changed, 30 insertions, 4 deletions
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 + } + } + } } |