Changeset 199856 in webkit


Ignore:
Timestamp:
Apr 21, 2016 6:13:33 PM (8 years ago)
Author:
Alan Bujtas
Message:

RenderVideo should always update the intrinsic size before layout.
https://bugs.webkit.org/show_bug.cgi?id=156878

Reviewed by Simon Fraser.

In order to layout video element properly we need to know the correct intrinsic size.
This patch also asserts if we end up updating the intrinsic size right after finishing video renderer layout.

This issues was discovered as part of webkit.org/b/156245. (hence covered by existing tests)

  • rendering/RenderVideo.cpp:

(WebCore::RenderVideo::updateIntrinsicSize):
(WebCore::RenderVideo::layout):
(WebCore::RenderVideo::updatePlayer):

  • rendering/RenderVideo.h:
Location:
trunk/Source/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r199853 r199856  
     12016-04-21  Zalan Bujtas  <zalan@apple.com>
     2
     3        RenderVideo should always update the intrinsic size before layout.
     4        https://bugs.webkit.org/show_bug.cgi?id=156878
     5
     6        Reviewed by Simon Fraser.
     7
     8        In order to layout video element properly we need to know the correct intrinsic size.
     9        This patch also asserts if we end up updating the intrinsic size right after finishing video renderer layout.
     10
     11        This issues was discovered as part of webkit.org/b/156245. (hence covered by existing tests)
     12
     13        * rendering/RenderVideo.cpp:
     14        (WebCore::RenderVideo::updateIntrinsicSize):
     15        (WebCore::RenderVideo::layout):
     16        (WebCore::RenderVideo::updatePlayer):
     17        * rendering/RenderVideo.h:
     18
    1192016-04-21  Brady Eidson  <beidson@apple.com>
    220
  • trunk/Source/WebCore/rendering/RenderVideo.cpp

    r194496 r199856  
    7777}
    7878
    79 void RenderVideo::updateIntrinsicSize()
     79bool RenderVideo::updateIntrinsicSize()
    8080{
    8181    LayoutSize size = calculateIntrinsicSize();
     
    8484    // Never set the element size to zero when in a media document.
    8585    if (size.isEmpty() && document().isMediaDocument())
    86         return;
     86        return false;
    8787
    8888    if (size == intrinsicSize())
    89         return;
     89        return false;
    9090
    9191    setIntrinsicSize(size);
    9292    setPreferredLogicalWidthsDirty(true);
    9393    setNeedsLayout();
     94    return true;
    9495}
    9596   
     
    200201{
    201202    StackStats::LayoutCheckPoint layoutCheckPoint;
     203    updateIntrinsicSize();
    202204    RenderMedia::layout();
    203205    updatePlayer();
     
    220222        return;
    221223
    222     updateIntrinsicSize();
     224    bool intrinsicSizeChanged;
     225    intrinsicSizeChanged = updateIntrinsicSize();
     226    ASSERT_UNUSED(intrinsicSizeChanged, !intrinsicSizeChanged || !view().frameView().isInRenderTreeLayout());
    223227
    224228    MediaPlayer* mediaPlayer = videoElement().player();
  • trunk/Source/WebCore/rendering/RenderVideo.h

    r197563 r199856  
    6060    void intrinsicSizeChanged() override;
    6161    LayoutSize calculateIntrinsicSize();
    62     void updateIntrinsicSize();
     62    bool updateIntrinsicSize();
    6363
    6464    void imageChanged(WrappedImagePtr, const IntRect*) override;
Note: See TracChangeset for help on using the changeset viewer.