Title: [209756] trunk
Revision
209756
Author
[email protected]
Date
2016-12-13 08:08:04 -0800 (Tue, 13 Dec 2016)

Log Message

Source/WebCore:
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:

LayoutTests:
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.

Modified Paths

Added Paths

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(); }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to