diff options
author | David Rajchenbach-Teller <D.O.Teller@gmail.com> | 2015-09-30 12:22:00 +0200 |
---|---|---|
committer | Josh Matthews <josh@joshmatthews.net> | 2015-12-31 07:45:03 -0500 |
commit | 1e81b8c13322deed21bdfea83b8a4f8c78b50e04 (patch) | |
tree | c994a88564692926b3e2dd07affd37b360b37738 /components/net/resource_task.rs | |
parent | 66c8aa8cdac24ad956be5e99be3b7bc07c5f798c (diff) | |
download | servo-1e81b8c13322deed21bdfea83b8a4f8c78b50e04.tar.gz servo-1e81b8c13322deed21bdfea83b8a4f8c78b50e04.zip |
Resolves #4183 - Implemementing context-based MIME type sniffing
The version of the standard is not finalized at the time of this writing.
Specifications may be found here: https://mimesniff.spec.whatwg.org/#context-specific-sniffing .
Diffstat (limited to 'components/net/resource_task.rs')
-rw-r--r-- | components/net/resource_task.rs | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/components/net/resource_task.rs b/components/net/resource_task.rs index 4599e8dd1d5..b80f47255b9 100644 --- a/components/net/resource_task.rs +++ b/components/net/resource_task.rs @@ -17,6 +17,7 @@ use hyper::header::{ContentType, Header, SetCookie}; use hyper::mime::{Mime, SubLevel, TopLevel}; use ipc_channel::ipc::{self, IpcReceiver, IpcSender}; use mime_classifier::{ApacheBugFlag, MIMEClassifier, NoSniffFlag}; +use net_traits::LoadContext; use net_traits::ProgressMsg::Done; use net_traits::{AsyncResponseTarget, Metadata, ProgressMsg, ResourceTask, ResponseAction}; use net_traits::{ControlMsg, CookieSource, LoadConsumer, LoadData, LoadResponse, ResourceId}; @@ -65,14 +66,16 @@ pub fn send_error(url: Url, err: String, start_chan: LoadConsumer) { /// For use by loaders in responding to a Load message that allows content sniffing. pub fn start_sending_sniffed(start_chan: LoadConsumer, metadata: Metadata, - classifier: Arc<MIMEClassifier>, partial_body: &[u8]) + classifier: Arc<MIMEClassifier>, partial_body: &[u8], + context: LoadContext) -> ProgressSender { - start_sending_sniffed_opt(start_chan, metadata, classifier, partial_body).ok().unwrap() + start_sending_sniffed_opt(start_chan, metadata, classifier, partial_body, context).ok().unwrap() } /// For use by loaders in responding to a Load message that allows content sniffing. pub fn start_sending_sniffed_opt(start_chan: LoadConsumer, mut metadata: Metadata, - classifier: Arc<MIMEClassifier>, partial_body: &[u8]) + classifier: Arc<MIMEClassifier>, partial_body: &[u8], + context: LoadContext) -> Result<ProgressSender, ()> { if opts::get().sniff_mime_types { // TODO: should be calculated in the resource loader, from pull requeset #4094 @@ -94,10 +97,11 @@ pub fn start_sending_sniffed_opt(start_chan: LoadConsumer, mut metadata: Metadat } let supplied_type = - metadata.content_type.map(|ContentType(Mime(toplevel, sublevel, _))| { + metadata.content_type.as_ref().map(|&ContentType(Mime(ref toplevel, ref sublevel, _))| { (format!("{}", toplevel), format!("{}", sublevel)) }); - let (toplevel, sublevel) = classifier.classify(no_sniff, + let (toplevel, sublevel) = classifier.classify(context, + no_sniff, check_for_apache_bug, &supplied_type, &partial_body); |