aboutsummaryrefslogtreecommitdiffstats
path: root/components
diff options
context:
space:
mode:
Diffstat (limited to 'components')
-rw-r--r--components/script/stylesheet_loader.rs12
1 files changed, 11 insertions, 1 deletions
diff --git a/components/script/stylesheet_loader.rs b/components/script/stylesheet_loader.rs
index 6290d2709cc..7c7f7f98a07 100644
--- a/components/script/stylesheet_loader.rs
+++ b/components/script/stylesheet_loader.rs
@@ -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);