diff --git a/components/net/mime_classifier.rs b/components/net/mime_classifier.rs index 90f62efa4ef3..ab7a96867554 100644 --- a/components/net/mime_classifier.rs +++ b/components/net/mime_classifier.rs @@ -26,6 +26,7 @@ pub enum ApacheBugFlag { OFF } +#[derive(PartialEq)] pub enum NoSniffFlag { ON, OFF @@ -81,14 +82,18 @@ impl MIMEClassifier { //some sort of iterator over the classifiers might be better? fn sniff_unknown_type(&self, no_sniff_flag: NoSniffFlag, data: &[u8]) -> Option<(String, String)> { - match no_sniff_flag { - NoSniffFlag::OFF => self.scriptable_classifier.classify(data), - _ => None - }.or_else(|| self.plaintext_classifier.classify(data)) - .or_else(|| self.image_classifier.classify(data)) - .or_else(|| self.audio_video_classifier.classify(data)) - .or_else(|| self.archive_classifier.classify(data)) - .or_else(|| self.binary_or_plaintext.classify(data)) + let should_sniff_scriptable = no_sniff_flag == NoSniffFlag::OFF; + let sniffed = if should_sniff_scriptable { + self.scriptable_classifier.classify(data) + } else { + None + }; + + sniffed.or_else(|| self.plaintext_classifier.classify(data)) + .or_else(|| self.image_classifier.classify(data)) + .or_else(|| self.audio_video_classifier.classify(data)) + .or_else(|| self.archive_classifier.classify(data)) + .or_else(|| self.binary_or_plaintext.classify(data)) } fn sniff_text_or_data(&self, data: &[u8]) -> Option<(String, String)> { diff --git a/tests/unit/net/mime_classifier.rs b/tests/unit/net/mime_classifier.rs index 84870c2f904d..f7826de0d577 100644 --- a/tests/unit/net/mime_classifier.rs +++ b/tests/unit/net/mime_classifier.rs @@ -529,3 +529,13 @@ fn test_sniff_octet_stream_apache_flag_on() { ApacheBugFlag::ON); } +#[test] +fn test_sniff_mp4_video_apache_flag_on() { + test_sniff_with_flags(&PathBuf::from("video/mp4/test.mp4"), + "video", + "mp4", + None, + NoSniffFlag::OFF, + ApacheBugFlag::ON); +} +