Title: [145611] branches/safari-536.30-branch/Source/WebCore

Diff

Modified: branches/safari-536.30-branch/Source/WebCore/ChangeLog (145610 => 145611)


--- branches/safari-536.30-branch/Source/WebCore/ChangeLog	2013-03-12 23:27:35 UTC (rev 145610)
+++ branches/safari-536.30-branch/Source/WebCore/ChangeLog	2013-03-12 23:40:25 UTC (rev 145611)
@@ -1,5 +1,33 @@
 2013-03-12  Lucas Forschler  <[email protected]>
 
+        Merge r132398
+
+    2012-10-24  Ami Fischman  <[email protected]>
+
+            call to setNeedsLayout during RenderVideo::paintReplaced
+            https://bugs.webkit.org/show_bug.cgi?id=100265
+
+            Reviewed by Eric Carlson.
+
+            Removed unnecessary call and added new defensive guards to catch erroneous setNeedsLayout() calls
+            during paints earlier (so the offending calls are in the emitted stacktrace).
+
+            No new tests - new defensive checks are triggered by existing tests.
+
+            * page/FrameView.cpp:
+            (WebCore::FrameView::paintContents): forbid setNeedsLayout() during painting
+            * rendering/RenderObject.cpp:
+            (WebCore):
+            (WebCore::RenderObject::SetLayoutNeededForbiddenScope::SetLayoutNeededForbiddenScope):
+            (WebCore::RenderObject::SetLayoutNeededForbiddenScope::~SetLayoutNeededForbiddenScope):
+            * rendering/RenderObject.h:
+            (RenderObject):
+            (SetLayoutNeededForbiddenScope): added helper class for forbidding setNeedsLayout() in a scope.
+            * rendering/RenderVideo.cpp:
+            (WebCore::RenderVideo::paintReplaced): drop the offending & unnecessary call to updatePlayer().
+
+2013-03-12  Lucas Forschler  <[email protected]>
+
         Merge r131578
 
     2012-10-17  Alexander Pavlov  <[email protected]>

Modified: branches/safari-536.30-branch/Source/WebCore/page/FrameView.cpp (145610 => 145611)


--- branches/safari-536.30-branch/Source/WebCore/page/FrameView.cpp	2013-03-12 23:27:35 UTC (rev 145610)
+++ branches/safari-536.30-branch/Source/WebCore/page/FrameView.cpp	2013-03-12 23:40:25 UTC (rev 145611)
@@ -3093,6 +3093,10 @@
     RenderObject* eltRenderer = m_nodeToDraw ? m_nodeToDraw->renderer() : 0;
     RenderLayer* rootLayer = root->layer();
 
+#ifndef NDEBUG
+    RenderObject::SetLayoutNeededForbiddenScope forbidSetNeedsLayout(rootLayer->renderer());
+#endif
+
     rootLayer->paint(p, rect, m_paintBehavior, eltRenderer);
 
     if (rootLayer->containsDirtyOverlayScrollbars())

Modified: branches/safari-536.30-branch/Source/WebCore/rendering/RenderObject.cpp (145610 => 145611)


--- branches/safari-536.30-branch/Source/WebCore/rendering/RenderObject.cpp	2013-03-12 23:27:35 UTC (rev 145610)
+++ branches/safari-536.30-branch/Source/WebCore/rendering/RenderObject.cpp	2013-03-12 23:40:25 UTC (rev 145611)
@@ -90,6 +90,18 @@
 
 #ifndef NDEBUG
 static void* baseOfRenderObjectBeingDeleted;
+
+RenderObject::SetLayoutNeededForbiddenScope::SetLayoutNeededForbiddenScope(RenderObject* renderObject)
+    : m_renderObject(renderObject)
+    , m_preexistingForbidden(m_renderObject->isSetNeedsLayoutForbidden())
+{
+    m_renderObject->setNeedsLayoutIsForbidden(true);
+}
+
+RenderObject::SetLayoutNeededForbiddenScope::~SetLayoutNeededForbiddenScope()
+{
+    m_renderObject->setNeedsLayoutIsForbidden(m_preexistingForbidden);
+}
 #endif
 
 struct SameSizeAsRenderObject {

Modified: branches/safari-536.30-branch/Source/WebCore/rendering/RenderObject.h (145610 => 145611)


--- branches/safari-536.30-branch/Source/WebCore/rendering/RenderObject.h	2013-03-12 23:27:35 UTC (rev 145610)
+++ branches/safari-536.30-branch/Source/WebCore/rendering/RenderObject.h	2013-03-12 23:40:25 UTC (rev 145611)
@@ -231,6 +231,16 @@
     bool hasAXObject() const { return m_hasAXObject; }
     bool isSetNeedsLayoutForbidden() const { return m_setNeedsLayoutForbidden; }
     void setNeedsLayoutIsForbidden(bool flag) { m_setNeedsLayoutForbidden = flag; }
+
+    // Helper class forbidding calls to setNeedsLayout() during its lifetime.
+    class SetLayoutNeededForbiddenScope {
+    public:
+        explicit SetLayoutNeededForbiddenScope(RenderObject*);
+        ~SetLayoutNeededForbiddenScope();
+    private:
+        RenderObject* m_renderObject;
+        bool m_preexistingForbidden;
+    };
 #endif
 
     // Obtains the nearest enclosing block (including this block) that contributes a first-line style to our inline

Modified: branches/safari-536.30-branch/Source/WebCore/rendering/RenderVideo.cpp (145610 => 145611)


--- branches/safari-536.30-branch/Source/WebCore/rendering/RenderVideo.cpp	2013-03-12 23:27:35 UTC (rev 145610)
+++ branches/safari-536.30-branch/Source/WebCore/rendering/RenderVideo.cpp	2013-03-12 23:40:25 UTC (rev 145611)
@@ -195,13 +195,10 @@
     if (Frame* frame = this->frame())
         page = frame->page();
 
-    if (!displayingPoster) {
-        if (!mediaPlayer) {
-            if (page && paintInfo.phase == PaintPhaseForeground)
-                page->addRelevantUnpaintedObject(this, visualOverflowRect());
-            return;
-        }
-        updatePlayer();
+    if (!displayingPoster && !mediaPlayer) {
+        if (page && paintInfo.phase == PaintPhaseForeground)
+            page->addRelevantUnpaintedObject(this, visualOverflowRect());
+        return;
     }
 
     LayoutRect rect = videoBox();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to