diff --git a/Cargo.lock b/Cargo.lock index d945407f3ec..b810a5bdd43 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6237,6 +6237,7 @@ dependencies = [ "log", "malloc_size_of", "malloc_size_of_derive", + "mime", "new_debug_unreachable", "num-derive", "num-integer", diff --git a/components/net/mime_classifier.rs b/components/net/mime_classifier.rs index 2a32fcf9948..f3ced86dbc5 100644 --- a/components/net/mime_classifier.rs +++ b/components/net/mime_classifier.rs @@ -461,6 +461,8 @@ impl GroupedClassifier { fn image_classifer() -> GroupedClassifier { GroupedClassifier { byte_matchers: vec![ + // Keep this in sync with 'is_supported_mime_type' from + // components/style/servo/media_queries.rs Box::new(ByteMatcher::image_x_icon()), Box::new(ByteMatcher::image_x_icon_cursor()), Box::new(ByteMatcher::image_bmp()), diff --git a/components/style/Cargo.toml b/components/style/Cargo.toml index a88ccf0fd88..70219416452 100644 --- a/components/style/Cargo.toml +++ b/components/style/Cargo.toml @@ -50,6 +50,7 @@ lazy_static = "1" log = { version = "0.4", features = ["std"] } malloc_size_of = { path = "../malloc_size_of" } malloc_size_of_derive = "0.1" +mime = "0.3.13" new_debug_unreachable = "1.0" num-derive = "0.3" num-integer = "0.1" diff --git a/components/style/servo/media_queries.rs b/components/style/servo/media_queries.rs index 4b535a9b875..cee76053ec0 100644 --- a/components/style/servo/media_queries.rs +++ b/components/style/servo/media_queries.rs @@ -19,6 +19,7 @@ use app_units::Au; use cssparser::RGBA; use euclid::default::Size2D as UntypedSize2D; use euclid::{Scale, SideOffsets2D, Size2D}; +use mime::Mime; use std::sync::atomic::{AtomicBool, AtomicU32, Ordering}; use style_traits::viewport::ViewportConstraints; use style_traits::{CSSPixel, DevicePixel}; @@ -202,6 +203,23 @@ impl Device { pub fn safe_area_insets(&self) -> SideOffsets2D { SideOffsets2D::zero() } + + /// Returns true if the given MIME type is supported + pub fn is_supported_mime_type(&self, mime_type: &str) -> bool { + match mime_type.parse::() { + Ok(m) => { + // Keep this in sync with 'image_classifer' from + // components/net/mime_classifier.rs + m == mime::IMAGE_BMP + || m == mime::IMAGE_GIF + || m == mime::IMAGE_PNG + || m == mime::IMAGE_JPEG + || m == "image/x-icon" + || m == "image/webp" + } + _ => false, + } + } } /// https://drafts.csswg.org/mediaqueries-4/#width