Use content area as the intersection rectangle ...

... for custom root with overflow clip.
Tag #249
This commit is contained in:
wolfbeast 2018-12-22 14:34:42 +01:00 • committed by Roy Tam
commit d3a8693d52

View file

@ -269,17 +269,21 @@ DOMIntersectionObserver::Update(nsIDocument* aDocument, DOMHighResTimeStamp time
root = mRoot; root = mRoot;
rootFrame = root->GetPrimaryFrame(); rootFrame = root->GetPrimaryFrame();
if (rootFrame) { if (rootFrame) {
nsRect rootRectRelativeToRootFrame;
if (rootFrame->GetType() == nsGkAtoms::scrollFrame) { if (rootFrame->GetType() == nsGkAtoms::scrollFrame) {
// rootRectRelativeToRootFrame should be the content rect of rootFrame, not including the scrollbars.
nsIScrollableFrame* scrollFrame = do_QueryFrame(rootFrame); nsIScrollableFrame* scrollFrame = do_QueryFrame(rootFrame);
rootRect = nsLayoutUtils::TransformFrameRectToAncestor( rootRectRelativeToRootFrame = scrollFrame->GetScrollPortRect();
rootFrame,
rootFrame->GetContentRectRelativeToSelf(),
scrollFrame->GetScrolledFrame());
} else { } else {
rootRect = nsLayoutUtils::GetAllInFlowRectsUnion(rootFrame, // rootRectRelativeToRootFrame should be the border rect of rootFrame.
nsLayoutUtils::GetContainingBlockForClientRect(rootFrame), rootRectRelativeToRootFrame = rootFrame->GetRectRelativeToSelf();
nsLayoutUtils::RECTS_ACCOUNT_FOR_TRANSFORMS);
} }
nsIFrame* containingBlock =
nsLayoutUtils::GetContainingBlockForClientRect(rootFrame);
rootRect =
nsLayoutUtils::TransformFrameRectToAncestor(rootFrame,
rootRectRelativeToRootFrame,
containingBlock);
} }
} else { } else {
nsCOMPtr<nsIPresShell> presShell = aDocument->GetShell(); nsCOMPtr<nsIPresShell> presShell = aDocument->GetShell();