Diff
Modified: trunk/LayoutTests/ChangeLog (148864 => 148865)
--- trunk/LayoutTests/ChangeLog 2013-04-22 08:59:18 UTC (rev 148864)
+++ trunk/LayoutTests/ChangeLog 2013-04-22 09:05:52 UTC (rev 148865)
@@ -1,3 +1,17 @@
+2013-04-22 Mihai Maerean <[email protected]>
+
+ [CSS Regions] Elements in a region should be assignable to a named flow
+ https://bugs.webkit.org/show_bug.cgi?id=74144
+
+ Reviewed by David Hyatt.
+
+ * fast/regions/flow-body-in-html-expected.txt: Added.
+ * fast/regions/flow-body-in-html.html: Added. To test the duplicate bug #103685.
+ * fast/regions/region-content-flown-into-region-expected.txt: Added.
+ * fast/regions/region-content-flown-into-region.html: Added.
+ * fast/regions/universal-selector-children-to-the-same-region-expected.txt: Added.
+ * fast/regions/universal-selector-children-to-the-same-region.html: Added. To test the duplicate bug #103685.
+
2013-04-22 Andrei Bucur <[email protected]>
Use DOM ordering for list counts
Added: trunk/LayoutTests/fast/regions/flow-body-in-html-expected.txt (0 => 148865)
--- trunk/LayoutTests/fast/regions/flow-body-in-html-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/regions/flow-body-in-html-expected.txt 2013-04-22 09:05:52 UTC (rev 148865)
@@ -0,0 +1,2 @@
+PASS: the body tag has flow-into while the html has flow-from.
+Bug 74144 - [CSS Regions] Elements in a region should be assignable to a named flow
Added: trunk/LayoutTests/fast/regions/flow-body-in-html.html (0 => 148865)
--- trunk/LayoutTests/fast/regions/flow-body-in-html.html (rev 0)
+++ trunk/LayoutTests/fast/regions/flow-body-in-html.html 2013-04-22 09:05:52 UTC (rev 148865)
@@ -0,0 +1,22 @@
+<html>
+ <head>
+ <title>103685 - [CSS Regions] Universal child selector on region breaks the rendering of its content</title>
+ <style type="text/css">
+ body {
+ -webkit-flow-into: foo;
+ }
+ html {
+ -webkit-flow-from: foo;
+ }
+ </style>
+ <script type="text/_javascript_">
+ if (window.testRunner)
+ testRunner.dumpAsText()
+ </script>
+ </head>
+ <body>
+ PASS: the body tag has flow-into while the html has flow-from.
+
+ <p><a href="" 74144</a> - [CSS Regions] Elements in a region should be assignable to a named flow</p>
+ </body>
+</html>
\ No newline at end of file
Added: trunk/LayoutTests/fast/regions/region-content-flown-into-region-expected.html (0 => 148865)
--- trunk/LayoutTests/fast/regions/region-content-flown-into-region-expected.html (rev 0)
+++ trunk/LayoutTests/fast/regions/region-content-flown-into-region-expected.html 2013-04-22 09:05:52 UTC (rev 148865)
@@ -0,0 +1,23 @@
+<html>
+ <head>
+ <style type="text/css">
+ div {
+ padding: 1px;
+ }
+ .region {
+ border:solid 1px #bbb;
+ }
+ </style>
+ </head>
+ <body>
+ <div class="region"><template>PASS r0: content that goes in the region.</template></div>
+ <div class="region">
+ <div>PASS r1: content in the region that has flow-into. 1.</div>
+ <div>PASS r1: (enclosed in a div) content in the region that has flow-into. 2. <b>PASS r1: (enclosed in a div) content in the region that has flow-into. 3.</b>.</div>
+ <div>PASS r1: (enclosed in a div) content in the region that has flow-into. 4 .</div>
+ <div>PASS r1: content in the region that has flow-into. 5.</div>
+ </div>
+ <div class="region"><span>PASS r2: content that is already in a flow goes to another flow .</span></div>
+ <p><a href="" 74144</a> - [CSS Regions] Elements in a region should be assignable to a named flow</p>
+ </body>
+</html>
\ No newline at end of file
Added: trunk/LayoutTests/fast/regions/region-content-flown-into-region.html (0 => 148865)
--- trunk/LayoutTests/fast/regions/region-content-flown-into-region.html (rev 0)
+++ trunk/LayoutTests/fast/regions/region-content-flown-into-region.html 2013-04-22 09:05:52 UTC (rev 148865)
@@ -0,0 +1,92 @@
+<html>
+ <head>
+ <title>74144 - [CSS Regions] Elements in a region should be assignable to a named flow</title>
+ <style type="text/css">
+ div {
+ padding: 1px;
+ }
+ .content {
+ -webkit-flow-into: flow;
+ }
+ .region {
+ -webkit-flow-from: flow;
+ border:solid 1px #bbb;
+ }
+
+ .redirectContent {
+ -webkit-flow-into: redirectFlow;
+ }
+ .redirectRegion {
+ -webkit-flow-from: redirectFlow;
+ border:solid 1px #bbb;
+ }
+
+ .redirectContent2 {
+ -webkit-flow-into: redirectFlow2;
+ }
+ .redirectRegion2 {
+ -webkit-flow-from: redirectFlow2;
+ border:solid 1px #bbb;
+ }
+
+ .redirectContentToNowhere {
+ -webkit-flow-into: redirectToNowhere;
+ }
+ </style>
+ <template class="content">PASS r0: content that goes in the region.</template>
+ </head>
+
+ <body>
+ <div class="region">
+ FAIL: this should not be visible 1.
+
+ <span class="redirectContentToNowhere">FAIL: this should not be visible (redirected to nowhere) 1.</span>
+
+ <div class="redirectContent">PASS r1: content in the region that has flow-into. 1.</div>
+
+ FAIL: this should not be visible 2.
+
+ <div>
+ FAIL: this should not be visible 3.
+
+ <div class="redirectContent">PASS r1: (enclosed in a div) content in the region that has flow-into. 2.
+ <div class="redirectContentToNowhere">FAIL: this should not be visible (redirected to nowhere) 2.</div>
+ <b>PASS r1: (enclosed in a div) content in the region that has flow-into. 3.</b>.
+ </div>
+
+ FAIL: this should not be visible 4.
+ </div>
+
+ <div>
+ FAIL: this should not be visible 5.
+
+ <div class="redirectContent">PASS r1: (enclosed in a div) content in the region that has flow-into. 4
+ <span class="redirectContent2">PASS r2: content that is already in a flow goes to another flow
+ <span class="redirectContentToNowhere">FAIL: this should not be visible (redirected to nowhere) 3.</span>.
+ </span>
+ .
+ </div>
+
+ FAIL: this should not be visible 7.
+ </div>
+
+ FAIL: this should not be visible 8.
+
+ <span class="redirectContentToNowhere">FAIL: this should not be visible (redirected to nowhere) 4.</span>
+
+ <div class="redirectContent">PASS r1: content in the region that has flow-into. 5.</div>
+
+ FAIL: this should not be visible 9.
+ </div>
+
+ <div class="redirectRegion">
+ FAIL: this should not be visible 10.
+ </div>
+
+ <div class="redirectRegion2">
+ FAIL: this should not be visible 11.
+ </div>
+
+ <p><a href="" 74144</a> - [CSS Regions] Elements in a region should be assignable to a named flow</p>
+ </body>
+</html>
\ No newline at end of file
Added: trunk/LayoutTests/fast/regions/universal-selector-children-to-the-same-region-expected.txt (0 => 148865)
--- trunk/LayoutTests/fast/regions/universal-selector-children-to-the-same-region-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/regions/universal-selector-children-to-the-same-region-expected.txt 2013-04-22 09:05:52 UTC (rev 148865)
@@ -0,0 +1,5 @@
+PASS: this is inline
+PASS: and block content inside a region that is flowed into the same region
+
+PASS: button
+Bug 74144 - [CSS Regions] Elements in a region should be assignable to a named flow
Added: trunk/LayoutTests/fast/regions/universal-selector-children-to-the-same-region.html (0 => 148865)
--- trunk/LayoutTests/fast/regions/universal-selector-children-to-the-same-region.html (rev 0)
+++ trunk/LayoutTests/fast/regions/universal-selector-children-to-the-same-region.html 2013-04-22 09:05:52 UTC (rev 148865)
@@ -0,0 +1,21 @@
+<html>
+ <head>
+ <title>103685 - [CSS Regions] Universal child selector on region breaks the rendering of its content</title>
+ <style type="text/css">
+ .region > * {
+ -webkit-flow-into: foo;
+ }
+ .region {
+ -webkit-flow-from: foo;
+ }
+ </style>
+ <script type="text/_javascript_">
+ if (window.testRunner)
+ testRunner.dumpAsText()
+ </script>
+ </head>
+ <body>
+ <div class="region"><span>PASS: this is inline</span><div><p>PASS: and block content inside a region that is flowed into the same region</p></div><button>PASS: button</button></div>
+ <p><a href="" 74144</a> - [CSS Regions] Elements in a region should be assignable to a named flow</p>
+ </body>
+</html>
\ No newline at end of file
Modified: trunk/Source/WebCore/ChangeLog (148864 => 148865)
--- trunk/Source/WebCore/ChangeLog 2013-04-22 08:59:18 UTC (rev 148864)
+++ trunk/Source/WebCore/ChangeLog 2013-04-22 09:05:52 UTC (rev 148865)
@@ -1,3 +1,55 @@
+2013-04-22 Mihai Maerean <[email protected]>
+
+ [CSS Regions] Elements in a region should be assignable to a named flow
+ https://bugs.webkit.org/show_bug.cgi?id=74144
+
+ Reviewed by David Hyatt.
+
+ DOM children of a region must not be rendered as children of the region, but can be collected in flow threads.
+
+ NodeRenderingContext::parentRenderer now creates the parent render flow thread if it doesn't exist.
+
+ Element::moveToFlowThreadIsNeeded is a virtual method that is overriden in PseudoElement to return false and
+ in SVGElement so only svg root elements can directly be collected by a render flow thread.
+
+ RenderObject::canDOMChildrenHaveRenderParent exists to optimize the code so nodes inside regions (and maybe
+ other types of renderers in the future) can still have renderers if they need to be in a flow thread while the
+ rest of renderers that can't have children skip the new instructions.
+
+ Tests: fast/regions/flow-body-in-html.html . To test the duplicate bug #103685.
+ fast/regions/region-content-flown-into-region.html
+ fast/regions/universal-selector-children-to-the-same-region.html . To test the duplicate bug #103685.
+
+ * dom/Element.cpp:
+ (WebCore::Element::moveToFlowThreadIsNeeded):
+ * dom/Element.h:
+ * dom/NodeRenderingContext.cpp:
+ (WebCore::NodeRenderingContext::parentRenderer): the renderer that will be the parent for this node's renderer.
+ In the case of RenderFlowThreads, it may need to create it.
+ (WebCore::NodeRenderingContext::shouldCreateRenderer): In a region, only the children that need to be in a flow
+ thread should have a renderer.
+ (WebCore::NodeRenderingContext::moveToFlowThreadIfNeeded):
+ (WebCore::NodeRenderingContext::moveToFlowThread):
+ * dom/NodeRenderingContext.h:
+ (NodeRenderingContext):
+ * dom/PseudoElement.h: pseudo-elements cannot be directly collected into a named flow.
+ * dom/Text.cpp:
+ (WebCore::Text::textRendererIsNeeded):
+ (WebCore::Text::updateTextRenderer): Because calling textRendererIsNeeded(NodeRenderingContext(...)) on a
+ non-const l-value NodeRenderingContext cannot be done on a temporary object on the stack.
+ * dom/Text.h:
+ * rendering/FlowThreadController.cpp:
+ (WebCore::FlowThreadController::isContentNodeRegisteredWithAnyNamedFlow):
+ * rendering/FlowThreadController.h:
+ * rendering/RenderObject.h:
+ (WebCore::RenderObject::canDOMChildrenHaveRenderParent): Even if this render object can't have render children,
+ the children in the DOM tree may have a render parent (that is different from this render object).
+ * rendering/RenderRegion.h:
+ * svg/SVGElement.cpp:
+ (WebCore::SVGElement::moveToFlowThreadIsNeeded): Allow only svg root elements to be directly collected by a
+ render flow thread.
+ * svg/SVGElement.h:
+
2013-04-22 Alberto Garcia <[email protected]>
Gradient: add PlatformGradient definition for BlackBerry
Modified: trunk/Source/WebCore/dom/Element.cpp (148864 => 148865)
--- trunk/Source/WebCore/dom/Element.cpp 2013-04-22 08:59:18 UTC (rev 148864)
+++ trunk/Source/WebCore/dom/Element.cpp 2013-04-22 09:05:52 UTC (rev 148865)
@@ -2559,6 +2559,32 @@
return 0;
}
+bool Element::moveToFlowThreadIsNeeded(RefPtr<RenderStyle>& cachedStyle)
+{
+ Document* doc = document();
+
+ if (!doc->cssRegionsEnabled())
+ return false;
+
+#if ENABLE(FULLSCREEN_API)
+ if (doc->webkitIsFullScreen() && doc->webkitCurrentFullScreenElement() == this)
+ return false;
+#endif
+
+ if (isInShadowTree())
+ return false;
+
+ if (!cachedStyle)
+ cachedStyle = styleForRenderer();
+ if (!cachedStyle)
+ return false;
+
+ if (cachedStyle->flowThread().isEmpty())
+ return false;
+
+ return !document()->renderView()->flowThreadController()->isContentNodeRegisteredWithAnyNamedFlow(this);
+}
+
#if ENABLE(CSS_REGIONS)
const AtomicString& Element::webkitRegionOverset() const
Modified: trunk/Source/WebCore/dom/Element.h (148864 => 148865)
--- trunk/Source/WebCore/dom/Element.h 2013-04-22 08:59:18 UTC (rev 148864)
+++ trunk/Source/WebCore/dom/Element.h 2013-04-22 09:05:52 UTC (rev 148865)
@@ -608,6 +608,7 @@
PassRefPtr<RenderStyle> styleForRenderer();
RenderRegion* renderRegion() const;
+ virtual bool moveToFlowThreadIsNeeded(RefPtr<RenderStyle>& cachedStyle);
#if ENABLE(CSS_REGIONS)
const AtomicString& webkitRegionOverset() const;
Vector<RefPtr<Range> > webkitGetRegionFlowRanges() const;
Modified: trunk/Source/WebCore/dom/NodeRenderingContext.cpp (148864 => 148865)
--- trunk/Source/WebCore/dom/NodeRenderingContext.cpp 2013-04-22 08:59:18 UTC (rev 148864)
+++ trunk/Source/WebCore/dom/NodeRenderingContext.cpp 2013-04-22 09:05:52 UTC (rev 148865)
@@ -148,7 +148,7 @@
return 0;
}
-RenderObject* NodeRenderingContext::parentRenderer() const
+RenderObject* NodeRenderingContext::parentRenderer()
{
if (RenderObject* renderer = m_node->renderer())
return renderer->parent();
@@ -170,10 +170,15 @@
if (m_parentFlowRenderer)
return m_parentFlowRenderer;
+ if (m_node->isElementNode() && toElement(m_node)->moveToFlowThreadIsNeeded(m_style)) {
+ moveToFlowThread();
+ return m_parentFlowRenderer;
+ }
+
return m_renderingParent ? m_renderingParent->renderer() : 0;
}
-bool NodeRenderingContext::shouldCreateRenderer() const
+bool NodeRenderingContext::shouldCreateRenderer()
{
if (!m_node->document()->shouldCreateRenderers())
return false;
@@ -182,8 +187,16 @@
RenderObject* parentRenderer = this->parentRenderer();
if (!parentRenderer)
return false;
- if (!parentRenderer->canHaveChildren())
- return false;
+ if (!parentRenderer->canHaveChildren()) {
+ if (parentRenderer->canDOMChildrenHaveRenderParent()) {
+ // In a region, only the children that need to be in a flow thread should have a renderer.
+ bool shouldBeInNamedFlow = m_node->isElementNode() && toElement(m_node)->moveToFlowThreadIsNeeded(m_style);
+ if (!shouldBeInNamedFlow)
+ return false;
+ } else
+ return false;
+ }
+
if (!m_renderingParent->childShouldCreateRenderer(*this))
return false;
return true;
@@ -192,35 +205,21 @@
void NodeRenderingContext::moveToFlowThreadIfNeeded()
{
ASSERT(m_node->isElementNode());
- ASSERT(m_style);
- if (!m_node->document()->cssRegionsEnabled())
- return;
- if (m_style->flowThread().isEmpty())
+ if (!toElement(m_node)->moveToFlowThreadIsNeeded(m_style))
return;
- // As per http://dev.w3.org/csswg/css3-regions/#flow-into, pseudo-elements such as ::first-line, ::first-letter, ::before or ::after
- // cannot be directly collected into a named flow.
- if (m_node->isPseudoElement())
- return;
+ moveToFlowThread();
+}
- // FIXME: Do not collect elements if they are in shadow tree.
- if (m_node->isInShadowTree())
- return;
+void NodeRenderingContext::moveToFlowThread()
+{
+ ASSERT(m_node->isElementNode());
+ ASSERT(toElement(m_node)->moveToFlowThreadIsNeeded(m_style));
-#if ENABLE(FULLSCREEN_API)
- Document* document = m_node->document();
- if (document->webkitIsFullScreen() && document->webkitCurrentFullScreenElement() == m_node)
- return;
-#endif
-
-#if ENABLE(SVG)
- // Allow only svg root elements to be directly collected by a render flow thread.
- if (m_node->isSVGElement()
- && (!(m_node->hasTagName(SVGNames::svgTag) && m_node->parentNode() && !m_node->parentNode()->isSVGElement())))
- return;
-#endif
-
+ if (!m_style)
+ m_style = toElement(m_node)->styleForRenderer();
+ ASSERT(m_style);
ASSERT(m_node->document()->renderView());
FlowThreadController* flowThreadController = m_node->document()->renderView()->flowThreadController();
m_parentFlowRenderer = flowThreadController->ensureRenderFlowThreadWithName(m_style->flowThread());
@@ -245,7 +244,8 @@
if (!shouldCreateRenderer())
return;
- m_style = element->styleForRenderer();
+ if (!m_style)
+ m_style = element->styleForRenderer();
ASSERT(m_style);
moveToFlowThreadIfNeeded();
Modified: trunk/Source/WebCore/dom/NodeRenderingContext.h (148864 => 148865)
--- trunk/Source/WebCore/dom/NodeRenderingContext.h 2013-04-22 08:59:18 UTC (rev 148864)
+++ trunk/Source/WebCore/dom/NodeRenderingContext.h 2013-04-22 09:05:52 UTC (rev 148865)
@@ -55,7 +55,7 @@
Node* node() const;
ContainerNode* parentNodeForRenderingAndStyle() const;
bool resetStyleInheritance() const;
- RenderObject* parentRenderer() const;
+ RenderObject* parentRenderer(); // the renderer that will be the parent for this node's renderer. In the case of RenderFlowThreads, it may need to create it.
RenderObject* nextRenderer() const;
RenderObject* previousRenderer() const;
InsertionPoint* insertionPoint() const;
@@ -66,7 +66,8 @@
bool isOnEncapsulationBoundary() const;
private:
- bool shouldCreateRenderer() const;
+ bool shouldCreateRenderer();
+ void moveToFlowThread();
void moveToFlowThreadIfNeeded();
Node* m_node;
Modified: trunk/Source/WebCore/dom/PseudoElement.h (148864 => 148865)
--- trunk/Source/WebCore/dom/PseudoElement.h 2013-04-22 08:59:18 UTC (rev 148864)
+++ trunk/Source/WebCore/dom/PseudoElement.h 2013-04-22 09:05:52 UTC (rev 148865)
@@ -46,6 +46,14 @@
virtual void attach() OVERRIDE;
virtual bool rendererIsNeeded(const NodeRenderingContext&) OVERRIDE;
+ // As per http://dev.w3.org/csswg/css3-regions/#flow-into, pseudo-elements such as ::first-line, ::first-letter, ::before or ::after
+ // cannot be directly collected into a named flow.
+ virtual bool moveToFlowThreadIsNeeded(RefPtr<RenderStyle>& cachedStyle) OVERRIDE
+ {
+ UNUSED_PARAM(cachedStyle);
+ return false;
+ }
+
virtual bool canStartSelection() const OVERRIDE { return false; }
virtual bool canContainRangeEndPoint() const OVERRIDE { return false; }
Modified: trunk/Source/WebCore/dom/Text.cpp (148864 => 148865)
--- trunk/Source/WebCore/dom/Text.cpp 2013-04-22 08:59:18 UTC (rev 148864)
+++ trunk/Source/WebCore/dom/Text.cpp 2013-04-22 09:05:52 UTC (rev 148865)
@@ -197,7 +197,7 @@
return create(document(), data());
}
-bool Text::textRendererIsNeeded(const NodeRenderingContext& context)
+bool Text::textRendererIsNeeded(NodeRenderingContext& context)
{
if (isEditingText())
return true;
@@ -302,10 +302,15 @@
if (!attached())
return;
RenderText* textRenderer = toRenderText(renderer());
- if (!textRenderer || !textRendererIsNeeded(NodeRenderingContext(this, textRenderer->style()))) {
+ if (!textRenderer) {
reattach();
return;
}
+ NodeRenderingContext renderingContext(this, textRenderer->style());
+ if (!textRendererIsNeeded(renderingContext)) {
+ reattach();
+ return;
+ }
textRenderer->setTextWithOffset(dataImpl(), offsetOfReplacedData, lengthOfReplacedData);
}
Modified: trunk/Source/WebCore/dom/Text.h (148864 => 148865)
--- trunk/Source/WebCore/dom/Text.h 2013-04-22 08:59:18 UTC (rev 148864)
+++ trunk/Source/WebCore/dom/Text.h 2013-04-22 09:05:52 UTC (rev 148865)
@@ -46,7 +46,7 @@
void recalcTextStyle(StyleChange);
void createTextRendererIfNeeded();
- bool textRendererIsNeeded(const NodeRenderingContext&);
+ bool textRendererIsNeeded(NodeRenderingContext&);
RenderText* createTextRenderer(RenderArena*, RenderStyle*);
void updateTextRenderer(unsigned offsetOfReplacedData, unsigned lengthOfReplacedData);
Modified: trunk/Source/WebCore/rendering/FlowThreadController.cpp (148864 => 148865)
--- trunk/Source/WebCore/rendering/FlowThreadController.cpp 2013-04-22 08:59:18 UTC (rev 148864)
+++ trunk/Source/WebCore/rendering/FlowThreadController.cpp 2013-04-22 09:05:52 UTC (rev 148865)
@@ -227,6 +227,11 @@
}
}
+bool FlowThreadController::isContentNodeRegisteredWithAnyNamedFlow(Node* contentNode) const
+{
+ return m_mapNamedFlowContentNodes.contains(contentNode);
+}
+
#ifndef NDEBUG
bool FlowThreadController::isAutoLogicalHeightRegionsCountConsistent() const
{
Modified: trunk/Source/WebCore/rendering/FlowThreadController.h (148864 => 148865)
--- trunk/Source/WebCore/rendering/FlowThreadController.h 2013-04-22 08:59:18 UTC (rev 148864)
+++ trunk/Source/WebCore/rendering/FlowThreadController.h 2013-04-22 09:05:52 UTC (rev 148865)
@@ -66,6 +66,7 @@
void registerNamedFlowContentNode(Node*, RenderNamedFlowThread*);
void unregisterNamedFlowContentNode(Node*);
+ bool isContentNodeRegisteredWithAnyNamedFlow(Node*) const;
bool hasFlowThreadsWithAutoLogicalHeightRegions() const { return m_flowThreadsWithAutoLogicalHeightRegions; }
void incrementFlowThreadsWithAutoLogicalHeightRegions() { ++m_flowThreadsWithAutoLogicalHeightRegions; }
Modified: trunk/Source/WebCore/rendering/RenderObject.h (148864 => 148865)
--- trunk/Source/WebCore/rendering/RenderObject.h 2013-04-22 08:59:18 UTC (rev 148864)
+++ trunk/Source/WebCore/rendering/RenderObject.h 2013-04-22 09:05:52 UTC (rev 148865)
@@ -251,6 +251,7 @@
// RenderObject tree manipulation
//////////////////////////////////////////
virtual bool canHaveChildren() const { return virtualChildren(); }
+ virtual bool canDOMChildrenHaveRenderParent() const { return false; } // Even if this render object can't have render children, the children in the DOM tree may have a render parent (that is different from this object).
virtual bool canHaveGeneratedChildren() const;
virtual bool isChildAllowed(RenderObject*, RenderStyle*) const { return true; }
virtual void addChild(RenderObject* newChild, RenderObject* beforeChild = 0);
Modified: trunk/Source/WebCore/rendering/RenderRegion.h (148864 => 148865)
--- trunk/Source/WebCore/rendering/RenderRegion.h 2013-04-22 08:59:18 UTC (rev 148864)
+++ trunk/Source/WebCore/rendering/RenderRegion.h 2013-04-22 09:05:52 UTC (rev 148865)
@@ -145,6 +145,7 @@
virtual const char* renderName() const { return "RenderRegion"; }
virtual bool canHaveChildren() const OVERRIDE { return false; }
+ virtual bool canDOMChildrenHaveRenderParent() const OVERRIDE { return true; }
virtual void insertedIntoTree() OVERRIDE;
virtual void willBeRemovedFromTree() OVERRIDE;
Modified: trunk/Source/WebCore/svg/SVGElement.cpp (148864 => 148865)
--- trunk/Source/WebCore/svg/SVGElement.cpp 2013-04-22 08:59:18 UTC (rev 148864)
+++ trunk/Source/WebCore/svg/SVGElement.cpp 2013-04-22 09:05:52 UTC (rev 148865)
@@ -452,6 +452,12 @@
return false;
}
+bool SVGElement::moveToFlowThreadIsNeeded(RefPtr<RenderStyle>& cachedStyle)
+{
+ // Allow only svg root elements to be directly collected by a render flow thread.
+ return parentNode() && !parentNode()->isSVGElement() && hasTagName(SVGNames::svgTag) && Element::moveToFlowThreadIsNeeded(cachedStyle);
+}
+
void SVGElement::sendSVGLoadEventIfPossible(bool sendParentLoadEvents)
{
RefPtr<SVGElement> currentTarget = this;
Modified: trunk/Source/WebCore/svg/SVGElement.h (148864 => 148865)
--- trunk/Source/WebCore/svg/SVGElement.h 2013-04-22 08:59:18 UTC (rev 148864)
+++ trunk/Source/WebCore/svg/SVGElement.h 2013-04-22 09:05:52 UTC (rev 148865)
@@ -120,6 +120,8 @@
virtual bool addEventListener(const AtomicString& eventType, PassRefPtr<EventListener>, bool useCapture) OVERRIDE;
virtual bool removeEventListener(const AtomicString& eventType, EventListener*, bool useCapture) OVERRIDE;
+ virtual bool moveToFlowThreadIsNeeded(RefPtr<RenderStyle>& cachedStyle) OVERRIDE;
+
protected:
SVGElement(const QualifiedName&, Document*, ConstructionType = CreateSVGElement);