mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Fix: Add support for stylesheet MIME type quirk in quirks mode (#36338)
This PR implements the HTML spec quirk for stylesheets: https://html.spec.whatwg.org/multipage/#link-type-stylesheet The implementation adds a check in `stylesheet_loader.rs` to handle this quirk condition correctly, and adds a new WPT test to verify that same-origin non-CSS MIME type resources are properly treated as CSS in quirks mode. Testing: Added a new WPT test (`quirk-origin-check-positive.html`) that verifies the positive case for this quirk. Fixes: https://github.com/servo/servo/issues/36324 --------- Signed-off-by: saku-1101 <sakupi1101@outlook.jp>
This commit is contained in:
parent
6031a12fd1
commit
b4fd9ebb0e
4 changed files with 45 additions and 1 deletions
|
@ -15,6 +15,7 @@ use net_traits::{
|
|||
};
|
||||
use servo_arc::Arc;
|
||||
use servo_url::ServoUrl;
|
||||
use style::context::QuirksMode;
|
||||
use style::media_queries::MediaList;
|
||||
use style::parser::ParserContext;
|
||||
use style::shared_lock::{Locked, SharedRwLock};
|
||||
|
@ -164,7 +165,16 @@ impl FetchResponseListener for StylesheetContext {
|
|||
let is_css = metadata.content_type.is_some_and(|ct| {
|
||||
let mime: Mime = ct.into_inner().into();
|
||||
mime.type_() == mime::TEXT && mime.subtype() == mime::CSS
|
||||
});
|
||||
}) || (
|
||||
// Quirk: If the document has been set to quirks mode,
|
||||
// has the same origin as the URL of the external resource,
|
||||
// and the Content-Type metadata of the external resource
|
||||
// is not a supported style sheet type, the user agent must
|
||||
// instead assume it to be text/css.
|
||||
// <https://html.spec.whatwg.org/multipage/#link-type-stylesheet>
|
||||
document.quirks_mode() == QuirksMode::Quirks &&
|
||||
document.origin().immutable().clone() == metadata.final_url.origin()
|
||||
);
|
||||
|
||||
let data = if is_css {
|
||||
let data = std::mem::take(&mut self.data);
|
||||
|
|
15
tests/wpt/meta/MANIFEST.json
vendored
15
tests/wpt/meta/MANIFEST.json
vendored
|
@ -474568,6 +474568,14 @@
|
|||
"80fbe8db6cbfc1f6e478b6c3cc8d2ae3c707c053",
|
||||
[]
|
||||
]
|
||||
},
|
||||
"stylesheet": {
|
||||
"resources": {
|
||||
"quirk-stylesheet.css.txt": [
|
||||
"d2ae382583192b0284aa44c038811e7254a9386b",
|
||||
[]
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"meta": {
|
||||
|
@ -719907,6 +719915,13 @@
|
|||
}
|
||||
},
|
||||
"stylesheet": {
|
||||
"quirk-origin-check-positive.html": [
|
||||
"02ab832cbe207c9bbfb1d16cbdc9a685b474372c",
|
||||
[
|
||||
null,
|
||||
{}
|
||||
]
|
||||
],
|
||||
"quirk-origin-check-recursive-import.html": [
|
||||
"c0053f1f29ad8f23dbebdd41b38dbdd8537e9e27",
|
||||
[
|
||||
|
|
18
tests/wpt/tests/html/links/stylesheet/quirk-origin-check-positive.html
vendored
Normal file
18
tests/wpt/tests/html/links/stylesheet/quirk-origin-check-positive.html
vendored
Normal file
|
@ -0,0 +1,18 @@
|
|||
<!-- quirks -->
|
||||
<title>Same-origin stylesheet with non-CSS MIME type quirk</title>
|
||||
<link rel="help" href="https://html.spec.whatwg.org/multipage/#link-type-stylesheet">
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<link rel="stylesheet" href="resources/quirk-stylesheet.css.txt">
|
||||
<p class="test">This text should be green.</p>
|
||||
<script>
|
||||
setup({ single_test: true });
|
||||
onload = () => {
|
||||
assert_equals(
|
||||
getComputedStyle(document.querySelector('.test')).color,
|
||||
'rgb(0, 128, 0)',
|
||||
"Same-origin stylesheet with non-CSS MIME type should be applied in quirks mode"
|
||||
);
|
||||
done();
|
||||
};
|
||||
</script>
|
1
tests/wpt/tests/html/links/stylesheet/resources/quirk-stylesheet.css.txt
vendored
Normal file
1
tests/wpt/tests/html/links/stylesheet/resources/quirk-stylesheet.css.txt
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
.test { color: green; }
|
Loading…
Add table
Add a link
Reference in a new issue