Title: [200848] releases/WebKitGTK/webkit-2.12
- Revision
- 200848
- Author
- [email protected]
- Date
- 2016-05-13 05:33:19 -0700 (Fri, 13 May 2016)
Log Message
Merge r200301 - Some content causes deep recursion.
https://bugs.webkit.org/show_bug.cgi?id=157230
<rdar://problem/7694756>
Reviewed by Antti Koivisto.
This patch sets a limit(512) on content nesting for the render tree. Elements injected over the limit
are still accessible through DOM APIs but
1. we stop generating renderers for them -they behave like display: none.
2. their layout related computed style values are set to default (e.g. window.computedStyle(document.elementById("over512").width -> auto)
Source/WebCore:
Test: fast/block/nested-renderers.html
* page/Settings.h:
* style/StyleTreeResolver.cpp: Skip renderer constructing and continue with the sibling node.
(WebCore::Style::TreeResolver::resolveComposedTree):
LayoutTests:
* fast/block/nested-renderers-expected.html: Added.
* fast/block/nested-renderers.html: Added.
Modified Paths
Added Paths
Diff
Modified: releases/WebKitGTK/webkit-2.12/LayoutTests/ChangeLog (200847 => 200848)
--- releases/WebKitGTK/webkit-2.12/LayoutTests/ChangeLog 2016-05-13 12:26:17 UTC (rev 200847)
+++ releases/WebKitGTK/webkit-2.12/LayoutTests/ChangeLog 2016-05-13 12:33:19 UTC (rev 200848)
@@ -1,3 +1,19 @@
+2016-04-30 Zalan Bujtas <[email protected]>
+
+ Some content causes deep recursion.
+ https://bugs.webkit.org/show_bug.cgi?id=157230
+ <rdar://problem/7694756>
+
+ Reviewed by Antti Koivisto.
+
+ This patch sets a limit(512) on content nesting for the render tree. Elements injected over the limit
+ are still accessible through DOM APIs but
+ 1. we stop generating renderers for them -they behave like display: none.
+ 2. their layout related computed style values are set to default (e.g. window.computedStyle(document.elementById("over512").width -> auto)
+
+ * fast/block/nested-renderers-expected.html: Added.
+ * fast/block/nested-renderers.html: Added.
+
2016-04-29 Myles C. Maxfield <[email protected]>
REGRESSION(194502): overflow: scroll; direction: rtl; divs jump horizontally when scrolled vertically
Added: releases/WebKitGTK/webkit-2.12/LayoutTests/fast/block/nested-renderers-expected.html (0 => 200848)
--- releases/WebKitGTK/webkit-2.12/LayoutTests/fast/block/nested-renderers-expected.html (rev 0)
+++ releases/WebKitGTK/webkit-2.12/LayoutTests/fast/block/nested-renderers-expected.html 2016-05-13 12:33:19 UTC (rev 200848)
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>This tests that we stop generating renderers at certain nesting depth.</title>
+<style>
+div {
+ width: 102px;
+ height: 102px;
+ background-color: green;
+}
+</style>
+</head>
+<body>
+ <div></div>
+</body>
+</html>
Added: releases/WebKitGTK/webkit-2.12/LayoutTests/fast/block/nested-renderers.html (0 => 200848)
--- releases/WebKitGTK/webkit-2.12/LayoutTests/fast/block/nested-renderers.html (rev 0)
+++ releases/WebKitGTK/webkit-2.12/LayoutTests/fast/block/nested-renderers.html 2016-05-13 12:33:19 UTC (rev 200848)
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>This tests that we stop generating renderers at certain nesting depth.</title>
+<style>
+td {
+ border: 1px solid green;
+}
+</style>
+</head>
+<body></body>
+<script>
+var container = document.body;
+for (var i = 0; i < 3000; ++i) {
+ var element;
+ if (!(i % 10)) {
+ var table = document.createElement("table");
+ var tr = document.createElement("tr");
+ var td = document.createElement("td");
+ tr.appendChild(td);
+ table.appendChild(tr);
+ element = td;
+ } else
+ element = document.createElement("div");
+ container.appendChild(element);
+ container = element;
+}
+</script>
+</html>
Modified: releases/WebKitGTK/webkit-2.12/Source/WebCore/ChangeLog (200847 => 200848)
--- releases/WebKitGTK/webkit-2.12/Source/WebCore/ChangeLog 2016-05-13 12:26:17 UTC (rev 200847)
+++ releases/WebKitGTK/webkit-2.12/Source/WebCore/ChangeLog 2016-05-13 12:33:19 UTC (rev 200848)
@@ -1,3 +1,22 @@
+2016-04-30 Zalan Bujtas <[email protected]>
+
+ Some content causes deep recursion.
+ https://bugs.webkit.org/show_bug.cgi?id=157230
+ <rdar://problem/7694756>
+
+ Reviewed by Antti Koivisto.
+
+ This patch sets a limit(512) on content nesting for the render tree. Elements injected over the limit
+ are still accessible through DOM APIs but
+ 1. we stop generating renderers for them -they behave like display: none.
+ 2. their layout related computed style values are set to default (e.g. window.computedStyle(document.elementById("over512").width -> auto)
+
+ Test: fast/block/nested-renderers.html
+
+ * page/Settings.h:
+ * style/StyleTreeResolver.cpp: Skip renderer constructing and continue with the sibling node.
+ (WebCore::Style::TreeResolver::resolveComposedTree):
+
2016-04-29 Myles C. Maxfield <[email protected]>
REGRESSION(194502): overflow: scroll; direction: rtl; divs jump horizontally when scrolled vertically
Modified: releases/WebKitGTK/webkit-2.12/Source/WebCore/page/Settings.h (200847 => 200848)
--- releases/WebKitGTK/webkit-2.12/Source/WebCore/page/Settings.h 2016-05-13 12:26:17 UTC (rev 200847)
+++ releases/WebKitGTK/webkit-2.12/Source/WebCore/page/Settings.h 2016-05-13 12:33:19 UTC (rev 200848)
@@ -206,6 +206,7 @@
#endif
static const unsigned defaultMaximumHTMLParserDOMTreeDepth = 512;
+ static const unsigned defaultMaximumRenderTreeDepth = 512;
WEBCORE_EXPORT static void setMockScrollbarsEnabled(bool flag);
WEBCORE_EXPORT static bool mockScrollbarsEnabled();
Modified: releases/WebKitGTK/webkit-2.12/Source/WebCore/style/StyleTreeResolver.cpp (200847 => 200848)
--- releases/WebKitGTK/webkit-2.12/Source/WebCore/style/StyleTreeResolver.cpp 2016-05-13 12:26:17 UTC (rev 200847)
+++ releases/WebKitGTK/webkit-2.12/Source/WebCore/style/StyleTreeResolver.cpp 2016-05-13 12:33:19 UTC (rev 200848)
@@ -884,6 +884,13 @@
auto& element = downcast<Element>(node);
+ if (it.depth() > Settings::defaultMaximumRenderTreeDepth) {
+ resetStyleForNonRenderedDescendants(element);
+ element.clearChildNeedsStyleRecalc();
+ it.traverseNextSkippingChildren();
+ continue;
+ }
+
// FIXME: We should deal with this during style invalidation.
bool affectedByPreviousSibling = element.styleIsAffectedByPreviousSibling() && parent.elementNeedingStyleRecalcAffectsNextSiblingElementStyle;
if (element.needsStyleRecalc() || parent.elementNeedingStyleRecalcAffectsNextSiblingElementStyle)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes