Skip to content

Commit 87de35f

Browse files
committed
Bug 2024601 - patch 6 - Also support env(), and add a couple tests for it. r=firefox-style-system-reviewers,dshin
Differential Revision: https://phabricator.services.mozilla.com/D290988
1 parent b1ff059 commit 87de35f

4 files changed

Lines changed: 18 additions & 11 deletions

File tree

servo/components/style/properties/mod.rs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -734,6 +734,15 @@ impl ShorthandId {
734734
}
735735
}
736736

737+
/// Return the names of arbitrary substitution functions that are enabled.
738+
pub fn enabled_arbitrary_substitution_functions() -> &'static [&'static str] {
739+
if static_prefs::pref!("layout.css.attr.enabled") {
740+
&["var", "env", "attr"]
741+
} else {
742+
&["var", "env"]
743+
}
744+
}
745+
737746
fn parse_non_custom_property_declaration_value_into<'i>(
738747
declarations: &mut SourcePropertyDeclaration,
739748
context: &ParserContext,
@@ -765,13 +774,7 @@ fn parse_non_custom_property_declaration_value_into<'i>(
765774
};
766775

767776
input.reset(&start);
768-
input.look_for_arbitrary_substitution_functions(
769-
if static_prefs::pref!("layout.css.attr.enabled") {
770-
&["var", "env", "attr"]
771-
} else {
772-
&["var", "env"]
773-
},
774-
);
777+
input.look_for_arbitrary_substitution_functions(enabled_arbitrary_substitution_functions());
775778

776779
let err = match parse_entirely_into(declarations, input) {
777780
Ok(()) => {

servo/components/style/queries/feature_expression.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use crate::custom_properties::{
1414
use crate::derives::*;
1515
use crate::dom::AttributeTracker;
1616
use crate::parser::{Parse, ParserContext};
17-
use crate::properties::CSSWideKeyword;
17+
use crate::properties::{self, CSSWideKeyword};
1818
use crate::properties_and_values::value::{ComputedValueComponent as Component, ValueInner};
1919
use crate::selector_map::PrecomputedHashSet;
2020
use crate::str::{starts_with_ignore_ascii_case, string_as_ascii_lowercase};
@@ -810,9 +810,9 @@ impl QueryExpressionValue {
810810
)
811811
};
812812

813-
if name.eq_ignore_ascii_case("var")
814-
|| (static_prefs::pref!("layout.css.attr.enabled")
815-
&& name.eq_ignore_ascii_case("attr"))
813+
if properties::enabled_arbitrary_substitution_functions()
814+
.iter()
815+
.any(|n| n.eq_ignore_ascii_case(name))
816816
{
817817
return Ok(Self::Function(Box::new(parse_func(input)?)));
818818
}

testing/web-platform/tests/css/css-conditional/container-queries/at-container-style-parsing.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
test_cq_condition_known('style(var(--p) < calc(100 + 200))');
4545
test_cq_condition_known('style(attr(data-foo type(<number>)) < var(--p) < var(--q))');
4646
test_cq_condition_known('style(--foo < initial)');
47+
test_cq_condition_known('style(10px <= env(safe-area-inset-top) < 20px)');
4748

4849
test_cq_condition_unknown('style(--foo: bar;)');
4950
test_cq_condition_unknown('style(style(--foo: bar))');

testing/web-platform/tests/css/css-conditional/container-queries/query-evaluation-style.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,4 +271,7 @@
271271
[['--x', '3'], ['--y', '3'], ['--z', '1']],
272272
true);
273273

274+
// test queries with env(), assuming "safe area" insets will never be negative.
275+
test_query('style(0px <= env(safe-area-inset-top))', true);
276+
test_query('style(0px > env(safe-area-inset-bottom))', false);
274277
</script>

0 commit comments

Comments
 (0)