diff --git a/components/style/gecko/arc_types.rs b/components/style/gecko/arc_types.rs index f733349e203..134f3d3062f 100644 --- a/components/style/gecko/arc_types.rs +++ b/components/style/gecko/arc_types.rs @@ -9,7 +9,7 @@ #![allow(non_snake_case, missing_docs)] use gecko_bindings::bindings::{RawServoMediaList, RawServoMediaRule, RawServoNamespaceRule, RawServoPageRule}; -use gecko_bindings::bindings::{RawServoStyleSheet, RawServoImportRule}; +use gecko_bindings::bindings::{RawServoStyleSheet, RawServoImportRule, RawServoSupportsRule}; use gecko_bindings::bindings::{ServoComputedValues, ServoCssRules}; use gecko_bindings::structs::{RawServoAnimationValue, RawServoAnimationValueMap}; use gecko_bindings::structs::{RawServoDeclarationBlock, RawServoStyleRule}; @@ -19,7 +19,8 @@ use parking_lot::RwLock; use properties::{ComputedValues, PropertyDeclarationBlock}; use properties::animated_properties::{AnimationValue, AnimationValueMap}; use shared_lock::Locked; -use stylesheets::{CssRules, Stylesheet, StyleRule, ImportRule, MediaRule, NamespaceRule, PageRule}; +use stylesheets::{CssRules, Stylesheet, StyleRule, ImportRule, MediaRule}; +use stylesheets::{NamespaceRule, PageRule, SupportsRule}; macro_rules! impl_arc_ffi { ($servo_type:ty => $gecko_type:ty [$addref:ident, $release:ident]) => { @@ -75,3 +76,6 @@ impl_arc_ffi!(Locked => RawServoNamespaceRule impl_arc_ffi!(Locked => RawServoPageRule [Servo_PageRule_AddRef, Servo_PageRule_Release]); + +impl_arc_ffi!(Locked => RawServoSupportsRule + [Servo_SupportsRule_AddRef, Servo_SupportsRule_Release]); diff --git a/ports/geckolib/glue.rs b/ports/geckolib/glue.rs index 4b3c512a1ff..e06e235cbab 100644 --- a/ports/geckolib/glue.rs +++ b/ports/geckolib/glue.rs @@ -36,6 +36,7 @@ use style::gecko_bindings::bindings::{RawServoPageRule, RawServoPageRuleBorrowed use style::gecko_bindings::bindings::{RawServoStyleSetBorrowed, RawServoStyleSetOwned}; use style::gecko_bindings::bindings::{RawServoStyleSheetBorrowed, ServoComputedValuesBorrowed}; use style::gecko_bindings::bindings::{RawServoStyleSheetStrong, ServoComputedValuesStrong}; +use style::gecko_bindings::bindings::{RawServoSupportsRule, RawServoSupportsRuleBorrowed}; use style::gecko_bindings::bindings::{ServoCssRulesBorrowed, ServoCssRulesStrong}; use style::gecko_bindings::bindings::{nsACString, nsAString}; use style::gecko_bindings::bindings::Gecko_AnimationAppendKeyframe; @@ -84,7 +85,7 @@ use style::shared_lock::{SharedRwLock, SharedRwLockReadGuard, StylesheetGuards, use style::string_cache::Atom; use style::stylesheets::{CssRule, CssRules, CssRuleType, CssRulesHelpers}; use style::stylesheets::{ImportRule, MediaRule, NamespaceRule, Origin}; -use style::stylesheets::{PageRule, Stylesheet, StyleRule}; +use style::stylesheets::{PageRule, Stylesheet, StyleRule, SupportsRule}; use style::stylesheets::StylesheetLoader as StyleStylesheetLoader; use style::supports::parse_condition_or_declaration; use style::thread_state; @@ -821,6 +822,13 @@ impl_basic_rule_funcs! { (Page, PageRule, RawServoPageRule), to_css: Servo_PageRule_GetCssText, } +impl_group_rule_funcs! { (Supports, SupportsRule, RawServoSupportsRule), + get_rules: Servo_SupportsRule_GetRules, + getter: Servo_CssRules_GetSupportsRuleAt, + debug: Servo_SupportsRule_Debug, + to_css: Servo_SupportsRule_GetCssText, +} + #[no_mangle] pub extern "C" fn Servo_CssRules_GetFontFaceRuleAt(rules: ServoCssRulesBorrowed, index: u32) -> *mut nsCSSFontFaceRule @@ -892,6 +900,14 @@ pub extern "C" fn Servo_PageRule_SetStyle(rule: RawServoPageRuleBorrowed, }) } +#[no_mangle] +pub extern "C" fn Servo_SupportsRule_GetConditionText(rule: RawServoSupportsRuleBorrowed, + result: *mut nsAString) { + read_locked_arc(rule, |rule: &SupportsRule| { + rule.condition.to_css(unsafe { result.as_mut().unwrap() }).unwrap(); + }) +} + #[no_mangle] pub extern "C" fn Servo_ComputedValues_GetForAnonymousBox(parent_style_or_null: ServoComputedValuesBorrowedOrNull, pseudo_tag: *mut nsIAtom,