diff --git a/layout/svg/nsSVGImageFrame.cpp b/layout/svg/nsSVGImageFrame.cpp index 0d2a264102ab..3591144428a9 100644 --- a/layout/svg/nsSVGImageFrame.cpp +++ b/layout/svg/nsSVGImageFrame.cpp @@ -116,6 +116,24 @@ void nsSVGImageFrame::DestroyFrom(nsIFrame* aDestructRoot, nsFrame::DestroyFrom(aDestructRoot, aPostDestroyData); } +/* virtual */ +void nsSVGImageFrame::DidSetComputedStyle(ComputedStyle* aOldStyle) { + SVGGeometryFrame::DidSetComputedStyle(aOldStyle); + + if (!mImageContainer || !aOldStyle) { + return; + } + + auto newOrientation = StyleVisibility()->mImageOrientation; + + if (aOldStyle->StyleVisibility()->mImageOrientation != newOrientation) { + nsCOMPtr image(mImageContainer->Unwrap()); + mImageContainer = nsLayoutUtils::OrientImage(image, newOrientation); + } + + // TODO(heycam): We should handle aspect-ratio, like nsImageFrame does. +} + //---------------------------------------------------------------------- // nsIFrame methods: @@ -805,6 +823,8 @@ void nsSVGImageListener::Notify(imgIRequest* aRequest, int32_t aType, nsCOMPtr image; aRequest->GetImage(getter_AddRefs(image)); if (image) { + image = nsLayoutUtils::OrientImage( + image, mFrame->StyleVisibility()->mImageOrientation); image->SetAnimationMode(mFrame->PresContext()->ImageAnimationMode()); mFrame->mImageContainer = std::move(image); } diff --git a/layout/svg/nsSVGImageFrame.h b/layout/svg/nsSVGImageFrame.h index fbcfea690b47..a9699ca65007 100644 --- a/layout/svg/nsSVGImageFrame.h +++ b/layout/svg/nsSVGImageFrame.h @@ -94,6 +94,7 @@ class nsSVGImageFrame final : public mozilla::SVGGeometryFrame, nsIFrame* aPrevInFlow) override; virtual void DestroyFrom(nsIFrame* aDestructRoot, PostDestroyData& aPostDestroyData) override; + void DidSetComputedStyle(ComputedStyle* aOldStyle) final; bool GetIntrinsicImageDimensions(mozilla::gfx::Size& aSize, mozilla::AspectRatio& aAspectRatio) const; diff --git a/testing/web-platform/meta/css/css-images/image-orientation/svg-image-orientation-aspect-ratio.html.ini b/testing/web-platform/meta/css/css-images/image-orientation/svg-image-orientation-aspect-ratio.html.ini index 6a1308e92bee..72674efd7084 100644 --- a/testing/web-platform/meta/css/css-images/image-orientation/svg-image-orientation-aspect-ratio.html.ini +++ b/testing/web-platform/meta/css/css-images/image-orientation/svg-image-orientation-aspect-ratio.html.ini @@ -1,2 +1,2 @@ [svg-image-orientation-aspect-ratio.html] - expected: FAIL + fuzzy: 17-20;5534-6147 diff --git a/testing/web-platform/meta/css/css-images/image-orientation/svg-image-orientation-none.html.ini b/testing/web-platform/meta/css/css-images/image-orientation/svg-image-orientation-none.html.ini index 6f19466fb16f..8769111122fd 100644 --- a/testing/web-platform/meta/css/css-images/image-orientation/svg-image-orientation-none.html.ini +++ b/testing/web-platform/meta/css/css-images/image-orientation/svg-image-orientation-none.html.ini @@ -1,2 +1,2 @@ [svg-image-orientation-none.html] - expected: FAIL + fuzzy: 3;93 diff --git a/testing/web-platform/meta/css/css-images/image-orientation/svg-image-orientation.html.ini b/testing/web-platform/meta/css/css-images/image-orientation/svg-image-orientation.html.ini index 9e4d35bad36d..0e3c92788707 100644 --- a/testing/web-platform/meta/css/css-images/image-orientation/svg-image-orientation.html.ini +++ b/testing/web-platform/meta/css/css-images/image-orientation/svg-image-orientation.html.ini @@ -1,2 +1,2 @@ [svg-image-orientation.html] - expected: FAIL + fuzzy: 3;166