diff --git a/layout/generic/nsImageFrame.cpp b/layout/generic/nsImageFrame.cpp index 34362821dfe3..ddad8d44cc3c 100644 --- a/layout/generic/nsImageFrame.cpp +++ b/layout/generic/nsImageFrame.cpp @@ -440,6 +440,7 @@ static void ScaleIntrinsicSizeForDensity(nsIContent& aContent, } static IntrinsicSize ComputeIntrinsicSize(imgIContainer* aImage, + bool aHasRequest, nsImageFrame::Kind aKind, const nsImageFrame& aFrame) { const ComputedStyle& style = *aFrame.Style(); @@ -464,7 +465,7 @@ static IntrinsicSize ComputeIntrinsicSize(imgIContainer* aImage, return IntrinsicSize(edgeLengthToUse, edgeLengthToUse); } - if (style.StylePosition()->mAspectRatio != 0.0f) { + if (aHasRequest && style.StylePosition()->mAspectRatio != 0.0f) { return IntrinsicSize(); } @@ -473,11 +474,13 @@ static IntrinsicSize ComputeIntrinsicSize(imgIContainer* aImage, bool nsImageFrame::UpdateIntrinsicSize() { IntrinsicSize oldIntrinsicSize = mIntrinsicSize; - mIntrinsicSize = ComputeIntrinsicSize(mImage, mKind, *this); + nsCOMPtr currentRequest = GetCurrentRequest(); + mIntrinsicSize = ComputeIntrinsicSize(mImage, !!currentRequest, mKind, *this); return mIntrinsicSize != oldIntrinsicSize; } static AspectRatio ComputeAspectRatio(imgIContainer* aImage, + bool aHasRequest, const nsImageFrame& aFrame) { const ComputedStyle& style = *aFrame.Style(); if (style.StyleDisplay()->IsContainSize()) { @@ -488,7 +491,7 @@ static AspectRatio ComputeAspectRatio(imgIContainer* aImage, return *fromImage; } } - if (style.StylePosition()->mAspectRatio != 0.0f) { + if (aHasRequest && style.StylePosition()->mAspectRatio != 0.0f) { return AspectRatio(style.StylePosition()->mAspectRatio); } if (aFrame.ShouldShowBrokenImageIcon()) { @@ -499,7 +502,8 @@ static AspectRatio ComputeAspectRatio(imgIContainer* aImage, bool nsImageFrame::UpdateIntrinsicRatio() { AspectRatio oldIntrinsicRatio = mIntrinsicRatio; - mIntrinsicRatio = ComputeAspectRatio(mImage, *this); + nsCOMPtr currentRequest = GetCurrentRequest(); + mIntrinsicRatio = ComputeAspectRatio(mImage, !!currentRequest, *this); return mIntrinsicRatio != oldIntrinsicRatio; } @@ -1720,9 +1724,12 @@ static bool OldImageHasDifferentRatio(const nsImageFrame& aFrame, } auto currentRatio = aFrame.GetComputedIntrinsicRatio(); - MOZ_ASSERT(currentRatio == ComputeAspectRatio(&aImage, aFrame), + // If we have an image, we need to have a current request. + // Same if we had an image. + const bool hasRequest = true; + MOZ_ASSERT(currentRatio == ComputeAspectRatio(&aImage, hasRequest, aFrame), "aspect-ratio got out of sync during paint? How?"); - auto oldRatio = ComputeAspectRatio(aPrevImage, aFrame); + auto oldRatio = ComputeAspectRatio(aPrevImage, hasRequest, aFrame); return oldRatio != currentRatio; } diff --git a/testing/web-platform/tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-aspect-ratio.html b/testing/web-platform/tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-aspect-ratio.html index c9ce86869e10..5b155c1047da 100644 --- a/testing/web-platform/tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-aspect-ratio.html +++ b/testing/web-platform/tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/img-aspect-ratio.html @@ -11,6 +11,7 @@ +