forked from mirrors/gecko-dev
Bug 1792217 - Let last remembered size take all fragments into account regardless of pref. r=emilio
ResizeObserver only handles multiple fragments when the preference dom.resize_observer.support_fragments is true. That's because this experimental behavior may have compat problems. But the last remembered size uses an internal ResizeObserver, so changing the signature of the callback is not a problem. Differential Revision: https://phabricator.services.mozilla.com/D158034
This commit is contained in:
parent
f88d2cb267
commit
70bc1e8b84
3 changed files with 11 additions and 8 deletions
|
|
@ -74,7 +74,8 @@ static nsSize GetContentRectSize(const nsIFrame& aFrame) {
|
||||||
* https://www.w3.org/TR/resize-observer-1/#calculate-box-size
|
* https://www.w3.org/TR/resize-observer-1/#calculate-box-size
|
||||||
*/
|
*/
|
||||||
static AutoTArray<LogicalPixelSize, 1> CalculateBoxSize(
|
static AutoTArray<LogicalPixelSize, 1> CalculateBoxSize(
|
||||||
Element* aTarget, ResizeObserverBoxOptions aBox) {
|
Element* aTarget, ResizeObserverBoxOptions aBox,
|
||||||
|
const ResizeObserver& aObserver) {
|
||||||
nsIFrame* frame = aTarget->GetPrimaryFrame();
|
nsIFrame* frame = aTarget->GetPrimaryFrame();
|
||||||
|
|
||||||
if (!frame) {
|
if (!frame) {
|
||||||
|
|
@ -157,7 +158,8 @@ static AutoTArray<LogicalPixelSize, 1> CalculateBoxSize(
|
||||||
}
|
}
|
||||||
return CSSPixel::FromAppUnits(GetContentRectSize(*aFrame)).ToUnknownSize();
|
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))};
|
return {LogicalPixelSize(frame->GetWritingMode(), GetFrameSize(frame))};
|
||||||
}
|
}
|
||||||
AutoTArray<LogicalPixelSize, 1> size;
|
AutoTArray<LogicalPixelSize, 1> size;
|
||||||
|
|
@ -213,7 +215,8 @@ bool ResizeObservation::IsActive() const {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return mLastReportedSize != CalculateBoxSize(mTarget, mObservedBox);
|
return mLastReportedSize !=
|
||||||
|
CalculateBoxSize(mTarget, mObservedBox, *mObserver);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ResizeObservation::UpdateLastReportedSize(
|
void ResizeObservation::UpdateLastReportedSize(
|
||||||
|
|
@ -397,11 +400,11 @@ uint32_t ResizeObserver::BroadcastActiveObservations() {
|
||||||
Element* target = observation->Target();
|
Element* target = observation->Target();
|
||||||
|
|
||||||
auto borderBoxSize =
|
auto borderBoxSize =
|
||||||
CalculateBoxSize(target, ResizeObserverBoxOptions::Border_box);
|
CalculateBoxSize(target, ResizeObserverBoxOptions::Border_box, *this);
|
||||||
auto contentBoxSize =
|
auto contentBoxSize =
|
||||||
CalculateBoxSize(target, ResizeObserverBoxOptions::Content_box);
|
CalculateBoxSize(target, ResizeObserverBoxOptions::Content_box, *this);
|
||||||
auto devicePixelContentBoxSize = CalculateBoxSize(
|
auto devicePixelContentBoxSize = CalculateBoxSize(
|
||||||
target, ResizeObserverBoxOptions::Device_pixel_content_box);
|
target, ResizeObserverBoxOptions::Device_pixel_content_box, *this);
|
||||||
RefPtr<ResizeObserverEntry> entry =
|
RefPtr<ResizeObserverEntry> entry =
|
||||||
new ResizeObserverEntry(mOwner, *target, borderBoxSize, contentBoxSize,
|
new ResizeObserverEntry(mOwner, *target, borderBoxSize, contentBoxSize,
|
||||||
devicePixelContentBoxSize);
|
devicePixelContentBoxSize);
|
||||||
|
|
|
||||||
|
|
@ -179,7 +179,7 @@ class ResizeObserver final : public nsISupports, public nsWrapperCache {
|
||||||
/**
|
/**
|
||||||
* Returns whether this is an internal ResizeObserver with a native callback.
|
* Returns whether this is an internal ResizeObserver with a native callback.
|
||||||
*/
|
*/
|
||||||
bool HasNativeCallback() { return mCallback.is<NativeCallback>(); }
|
bool HasNativeCallback() const { return mCallback.is<NativeCallback>(); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Invoke the callback function in JavaScript for all active observations
|
* Invoke the callback function in JavaScript for all active observations
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
prefs: [layout.css.content-visibility.enabled:true, dom.resize_observer.support_fragments:true]
|
prefs: [layout.css.content-visibility.enabled:true]
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue