From c899cd7b0c6c332ac9a14ce150d5f9a334460798 Mon Sep 17 00:00:00 2001 From: Robert O'Callahan Date: Wed, 17 Oct 2012 16:13:24 +1300 Subject: [PATCH] Bug 703241. Part 3: nsLayoutUtils::GetTransformToAncestor should handle the case where aAncestor == aFrame. r=matspal --- layout/base/nsLayoutUtils.cpp | 6 +++++- layout/generic/test/test_bug791616.html | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/layout/base/nsLayoutUtils.cpp b/layout/base/nsLayoutUtils.cpp index 536b855531b7..995db67be6c0 100644 --- a/layout/base/nsLayoutUtils.cpp +++ b/layout/base/nsLayoutUtils.cpp @@ -1302,7 +1302,11 @@ gfx3DMatrix nsLayoutUtils::GetTransformToAncestor(nsIFrame *aFrame, const nsIFrame *aAncestor) { nsIFrame* parent; - gfx3DMatrix ctm = aFrame->GetTransformMatrix(aAncestor, &parent); + gfx3DMatrix ctm; + if (aFrame == aAncestor) { + return ctm; + } + ctm = aFrame->GetTransformMatrix(aAncestor, &parent); while (parent && parent != aAncestor) { if (!parent->Preserves3DChildren()) { ctm.ProjectTo2D(); diff --git a/layout/generic/test/test_bug791616.html b/layout/generic/test/test_bug791616.html index 38b4de30adcb..4fd2b1e0975b 100644 --- a/layout/generic/test/test_bug791616.html +++ b/layout/generic/test/test_bug791616.html @@ -35,7 +35,9 @@ t.scrollTop = 0; var targetY = target.getBoundingClientRect().top; SimpleTest.waitForFocus(function() { + is(target.getBoundingClientRect().top, targetY, "Target should not have scrolled due to waitForFocus"); t.focus(); + is(target.getBoundingClientRect().top, targetY, "Target should not have scrolled due to focus change"); // Move the caret to scroll it into view sel.collapse(target.firstChild, 2);