Commit cbb05f39 authored by David Bokan's avatar David Bokan Committed by Commit Bot

Fix nullptr crash in DocumentToFrame

This CL checks for a null LayoutView before dereferencing it.

Also cleaned up some uses of "absolute" coordinates to the more modern
"frame".

Bug: 890961
Change-Id: Ib130981f2b5af508769f44456e957785ea8cf437
Reviewed-on: https://chromium-review.googlesource.com/c/1258603
Commit-Queue: David Bokan <bokan@chromium.org>
Reviewed-by: default avatarPhilip Rogers <pdr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#596401}
parent ced26a6d
...@@ -3238,14 +3238,21 @@ IntPoint LocalFrameView::RootFrameToDocument( ...@@ -3238,14 +3238,21 @@ IntPoint LocalFrameView::RootFrameToDocument(
FloatPoint LocalFrameView::RootFrameToDocument( FloatPoint LocalFrameView::RootFrameToDocument(
const FloatPoint& point_in_root_frame) { const FloatPoint& point_in_root_frame) {
ScrollableArea* layout_viewport = LayoutViewport();
if (!layout_viewport)
return point_in_root_frame;
FloatPoint local_frame = ConvertFromRootFrame(point_in_root_frame); FloatPoint local_frame = ConvertFromRootFrame(point_in_root_frame);
return local_frame + LayoutViewport()->GetScrollOffset(); return local_frame + layout_viewport->GetScrollOffset();
} }
DoublePoint LocalFrameView::DocumentToFrame( DoublePoint LocalFrameView::DocumentToFrame(
const DoublePoint& point_in_document) const { const DoublePoint& point_in_document) const {
return point_in_document - ScrollableArea* layout_viewport = LayoutViewport();
GetLayoutView()->GetScrollableArea()->GetScrollOffset(); if (!layout_viewport)
return point_in_document;
return point_in_document - layout_viewport->GetScrollOffset();
} }
FloatPoint LocalFrameView::DocumentToFrame( FloatPoint LocalFrameView::DocumentToFrame(
...@@ -3255,8 +3262,11 @@ FloatPoint LocalFrameView::DocumentToFrame( ...@@ -3255,8 +3262,11 @@ FloatPoint LocalFrameView::DocumentToFrame(
LayoutPoint LocalFrameView::DocumentToFrame( LayoutPoint LocalFrameView::DocumentToFrame(
const LayoutPoint& point_in_document) const { const LayoutPoint& point_in_document) const {
return point_in_document - ScrollableArea* layout_viewport = LayoutViewport();
LayoutSize(GetLayoutView()->GetScrollableArea()->GetScrollOffset()); if (!layout_viewport)
return point_in_document;
return point_in_document - LayoutSize(layout_viewport->GetScrollOffset());
} }
LayoutRect LocalFrameView::DocumentToFrame( LayoutRect LocalFrameView::DocumentToFrame(
...@@ -3267,15 +3277,18 @@ LayoutRect LocalFrameView::DocumentToFrame( ...@@ -3267,15 +3277,18 @@ LayoutRect LocalFrameView::DocumentToFrame(
} }
LayoutPoint LocalFrameView::FrameToDocument( LayoutPoint LocalFrameView::FrameToDocument(
const LayoutPoint& point_in_absolute) const { const LayoutPoint& point_in_frame) const {
return point_in_absolute + ScrollableArea* layout_viewport = LayoutViewport();
LayoutSize(GetLayoutView()->GetScrollableArea()->GetScrollOffset()); if (!layout_viewport)
return point_in_frame;
return point_in_frame + LayoutSize(layout_viewport->GetScrollOffset());
} }
LayoutRect LocalFrameView::FrameToDocument( LayoutRect LocalFrameView::FrameToDocument(
const LayoutRect& rect_in_absolute) const { const LayoutRect& rect_in_frame) const {
return LayoutRect(FrameToDocument(rect_in_absolute.Location()), return LayoutRect(FrameToDocument(rect_in_frame.Location()),
rect_in_absolute.Size()); rect_in_frame.Size());
} }
IntRect LocalFrameView::ConvertToContainingEmbeddedContentView( IntRect LocalFrameView::ConvertToContainingEmbeddedContentView(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment