Title: [199856] trunk/Source/WebCore
Revision
199856
Author
za...@apple.com
Date
2016-04-21 18:13:33 -0700 (Thu, 21 Apr 2016)

Log 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:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (199855 => 199856)


--- trunk/Source/WebCore/ChangeLog	2016-04-22 01:11:23 UTC (rev 199855)
+++ trunk/Source/WebCore/ChangeLog	2016-04-22 01:13:33 UTC (rev 199856)
@@ -1,3 +1,21 @@
+2016-04-21  Zalan Bujtas  <za...@apple.com>
+
+        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:
+
 2016-04-21  Brady Eidson  <beid...@apple.com>
 
         Modern IDB (Workers): Get the IDBConnectionProxy from the Document to the WorkerGlobalScope.

Modified: trunk/Source/WebCore/rendering/RenderVideo.cpp (199855 => 199856)


--- trunk/Source/WebCore/rendering/RenderVideo.cpp	2016-04-22 01:11:23 UTC (rev 199855)
+++ trunk/Source/WebCore/rendering/RenderVideo.cpp	2016-04-22 01:13:33 UTC (rev 199856)
@@ -76,21 +76,22 @@
     updateIntrinsicSize(); 
 }
 
-void RenderVideo::updateIntrinsicSize()
+bool RenderVideo::updateIntrinsicSize()
 {
     LayoutSize size = calculateIntrinsicSize();
     size.scale(style().effectiveZoom());
 
     // Never set the element size to zero when in a media document.
     if (size.isEmpty() && document().isMediaDocument())
-        return;
+        return false;
 
     if (size == intrinsicSize())
-        return;
+        return false;
 
     setIntrinsicSize(size);
     setPreferredLogicalWidthsDirty(true);
     setNeedsLayout();
+    return true;
 }
     
 LayoutSize RenderVideo::calculateIntrinsicSize()
@@ -199,6 +200,7 @@
 void RenderVideo::layout()
 {
     StackStats::LayoutCheckPoint layoutCheckPoint;
+    updateIntrinsicSize();
     RenderMedia::layout();
     updatePlayer();
 }
@@ -219,7 +221,9 @@
     if (documentBeingDestroyed())
         return;
 
-    updateIntrinsicSize();
+    bool intrinsicSizeChanged;
+    intrinsicSizeChanged = updateIntrinsicSize();
+    ASSERT_UNUSED(intrinsicSizeChanged, !intrinsicSizeChanged || !view().frameView().isInRenderTreeLayout());
 
     MediaPlayer* mediaPlayer = videoElement().player();
     if (!mediaPlayer)

Modified: trunk/Source/WebCore/rendering/RenderVideo.h (199855 => 199856)


--- trunk/Source/WebCore/rendering/RenderVideo.h	2016-04-22 01:11:23 UTC (rev 199855)
+++ trunk/Source/WebCore/rendering/RenderVideo.h	2016-04-22 01:13:33 UTC (rev 199856)
@@ -59,7 +59,7 @@
 
     void intrinsicSizeChanged() override;
     LayoutSize calculateIntrinsicSize();
-    void updateIntrinsicSize();
+    bool updateIntrinsicSize();
 
     void imageChanged(WrappedImagePtr, const IntRect*) override;
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to