LibWeb/MimeSniff: Add non-standard text or binary context sniffing

This is used in cases where the spec expects us to only run the
"rules for distinguishing if a resource is a text or binary" algo.
This commit is contained in:
Kemal Zebari 2024-02-01 16:32:52 -08:00 committed by Tim Flynn
parent 8a974ca91a
commit 8e5410347b
Notes: sideshowbarker 2024-07-18 00:54:03 +09:00
3 changed files with 16 additions and 0 deletions

View file

@ -320,3 +320,13 @@ TEST_CASE(determine_computed_mime_type_in_a_font_context)
EXPECT_EQ(mime_type, computed_mime_type.essence());
}
TEST_CASE(determine_computed_mime_type_given_text_or_binary_context)
{
auto supplied_type = MUST(Web::MimeSniff::MimeType::create("text"_string, "plain"_string));
auto computed_mime_type = MUST(Web::MimeSniff::Resource::sniff("\x00"sv.bytes(), Web::MimeSniff::SniffingConfiguration {
.sniffing_context = Web::MimeSniff::SniffingContext::TextOrBinary,
.supplied_type = supplied_type,
}));
EXPECT_EQ("application/octet-stream"sv, MUST(computed_mime_type.serialized()));
}

View file

@ -680,6 +680,8 @@ ErrorOr<void> Resource::context_specific_sniffing_algorithm(SniffingContext snif
return rules_for_sniffing_audio_or_video_specifically();
if (sniffing_context == SniffingContext::Font)
return rules_for_sniffing_fonts_specifically();
if (sniffing_context == SniffingContext::TextOrBinary)
return rules_for_distinguishing_if_a_resource_is_text_or_binary();
return {};
}

View file

@ -16,6 +16,10 @@ enum class SniffingContext {
Image,
AudioOrVideo,
Font,
// Non-standard but used in cases where the spec expects us to only run
// https://mimesniff.spec.whatwg.org/#sniffing-a-mislabeled-binary-resource
TextOrBinary,
};
struct SniffingConfiguration {