Diff
Modified: trunk/LayoutTests/ChangeLog (209755 => 209756)
--- trunk/LayoutTests/ChangeLog 2016-12-13 12:49:20 UTC (rev 209755)
+++ trunk/LayoutTests/ChangeLog 2016-12-13 16:08:04 UTC (rev 209756)
@@ -1,3 +1,14 @@
+2016-12-13 Antti Koivisto <[email protected]>
+
+ REGRESSION (r198990): Safari - Cannot edit content inside <details> in wysiwyg editor
+ https://bugs.webkit.org/show_bug.cgi?id=165757
+
+ Reviewed by Andreas Kling.
+
+ * editing/execCommand/justify-right-then-indent-with-problematic-body-expected.txt:
+ * fast/html/details-edit-expected.txt: Added.
+ * fast/html/details-edit.html: Added.
+
2016-12-13 Per Arne Vollan <[email protected]>
Unreviewed test gardening.
Modified: trunk/LayoutTests/editing/execCommand/justify-right-then-indent-with-problematic-body-expected.txt (209755 => 209756)
--- trunk/LayoutTests/editing/execCommand/justify-right-then-indent-with-problematic-body-expected.txt 2016-12-13 12:49:20 UTC (rev 209755)
+++ trunk/LayoutTests/editing/execCommand/justify-right-then-indent-with-problematic-body-expected.txt 2016-12-13 16:08:04 UTC (rev 209756)
@@ -1,4 +1,2 @@
Pass.
-
WebKit didn't Crash.
-
Added: trunk/LayoutTests/fast/html/details-edit-expected.txt (0 => 209756)
--- trunk/LayoutTests/fast/html/details-edit-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/html/details-edit-expected.txt 2016-12-13 16:08:04 UTC (rev 209756)
@@ -0,0 +1 @@
+PASS
Added: trunk/LayoutTests/fast/html/details-edit.html (0 => 209756)
--- trunk/LayoutTests/fast/html/details-edit.html (rev 0)
+++ trunk/LayoutTests/fast/html/details-edit.html 2016-12-13 16:08:04 UTC (rev 209756)
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<script>
+if (window.testRunner)
+ testRunner.dumpAsText();
+</script>
+<body contenteditable>
+<details open>
+<p>FAIL</p>
+</details>
+<script>
+var p = document.querySelector("p");
+var selection = window.getSelection();
+selection.selectAllChildren(p);
+document.execCommand("InsertText", false, "PASS");
+</script>
Modified: trunk/Source/WebCore/ChangeLog (209755 => 209756)
--- trunk/Source/WebCore/ChangeLog 2016-12-13 12:49:20 UTC (rev 209755)
+++ trunk/Source/WebCore/ChangeLog 2016-12-13 16:08:04 UTC (rev 209756)
@@ -1,3 +1,46 @@
+2016-12-13 Antti Koivisto <[email protected]>
+
+ REGRESSION (r198990): Cannot edit content inside <details> in wysiwyg editor
+ https://bugs.webkit.org/show_bug.cgi?id=165757
+
+ Reviewed by Andreas Kling.
+
+ Test: fast/html/details-edit.html
+
+ -webkit-user-modify is reset on shadow boundary so it doesn't go through <details> shadow tree.
+
+ * css/StyleResolver.cpp:
+ (WebCore::StyleResolver::styleForElement):
+ (WebCore::StyleResolver::pseudoStyleForElement):
+ (WebCore::StyleResolver::styleForPage):
+ (WebCore::StyleResolver::applyMatchedProperties):
+ * dom/Node.cpp:
+ (WebCore::computeEditabilityFromComputedStyle):
+ (WebCore::Node::computeEditability):
+
+ Make -webkit-user-modify (which we would want to get rid of completely eventually) have no effect in shadow trees.
+ Check for contenteditable directly instead.
+
+ * html/HTMLInputElement.cpp:
+ (WebCore::HTMLInputElement::createInnerTextStyle):
+ * html/HTMLTextAreaElement.cpp:
+ (WebCore::HTMLTextAreaElement::createInnerTextStyle):
+ * html/shadow/TextControlInnerElements.cpp:
+ * rendering/RenderFlowThread.cpp:
+ (WebCore::RenderFlowThread::createFlowThreadStyle):
+ * rendering/RenderLayer.cpp:
+ (WebCore::RenderLayer::calculateClipRects):
+ * rendering/RenderListItem.cpp:
+ (WebCore::RenderListItem::styleDidChange):
+ * rendering/style/RenderStyle.cpp:
+ (WebCore::RenderStyle::createAnonymousStyleWithDisplay):
+ (WebCore::RenderStyle::createStyleInheritingFromPseudoStyle):
+ (WebCore::RenderStyle::inheritFrom):
+
+ Let -webkit-user-modify inherit through shadow boundary as normal.
+
+ * rendering/style/RenderStyle.h:
+
2016-12-12 Darin Adler <[email protected]>
Remove bindings generation support for legacy WebCore::Dictionary
Modified: trunk/Source/WebCore/css/StyleResolver.cpp (209755 => 209756)
--- trunk/Source/WebCore/css/StyleResolver.cpp 2016-12-13 12:49:20 UTC (rev 209755)
+++ trunk/Source/WebCore/css/StyleResolver.cpp 2016-12-13 16:08:04 UTC (rev 209756)
@@ -393,7 +393,7 @@
if (state.parentStyle()) {
state.setStyle(RenderStyle::createPtr());
- state.style()->inheritFrom(state.parentStyle(), isAtShadowBoundary(element) ? RenderStyle::AtShadowBoundary : RenderStyle::NotAtShadowBoundary);
+ state.style()->inheritFrom(*state.parentStyle());
} else {
state.setStyle(defaultStyleForElement());
state.setParentStyle(RenderStyle::clonePtr(*state.style()));
@@ -605,7 +605,7 @@
if (m_state.parentStyle()) {
state.setStyle(RenderStyle::createPtr());
- state.style()->inheritFrom(m_state.parentStyle());
+ state.style()->inheritFrom(*m_state.parentStyle());
} else {
state.setStyle(defaultStyleForElement());
state.setParentStyle(RenderStyle::clonePtr(*state.style()));
@@ -655,7 +655,7 @@
m_state = State(*documentElement, m_document.renderStyle());
m_state.setStyle(RenderStyle::createPtr());
- m_state.style()->inheritFrom(m_state.rootElementStyle());
+ m_state.style()->inheritFrom(*m_state.rootElementStyle());
PageRuleCollector collector(m_state, m_ruleSets);
collector.matchAllPageRules(pageIndex);
@@ -1338,7 +1338,7 @@
EInsideLink linkStatus = state.style()->insideLink();
// If the cache item parent style has identical inherited properties to the current parent style then the
// resulting style will be identical too. We copy the inherited properties over from the cache and are done.
- state.style()->inheritFrom(cacheItem->renderStyle.get());
+ state.style()->inheritFrom(*cacheItem->renderStyle);
// Unfortunately the link status is treated like an inherited property. We need to explicitly restore it.
state.style()->setInsideLink(linkStatus);
Modified: trunk/Source/WebCore/dom/Node.cpp (209755 => 209756)
--- trunk/Source/WebCore/dom/Node.cpp 2016-12-13 12:49:20 UTC (rev 209755)
+++ trunk/Source/WebCore/dom/Node.cpp 2016-12-13 16:08:04 UTC (rev 209756)
@@ -701,7 +701,10 @@
if (!document().hasLivingRenderTree() || isPseudoElement())
return Editability::ReadOnly;
- if (document().frame() && document().frame()->page() && document().frame()->page()->isEditable() && !containingShadowRoot())
+ if (isInShadowTree())
+ return HTMLElement::editabilityFromContentEditableAttr(*this);
+
+ if (document().frame() && document().frame()->page() && document().frame()->page()->isEditable())
return Editability::CanEditRichly;
if (shouldUpdateStyle == ShouldUpdateStyle::Update && document().needsStyleRecalc()) {
Modified: trunk/Source/WebCore/html/HTMLInputElement.cpp (209755 => 209756)
--- trunk/Source/WebCore/html/HTMLInputElement.cpp 2016-12-13 12:49:20 UTC (rev 209755)
+++ trunk/Source/WebCore/html/HTMLInputElement.cpp 2016-12-13 16:08:04 UTC (rev 209756)
@@ -1948,7 +1948,7 @@
RenderStyle HTMLInputElement::createInnerTextStyle(const RenderStyle& style) const
{
auto textBlockStyle = RenderStyle::create();
- textBlockStyle.inheritFrom(&style);
+ textBlockStyle.inheritFrom(style);
adjustInnerTextStyle(style, textBlockStyle);
textBlockStyle.setWhiteSpace(PRE);
Modified: trunk/Source/WebCore/html/HTMLTextAreaElement.cpp (209755 => 209756)
--- trunk/Source/WebCore/html/HTMLTextAreaElement.cpp 2016-12-13 12:49:20 UTC (rev 209755)
+++ trunk/Source/WebCore/html/HTMLTextAreaElement.cpp 2016-12-13 16:08:04 UTC (rev 209756)
@@ -569,7 +569,7 @@
RenderStyle HTMLTextAreaElement::createInnerTextStyle(const RenderStyle& style) const
{
auto textBlockStyle = RenderStyle::create();
- textBlockStyle.inheritFrom(&style);
+ textBlockStyle.inheritFrom(style);
adjustInnerTextStyle(style, textBlockStyle);
textBlockStyle.setDisplay(BLOCK);
Modified: trunk/Source/WebCore/html/shadow/TextControlInnerElements.cpp (209755 => 209756)
--- trunk/Source/WebCore/html/shadow/TextControlInnerElements.cpp 2016-12-13 12:49:20 UTC (rev 209755)
+++ trunk/Source/WebCore/html/shadow/TextControlInnerElements.cpp 2016-12-13 16:08:04 UTC (rev 209756)
@@ -78,7 +78,7 @@
std::optional<ElementStyle> TextControlInnerElement::resolveCustomStyle(const RenderStyle&, const RenderStyle* shadowHostStyle)
{
auto innerContainerStyle = RenderStyle::createPtr();
- innerContainerStyle->inheritFrom(shadowHostStyle);
+ innerContainerStyle->inheritFrom(*shadowHostStyle);
innerContainerStyle->setFlexGrow(1);
// min-width: 0; is needed for correct shrinking.
Modified: trunk/Source/WebCore/rendering/RenderFlowThread.cpp (209755 => 209756)
--- trunk/Source/WebCore/rendering/RenderFlowThread.cpp 2016-12-13 12:49:20 UTC (rev 209755)
+++ trunk/Source/WebCore/rendering/RenderFlowThread.cpp 2016-12-13 16:08:04 UTC (rev 209756)
@@ -71,7 +71,7 @@
RenderStyle RenderFlowThread::createFlowThreadStyle(const RenderStyle* parentStyle)
{
auto newStyle = RenderStyle::create();
- newStyle.inheritFrom(parentStyle);
+ newStyle.inheritFrom(*parentStyle);
newStyle.setDisplay(BLOCK);
newStyle.setPosition(AbsolutePosition);
newStyle.setZIndex(0);
Modified: trunk/Source/WebCore/rendering/RenderLayer.cpp (209755 => 209756)
--- trunk/Source/WebCore/rendering/RenderLayer.cpp 2016-12-13 12:49:20 UTC (rev 209755)
+++ trunk/Source/WebCore/rendering/RenderLayer.cpp 2016-12-13 16:08:04 UTC (rev 209756)
@@ -6935,7 +6935,7 @@
RenderStyle RenderLayer::createReflectionStyle()
{
auto newStyle = RenderStyle::create();
- newStyle.inheritFrom(&renderer().style());
+ newStyle.inheritFrom(renderer().style());
// Map in our transform.
TransformOperations transform;
Modified: trunk/Source/WebCore/rendering/RenderListItem.cpp (209755 => 209756)
--- trunk/Source/WebCore/rendering/RenderListItem.cpp 2016-12-13 12:49:20 UTC (rev 209755)
+++ trunk/Source/WebCore/rendering/RenderListItem.cpp 2016-12-13 16:08:04 UTC (rev 209756)
@@ -79,7 +79,7 @@
auto newStyle = RenderStyle::create();
// The marker always inherits from the list item, regardless of where it might end
// up (e.g., in some deeply nested line box). See CSS3 spec.
- newStyle.inheritFrom(&style());
+ newStyle.inheritFrom(style());
if (!m_marker) {
m_marker = createRenderer<RenderListMarker>(*this, WTFMove(newStyle)).leakPtr();
m_marker->initializeStyle();
Modified: trunk/Source/WebCore/rendering/style/RenderStyle.cpp (209755 => 209756)
--- trunk/Source/WebCore/rendering/style/RenderStyle.cpp 2016-12-13 12:49:20 UTC (rev 209755)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.cpp 2016-12-13 16:08:04 UTC (rev 209756)
@@ -112,7 +112,7 @@
RenderStyle RenderStyle::createAnonymousStyleWithDisplay(const RenderStyle& parentStyle, EDisplay display)
{
auto newStyle = create();
- newStyle.inheritFrom(&parentStyle);
+ newStyle.inheritFrom(parentStyle);
newStyle.inheritUnicodeBidiFrom(&parentStyle);
newStyle.setDisplay(display);
return newStyle;
@@ -123,7 +123,7 @@
ASSERT(pseudoStyle.styleType() == BEFORE || pseudoStyle.styleType() == AFTER);
auto style = create();
- style.inheritFrom(&pseudoStyle);
+ style.inheritFrom(pseudoStyle);
return style;
}
@@ -267,20 +267,14 @@
return resolvedContentAlignmentDistribution(alignContent(), normalValueBehavior);
}
-void RenderStyle::inheritFrom(const RenderStyle* inheritParent, IsAtShadowBoundary isAtShadowBoundary)
+void RenderStyle::inheritFrom(const RenderStyle& inheritParent)
{
- if (isAtShadowBoundary == AtShadowBoundary) {
- // Even if surrounding content is user-editable, shadow DOM should act as a single unit, and not necessarily be editable
- EUserModify currentUserModify = userModify();
- rareInheritedData = inheritParent->rareInheritedData;
- setUserModify(currentUserModify);
- } else
- rareInheritedData = inheritParent->rareInheritedData;
- inherited = inheritParent->inherited;
- inherited_flags = inheritParent->inherited_flags;
+ rareInheritedData = inheritParent.rareInheritedData;
+ inherited = inheritParent.inherited;
+ inherited_flags = inheritParent.inherited_flags;
- if (m_svgStyle != inheritParent->m_svgStyle)
- m_svgStyle.access()->inheritFrom(inheritParent->m_svgStyle.get());
+ if (m_svgStyle != inheritParent.m_svgStyle)
+ m_svgStyle.access()->inheritFrom(inheritParent.m_svgStyle.get());
}
void RenderStyle::copyNonInheritedFrom(const RenderStyle* other)
Modified: trunk/Source/WebCore/rendering/style/RenderStyle.h (209755 => 209756)
--- trunk/Source/WebCore/rendering/style/RenderStyle.h 2016-12-13 12:49:20 UTC (rev 209755)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.h 2016-12-13 16:08:04 UTC (rev 209756)
@@ -510,12 +510,7 @@
StyleSelfAlignmentData resolvedJustifyItems(ItemPosition normalValueBehaviour) const;
StyleSelfAlignmentData resolvedJustifySelf(const RenderStyle& parentStyle, ItemPosition normalValueBehaviour) const;
- enum IsAtShadowBoundary {
- AtShadowBoundary,
- NotAtShadowBoundary,
- };
-
- void inheritFrom(const RenderStyle* inheritParent, IsAtShadowBoundary = NotAtShadowBoundary);
+ void inheritFrom(const RenderStyle& inheritParent);
void copyNonInheritedFrom(const RenderStyle*);
PseudoId styleType() const { return noninherited_flags.styleType(); }