aboutsummaryrefslogtreecommitdiffstats
path: root/components/net/resource_task.rs
diff options
context:
space:
mode:
authorDavid Rajchenbach-Teller <D.O.Teller@gmail.com>2015-09-30 12:22:00 +0200
committerJosh Matthews <josh@joshmatthews.net>2015-12-31 07:45:03 -0500
commit1e81b8c13322deed21bdfea83b8a4f8c78b50e04 (patch)
treec994a88564692926b3e2dd07affd37b360b37738 /components/net/resource_task.rs
parent66c8aa8cdac24ad956be5e99be3b7bc07c5f798c (diff)
downloadservo-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.rs14
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);