Title: [239645] trunk/Source/WebCore
- Revision
- 239645
- Author
- [email protected]
- Date
- 2019-01-04 16:08:28 -0800 (Fri, 04 Jan 2019)
Log Message
[iOS] ERROR: post-layout: dirty renderer(s) in WebCore::RenderTreeNeedsLayoutChecker::~RenderTreeNeedsLayoutChecker()
https://bugs.webkit.org/show_bug.cgi?id=189608
<rdar://problem/44473299>
Reviewed by Simon Fraser.
When a frameset/iframe is hidden and we skip layout, clear the dirty flag on its subtree as well.
Covered by fast/frames/invalid-frameset.html.
* rendering/RenderFrameSet.cpp:
(WebCore::clearSiblingSubtrees):
(WebCore::RenderFrameSet::positionFrames):
(WebCore::RenderFrameSet::positionFramesWithFlattening):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (239644 => 239645)
--- trunk/Source/WebCore/ChangeLog 2019-01-05 00:01:43 UTC (rev 239644)
+++ trunk/Source/WebCore/ChangeLog 2019-01-05 00:08:28 UTC (rev 239645)
@@ -1,3 +1,20 @@
+2019-01-04 Zalan Bujtas <[email protected]>
+
+ [iOS] ERROR: post-layout: dirty renderer(s) in WebCore::RenderTreeNeedsLayoutChecker::~RenderTreeNeedsLayoutChecker()
+ https://bugs.webkit.org/show_bug.cgi?id=189608
+ <rdar://problem/44473299>
+
+ Reviewed by Simon Fraser.
+
+ When a frameset/iframe is hidden and we skip layout, clear the dirty flag on its subtree as well.
+
+ Covered by fast/frames/invalid-frameset.html.
+
+ * rendering/RenderFrameSet.cpp:
+ (WebCore::clearSiblingSubtrees):
+ (WebCore::RenderFrameSet::positionFrames):
+ (WebCore::RenderFrameSet::positionFramesWithFlattening):
+
2019-01-04 Youenn Fablet <[email protected]>
[Fetch API] Implement abortable fetch
Modified: trunk/Source/WebCore/rendering/RenderFrameSet.cpp (239644 => 239645)
--- trunk/Source/WebCore/rendering/RenderFrameSet.cpp 2019-01-05 00:01:43 UTC (rev 239644)
+++ trunk/Source/WebCore/rendering/RenderFrameSet.cpp 2019-01-05 00:08:28 UTC (rev 239645)
@@ -494,6 +494,18 @@
clearNeedsLayout();
}
+static void resetFrameRendererAndDescendents(RenderBox* frameSetChild, RenderFrameSet& parentFrameSet)
+{
+ if (!frameSetChild)
+ return;
+
+ for (auto* descendant = frameSetChild; descendant; descendant = downcast<RenderBox>(RenderObjectTraversal::next(*descendant, &parentFrameSet))) {
+ descendant->setWidth(0);
+ descendant->setHeight(0);
+ descendant->clearNeedsLayout();
+ }
+}
+
void RenderFrameSet::positionFrames()
{
RenderBox* child = firstChildBox();
@@ -534,12 +546,7 @@
yPos += height + borderThickness;
}
- // all the remaining frames are hidden to avoid ugly spurious unflowed frames
- for (auto* descendant = child; descendant; descendant = downcast<RenderBox>(RenderObjectTraversal::next(*descendant, this))) {
- descendant->setWidth(0);
- descendant->setHeight(0);
- descendant->clearNeedsLayout();
- }
+ resetFrameRendererAndDescendents(child, *this);
}
void RenderFrameSet::positionFramesWithFlattening()
@@ -642,12 +649,7 @@
if (repaintNeeded)
repaint();
- // all the remaining frames are hidden to avoid ugly spurious unflowed frames
- for (; child; child = child->nextSiblingBox()) {
- child->setWidth(0);
- child->setHeight(0);
- child->clearNeedsLayout();
- }
+ resetFrameRendererAndDescendents(child, *this);
}
bool RenderFrameSet::flattenFrameSet() const
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes