diff --git a/dom/base/ResizeObserver.cpp b/dom/base/ResizeObserver.cpp index 856d842b469c..5ff4b85c8a09 100644 --- a/dom/base/ResizeObserver.cpp +++ b/dom/base/ResizeObserver.cpp @@ -74,7 +74,8 @@ static nsSize GetContentRectSize(const nsIFrame& aFrame) { * https://www.w3.org/TR/resize-observer-1/#calculate-box-size */ static AutoTArray CalculateBoxSize( - Element* aTarget, ResizeObserverBoxOptions aBox) { + Element* aTarget, ResizeObserverBoxOptions aBox, + const ResizeObserver& aObserver) { nsIFrame* frame = aTarget->GetPrimaryFrame(); if (!frame) { @@ -157,7 +158,8 @@ static AutoTArray CalculateBoxSize( } return CSSPixel::FromAppUnits(GetContentRectSize(*aFrame)).ToUnknownSize(); }; - if (!StaticPrefs::dom_resize_observer_support_fragments()) { + if (!StaticPrefs::dom_resize_observer_support_fragments() && + !aObserver.HasNativeCallback()) { return {LogicalPixelSize(frame->GetWritingMode(), GetFrameSize(frame))}; } AutoTArray size; @@ -213,7 +215,8 @@ bool ResizeObservation::IsActive() const { return false; } - return mLastReportedSize != CalculateBoxSize(mTarget, mObservedBox); + return mLastReportedSize != + CalculateBoxSize(mTarget, mObservedBox, *mObserver); } void ResizeObservation::UpdateLastReportedSize( @@ -397,11 +400,11 @@ uint32_t ResizeObserver::BroadcastActiveObservations() { Element* target = observation->Target(); auto borderBoxSize = - CalculateBoxSize(target, ResizeObserverBoxOptions::Border_box); + CalculateBoxSize(target, ResizeObserverBoxOptions::Border_box, *this); auto contentBoxSize = - CalculateBoxSize(target, ResizeObserverBoxOptions::Content_box); + CalculateBoxSize(target, ResizeObserverBoxOptions::Content_box, *this); auto devicePixelContentBoxSize = CalculateBoxSize( - target, ResizeObserverBoxOptions::Device_pixel_content_box); + target, ResizeObserverBoxOptions::Device_pixel_content_box, *this); RefPtr entry = new ResizeObserverEntry(mOwner, *target, borderBoxSize, contentBoxSize, devicePixelContentBoxSize); diff --git a/dom/base/ResizeObserver.h b/dom/base/ResizeObserver.h index 9f8ec87dd3e5..6f1fc5b6cda3 100644 --- a/dom/base/ResizeObserver.h +++ b/dom/base/ResizeObserver.h @@ -179,7 +179,7 @@ class ResizeObserver final : public nsISupports, public nsWrapperCache { /** * Returns whether this is an internal ResizeObserver with a native callback. */ - bool HasNativeCallback() { return mCallback.is(); } + bool HasNativeCallback() const { return mCallback.is(); } /** * Invoke the callback function in JavaScript for all active observations diff --git a/testing/web-platform/meta/css/css-sizing/contain-intrinsic-size/__dir__.ini b/testing/web-platform/meta/css/css-sizing/contain-intrinsic-size/__dir__.ini index ad6d6e1d8089..e977af25bca7 100644 --- a/testing/web-platform/meta/css/css-sizing/contain-intrinsic-size/__dir__.ini +++ b/testing/web-platform/meta/css/css-sizing/contain-intrinsic-size/__dir__.ini @@ -1 +1 @@ -prefs: [layout.css.content-visibility.enabled:true, dom.resize_observer.support_fragments:true] +prefs: [layout.css.content-visibility.enabled:true]