Title: [132398] trunk/Source/WebCore
- Revision
- 132398
- Author
- [email protected]
- Date
- 2012-10-24 14:07:02 -0700 (Wed, 24 Oct 2012)
Log Message
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().
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (132397 => 132398)
--- trunk/Source/WebCore/ChangeLog 2012-10-24 21:02:09 UTC (rev 132397)
+++ trunk/Source/WebCore/ChangeLog 2012-10-24 21:07:02 UTC (rev 132398)
@@ -1,3 +1,27 @@
+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().
+
2012-10-24 Adam Barth <[email protected]>
[V8] ActiveDOMObjectEpilogueVisitor is unnecessary and can be deleted
Modified: trunk/Source/WebCore/page/FrameView.cpp (132397 => 132398)
--- trunk/Source/WebCore/page/FrameView.cpp 2012-10-24 21:02:09 UTC (rev 132397)
+++ trunk/Source/WebCore/page/FrameView.cpp 2012-10-24 21:07:02 UTC (rev 132398)
@@ -3242,6 +3242,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: trunk/Source/WebCore/rendering/RenderObject.cpp (132397 => 132398)
--- trunk/Source/WebCore/rendering/RenderObject.cpp 2012-10-24 21:02:09 UTC (rev 132397)
+++ trunk/Source/WebCore/rendering/RenderObject.cpp 2012-10-24 21:07:02 UTC (rev 132398)
@@ -91,6 +91,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: trunk/Source/WebCore/rendering/RenderObject.h (132397 => 132398)
--- trunk/Source/WebCore/rendering/RenderObject.h 2012-10-24 21:02:09 UTC (rev 132397)
+++ trunk/Source/WebCore/rendering/RenderObject.h 2012-10-24 21:07:02 UTC (rev 132398)
@@ -248,6 +248,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: trunk/Source/WebCore/rendering/RenderVideo.cpp (132397 => 132398)
--- trunk/Source/WebCore/rendering/RenderVideo.cpp 2012-10-24 21:02:09 UTC (rev 132397)
+++ trunk/Source/WebCore/rendering/RenderVideo.cpp 2012-10-24 21:07:02 UTC (rev 132398)
@@ -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]
http://lists.webkit.org/mailman/listinfo/webkit-changes