Changeset 186486 in webkit


Ignore:
Timestamp:
Jul 7, 2015, 6:53:42 PM (10 years ago)
Author:
Alan Bujtas
Message:

Crash when parent iframe is set to display none and the child frame is mutated the same time.
https://bugs.webkit.org/show_bug.cgi?id=146699
rdar://problem/16207881

Reviewed by Andreas Kling.

When the parent iframe is set to display: none, we destroy the associated renderer (RenderIFrame).
However if the child frame is mutated the same time, during layout we try to access this RenderIFrame
to check whether it needs frame flattening.
This patch checks whether the parent render widget is still valid.

Source/WebCore:

Test: fast/frames/crash-display-none-iframe-during-onbeforeload.html

  • page/FrameView.cpp:

(WebCore::FrameView::isInChildFrameWithFrameFlattening): rearrange early returns.

LayoutTests:

  • fast/frames/crash-display-none-iframe-during-onbeforeload-expected.txt: Added.
  • fast/frames/crash-display-none-iframe-during-onbeforeload.html: Added.
  • fast/frames/resources/displaynone-this-during-object-beforeload.html: Added.
Location:
trunk
Files:
3 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r186483 r186486  
     12015-07-07  Zalan Bujtas  <zalan@apple.com>
     2
     3        Crash when parent iframe is set to display none and the child frame is mutated the same time.
     4        https://bugs.webkit.org/show_bug.cgi?id=146699
     5        rdar://problem/16207881
     6
     7        Reviewed by Andreas Kling.
     8
     9        When the parent iframe is set to display: none, we destroy the associated renderer (RenderIFrame).
     10        However if the child frame is mutated the same time, during layout we try to access this RenderIFrame
     11        to check whether it needs frame flattening.
     12        This patch checks whether the parent render widget is still valid.
     13
     14        * fast/frames/crash-display-none-iframe-during-onbeforeload-expected.txt: Added.
     15        * fast/frames/crash-display-none-iframe-during-onbeforeload.html: Added.
     16        * fast/frames/resources/displaynone-this-during-object-beforeload.html: Added.
     17
    1182015-07-07  Brent Fulgham  <bfulgham@apple.com>
    219
  • trunk/Source/WebCore/ChangeLog

    r186482 r186486  
     12015-07-07  Zalan Bujtas  <zalan@apple.com>
     2
     3        Crash when parent iframe is set to display none and the child frame is mutated the same time.
     4        https://bugs.webkit.org/show_bug.cgi?id=146699
     5        rdar://problem/16207881
     6
     7        Reviewed by Andreas Kling.
     8
     9        When the parent iframe is set to display: none, we destroy the associated renderer (RenderIFrame).
     10        However if the child frame is mutated the same time, during layout we try to access this RenderIFrame
     11        to check whether it needs frame flattening.
     12        This patch checks whether the parent render widget is still valid.
     13
     14        Test: fast/frames/crash-display-none-iframe-during-onbeforeload.html
     15
     16        * page/FrameView.cpp:
     17        (WebCore::FrameView::isInChildFrameWithFrameFlattening): rearrange early returns.
     18
    1192015-07-06  Matt Rajca  <mrajca@apple.com>
    220
  • trunk/Source/WebCore/page/FrameView.cpp

    r186392 r186486  
    37253725bool FrameView::isInChildFrameWithFrameFlattening() const
    37263726{
    3727     if (!parent() || !frame().ownerElement())
     3727    if (!frameFlatteningEnabled())
     3728        return false;
     3729
     3730    if (!parent())
     3731        return false;
     3732
     3733    HTMLFrameOwnerElement* ownerElement = frame().ownerElement();
     3734    if (!ownerElement)
     3735        return false;
     3736
     3737    if (!ownerElement->renderWidget())
    37283738        return false;
    37293739
    37303740    // Frame flattening applies when the owner element is either in a frameset or
    37313741    // an iframe with flattening parameters.
    3732     if (is<HTMLIFrameElement>(*frame().ownerElement())) {
    3733         RenderIFrame& iframeRenderer = downcast<RenderIFrame>(*frame().ownerElement()->renderWidget());
    3734         if (iframeRenderer.flattenFrame())
    3735             return true;
    3736     }
    3737 
    3738     if (!frameFlatteningEnabled())
    3739         return false;
    3740 
    3741     if (is<HTMLFrameElement>(*frame().ownerElement()))
     3742    if (is<HTMLIFrameElement>(*ownerElement))
     3743        return downcast<RenderIFrame>(*ownerElement->renderWidget()).flattenFrame();
     3744
     3745    if (is<HTMLFrameElement>(*ownerElement))
    37423746        return true;
    37433747
Note: See TracChangeset for help on using the changeset viewer.