diff --git a/dom/webidl/CSSContainerRule.webidl b/dom/webidl/CSSContainerRule.webidl index 0a4c96fdbaaf..4257effcd77c 100644 --- a/dom/webidl/CSSContainerRule.webidl +++ b/dom/webidl/CSSContainerRule.webidl @@ -12,7 +12,4 @@ interface CSSContainerRule : CSSConditionRule { readonly attribute UTF8String containerName; readonly attribute UTF8String containerQuery; - - // Performs a container query look-up for an element. - [ChromeOnly] Element? queryContainerFor(Element element); }; diff --git a/layout/style/CSSContainerRule.cpp b/layout/style/CSSContainerRule.cpp index dfaaded7f452..35a11ab6da42 100644 --- a/layout/style/CSSContainerRule.cpp +++ b/layout/style/CSSContainerRule.cpp @@ -63,11 +63,6 @@ void CSSContainerRule::GetContainerQuery(nsACString& aQuery) const { Servo_ContainerRule_GetContainerQuery(mRawRule, &aQuery); } -Element* CSSContainerRule::QueryContainerFor(const Element& aElement) const { - return const_cast( - Servo_ContainerRule_QueryContainerFor(mRawRule, &aElement)); -} - void CSSContainerRule::SetRawAfterClone(RefPtr aRaw) { mRawRule = std::move(aRaw); diff --git a/layout/style/CSSContainerRule.h b/layout/style/CSSContainerRule.h index e6ef979099ee..fbb8dbd189fa 100644 --- a/layout/style/CSSContainerRule.h +++ b/layout/style/CSSContainerRule.h @@ -40,8 +40,6 @@ class CSSContainerRule final : public css::ConditionRule { JSObject* WrapObject(JSContext* aCx, JS::Handle aGivenProto) override; - Element* QueryContainerFor(const Element&) const; - private: virtual ~CSSContainerRule(); diff --git a/layout/style/test/mochitest.ini b/layout/style/test/mochitest.ini index f81c2897423d..6eba68d67a21 100644 --- a/layout/style/test/mochitest.ini +++ b/layout/style/test/mochitest.ini @@ -9,7 +9,6 @@ prefs = gfx.omta.background-color=true gfx.font_loader.delay=0 layout.css.accent-color.enabled=true - layout.css.container-queries.enabled=true layout.css.constructable-stylesheets.enabled=true layout.css.individual-transform.enabled=true layout.css.motion-path.enabled=true @@ -428,4 +427,3 @@ skip-if = xorigin # Crashes, Assertion failure: mInFlightProcessId == 0, at /bui [test_use_counters.html] skip-if = !nightly_build [test_medialist_privilege.html] -[test_query_container_for.html] diff --git a/layout/style/test/property_database.js b/layout/style/test/property_database.js index dff4a6df5edd..43c4e125c447 100644 --- a/layout/style/test/property_database.js +++ b/layout/style/test/property_database.js @@ -12972,8 +12972,10 @@ if (IsCSSPropertyPrefEnabled("layout.css.container-queries.enabled")) { other_values: [ "style", "inline-size", + "block-size", "size", "style inline-size", + "block-size style", "size style", ], invalid_values: [ @@ -12984,8 +12986,6 @@ if (IsCSSPropertyPrefEnabled("layout.css.container-queries.enabled")) { "style style", "inline-size style inline-size", "inline-size block-size", - "block-size", - "block-size style", "size inline-size", "size block-size", ], @@ -13004,8 +13004,8 @@ if (IsCSSPropertyPrefEnabled("layout.css.container-queries.enabled")) { type: CSS_TYPE_TRUE_SHORTHAND, subproperties: ["container-type", "container-name"], initial_values: ["none"], - other_values: ["foo / size", "foo bar / size", "foo / inline-size", "foo"], - invalid_values: ["size / foo", "size / foo bar"], + other_values: ["size", "size / foo bar", "inline-size style / foo"], + invalid_values: ["foo / size", "foo bar / size"], }; } diff --git a/layout/style/test/test_query_container_for.html b/layout/style/test/test_query_container_for.html deleted file mode 100644 index 90dca9fab9ee..000000000000 --- a/layout/style/test/test_query_container_for.html +++ /dev/null @@ -1,62 +0,0 @@ - -Test for bug 1789191 - - - - -
- -
-
-
-
-
-
-
- - diff --git a/servo/components/style/stylesheets/container_rule.rs b/servo/components/style/stylesheets/container_rule.rs index a11f2f34b263..bc076ade89c1 100644 --- a/servo/components/style/stylesheets/container_rule.rs +++ b/servo/components/style/stylesheets/container_rule.rs @@ -102,16 +102,6 @@ pub struct ContainerCondition { flags: FeatureFlags, } -/// The result of a successful container query lookup. -pub struct ContainerLookupResult { - /// The relevant container. - pub element: E, - /// The sizing / writing-mode information of the container. - pub info: ContainerInfo, - /// The style of the element. - pub style: Arc, -} - impl ContainerCondition { /// Parse a container condition. pub fn parse<'a>( @@ -130,17 +120,17 @@ impl ContainerCondition { Ok(Self { name, condition, flags }) } - fn valid_container_info(&self, potential_container: E) -> Option> + fn valid_container_info(&self, potential_container: E) -> Option<(ContainerInfo, Arc)> where E: TElement, { use crate::values::computed::ContainerType; fn container_type_axes(ty_: ContainerType, wm: WritingMode) -> FeatureFlags { - if ty_.contains(ContainerType::SIZE) { + if ty_.intersects(ContainerType::SIZE) { return FeatureFlags::all_container_axes() } - if ty_.contains(ContainerType::INLINE_SIZE) { + if ty_.intersects(ContainerType::INLINE_SIZE) { let physical_axis = if wm.is_vertical() { FeatureFlags::CONTAINER_REQUIRES_HEIGHT_AXIS } else { @@ -176,21 +166,16 @@ impl ContainerCondition { let size = potential_container.primary_box_size(); let style = style.clone(); - Some(ContainerLookupResult { - element: potential_container, - info: ContainerInfo { size, wm }, - style, - }) + Some((ContainerInfo { size, wm }, style)) } - /// Performs container lookup for a given element. - pub fn find_container(&self, mut e: E) -> Option> + fn find_container(&self, mut e: E) -> Option<(ContainerInfo, Arc)> where E: TElement, { while let Some(element) = e.traversal_parent() { - if let Some(result) = self.valid_container_info(element) { - return Some(result); + if let Some(info) = self.valid_container_info(element) { + return Some(info); } e = element; } @@ -203,8 +188,7 @@ impl ContainerCondition { where E: TElement, { - let result = self.find_container(element); - let info = result.map(|r| (r.info, r.style)); + let info = self.find_container(element); Context::for_container_query_evaluation(device, info, |context| { self.condition.matches(context) }) diff --git a/servo/ports/geckolib/glue.rs b/servo/ports/geckolib/glue.rs index 531129b90054..6d5b009b9652 100644 --- a/servo/ports/geckolib/glue.rs +++ b/servo/ports/geckolib/glue.rs @@ -2983,16 +2983,6 @@ pub extern "C" fn Servo_ContainerRule_GetContainerQuery( }) } -#[no_mangle] -pub extern "C" fn Servo_ContainerRule_QueryContainerFor( - rule: &RawServoContainerRule, - element: &RawGeckoElement, -) -> *const RawGeckoElement { - read_locked_arc(rule, |rule: &ContainerRule| { - rule.condition.find_container(GeckoElement(element)).map_or(ptr::null(), |result| result.element.0) - }) -} - #[no_mangle] pub extern "C" fn Servo_ContainerRule_GetContainerName( rule: &RawServoContainerRule, diff --git a/testing/web-platform/meta/css/css-contain/container-queries/container-selection.html.ini b/testing/web-platform/meta/css/css-contain/container-queries/container-selection.html.ini index c314e3501e30..82a4b39bac7d 100644 --- a/testing/web-platform/meta/css/css-contain/container-queries/container-selection.html.ini +++ b/testing/web-platform/meta/css/css-contain/container-queries/container-selection.html.ini @@ -4,3 +4,15 @@ [c (width) for .ab-size > .size > span] expected: FAIL + + [(height: 32px) for .size > .inline > span] + expected: FAIL + + [a (height: 32px) for .a-size > .b-size > .a-inline > span] + expected: FAIL + + [a (block-size: 32px) for .a-size > .b-size > .a-inline > span] + expected: FAIL + + [(height: 16px) for .size > .inline > span] + expected: FAIL