<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[206049] trunk/Source/WebCore</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/206049">206049</a></dd>
<dt>Author</dt> <dd>antti@apple.com</dd>
<dt>Date</dt> <dd>2016-09-16 14:39:28 -0700 (Fri, 16 Sep 2016)</dd>
</dl>
<h3>Log Message</h3>
<pre>Tighten region style map to use RenderElement instead of RenderObject
https://bugs.webkit.org/show_bug.cgi?id=162064
Reviewed by Zalan Bujtas.
RenderTexts don't have styles of their own so the map can operate on RenderElements.
* rendering/RenderElement.cpp:
(WebCore::RenderElement::willBeRemovedFromTree):
(WebCore::RenderElement::removeFromRenderFlowThread):
(WebCore::RenderElement::removeFromRenderFlowThreadIncludingDescendants):
(WebCore::RenderElement::invalidateFlowThreadContainingBlockIncludingDescendants):
* rendering/RenderElement.h:
* rendering/RenderFlowThread.cpp:
(WebCore::RenderFlowThread::removeFlowChildInfo):
* rendering/RenderFlowThread.h:
* rendering/RenderNamedFlowFragment.cpp:
(WebCore::RenderNamedFlowFragment::computeChildrenStyleInRegion):
(WebCore::RenderNamedFlowFragment::setRendererStyleInRegion):
(WebCore::RenderNamedFlowFragment::clearObjectStyleInRegion):
(WebCore::RenderNamedFlowFragment::setRegionObjectsRegionStyle):
(WebCore::RenderNamedFlowFragment::restoreRegionObjectsOriginalStyle):
(WebCore::RenderNamedFlowFragment::setObjectStyleInRegion): Deleted.
* rendering/RenderNamedFlowFragment.h:
* rendering/RenderNamedFlowThread.cpp:
(WebCore::RenderNamedFlowThread::clearRenderObjectCustomStyle):
(WebCore::RenderNamedFlowThread::removeFlowChildInfo):
* rendering/RenderNamedFlowThread.h:
* rendering/RenderObject.cpp:
(WebCore::RenderObject::willBeRemovedFromTree):
(WebCore::RenderObject::removeFromRenderFlowThread): Deleted.
(WebCore::RenderObject::removeFromRenderFlowThreadIncludingDescendants): Deleted.
(WebCore::RenderObject::invalidateFlowThreadContainingBlockIncludingDescendants): Deleted.
These can now move to RenderElement.
* rendering/RenderObject.h:</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderElementcpp">trunk/Source/WebCore/rendering/RenderElement.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderElementh">trunk/Source/WebCore/rendering/RenderElement.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderFlowThreadcpp">trunk/Source/WebCore/rendering/RenderFlowThread.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderFlowThreadh">trunk/Source/WebCore/rendering/RenderFlowThread.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderNamedFlowFragmentcpp">trunk/Source/WebCore/rendering/RenderNamedFlowFragment.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderNamedFlowFragmenth">trunk/Source/WebCore/rendering/RenderNamedFlowFragment.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderNamedFlowThreadcpp">trunk/Source/WebCore/rendering/RenderNamedFlowThread.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderNamedFlowThreadh">trunk/Source/WebCore/rendering/RenderNamedFlowThread.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderObjectcpp">trunk/Source/WebCore/rendering/RenderObject.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderObjecth">trunk/Source/WebCore/rendering/RenderObject.h</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (206048 => 206049)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-09-16 21:20:23 UTC (rev 206048)
+++ trunk/Source/WebCore/ChangeLog        2016-09-16 21:39:28 UTC (rev 206049)
</span><span class="lines">@@ -1,3 +1,43 @@
</span><ins>+2016-09-16 Antti Koivisto <antti@apple.com>
+
+ Tighten region style map to use RenderElement instead of RenderObject
+ https://bugs.webkit.org/show_bug.cgi?id=162064
+
+ Reviewed by Zalan Bujtas.
+
+ RenderTexts don't have styles of their own so the map can operate on RenderElements.
+
+ * rendering/RenderElement.cpp:
+ (WebCore::RenderElement::willBeRemovedFromTree):
+ (WebCore::RenderElement::removeFromRenderFlowThread):
+ (WebCore::RenderElement::removeFromRenderFlowThreadIncludingDescendants):
+ (WebCore::RenderElement::invalidateFlowThreadContainingBlockIncludingDescendants):
+ * rendering/RenderElement.h:
+ * rendering/RenderFlowThread.cpp:
+ (WebCore::RenderFlowThread::removeFlowChildInfo):
+ * rendering/RenderFlowThread.h:
+ * rendering/RenderNamedFlowFragment.cpp:
+ (WebCore::RenderNamedFlowFragment::computeChildrenStyleInRegion):
+ (WebCore::RenderNamedFlowFragment::setRendererStyleInRegion):
+ (WebCore::RenderNamedFlowFragment::clearObjectStyleInRegion):
+ (WebCore::RenderNamedFlowFragment::setRegionObjectsRegionStyle):
+ (WebCore::RenderNamedFlowFragment::restoreRegionObjectsOriginalStyle):
+ (WebCore::RenderNamedFlowFragment::setObjectStyleInRegion): Deleted.
+ * rendering/RenderNamedFlowFragment.h:
+ * rendering/RenderNamedFlowThread.cpp:
+ (WebCore::RenderNamedFlowThread::clearRenderObjectCustomStyle):
+ (WebCore::RenderNamedFlowThread::removeFlowChildInfo):
+ * rendering/RenderNamedFlowThread.h:
+ * rendering/RenderObject.cpp:
+ (WebCore::RenderObject::willBeRemovedFromTree):
+ (WebCore::RenderObject::removeFromRenderFlowThread): Deleted.
+ (WebCore::RenderObject::removeFromRenderFlowThreadIncludingDescendants): Deleted.
+ (WebCore::RenderObject::invalidateFlowThreadContainingBlockIncludingDescendants): Deleted.
+
+ These can now move to RenderElement.
+
+ * rendering/RenderObject.h:
+
</ins><span class="cx"> 2016-09-16 Brent Fulgham <bfulgham@apple.com>
</span><span class="cx">
</span><span class="cx"> CaptionUserPreferences's use of the PageGroup's page map is incorrect
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderElement.cpp (206048 => 206049)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderElement.cpp        2016-09-16 21:20:23 UTC (rev 206048)
+++ trunk/Source/WebCore/rendering/RenderElement.cpp        2016-09-16 21:39:28 UTC (rev 206049)
</span><span class="lines">@@ -1087,6 +1087,8 @@
</span><span class="cx"> if (auto* containerFlowThread = parent()->renderNamedFlowThreadWrapper())
</span><span class="cx"> containerFlowThread->removeFlowChild(*this);
</span><span class="cx">
</span><ins>+ removeFromRenderFlowThread();
+
</ins><span class="cx"> RenderObject::willBeRemovedFromTree();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -2204,6 +2206,78 @@
</span><span class="cx"> return (frame().settings().shouldRespectImageOrientation() && is<HTMLImageElement>(element())) ? RespectImageOrientation : DoNotRespectImageOrientation;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+void RenderElement::removeFromRenderFlowThread()
+{
+ if (flowThreadState() == NotInsideFlowThread)
+ return;
+
+ // Sometimes we remove the element from the flow, but it's not destroyed at that time.
+ // It's only until later when we actually destroy it and remove all the children from it.
+ // Currently, that happens for firstLetter elements and list markers.
+ // Pass in the flow thread so that we don't have to look it up for all the children.
+ removeFromRenderFlowThreadIncludingDescendants(true);
+}
+
+void RenderElement::removeFromRenderFlowThreadIncludingDescendants(bool shouldUpdateState)
+{
+ // Once we reach another flow thread we don't need to update the flow thread state
+ // but we have to continue cleanup the flow thread info.
+ if (isRenderFlowThread())
+ shouldUpdateState = false;
+
+ for (auto& child : childrenOfType<RenderObject>(*this)) {
+ if (is<RenderElement>(child)) {
+ downcast<RenderElement>(child).removeFromRenderFlowThreadIncludingDescendants(shouldUpdateState);
+ continue;
+ }
+ if (shouldUpdateState)
+ child.setFlowThreadState(NotInsideFlowThread);
+ }
+
+ // We have to ask for our containing flow thread as it may be above the removed sub-tree.
+ RenderFlowThread* flowThreadContainingBlock = this->flowThreadContainingBlock();
+ while (flowThreadContainingBlock) {
+ flowThreadContainingBlock->removeFlowChildInfo(this);
+
+ if (flowThreadContainingBlock->flowThreadState() == NotInsideFlowThread)
+ break;
+ auto* parent = flowThreadContainingBlock->parent();
+ if (!parent)
+ break;
+ flowThreadContainingBlock = parent->flowThreadContainingBlock();
+ }
+ if (is<RenderBlock>(*this))
+ downcast<RenderBlock>(*this).setCachedFlowThreadContainingBlockNeedsUpdate();
+
+ if (shouldUpdateState)
+ setFlowThreadState(NotInsideFlowThread);
+}
+
+void RenderElement::invalidateFlowThreadContainingBlockIncludingDescendants(RenderFlowThread* flowThread)
+{
+ if (flowThreadState() == NotInsideFlowThread)
+ return;
+
+ if (is<RenderBlock>(*this)) {
+ RenderBlock& block = downcast<RenderBlock>(*this);
+
+ if (block.cachedFlowThreadContainingBlockNeedsUpdate())
+ return;
+
+ flowThread = block.cachedFlowThreadContainingBlock();
+ block.setCachedFlowThreadContainingBlockNeedsUpdate();
+ }
+
+ if (flowThread)
+ flowThread->removeFlowChildInfo(this);
+
+ if (!is<RenderElement>(*this))
+ return;
+
+ for (auto& child : childrenOfType<RenderElement>(*this))
+ child.invalidateFlowThreadContainingBlockIncludingDescendants(flowThread);
+}
+
</ins><span class="cx"> #if ENABLE(IOS_TEXT_AUTOSIZING)
</span><span class="cx"> static RenderObject::BlockContentHeightType includeNonFixedHeight(const RenderObject& renderer)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderElementh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderElement.h (206048 => 206049)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderElement.h        2016-09-16 21:20:23 UTC (rev 206048)
+++ trunk/Source/WebCore/rendering/RenderElement.h        2016-09-16 21:39:28 UTC (rev 206049)
</span><span class="lines">@@ -229,6 +229,9 @@
</span><span class="cx">
</span><span class="cx"> RespectImageOrientationEnum shouldRespectImageOrientation() const;
</span><span class="cx">
</span><ins>+ void removeFromRenderFlowThread();
+ void invalidateFlowThreadContainingBlockIncludingDescendants(RenderFlowThread* = nullptr);
+
</ins><span class="cx"> protected:
</span><span class="cx"> enum BaseTypeFlag {
</span><span class="cx"> RenderLayerModelObjectFlag = 1 << 0,
</span><span class="lines">@@ -284,6 +287,8 @@
</span><span class="cx"> void paintOutline(PaintInfo&, const LayoutRect&);
</span><span class="cx"> void updateOutlineAutoAncestor(bool hasOutlineAuto);
</span><span class="cx">
</span><ins>+ void removeFromRenderFlowThreadIncludingDescendants(bool shouldUpdateState);
+
</ins><span class="cx"> private:
</span><span class="cx"> RenderElement(ContainerNode&, RenderStyle&&, BaseTypeFlags);
</span><span class="cx"> void node() const = delete;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderFlowThreadcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderFlowThread.cpp (206048 => 206049)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderFlowThread.cpp        2016-09-16 21:20:23 UTC (rev 206048)
+++ trunk/Source/WebCore/rendering/RenderFlowThread.cpp        2016-09-16 21:39:28 UTC (rev 206049)
</span><span class="lines">@@ -92,7 +92,7 @@
</span><span class="cx"> invalidateRegions();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void RenderFlowThread::removeFlowChildInfo(RenderObject* child)
</del><ins>+void RenderFlowThread::removeFlowChildInfo(RenderElement* child)
</ins><span class="cx"> {
</span><span class="cx"> if (is<RenderBlockFlow>(*child))
</span><span class="cx"> removeLineRegionInfo(downcast<RenderBlockFlow>(child));
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderFlowThreadh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderFlowThread.h (206048 => 206049)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderFlowThread.h        2016-09-16 21:20:23 UTC (rev 206048)
+++ trunk/Source/WebCore/rendering/RenderFlowThread.h        2016-09-16 21:39:28 UTC (rev 206049)
</span><span class="lines">@@ -60,7 +60,7 @@
</span><span class="cx"> public:
</span><span class="cx"> virtual ~RenderFlowThread() { }
</span><span class="cx">
</span><del>- virtual void removeFlowChildInfo(RenderObject*);
</del><ins>+ virtual void removeFlowChildInfo(RenderElement*);
</ins><span class="cx"> #ifndef NDEBUG
</span><span class="cx"> bool hasChildInfo(RenderObject* child) const { return is<RenderBox>(child) && m_regionRangeMap.contains(downcast<RenderBox>(child)); }
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderNamedFlowFragmentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderNamedFlowFragment.cpp (206048 => 206049)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderNamedFlowFragment.cpp        2016-09-16 21:20:23 UTC (rev 206048)
+++ trunk/Source/WebCore/rendering/RenderNamedFlowFragment.cpp        2016-09-16 21:39:28 UTC (rev 206049)
</span><span class="lines">@@ -359,62 +359,56 @@
</span><span class="cx">
</span><span class="cx"> void RenderNamedFlowFragment::computeChildrenStyleInRegion(RenderElement& renderer)
</span><span class="cx"> {
</span><del>- for (auto& child : childrenOfType<RenderObject>(renderer)) {
</del><ins>+ for (auto& child : childrenOfType<RenderElement>(renderer)) {
+ auto it = m_rendererRegionStyle.find(&child);
</ins><span class="cx">
</span><del>- auto it = m_renderObjectRegionStyle.find(&child);
-
</del><span class="cx"> std::unique_ptr<RenderStyle> childStyleInRegion;
</span><span class="cx"> bool objectRegionStyleCached = false;
</span><del>- if (it != m_renderObjectRegionStyle.end()) {
</del><ins>+ if (it != m_rendererRegionStyle.end()) {
</ins><span class="cx"> childStyleInRegion = RenderStyle::clonePtr(*it->value.style);
</span><span class="cx"> objectRegionStyleCached = true;
</span><span class="cx"> } else {
</span><span class="cx"> if (child.isAnonymous() || child.isInFlowRenderFlowThread())
</span><span class="cx"> childStyleInRegion = std::make_unique<RenderStyle>(RenderStyle::createAnonymousStyleWithDisplay(renderer.style(), child.style().display()));
</span><del>- else if (is<RenderText>(child))
- childStyleInRegion = RenderStyle::clonePtr(renderer.style());
</del><span class="cx"> else
</span><del>- childStyleInRegion = computeStyleInRegion(downcast<RenderElement>(child), renderer.style());
</del><ins>+ childStyleInRegion = computeStyleInRegion(child, renderer.style());
</ins><span class="cx"> }
</span><span class="cx">
</span><del>- setObjectStyleInRegion(&child, WTFMove(childStyleInRegion), objectRegionStyleCached);
-
- if (is<RenderElement>(child))
- computeChildrenStyleInRegion(downcast<RenderElement>(child));
</del><ins>+ setRendererStyleInRegion(child, WTFMove(childStyleInRegion), objectRegionStyleCached);
+ computeChildrenStyleInRegion(child);
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void RenderNamedFlowFragment::setObjectStyleInRegion(RenderObject* object, std::unique_ptr<RenderStyle> styleInRegion, bool objectRegionStyleCached)
</del><ins>+void RenderNamedFlowFragment::setRendererStyleInRegion(RenderElement& renderer, std::unique_ptr<RenderStyle> styleInRegion, bool objectRegionStyleCached)
</ins><span class="cx"> {
</span><del>- ASSERT(object->flowThreadContainingBlock());
</del><ins>+ ASSERT(renderer.flowThreadContainingBlock());
</ins><span class="cx">
</span><del>- std::unique_ptr<RenderStyle> objectOriginalStyle = RenderStyle::clonePtr(object->style());
- if (is<RenderElement>(*object))
- downcast<RenderElement>(*object).setStyleInternal(WTFMove(*styleInRegion));
</del><ins>+ std::unique_ptr<RenderStyle> objectOriginalStyle = RenderStyle::clonePtr(renderer.style());
+ renderer.setStyleInternal(WTFMove(*styleInRegion));
</ins><span class="cx">
</span><del>- if (is<RenderBoxModelObject>(*object) && !object->hasVisibleBoxDecorations()) {
- bool hasVisibleBoxDecorations = is<RenderTableCell>(*object)
- || object->style().hasBackground()
- || object->style().hasVisibleBorder()
- || object->style().hasAppearance()
- || object->style().boxShadow();
- object->setHasVisibleBoxDecorations(hasVisibleBoxDecorations);
</del><ins>+ if (is<RenderBoxModelObject>(renderer) && !renderer.hasVisibleBoxDecorations()) {
+ bool hasVisibleBoxDecorations = is<RenderTableCell>(renderer)
+ || renderer.style().hasBackground()
+ || renderer.style().hasVisibleBorder()
+ || renderer.style().hasAppearance()
+ || renderer.style().boxShadow();
+ renderer.setHasVisibleBoxDecorations(hasVisibleBoxDecorations);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> ObjectRegionStyleInfo styleInfo;
</span><span class="cx"> styleInfo.style = WTFMove(objectOriginalStyle);
</span><span class="cx"> styleInfo.cached = objectRegionStyleCached;
</span><del>- m_renderObjectRegionStyle.set(object, WTFMove(styleInfo));
</del><ins>+ m_rendererRegionStyle.set(&renderer, WTFMove(styleInfo));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void RenderNamedFlowFragment::clearObjectStyleInRegion(const RenderObject* object)
</del><ins>+void RenderNamedFlowFragment::clearObjectStyleInRegion(const RenderElement* object)
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(object);
</span><del>- m_renderObjectRegionStyle.remove(object);
</del><ins>+ m_rendererRegionStyle.remove(object);
</ins><span class="cx">
</span><span class="cx"> // Clear the style for the children of this object.
</span><del>- for (RenderObject* child = object->firstChildSlow(); child; child = child->nextSibling())
- clearObjectStyleInRegion(child);
</del><ins>+ for (auto& child : childrenOfType<RenderElement>(*object))
+ clearObjectStyleInRegion(&child);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void RenderNamedFlowFragment::setRegionObjectsRegionStyle()
</span><span class="lines">@@ -431,27 +425,27 @@
</span><span class="cx"> // The list of content nodes contains also the nodes with display:none.
</span><span class="cx"> if (!element->renderer())
</span><span class="cx"> continue;
</span><ins>+ auto& renderer = *element->renderer();
</ins><span class="cx">
</span><del>- RenderElement* object = element->renderer();
</del><span class="cx"> // If the content node does not flow any of its children in this region,
</span><span class="cx"> // we do not compute any style for them in this region.
</span><del>- if (!flowThread()->objectInFlowRegion(object, this))
</del><ins>+ if (!flowThread()->objectInFlowRegion(&renderer, this))
</ins><span class="cx"> continue;
</span><span class="cx">
</span><span class="cx"> // If the object has style in region, use that instead of computing a new one.
</span><del>- auto it = m_renderObjectRegionStyle.find(object);
</del><ins>+ auto it = m_rendererRegionStyle.find(&renderer);
</ins><span class="cx"> std::unique_ptr<RenderStyle> objectStyleInRegion;
</span><span class="cx"> bool objectRegionStyleCached = false;
</span><del>- if (it != m_renderObjectRegionStyle.end()) {
</del><ins>+ if (it != m_rendererRegionStyle.end()) {
</ins><span class="cx"> objectStyleInRegion = RenderStyle::clonePtr(*it->value.style);
</span><span class="cx"> ASSERT(it->value.cached);
</span><span class="cx"> objectRegionStyleCached = true;
</span><span class="cx"> } else
</span><del>- objectStyleInRegion = computeStyleInRegion(*object, style());
</del><ins>+ objectStyleInRegion = computeStyleInRegion(renderer, style());
</ins><span class="cx">
</span><del>- setObjectStyleInRegion(object, WTFMove(objectStyleInRegion), objectRegionStyleCached);
</del><ins>+ setRendererStyleInRegion(renderer, WTFMove(objectStyleInRegion), objectRegionStyleCached);
</ins><span class="cx">
</span><del>- computeChildrenStyleInRegion(*object);
</del><ins>+ computeChildrenStyleInRegion(renderer);
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -460,9 +454,9 @@
</span><span class="cx"> if (!hasCustomRegionStyle())
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- RenderObjectRegionStyleMap temp;
- for (auto& objectPair : m_renderObjectRegionStyle) {
- RenderObject* object = const_cast<RenderObject*>(objectPair.key);
</del><ins>+ RendererRegionStyleMap temp;
+ for (auto& objectPair : m_rendererRegionStyle) {
+ auto* object = const_cast<RenderElement*>(objectPair.key);
</ins><span class="cx"> std::unique_ptr<RenderStyle> objectRegionStyle = RenderStyle::clonePtr(object->style());
</span><span class="cx"> std::unique_ptr<RenderStyle> objectOriginalStyle = RenderStyle::clonePtr(*objectPair.value.style);
</span><span class="cx">
</span><span class="lines">@@ -480,11 +474,10 @@
</span><span class="cx"> styleInfo.cached = true;
</span><span class="cx"> temp.set(object, WTFMove(styleInfo));
</span><span class="cx"> }
</span><del>- if (is<RenderElement>(*object))
- downcast<RenderElement>(*object).setStyleInternal(WTFMove(*objectOriginalStyle));
</del><ins>+ object->setStyleInternal(WTFMove(*objectOriginalStyle));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>- m_renderObjectRegionStyle.swap(temp);
</del><ins>+ m_rendererRegionStyle.swap(temp);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> RenderNamedFlowThread* RenderNamedFlowFragment::namedFlowThread() const
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderNamedFlowFragmenth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderNamedFlowFragment.h (206048 => 206049)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderNamedFlowFragment.h        2016-09-16 21:20:23 UTC (rev 206048)
+++ trunk/Source/WebCore/rendering/RenderNamedFlowFragment.h        2016-09-16 21:39:28 UTC (rev 206049)
</span><span class="lines">@@ -79,7 +79,7 @@
</span><span class="cx"> RenderLayerModelObject& layerOwner() const { return downcast<RenderLayerModelObject>(*parent()); }
</span><span class="cx">
</span><span class="cx"> bool hasCustomRegionStyle() const { return m_hasCustomRegionStyle; }
</span><del>- void clearObjectStyleInRegion(const RenderObject*);
</del><ins>+ void clearObjectStyleInRegion(const RenderElement*);
</ins><span class="cx">
</span><span class="cx"> void setRegionObjectsRegionStyle();
</span><span class="cx"> void restoreRegionObjectsOriginalStyle();
</span><span class="lines">@@ -125,7 +125,7 @@
</span><span class="cx">
</span><span class="cx"> std::unique_ptr<RenderStyle> computeStyleInRegion(RenderElement&, const RenderStyle& parentStyle) const;
</span><span class="cx"> void computeChildrenStyleInRegion(RenderElement&);
</span><del>- void setObjectStyleInRegion(RenderObject*, std::unique_ptr<RenderStyle>, bool objectRegionStyleCached);
</del><ins>+ void setRendererStyleInRegion(RenderElement&, std::unique_ptr<RenderStyle>, bool objectRegionStyleCached);
</ins><span class="cx">
</span><span class="cx"> void checkRegionStyle();
</span><span class="cx"> void setHasCustomRegionStyle(bool hasCustomRegionStyle) { m_hasCustomRegionStyle = hasCustomRegionStyle; }
</span><span class="lines">@@ -153,8 +153,8 @@
</span><span class="cx"> bool cached;
</span><span class="cx"> };
</span><span class="cx">
</span><del>- typedef HashMap<const RenderObject*, ObjectRegionStyleInfo > RenderObjectRegionStyleMap;
- RenderObjectRegionStyleMap m_renderObjectRegionStyle;
</del><ins>+ using RendererRegionStyleMap = HashMap<const RenderElement*, ObjectRegionStyleInfo>;
+ RendererRegionStyleMap m_rendererRegionStyle;
</ins><span class="cx">
</span><span class="cx"> bool m_hasCustomRegionStyle : 1;
</span><span class="cx"> bool m_hasAutoLogicalHeight : 1;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderNamedFlowThreadcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderNamedFlowThread.cpp (206048 => 206049)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderNamedFlowThread.cpp        2016-09-16 21:20:23 UTC (rev 206048)
+++ trunk/Source/WebCore/rendering/RenderNamedFlowThread.cpp        2016-09-16 21:39:28 UTC (rev 206049)
</span><span class="lines">@@ -812,7 +812,7 @@
</span><span class="cx"> m_hasRegionsWithStyling = hasRegionsWithStyling;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void RenderNamedFlowThread::clearRenderObjectCustomStyle(const RenderObject* object)
</del><ins>+void RenderNamedFlowThread::clearRenderObjectCustomStyle(const RenderElement* object)
</ins><span class="cx"> {
</span><span class="cx"> // Clear the styles for the object in the regions.
</span><span class="cx"> // FIXME: Region styling is not computed only for the region range of the object so this is why we need to walk the whole chain.
</span><span class="lines">@@ -820,7 +820,7 @@
</span><span class="cx"> downcast<RenderNamedFlowFragment>(*region).clearObjectStyleInRegion(object);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void RenderNamedFlowThread::removeFlowChildInfo(RenderObject* child)
</del><ins>+void RenderNamedFlowThread::removeFlowChildInfo(RenderElement* child)
</ins><span class="cx"> {
</span><span class="cx"> RenderFlowThread::removeFlowChildInfo(child);
</span><span class="cx"> clearRenderObjectCustomStyle(child);
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderNamedFlowThreadh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderNamedFlowThread.h (206048 => 206049)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderNamedFlowThread.h        2016-09-16 21:20:23 UTC (rev 206048)
+++ trunk/Source/WebCore/rendering/RenderNamedFlowThread.h        2016-09-16 21:39:28 UTC (rev 206049)
</span><span class="lines">@@ -91,9 +91,9 @@
</span><span class="cx"> bool hasRegionsWithStyling() const { return m_hasRegionsWithStyling; }
</span><span class="cx"> void checkRegionsWithStyling();
</span><span class="cx">
</span><del>- void clearRenderObjectCustomStyle(const RenderObject*);
</del><ins>+ void clearRenderObjectCustomStyle(const RenderElement*);
</ins><span class="cx">
</span><del>- void removeFlowChildInfo(RenderObject*) override;
</del><ins>+ void removeFlowChildInfo(RenderElement*) override;
</ins><span class="cx">
</span><span class="cx"> LayoutUnit flowContentBottom() const { return m_flowContentBottom; }
</span><span class="cx"> void dispatchNamedFlowEvents();
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderObject.cpp (206048 => 206049)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderObject.cpp        2016-09-16 21:20:23 UTC (rev 206048)
+++ trunk/Source/WebCore/rendering/RenderObject.cpp        2016-09-16 21:39:28 UTC (rev 206049)
</span><span class="lines">@@ -1426,79 +1426,12 @@
</span><span class="cx"> {
</span><span class="cx"> // FIXME: We should ASSERT(isRooted()) but we have some out-of-order removals which would need to be fixed first.
</span><span class="cx">
</span><del>- removeFromRenderFlowThread();
</del><ins>+ setFlowThreadState(NotInsideFlowThread);
</ins><span class="cx">
</span><span class="cx"> // Update cached boundaries in SVG renderers, if a child is removed.
</span><span class="cx"> parent()->setNeedsBoundariesUpdate();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void RenderObject::removeFromRenderFlowThread()
-{
- if (flowThreadState() == NotInsideFlowThread)
- return;
-
- // Sometimes we remove the element from the flow, but it's not destroyed at that time.
- // It's only until later when we actually destroy it and remove all the children from it.
- // Currently, that happens for firstLetter elements and list markers.
- // Pass in the flow thread so that we don't have to look it up for all the children.
- removeFromRenderFlowThreadIncludingDescendants(true);
-}
-
-void RenderObject::removeFromRenderFlowThreadIncludingDescendants(bool shouldUpdateState)
-{
- // Once we reach another flow thread we don't need to update the flow thread state
- // but we have to continue cleanup the flow thread info.
- if (isRenderFlowThread())
- shouldUpdateState = false;
-
- if (is<RenderElement>(*this)) {
- for (auto& child : childrenOfType<RenderObject>(downcast<RenderElement>(*this)))
- child.removeFromRenderFlowThreadIncludingDescendants(shouldUpdateState);
- }
-
- // We have to ask for our containing flow thread as it may be above the removed sub-tree.
- RenderFlowThread* flowThreadContainingBlock = this->flowThreadContainingBlock();
- while (flowThreadContainingBlock) {
- flowThreadContainingBlock->removeFlowChildInfo(this);
- if (flowThreadContainingBlock->flowThreadState() == NotInsideFlowThread)
- break;
- RenderObject* parent = flowThreadContainingBlock->parent();
- if (!parent)
- break;
- flowThreadContainingBlock = parent->flowThreadContainingBlock();
- }
- if (is<RenderBlock>(*this))
- downcast<RenderBlock>(*this).setCachedFlowThreadContainingBlockNeedsUpdate();
-
- if (shouldUpdateState)
- setFlowThreadState(NotInsideFlowThread);
-}
-
-void RenderObject::invalidateFlowThreadContainingBlockIncludingDescendants(RenderFlowThread* flowThread)
-{
- if (flowThreadState() == NotInsideFlowThread)
- return;
-
- if (is<RenderBlock>(*this)) {
- RenderBlock& block = downcast<RenderBlock>(*this);
-
- if (block.cachedFlowThreadContainingBlockNeedsUpdate())
- return;
-
- flowThread = block.cachedFlowThreadContainingBlock();
- block.setCachedFlowThreadContainingBlockNeedsUpdate();
- }
-
- if (flowThread)
- flowThread->removeFlowChildInfo(this);
-
- if (!is<RenderElement>(*this))
- return;
-
- for (auto& child : childrenOfType<RenderObject>(downcast<RenderElement>(*this)))
- child.invalidateFlowThreadContainingBlockIncludingDescendants(flowThread);
-}
-
</del><span class="cx"> void RenderObject::destroyAndCleanupAnonymousWrappers()
</span><span class="cx"> {
</span><span class="cx"> // If the tree is destroyed, there is no need for a clean-up phase.
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderObject.h (206048 => 206049)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderObject.h        2016-09-16 21:20:23 UTC (rev 206048)
+++ trunk/Source/WebCore/rendering/RenderObject.h        2016-09-16 21:39:28 UTC (rev 206049)
</span><span class="lines">@@ -816,7 +816,6 @@
</span><span class="cx"> void setNeedsSimplifiedNormalFlowLayoutBit(bool b) { m_bitfields.setNeedsSimplifiedNormalFlowLayout(b); }
</span><span class="cx">
</span><span class="cx"> virtual RenderFlowThread* locateFlowThreadContainingBlock() const;
</span><del>- void invalidateFlowThreadContainingBlockIncludingDescendants(RenderFlowThread* = nullptr);
</del><span class="cx"> static void calculateBorderStyleColor(const EBorderStyle&, const BoxSide&, Color&);
</span><span class="cx">
</span><span class="cx"> private:
</span><span class="lines">@@ -829,8 +828,6 @@
</span><span class="cx"> void setLayerNeedsFullRepaint();
</span><span class="cx"> void setLayerNeedsFullRepaintForPositionedMovementLayout();
</span><span class="cx">
</span><del>- void removeFromRenderFlowThread();
- void removeFromRenderFlowThreadIncludingDescendants(bool);
</del><span class="cx"> Node* generatingPseudoHostElement() const;
</span><span class="cx">
</span><span class="cx"> void propagateRepaintToParentWithOutlineAutoIfNeeded(const RenderLayerModelObject& repaintContainer, const LayoutRect& repaintRect) const;
</span></span></pre>
</div>
</div>
</body>
</html>