Chromium Code Reviews| 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 97212dd02c9387c312db5285b7c524b777d7b0db..17f3a5ee511e8718de53d256c3ef928143692414 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::GetNodeFrameView() 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 = GetNodeFrameView(); |
| + 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,7 +196,7 @@ bool LayoutPart::NodeAtPoint(HitTestResult& result, |
| DocumentLifecycle::kCompositingClean); |
| if (action == kHitTestForeground) { |
| - FrameView* child_frame_view = ToFrameView(GetFrameViewBase()); |
| + FrameView* child_frame_view = GetNodeFrameView(); |
|
dcheng
2017/04/12 23:44:37
Can we just use frame_view directly here? It seems
joelhockey
2017/04/13 00:37:01
Yes, I can't see how this value could change, so n
|
| LayoutViewItem child_root_item = child_frame_view->GetLayoutViewItem(); |
| if (VisibleToHitTestRequest(result.GetHitTestRequest()) && |
| @@ -393,9 +398,8 @@ 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* child_frame_view = GetNodeFrameView(); |
| + if (child_frame_view && !IsThrottledFrameView()) { |
| // |childFrameView| is in another document, which could be |
| // missing its LayoutView. TODO(jchaffraix): Ideally we should |
| // not need this code. |
| @@ -413,10 +417,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 = GetNodeFrameView()) |
| + return frame_view->ShouldThrottleRendering(); |
| + return false; |
| } |
| } // namespace blink |