diff --git a/components/style/gecko/generated/bindings.rs b/components/style/gecko/generated/bindings.rs index af2868516c07..4fef8316a704 100644 --- a/components/style/gecko/generated/bindings.rs +++ b/components/style/gecko/generated/bindings.rs @@ -1874,6 +1874,10 @@ extern "C" { pub fn Servo_StyleSet_MediumFeaturesChanged(set: RawServoStyleSetBorrowed) -> bool; } +extern "C" { + pub fn Servo_StyleSet_CompatModeChanged(raw_data: + RawServoStyleSetBorrowed); +} extern "C" { pub fn Servo_StyleSet_AppendStyleSheet(set: RawServoStyleSetBorrowed, sheet: RawServoStyleSheetBorrowed, diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index 5b26be904c66..d25f1fd08af6 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -81,6 +81,7 @@ use style::gecko_bindings::structs::StyleRuleInclusion; use style::gecko_bindings::structs::URLExtraData; use style::gecko_bindings::structs::nsCSSValueSharedList; use style::gecko_bindings::structs::nsCompatibility; +use style::gecko_bindings::structs::nsIDocument; use style::gecko_bindings::structs::nsStyleTransformMatrix::MatrixTransformOperator; use style::gecko_bindings::structs::nsresult; use style::gecko_bindings::sugar::ownership::{FFIArcHelpers, HasFFI, HasArcFFI, HasBoxFFI}; @@ -1546,6 +1547,21 @@ pub extern "C" fn Servo_StyleSet_Drop(data: RawServoStyleSetOwned) { let _ = data.into_box::(); } + +/// Updating the stylesheets and redoing selector matching is always happens +/// before the document element is inserted. Therefore we don't need to call +/// `force_dirty` here. +#[no_mangle] +pub extern "C" fn Servo_StyleSet_CompatModeChanged(raw_data: RawServoStyleSetBorrowed) { + let mut data = PerDocumentStyleData::from_ffi(raw_data).borrow_mut(); + let quirks_mode = unsafe { + (*(*data.stylist.device().pres_context).mDocument + .raw::()).mCompatMode + }; + + data.stylist.set_quirks_mode(quirks_mode.into()); +} + fn parse_property_into(declarations: &mut SourcePropertyDeclaration, property_id: PropertyId, value: *const nsACString,