Diff
Modified: trunk/LayoutTests/editing/execCommand/justify-right-then-indent-with-problematic-body-expected.txt (217598 => 217599)
--- trunk/LayoutTests/editing/execCommand/justify-right-then-indent-with-problematic-body-expected.txt 2017-05-31 12:04:41 UTC (rev 217598)
+++ trunk/LayoutTests/editing/execCommand/justify-right-then-indent-with-problematic-body-expected.txt 2017-05-31 12:18:24 UTC (rev 217599)
@@ -1,2 +1,3 @@
Pass.
WebKit didn't Crash.
+
Modified: trunk/Source/WebCore/ChangeLog (217598 => 217599)
--- trunk/Source/WebCore/ChangeLog 2017-05-31 12:04:41 UTC (rev 217598)
+++ trunk/Source/WebCore/ChangeLog 2017-05-31 12:18:24 UTC (rev 217599)
@@ -1,3 +1,23 @@
+2017-05-31 Emilio Cobos Álvarez <[email protected]>
+
+ Use the rare data's RenderStyle for display: contents.
+ https://bugs.webkit.org/show_bug.cgi?id=172721
+
+ Reviewed by Antti Koivisto.
+
+ No new tests, no behavior change.
+
+ * dom/Element.cpp:
+ (WebCore::Element::hasDisplayContents):
+ (WebCore::Element::storeDisplayContentsStyle):
+ * dom/Element.h:
+ * dom/ElementRareData.h:
+ (WebCore::ElementRareData::ElementRareData):
+ * style/RenderTreeUpdater.cpp:
+ (WebCore::RenderTreeUpdater::updateElementRenderer):
+ * style/StyleTreeResolver.cpp:
+ (WebCore::Style::TreeResolver::resolveComposedTree):
+
2017-05-31 Per Arne Vollan <[email protected]>
LayoutTest media/video-orientation.html is failing
Modified: trunk/Source/WebCore/dom/Element.cpp (217598 => 217599)
--- trunk/Source/WebCore/dom/Element.cpp 2017-05-31 12:04:41 UTC (rev 217598)
+++ trunk/Source/WebCore/dom/Element.cpp 2017-05-31 12:18:24 UTC (rev 217599)
@@ -1468,14 +1468,17 @@
bool Element::hasDisplayContents() const
{
- return hasRareData() && elementRareData()->hasDisplayContents();
+ if (renderer() || !hasRareData())
+ return false;
+ const RenderStyle* style = elementRareData()->computedStyle();
+ return style && style->display() == CONTENTS;
}
-void Element::setHasDisplayContents(bool value)
+void Element::storeDisplayContentsStyle(std::unique_ptr<RenderStyle> style)
{
- if (hasDisplayContents() == value)
- return;
- ensureElementRareData().setHasDisplayContents(value);
+ ASSERT(style && style->display() == CONTENTS);
+ ASSERT(!renderer());
+ ensureElementRareData().setComputedStyle(WTFMove(style));
}
// Returns true is the given attribute is an event handler.
Modified: trunk/Source/WebCore/dom/Element.h (217598 => 217599)
--- trunk/Source/WebCore/dom/Element.h 2017-05-31 12:04:41 UTC (rev 217598)
+++ trunk/Source/WebCore/dom/Element.h 2017-05-31 12:18:24 UTC (rev 217599)
@@ -544,7 +544,7 @@
void invalidateStyleAndRenderersForSubtree();
bool hasDisplayContents() const;
- void setHasDisplayContents(bool);
+ void storeDisplayContentsStyle(std::unique_ptr<RenderStyle>);
using ContainerNode::setAttributeEventListener;
void setAttributeEventListener(const AtomicString& eventType, const QualifiedName& attributeName, const AtomicString& value);
Modified: trunk/Source/WebCore/dom/ElementRareData.h (217598 => 217599)
--- trunk/Source/WebCore/dom/ElementRareData.h 2017-05-31 12:04:41 UTC (rev 217598)
+++ trunk/Source/WebCore/dom/ElementRareData.h 2017-05-31 12:18:24 UTC (rev 217599)
@@ -118,9 +118,6 @@
bool hasPendingResources() const { return m_hasPendingResources; }
void setHasPendingResources(bool has) { m_hasPendingResources = has; }
- bool hasDisplayContents() const { return m_hasDisplayContents; }
- void setHasDisplayContents(bool value) { m_hasDisplayContents = value; }
-
private:
int m_tabIndex;
unsigned short m_childIndex;
@@ -141,7 +138,6 @@
unsigned m_childrenAffectedByLastChildRules : 1;
unsigned m_childrenAffectedByBackwardPositionalRules : 1;
unsigned m_childrenAffectedByPropertyBasedBackwardPositionalRules : 1;
- unsigned m_hasDisplayContents : 1;
unsigned m_isNamedFlowContentElement : 1;
RegionOversetState m_regionOversetState;
@@ -185,7 +181,6 @@
, m_childrenAffectedByLastChildRules(false)
, m_childrenAffectedByBackwardPositionalRules(false)
, m_childrenAffectedByPropertyBasedBackwardPositionalRules(false)
- , m_hasDisplayContents(false)
, m_isNamedFlowContentElement(false)
, m_regionOversetState(RegionUndefined)
, m_minimumSizeForResizing(defaultMinimumSizeForResizing())
Modified: trunk/Source/WebCore/style/RenderTreeUpdater.cpp (217598 => 217599)
--- trunk/Source/WebCore/style/RenderTreeUpdater.cpp 2017-05-31 12:04:41 UTC (rev 217598)
+++ trunk/Source/WebCore/style/RenderTreeUpdater.cpp 2017-05-31 12:18:24 UTC (rev 217599)
@@ -269,7 +269,10 @@
bool hasDisplayContents = update.style->display() == CONTENTS;
if (hasDisplayContents != element.hasDisplayContents()) {
- element.setHasDisplayContents(hasDisplayContents);
+ if (!hasDisplayContents)
+ element.resetComputedStyle();
+ else
+ element.storeDisplayContentsStyle(RenderStyle::clonePtr(*update.style));
// Render tree position needs to be recomputed as rendering siblings may be found from the display:contents subtree.
renderTreePosition().invalidateNextSibling();
}
Modified: trunk/Source/WebCore/style/StyleTreeResolver.cpp (217598 => 217599)
--- trunk/Source/WebCore/style/StyleTreeResolver.cpp 2017-05-31 12:04:41 UTC (rev 217598)
+++ trunk/Source/WebCore/style/StyleTreeResolver.cpp 2017-05-31 12:18:24 UTC (rev 217599)
@@ -421,7 +421,8 @@
bool shouldResolve = shouldResolveElement(element, parent.change) || affectedByPreviousSibling;
if (shouldResolve) {
- element.resetComputedStyle();
+ if (!element.hasDisplayContents())
+ element.resetComputedStyle();
element.resetStyleRelations();
if (element.hasCustomStyleResolveCallbacks())