aboutsummaryrefslogtreecommitdiffstats
path: root/components/net/mime_classifier.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/net/mime_classifier.rs')
-rw-r--r--components/net/mime_classifier.rs244
1 files changed, 112 insertions, 132 deletions
diff --git a/components/net/mime_classifier.rs b/components/net/mime_classifier.rs
index f59dc2b925d..801f5bce9b3 100644
--- a/components/net/mime_classifier.rs
+++ b/components/net/mime_classifier.rs
@@ -2,9 +2,8 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-use hyper::mime::TopLevel;
+use mime::{self, Mime};
use net_traits::LoadContext;
-use std::borrow::ToOwned;
pub struct MimeClassifier {
image_classifier: GroupedClassifier,
@@ -49,34 +48,28 @@ pub enum NoSniffFlag {
Off
}
-pub type MimeType = (TopLevel, String);
-
impl MimeClassifier {
//Performs MIME Type Sniffing Algorithm (sections 7 and 8)
- pub fn classify(&self,
+ pub fn classify<'a>(&'a self,
context: LoadContext,
no_sniff_flag: NoSniffFlag,
apache_bug_flag: ApacheBugFlag,
- supplied_type: &Option<MimeType>,
- data: &[u8]) -> MimeType {
- let supplied_type_or_octet_stream = supplied_type.clone()
- .unwrap_or((TopLevel::Application,
- "octet-stream".to_owned()));
+ supplied_type: &Option<Mime>,
+ data: &'a [u8]) -> Mime {
+ let supplied_type_or_octet_stream = supplied_type.clone().unwrap_or(mime::APPLICATION_OCTET_STREAM);
match context {
LoadContext::Browsing => match *supplied_type {
None => self.sniff_unknown_type(no_sniff_flag, data),
Some(ref supplied_type) => {
- let &(ref media_type, ref media_subtype) = supplied_type;
- if MimeClassifier::is_explicit_unknown(media_type, media_subtype) {
+ if MimeClassifier::is_explicit_unknown(supplied_type) {
self.sniff_unknown_type(no_sniff_flag, data)
} else {
match no_sniff_flag {
NoSniffFlag::On => supplied_type.clone(),
NoSniffFlag::Off => match apache_bug_flag {
ApacheBugFlag::On => self.sniff_text_or_data(data),
- ApacheBugFlag::Off => match MimeClassifier::get_media_type(media_type,
- media_subtype) {
+ ApacheBugFlag::Off => match MimeClassifier::get_media_type(supplied_type) {
Some(MediaType::Html) => self.feeds_classifier.classify(data),
Some(MediaType::Image) => self.image_classifier.classify(data),
Some(MediaType::AudioVideo) => self.audio_video_classifier.classify(data),
@@ -107,7 +100,7 @@ impl MimeClassifier {
// This section was *not* finalized in the specs at the time
// of this implementation.
match *supplied_type {
- None => (TopLevel::Application, "octet-stream".to_owned()),
+ None => mime::APPLICATION_OCTET_STREAM,
_ => supplied_type_or_octet_stream,
}
},
@@ -117,7 +110,7 @@ impl MimeClassifier {
// This section was *not* finalized in the specs at the time
// of this implementation.
match *supplied_type {
- None => (TopLevel::Text, "css".to_owned()),
+ None => mime::TEXT_CSS,
_ => supplied_type_or_octet_stream,
}
},
@@ -127,7 +120,7 @@ impl MimeClassifier {
// This section was *not* finalized in the specs at the time
// of this implementation.
match *supplied_type {
- None => (TopLevel::Text, "javascript".to_owned()),
+ None => mime::TEXT_JAVASCRIPT,
_ => supplied_type_or_octet_stream,
}
},
@@ -143,14 +136,14 @@ impl MimeClassifier {
//
// This section was *not* finalized in the specs at the time
// of this implementation.
- (TopLevel::Text, "vtt".to_owned())
+ "text/vtt".parse().unwrap()
},
LoadContext::CacheManifest => {
// 8.9 Sniffing in a cache manifest context
//
// This section was *not* finalized in the specs at the time
// of this implementation.
- (TopLevel::Text, "cache-manifest".to_owned())
+ "text/cache-manifest".parse().unwrap()
},
}
}
@@ -181,7 +174,7 @@ impl MimeClassifier {
}
//some sort of iterator over the classifiers might be better?
- fn sniff_unknown_type(&self, no_sniff_flag: NoSniffFlag, data: &[u8]) -> MimeType {
+ fn sniff_unknown_type(&self, no_sniff_flag: NoSniffFlag, data: &[u8]) -> Mime {
let should_sniff_scriptable = no_sniff_flag == NoSniffFlag::Off;
let sniffed = if should_sniff_scriptable {
self.scriptable_classifier.classify(data)
@@ -197,72 +190,60 @@ impl MimeClassifier {
.expect("BinaryOrPlaintextClassifier always succeeds")
}
- fn sniff_text_or_data(&self, data: &[u8]) -> MimeType {
+ fn sniff_text_or_data<'a>(&'a self, data: &'a [u8]) -> Mime {
self.binary_or_plaintext.classify(data).expect("BinaryOrPlaintextClassifier always succeeds")
}
- fn is_xml(tp: &TopLevel, sub_tp: &str) -> bool {
- sub_tp.ends_with("+xml") ||
- match (tp, sub_tp) {
- (&TopLevel::Application, "xml") | (&TopLevel::Text, "xml") => true,
- _ => false
- }
+ fn is_xml(mt: &Mime) -> bool {
+ mt.suffix() == Some(mime::XML) ||
+ (mt.type_() == mime::APPLICATION && mt.subtype() == mime::XML) ||
+ (mt.type_() == mime::TEXT && mt.subtype() == mime::XML)
}
- fn is_html(tp: &TopLevel, sub_tp: &str) -> bool {
- *tp == TopLevel::Text && sub_tp == "html"
+ fn is_html(mt: &Mime) -> bool {
+ mt.type_() == mime::TEXT && mt.subtype() == mime::HTML
}
- fn is_image(tp: &TopLevel) -> bool {
- *tp == TopLevel::Image
+ fn is_image(mt: &Mime) -> bool {
+ mt.type_() == mime::IMAGE
}
- fn is_audio_video(tp: &TopLevel, sub_tp: &str) -> bool {
- *tp == TopLevel::Audio ||
- *tp == TopLevel::Video ||
- (*tp == TopLevel::Application && sub_tp == "ogg")
+ fn is_audio_video(mt: &Mime) -> bool {
+ mt.type_() == mime::AUDIO ||
+ mt.type_() == mime::VIDEO ||
+ mt.type_() == mime::APPLICATION && mt.subtype() == mime::OGG
}
- fn is_explicit_unknown(tp: &TopLevel, sub_tp: &str) -> bool {
- if let TopLevel::Ext(ref e) = *tp {
- return e == "unknown" && sub_tp == "unknown";
- }
- match (tp, sub_tp) {
- (&TopLevel::Application, "unknown") |
- (&TopLevel::Star, "*") => true,
- _ => false
- }
+ fn is_explicit_unknown(mt: &Mime) -> bool {
+ mt.type_().as_str() == "unknown" && mt.subtype().as_str() == "unknown" ||
+ mt.type_() == mime::APPLICATION && mt.subtype().as_str() == "unknown" ||
+ mt.type_() == mime::STAR && mt.subtype() == mime::STAR
}
- fn get_media_type(media_type: &TopLevel,
- media_subtype: &str) -> Option<MediaType> {
- if MimeClassifier::is_xml(media_type, media_subtype) {
+ fn get_media_type(mime: &Mime) -> Option<MediaType> {
+ if MimeClassifier::is_xml(&mime) {
Some(MediaType::Xml)
- } else if MimeClassifier::is_html(media_type, media_subtype) {
+ } else if MimeClassifier::is_html(&mime) {
Some(MediaType::Html)
- } else if MimeClassifier::is_image(media_type) {
+ } else if MimeClassifier::is_image(&mime) {
Some(MediaType::Image)
- } else if MimeClassifier::is_audio_video(media_type, media_subtype) {
+ } else if MimeClassifier::is_audio_video(&mime) {
Some(MediaType::AudioVideo)
} else {
None
}
}
- fn maybe_get_media_type(supplied_type: &Option<MimeType>) -> Option<MediaType> {
- supplied_type.as_ref().and_then(|&(ref media_type, ref media_subtype)| {
- MimeClassifier::get_media_type(media_type, media_subtype)
+ fn maybe_get_media_type(supplied_type: &Option<Mime>) -> Option<MediaType> {
+ supplied_type.as_ref().and_then(|ref mime| {
+ MimeClassifier::get_media_type(mime)
})
}
}
-pub fn as_string_option(tup: Option<(TopLevel, &'static str)>) -> Option<MimeType> {
- tup.map(|(a, b)| (a.to_owned(), b.to_owned()))
-}
-
//Interface used for composite types
trait MIMEChecker {
- fn classify(&self, data: &[u8]) -> Option<MimeType>;
+ fn classify(&self, data: &[u8]) -> Option<Mime>;
/// Validate the MIME checker configuration
fn validate(&self) -> Result<(), String>;
}
@@ -303,7 +284,7 @@ struct ByteMatcher {
pattern: &'static [u8],
mask: &'static [u8],
leading_ignore: &'static [u8],
- content_type: (TopLevel, &'static str)
+ content_type: Mime,
}
impl ByteMatcher {
@@ -328,31 +309,31 @@ impl ByteMatcher {
}
impl MIMEChecker for ByteMatcher {
- fn classify(&self, data: &[u8]) -> Option<MimeType> {
+ fn classify(&self, data: &[u8]) -> Option<Mime> {
self.matches(data).map(|_| {
- (self.content_type.0.to_owned(), self.content_type.1.to_owned())
+ self.content_type.clone()
})
}
fn validate(&self) -> Result<(), String> {
if self.pattern.len() == 0 {
return Err(format!(
- "Zero length pattern for {}/{}",
- self.content_type.0, self.content_type.1
+ "Zero length pattern for {:?}",
+ self.content_type
))
}
if self.pattern.len() != self.mask.len() {
return Err(format!(
- "Unequal pattern and mask length for {}/{}",
- self.content_type.0, self.content_type.1
+ "Unequal pattern and mask length for {:?}",
+ self.content_type
))
}
if self.pattern.iter().zip(self.mask.iter()).any(
|(&pattern, &mask)| pattern & mask != pattern
) {
return Err(format!(
- "Pattern not pre-masked for {}/{}",
- self.content_type.0, self.content_type.1
+ "Pattern not pre-masked for {:?}",
+ self.content_type
))
}
Ok(())
@@ -364,11 +345,10 @@ struct TagTerminatedByteMatcher {
}
impl MIMEChecker for TagTerminatedByteMatcher {
- fn classify(&self, data: &[u8]) -> Option<MimeType> {
+ fn classify(&self, data: &[u8]) -> Option<Mime> {
self.matcher.matches(data).and_then(|j|
if j < data.len() && (data[j] == b' ' || data[j] == b'>') {
- Some((self.matcher.content_type.0.to_owned(),
- self.matcher.content_type.1.to_owned()))
+ Some(self.matcher.content_type.clone())
} else {
None
})
@@ -405,9 +385,9 @@ impl Mp4Matcher {
}
impl MIMEChecker for Mp4Matcher {
- fn classify(&self, data: &[u8]) -> Option<MimeType> {
+ fn classify(&self, data: &[u8]) -> Option<Mime> {
if self.matches(data) {
- Some((TopLevel::Video, "mp4".to_owned()))
+ Some("video/mp4".parse().unwrap())
} else {
None
}
@@ -421,25 +401,25 @@ impl MIMEChecker for Mp4Matcher {
struct BinaryOrPlaintextClassifier;
impl BinaryOrPlaintextClassifier {
- fn classify_impl(&self, data: &[u8]) -> (TopLevel, &'static str) {
+ fn classify_impl(&self, data: &[u8]) -> Mime {
if data.starts_with(&[0xFFu8, 0xFEu8]) ||
data.starts_with(&[0xFEu8, 0xFFu8]) ||
data.starts_with(&[0xEFu8, 0xBBu8, 0xBFu8])
{
- (TopLevel::Text, "plain")
+ mime::TEXT_PLAIN
} else if data.iter().any(|&x| x <= 0x08u8 ||
x == 0x0Bu8 ||
(x >= 0x0Eu8 && x <= 0x1Au8) ||
(x >= 0x1Cu8 && x <= 0x1Fu8)) {
- (TopLevel::Application, "octet-stream")
+ mime::APPLICATION_OCTET_STREAM
} else {
- (TopLevel::Text, "plain")
+ mime::TEXT_PLAIN
}
}
}
impl MIMEChecker for BinaryOrPlaintextClassifier {
- fn classify(&self, data: &[u8]) -> Option<MimeType> {
- as_string_option(Some(self.classify_impl(data)))
+ fn classify(&self, data: &[u8]) -> Option<Mime> {
+ Some(self.classify_impl(data))
}
fn validate(&self) -> Result<(), String> {
@@ -538,7 +518,7 @@ impl GroupedClassifier {
}
}
impl MIMEChecker for GroupedClassifier {
- fn classify(&self, data: &[u8]) -> Option<MimeType> {
+ fn classify(&self, data: &[u8]) -> Option<Mime> {
self.byte_matchers
.iter()
.filter_map(|matcher| matcher.classify(data))
@@ -591,7 +571,7 @@ where T: Iterator<Item=&'a u8> + Clone {
struct FeedsClassifier;
impl FeedsClassifier {
// Implements sniffing for mislabeled feeds (https://mimesniff.spec.whatwg.org/#sniffing-a-mislabeled-feed)
- fn classify_impl(&self, data: &[u8]) -> Option<(TopLevel, &'static str)> {
+ fn classify_impl(&self, data: &[u8]) -> Option<Mime> {
// Step 4: can not be feed unless length is > 3
if data.len() < 3 {
return None;
@@ -622,11 +602,11 @@ impl FeedsClassifier {
// Step 5.2.5
if matcher.matches(b"rss") {
- return Some((TopLevel::Application, "rss+xml"));
+ return Some("application/rss+xml".parse().unwrap());
}
// Step 5.2.6
if matcher.matches(b"feed") {
- return Some((TopLevel::Application, "atom+xml"));
+ return Some("application/atom+xml".parse().unwrap());
}
// Step 5.2.7
if matcher.matches(b"rdf:RDF") {
@@ -637,7 +617,7 @@ impl FeedsClassifier {
.chain(|| eats_until(&mut matcher,
b"http://www.w3.org/1999/02/22-rdf-syntax-ns#",
b"http://purl.org/rss/1.0/")) {
- Match::StartAndEnd => return Some((TopLevel::Application, "rss+xml")),
+ Match::StartAndEnd => return Some("application/rss+xml".parse().unwrap()),
Match::DidNotMatch => {},
Match::Start => return None
}
@@ -649,8 +629,8 @@ impl FeedsClassifier {
}
impl MIMEChecker for FeedsClassifier {
- fn classify(&self, data: &[u8]) -> Option<MimeType> {
- as_string_option(self.classify_impl(data))
+ fn classify(&self, data: &[u8]) -> Option<Mime> {
+ self.classify_impl(data)
}
fn validate(&self) -> Result<(), String> {
@@ -666,7 +646,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"\x00\x00\x01\x00",
mask: b"\xFF\xFF\xFF\xFF",
- content_type: (TopLevel::Image, "x-icon"),
+ content_type: "image/x-icon".parse().unwrap(),
leading_ignore: &[]
}
}
@@ -675,7 +655,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"\x00\x00\x02\x00",
mask: b"\xFF\xFF\xFF\xFF",
- content_type: (TopLevel::Image, "x-icon"),
+ content_type: "image/x-icon".parse().unwrap(),
leading_ignore: &[]
}
}
@@ -684,7 +664,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"BM",
mask: b"\xFF\xFF",
- content_type: (TopLevel::Image, "bmp"),
+ content_type: mime::IMAGE_BMP,
leading_ignore: &[]
}
}
@@ -693,7 +673,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"GIF89a",
mask: b"\xFF\xFF\xFF\xFF\xFF\xFF",
- content_type: (TopLevel::Image, "gif"),
+ content_type: mime::IMAGE_GIF,
leading_ignore: &[]
}
}
@@ -702,7 +682,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"GIF87a",
mask: b"\xFF\xFF\xFF\xFF\xFF\xFF",
- content_type: (TopLevel::Image, "gif"),
+ content_type: mime::IMAGE_GIF,
leading_ignore: &[]
}
}
@@ -711,7 +691,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"RIFF\x00\x00\x00\x00WEBPVP",
mask: b"\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF",
- content_type: (TopLevel::Image, "webp"),
+ content_type: "image/webp".parse().unwrap(),
leading_ignore: &[]
}
}
@@ -721,7 +701,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"\x89PNG\r\n\x1A\n",
mask: b"\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF",
- content_type: (TopLevel::Image, "png"),
+ content_type: mime::IMAGE_PNG,
leading_ignore: &[]
}
}
@@ -730,7 +710,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"\xFF\xD8\xFF",
mask: b"\xFF\xFF\xFF",
- content_type: (TopLevel::Image, "jpeg"),
+ content_type: mime::IMAGE_JPEG,
leading_ignore: &[]
}
}
@@ -739,7 +719,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"\x1A\x45\xDF\xA3",
mask: b"\xFF\xFF\xFF\xFF",
- content_type: (TopLevel::Video, "webm"),
+ content_type: "video/webm".parse().unwrap(),
leading_ignore: &[]
}
}
@@ -748,7 +728,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b".snd",
mask: b"\xFF\xFF\xFF\xFF",
- content_type: (TopLevel::Audio, "basic"),
+ content_type: "audio/basic".parse().unwrap(),
leading_ignore: &[]
}
}
@@ -757,7 +737,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"FORM\x00\x00\x00\x00AIFF",
mask: b"\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF",
- content_type: (TopLevel::Audio, "aiff"),
+ content_type: "audio/aiff".parse().unwrap(),
leading_ignore: &[]
}
}
@@ -766,7 +746,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"ID3",
mask: b"\xFF\xFF\xFF",
- content_type: (TopLevel::Audio, "mpeg"),
+ content_type: "audio/mpeg".parse().unwrap(),
leading_ignore: &[]
}
}
@@ -775,7 +755,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"OggS\x00",
mask: b"\xFF\xFF\xFF\xFF\xFF",
- content_type: (TopLevel::Application, "ogg"),
+ content_type: "application/ogg".parse().unwrap(),
leading_ignore: &[]
}
}
@@ -785,7 +765,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"MThd\x00\x00\x00\x06",
mask: b"\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF",
- content_type: (TopLevel::Audio, "midi"),
+ content_type: "audio/midi".parse().unwrap(),
leading_ignore: &[]
}
}
@@ -794,7 +774,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"RIFF\x00\x00\x00\x00AVI ",
mask: b"\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF",
- content_type: (TopLevel::Video, "avi"),
+ content_type: "video/avi".parse().unwrap(),
leading_ignore: &[]
}
}
@@ -803,7 +783,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"RIFF\x00\x00\x00\x00WAVE",
mask: b"\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF",
- content_type: (TopLevel::Audio, "wave"),
+ content_type: "audio/wave".parse().unwrap(),
leading_ignore: &[]
}
}
@@ -813,7 +793,7 @@ impl ByteMatcher {
matcher: ByteMatcher {
pattern: b"<!DOCTYPE HTML",
mask: b"\xFF\xFF\xDF\xDF\xDF\xDF\xDF\xDF\xDF\xFF\xDF\xDF\xDF\xDF",
- content_type: (TopLevel::Text, "html"),
+ content_type: mime::TEXT_HTML,
leading_ignore: b"\t\n\x0C\r "
}
}
@@ -825,7 +805,7 @@ impl ByteMatcher {
matcher: ByteMatcher {
pattern: b"<HTML",
mask: b"\xFF\xDF\xDF\xDF\xDF",
- content_type: (TopLevel::Text, "html"),
+ content_type: mime::TEXT_HTML,
leading_ignore: b"\t\n\x0C\r "
}
}
@@ -837,7 +817,7 @@ impl ByteMatcher {
matcher: ByteMatcher {
pattern: b"<HEAD",
mask: b"\xFF\xDF\xDF\xDF\xDF",
- content_type: (TopLevel::Text, "html"),
+ content_type: mime::TEXT_HTML,
leading_ignore: b"\t\n\x0C\r "
}
}
@@ -849,7 +829,7 @@ impl ByteMatcher {
matcher: ByteMatcher {
pattern: b"<SCRIPT",
mask: b"\xFF\xDF\xDF\xDF\xDF\xDF\xDF",
- content_type: (TopLevel::Text, "html"),
+ content_type: mime::TEXT_HTML,
leading_ignore: b"\t\n\x0C\r "
}
}
@@ -861,7 +841,7 @@ impl ByteMatcher {
matcher: ByteMatcher {
pattern: b"<IFRAME",
mask: b"\xFF\xDF\xDF\xDF\xDF\xDF\xDF",
- content_type: (TopLevel::Text, "html"),
+ content_type: mime::TEXT_HTML,
leading_ignore: b"\t\n\x0C\r "
}
}
@@ -873,7 +853,7 @@ impl ByteMatcher {
matcher: ByteMatcher {
pattern: b"<H1",
mask: b"\xFF\xDF\xFF",
- content_type: (TopLevel::Text, "html"),
+ content_type: mime::TEXT_HTML,
leading_ignore: b"\t\n\x0C\r "
}
}
@@ -885,7 +865,7 @@ impl ByteMatcher {
matcher: ByteMatcher {
pattern: b"<DIV",
mask: b"\xFF\xDF\xDF\xDF",
- content_type: (TopLevel::Text, "html"),
+ content_type: mime::TEXT_HTML,
leading_ignore: b"\t\n\x0C\r "
}
}
@@ -897,7 +877,7 @@ impl ByteMatcher {
matcher: ByteMatcher {
pattern: b"<FONT",
mask: b"\xFF\xDF\xDF\xDF\xDF",
- content_type: (TopLevel::Text, "html"),
+ content_type: mime::TEXT_HTML,
leading_ignore: b"\t\n\x0C\r "
}
}
@@ -909,7 +889,7 @@ impl ByteMatcher {
matcher: ByteMatcher {
pattern: b"<TABLE",
mask: b"\xFF\xDF\xDF\xDF\xDF\xDF",
- content_type: (TopLevel::Text, "html"),
+ content_type: mime::TEXT_HTML,
leading_ignore: b"\t\n\x0C\r "
}
}
@@ -921,7 +901,7 @@ impl ByteMatcher {
matcher: ByteMatcher {
pattern: b"<A",
mask: b"\xFF\xDF",
- content_type: (TopLevel::Text, "html"),
+ content_type: mime::TEXT_HTML,
leading_ignore: b"\t\n\x0C\r "
}
}
@@ -933,7 +913,7 @@ impl ByteMatcher {
matcher: ByteMatcher {
pattern: b"<STYLE",
mask: b"\xFF\xDF\xDF\xDF\xDF\xDF",
- content_type: (TopLevel::Text, "html"),
+ content_type: mime::TEXT_HTML,
leading_ignore: b"\t\n\x0C\r "
}
}
@@ -945,7 +925,7 @@ impl ByteMatcher {
matcher: ByteMatcher {
pattern: b"<TITLE",
mask: b"\xFF\xDF\xDF\xDF\xDF\xDF",
- content_type: (TopLevel::Text, "html"),
+ content_type: mime::TEXT_HTML,
leading_ignore: b"\t\n\x0C\r "
}
}
@@ -957,7 +937,7 @@ impl ByteMatcher {
matcher: ByteMatcher {
pattern: b"<B",
mask: b"\xFF\xDF",
- content_type: (TopLevel::Text, "html"),
+ content_type: mime::TEXT_HTML,
leading_ignore: b"\t\n\x0C\r "
}
}
@@ -969,7 +949,7 @@ impl ByteMatcher {
matcher: ByteMatcher {
pattern: b"<BODY",
mask: b"\xFF\xDF\xDF\xDF\xDF",
- content_type: (TopLevel::Text, "html"),
+ content_type: mime::TEXT_HTML,
leading_ignore: b"\t\n\x0C\r "
}
}
@@ -981,7 +961,7 @@ impl ByteMatcher {
matcher: ByteMatcher {
pattern: b"<BR",
mask: b"\xFF\xDF\xDF",
- content_type: (TopLevel::Text, "html"),
+ content_type: mime::TEXT_HTML,
leading_ignore: b"\t\n\x0C\r "
}
}
@@ -993,7 +973,7 @@ impl ByteMatcher {
matcher: ByteMatcher {
pattern: b"<P",
mask: b"\xFF\xDF",
- content_type: (TopLevel::Text, "html"),
+ content_type: mime::TEXT_HTML,
leading_ignore: b"\t\n\x0C\r "
}
}
@@ -1005,7 +985,7 @@ impl ByteMatcher {
matcher: ByteMatcher {
pattern: b"<!--",
mask: b"\xFF\xFF\xFF\xFF",
- content_type: (TopLevel::Text, "html"),
+ content_type: mime::TEXT_HTML,
leading_ignore: b"\t\n\x0C\r "
}
}
@@ -1016,7 +996,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"<?xml",
mask: b"\xFF\xFF\xFF\xFF\xFF",
- content_type: (TopLevel::Text, "xml"),
+ content_type: mime::TEXT_XML,
leading_ignore: b"\t\n\x0C\r "
}
}
@@ -1025,7 +1005,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"%PDF-",
mask: b"\xFF\xFF\xFF\xFF\xFF",
- content_type: (TopLevel::Application, "pdf"),
+ content_type: mime::APPLICATION_PDF,
leading_ignore: &[]
}
}
@@ -1038,7 +1018,7 @@ impl ByteMatcher {
mask: b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\xFF\xFF",
- content_type: (TopLevel::Application, "vnd.ms-fontobject"),
+ content_type: "application/vnd.ms-fontobject".parse().unwrap(),
leading_ignore: &[]
}
}
@@ -1047,7 +1027,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"\x00\x01\x00\x00",
mask: b"\xFF\xFF\xFF\xFF",
- content_type: (TopLevel::Application, "font-sfnt"),
+ content_type: "application/font-sfnt".parse().unwrap(),
leading_ignore: &[]
}
}
@@ -1056,7 +1036,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"OTTO",
mask: b"\xFF\xFF\xFF\xFF",
- content_type: (TopLevel::Application, "font-sfnt"),
+ content_type: "application/font-sfnt".parse().unwrap(),
leading_ignore: &[]
}
}
@@ -1065,7 +1045,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"ttcf",
mask: b"\xFF\xFF\xFF\xFF",
- content_type: (TopLevel::Application, "font-sfnt"),
+ content_type: "application/font-sfnt".parse().unwrap(),
leading_ignore: &[]
}
}
@@ -1074,7 +1054,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"wOFF",
mask: b"\xFF\xFF\xFF\xFF",
- content_type: (TopLevel::Application, "font-woff"),
+ content_type: "application/font-woff".parse().unwrap(),
leading_ignore: &[]
}
}
@@ -1083,7 +1063,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"\x1F\x8B\x08",
mask: b"\xFF\xFF\xFF",
- content_type: (TopLevel::Application, "x-gzip"),
+ content_type: "application/x-gzip".parse().unwrap(),
leading_ignore: &[]
}
}
@@ -1092,7 +1072,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"PK\x03\x04",
mask: b"\xFF\xFF\xFF\xFF",
- content_type: (TopLevel::Application, "zip"),
+ content_type: "application/zip".parse().unwrap(),
leading_ignore: &[]
}
}
@@ -1101,7 +1081,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"Rar \x1A\x07\x00",
mask: b"\xFF\xFF\xFF\xFF\xFF\xFF\xFF",
- content_type: (TopLevel::Application, "x-rar-compressed"),
+ content_type: "application/x-rar-compressed".parse().unwrap(),
leading_ignore: &[]
}
}
@@ -1110,7 +1090,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"%!PS-Adobe-",
mask: b"\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF",
- content_type: (TopLevel::Application, "postscript"),
+ content_type: "application/postscript".parse().unwrap(),
leading_ignore: &[]
}
}
@@ -1119,7 +1099,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"\xFE\xFF\x00\x00",
mask: b"\xFF\xFF\x00\x00",
- content_type: (TopLevel::Text, "plain"),
+ content_type: mime::TEXT_PLAIN,
leading_ignore: &[]
}
}
@@ -1128,7 +1108,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"\xFF\xFE\x00\x00",
mask: b"\xFF\xFF\x00\x00",
- content_type: (TopLevel::Text, "plain"),
+ content_type: mime::TEXT_PLAIN,
leading_ignore: &[]
}
}
@@ -1137,7 +1117,7 @@ impl ByteMatcher {
ByteMatcher {
pattern: b"\xEF\xBB\xBF\x00",
mask: b"\xFF\xFF\xFF\x00",
- content_type: (TopLevel::Text, "plain"),
+ content_type: mime::TEXT_PLAIN,
leading_ignore: &[]
}
}