Index: third_party/WebKit/Source/core/layout/LayoutPart.cpp |
diff --git a/third_party/WebKit/Source/core/layout/LayoutPart.cpp b/third_party/WebKit/Source/core/layout/LayoutPart.cpp |
index a753eef333d6087de0983f6a11a5169f924cfd34..4beb5b0074c5461dee0aa1b693b8e11457c9e07b 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutPart.cpp |
+++ b/third_party/WebKit/Source/core/layout/LayoutPart.cpp |
@@ -89,25 +89,30 @@ LayoutPart::~LayoutPart() { |
DCHECK_LE(ref_count_, 0); |
} |
-FrameViewBase* LayoutPart::GetFrameViewBase() const { |
- // Plugin FrameViewBases are stored in their DOM node. |
- Element* element = ToElement(GetNode()); |
- |
- if (element && element->IsFrameOwnerElement()) |
- return ToHTMLFrameOwnerElement(element)->OwnedWidget(); |
- |
+FrameView* LayoutPart::ChildFrameView() const { |
+ // FrameViews are stored in HTMLFrameOwnerElement node. |
+ Node* node = GetNode(); |
+ if (node && node->IsFrameOwnerElement()) { |
+ FrameViewBase* frame_view_base = |
+ ToHTMLFrameOwnerElement(node)->OwnedWidget(); |
+ if (frame_view_base && frame_view_base->IsFrameView()) |
+ return ToFrameView(frame_view_base); |
+ } |
return nullptr; |
} |
PluginView* LayoutPart::Plugin() const { |
- // Plugins are stored in their DOM node. |
- return GetNode() && IsHTMLPlugInElement(GetNode()) |
- ? ToHTMLPlugInElement(GetNode())->Plugin() |
- : nullptr; |
+ // Plugins are stored in HTMLPlugInElement node. |
+ Node* node = GetNode(); |
+ return node && IsHTMLPlugInElement(node) ? ToHTMLPlugInElement(node)->Plugin() |
+ : nullptr; |
} |
FrameViewBase* LayoutPart::PluginOrFrame() const { |
- FrameViewBase* result = GetFrameViewBase(); |
+ FrameViewBase* result = nullptr; |
+ Node* node = GetNode(); |
+ if (node && node->IsFrameOwnerElement()) |
+ result = ToHTMLFrameOwnerElement(node)->OwnedWidget(); |
if (!result) |
result = Plugin(); |
return result; |
@@ -174,15 +179,15 @@ bool LayoutPart::NodeAtPoint(HitTestResult& result, |
const HitTestLocation& location_in_container, |
const LayoutPoint& accumulated_offset, |
HitTestAction action) { |
- if (!GetFrameViewBase() || !GetFrameViewBase()->IsFrameView() || |
- !result.GetHitTestRequest().AllowsChildFrameContent()) { |
+ FrameView* frame_view = ChildFrameView(); |
+ if (!frame_view || !result.GetHitTestRequest().AllowsChildFrameContent()) { |
return NodeAtPointOverFrameViewBase(result, location_in_container, |
accumulated_offset, action); |
} |
// A hit test can never hit an off-screen element; only off-screen iframes are |
// throttled; therefore, hit tests can skip descending into throttled iframes. |
- if (ToFrameView(GetFrameViewBase())->ShouldThrottleRendering()) { |
+ if (frame_view->ShouldThrottleRendering()) { |
return NodeAtPointOverFrameViewBase(result, location_in_container, |
accumulated_offset, action); |
} |
@@ -191,16 +196,14 @@ bool LayoutPart::NodeAtPoint(HitTestResult& result, |
DocumentLifecycle::kCompositingClean); |
if (action == kHitTestForeground) { |
- FrameView* child_frame_view = ToFrameView(GetFrameViewBase()); |
- LayoutViewItem child_root_item = child_frame_view->GetLayoutViewItem(); |
+ LayoutViewItem child_root_item = frame_view->GetLayoutViewItem(); |
if (VisibleToHitTestRequest(result.GetHitTestRequest()) && |
!child_root_item.IsNull()) { |
LayoutPoint adjusted_location = accumulated_offset + Location(); |
- LayoutPoint content_offset = |
- LayoutPoint(BorderLeft() + PaddingLeft(), |
- BorderTop() + PaddingTop()) - |
- LayoutSize(child_frame_view->ScrollOffsetInt()); |
+ LayoutPoint content_offset = LayoutPoint(BorderLeft() + PaddingLeft(), |
+ BorderTop() + PaddingTop()) - |
+ LayoutSize(frame_view->ScrollOffsetInt()); |
HitTestLocation new_hit_test_location( |
location_in_container, -adjusted_location - content_offset); |
HitTestRequest new_hit_test_request(result.GetHitTestRequest().GetType() | |
@@ -393,19 +396,16 @@ void LayoutPart::UpdateGeometryInternal(FrameViewBase& frame_view_base) { |
void LayoutPart::InvalidatePaintOfSubtreesIfNeeded( |
const PaintInvalidationState& paint_invalidation_state) { |
- if (GetFrameViewBase() && GetFrameViewBase()->IsFrameView() && |
- !IsThrottledFrameView()) { |
- FrameView* child_frame_view = ToFrameView(GetFrameViewBase()); |
+ FrameView* frame_view = ChildFrameView(); |
+ if (frame_view && !IsThrottledFrameView()) { |
// |childFrameView| is in another document, which could be |
// missing its LayoutView. TODO(jchaffraix): Ideally we should |
// not need this code. |
- if (LayoutView* child_layout_view = |
- ToLayoutView(LayoutAPIShim::LayoutObjectFrom( |
- child_frame_view->GetLayoutViewItem()))) { |
+ if (LayoutView* child_layout_view = ToLayoutView( |
+ LayoutAPIShim::LayoutObjectFrom(frame_view->GetLayoutViewItem()))) { |
PaintInvalidationState child_view_paint_invalidation_state( |
paint_invalidation_state, *child_layout_view); |
- child_frame_view->InvalidateTreeIfNeeded( |
- child_view_paint_invalidation_state); |
+ frame_view->InvalidateTreeIfNeeded(child_view_paint_invalidation_state); |
} |
} |
@@ -413,10 +413,9 @@ void LayoutPart::InvalidatePaintOfSubtreesIfNeeded( |
} |
bool LayoutPart::IsThrottledFrameView() const { |
- if (!GetFrameViewBase() || !GetFrameViewBase()->IsFrameView()) |
- return false; |
- const FrameView* frame_view = ToFrameView(GetFrameViewBase()); |
- return frame_view->ShouldThrottleRendering(); |
+ if (FrameView* frame_view = ChildFrameView()) |
+ return frame_view->ShouldThrottleRendering(); |
+ return false; |
} |
} // namespace blink |