aboutsummaryrefslogtreecommitdiffstats
path: root/components/net
diff options
context:
space:
mode:
authorBogdan Cuza <bogdan.cuza@hotmail.com>2015-04-13 15:13:15 +0300
committerBogdan Cuza <bogdan.cuza@hotmail.com>2015-04-14 22:03:21 +0300
commit19ffab82f15edc58faae4074872bfca6f4613345 (patch)
tree808a5557d3595ba8a162d5c05f9bee6a5da60650 /components/net
parentfe81ce942a36b08ece8ef6d58de72624a961eeaa (diff)
downloadservo-19ffab82f15edc58faae4074872bfca6f4613345.tar.gz
servo-19ffab82f15edc58faae4074872bfca6f4613345.zip
Make Metadata use ContentType
Diffstat (limited to 'components/net')
-rw-r--r--components/net/about_loader.rs4
-rw-r--r--components/net/resource_task.rs34
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
+ }
+ }
+ }
}