Diff
Modified: trunk/LayoutTests/ChangeLog (275656 => 275657)
--- trunk/LayoutTests/ChangeLog 2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/LayoutTests/ChangeLog 2021-04-08 13:16:19 UTC (rev 275657)
@@ -1,3 +1,14 @@
+2021-04-08 Antti Koivisto <[email protected]>
+
+ Revert r273621 because iPhone PLT regression
+ https://bugs.webkit.org/show_bug.cgi?id=224323
+
+ Unreviewed.
+
+ * fast/text/splitText-dirty-lines-expected.txt:
+ * fast/text/text-combine-surroundContents-crash-expected.txt:
+ * imported/blink/fast/css/first-letter-range-insert-expected.txt:
+
2021-04-08 Youenn Fablet <[email protected]>
Update SFrame implementation to latest version
Modified: trunk/LayoutTests/fast/text/splitText-dirty-lines-expected.txt (275656 => 275657)
--- trunk/LayoutTests/fast/text/splitText-dirty-lines-expected.txt 2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/LayoutTests/fast/text/splitText-dirty-lines-expected.txt 2021-04-08 13:16:19 UTC (rev 275657)
@@ -15,6 +15,7 @@
text run at (80,120) width 40: "E"
layer at (8,8) size 200x160
RenderBlock (positioned) {DIV} at (0,0) size 200x160 [color=#008000]
+ RenderText {#text} at (0,0) size 0x0
RenderText {#text} at (0,0) size 160x160
text run at (0,0) width 160: "AAAA"
text run at (0,40) width 40: "B"
Modified: trunk/LayoutTests/fast/text/text-combine-surroundContents-crash-expected.txt (275656 => 275657)
--- trunk/LayoutTests/fast/text/text-combine-surroundContents-crash-expected.txt 2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/LayoutTests/fast/text/text-combine-surroundContents-crash-expected.txt 2021-04-08 13:16:19 UTC (rev 275657)
@@ -1,15 +1,16 @@
layer at (0,0) size 800x600
RenderView at (0,0) size 800x600
-layer at (0,0) size 800x56
- RenderBlock {HTML} at (0,0) size 800x56
- RenderBody {BODY} at (8,8) size 784x40
- RenderBlock {DIV} at (0,0) size 20x20
- RenderInline {SPAN} at (0,0) size 0x0
- RenderCombineText {#text} at (0,0) size 20x20
- text run at (0,0) width 20: "\x{FFFC}"
- RenderBlock (anonymous) at (0,20) size 784x0
+layer at (0,0) size 800x76
+ RenderBlock {HTML} at (0,0) size 800x76
+ RenderBody {BODY} at (8,8) size 784x60
+ RenderBlock {DIV} at (0,0) size 20x40
+ RenderCombineText {#text} at (0,0) size 0x0
+ RenderInline {SPAN} at (0,0) size 20x0
+ RenderCombineText {#text} at (0,20) size 20x20
+ text run at (0,20) width 20: "\x{FFFC}"
+ RenderBlock (anonymous) at (0,40) size 784x0
RenderText {#text} at (0,0) size 0x0
RenderText {#text} at (0,0) size 0x0
- RenderBlock {DIV} at (0,20) size 784x20
+ RenderBlock {DIV} at (0,40) size 784x20
RenderText {#text} at (0,0) size 400x20
text run at (0,0) width 400: "PASS, did not crash."
Modified: trunk/LayoutTests/imported/blink/fast/css/first-letter-range-insert-expected.txt (275656 => 275657)
--- trunk/LayoutTests/imported/blink/fast/css/first-letter-range-insert-expected.txt 2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/LayoutTests/imported/blink/fast/css/first-letter-range-insert-expected.txt 2021-04-08 13:16:19 UTC (rev 275657)
@@ -1 +1,2 @@
+B
Modified: trunk/Source/WebCore/ChangeLog (275656 => 275657)
--- trunk/Source/WebCore/ChangeLog 2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/Source/WebCore/ChangeLog 2021-04-08 13:16:19 UTC (rev 275657)
@@ -1,3 +1,39 @@
+2021-04-08 Antti Koivisto <[email protected]>
+
+ Revert r273621 because iPhone PLT regression
+ https://bugs.webkit.org/show_bug.cgi?id=224323
+
+ Unreviewed.
+
+ * dom/CharacterData.cpp:
+ (WebCore::CharacterData::parserAppendData):
+ (WebCore::CharacterData::setDataAndUpdate):
+ * dom/Document.cpp:
+ (WebCore::Document::removedLastRef):
+ (WebCore::Document::resolveStyle):
+ (WebCore::Document::updateTextRenderer):
+ (WebCore::Document::needsStyleRecalc const):
+ * dom/Document.h:
+ * dom/Text.cpp:
+ (WebCore::Text::splitText):
+ (WebCore::Text::updateRendererAfterContentChange):
+ * editing/CompositeEditCommand.cpp:
+ (WebCore::CompositeEditCommand::deleteInsignificantText):
+ * editing/markup.cpp:
+ (WebCore::replaceChildrenWithFragment):
+ * rendering/updating/RenderTreeUpdater.cpp:
+ * style/StyleTreeResolver.cpp:
+ (WebCore::Style::TreeResolver::TreeResolver):
+ (WebCore::Style::TreeResolver::resolve):
+ * style/StyleTreeResolver.h:
+ (WebCore::Style::TreeResolver::TreeResolver): Deleted.
+ * style/StyleUpdate.cpp:
+ (WebCore::Style::Update::addText):
+ (WebCore::Style::Update::addPossibleRoot):
+ * style/StyleUpdate.h:
+ (WebCore::Style::Update:: const):
+ (WebCore::Style::Update::roots const): Deleted.
+
2021-04-08 Youenn Fablet <[email protected]>
Update SFrame implementation to latest version
Modified: trunk/Source/WebCore/dom/CharacterData.cpp (275656 => 275657)
--- trunk/Source/WebCore/dom/CharacterData.cpp 2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/Source/WebCore/dom/CharacterData.cpp 2021-04-08 13:16:19 UTC (rev 275657)
@@ -102,7 +102,7 @@
m_data.append(string.characters16() + offset, characterLengthLimit);
ASSERT(!renderer() || is<Text>(*this));
- if (is<Text>(*this))
+ if (is<Text>(*this) && parentNode())
downcast<Text>(*this).updateRendererAfterContentChange(oldLength, 0);
notifyParentAfterChange(ContainerNode::ChildChange::Source::Parser);
@@ -182,7 +182,7 @@
document().textInserted(*this, offsetOfReplacedData, newLength);
ASSERT(!renderer() || is<Text>(*this));
- if (is<Text>(*this))
+ if (is<Text>(*this) && parentNode())
downcast<Text>(*this).updateRendererAfterContentChange(offsetOfReplacedData, oldLength);
if (is<ProcessingInstruction>(*this))
Modified: trunk/Source/WebCore/dom/Document.cpp (275656 => 275657)
--- trunk/Source/WebCore/dom/Document.cpp 2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/Source/WebCore/dom/Document.cpp 2021-04-08 13:16:19 UTC (rev 275657)
@@ -805,7 +805,6 @@
m_fullscreenManager->clear();
#endif
m_associatedFormControls.clear();
- m_pendingRenderTreeTextUpdate = { };
m_fontSelector->stopLoadingAndClearFonts();
@@ -2051,7 +2050,7 @@
documentElement->invalidateStyleForSubtree();
}
- Style::TreeResolver resolver(*this, WTFMove(m_pendingRenderTreeTextUpdate));
+ Style::TreeResolver resolver(*this);
auto styleUpdate = resolver.resolve();
m_lastStyleUpdateSizeForTesting = styleUpdate ? styleUpdate->size() : 0;
@@ -2099,12 +2098,10 @@
void Document::updateTextRenderer(Text& text, unsigned offsetOfReplacedText, unsigned lengthOfReplacedText)
{
- if (!m_pendingRenderTreeTextUpdate)
- m_pendingRenderTreeTextUpdate = makeUnique<Style::Update>(*this);
+ auto textUpdate = makeUnique<Style::Update>(*this);
+ textUpdate->addText(text, { offsetOfReplacedText, lengthOfReplacedText, WTF::nullopt });
- m_pendingRenderTreeTextUpdate->addText(text, { offsetOfReplacedText, lengthOfReplacedText, WTF::nullopt });
-
- scheduleRenderingUpdate({ });
+ updateRenderTree(WTFMove(textUpdate));
}
bool Document::needsStyleRecalc() const
@@ -2118,9 +2115,6 @@
if (childNeedsStyleRecalc())
return true;
- if (m_pendingRenderTreeTextUpdate)
- return true;
-
if (styleScope().hasPendingUpdate())
return true;
Modified: trunk/Source/WebCore/dom/Document.h (275656 => 275657)
--- trunk/Source/WebCore/dom/Document.h 2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/Source/WebCore/dom/Document.h 2021-04-08 13:16:19 UTC (rev 275657)
@@ -1802,8 +1802,6 @@
Timer m_styleRecalcTimer;
- std::unique_ptr<Style::Update> m_pendingRenderTreeTextUpdate;
-
Element* m_cssTarget { nullptr };
std::unique_ptr<LazyLoadImageObserver> m_lazyLoadImageObserver;
Modified: trunk/Source/WebCore/dom/Text.cpp (275656 => 275657)
--- trunk/Source/WebCore/dom/Text.cpp 2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/Source/WebCore/dom/Text.cpp 2021-04-08 13:16:19 UTC (rev 275657)
@@ -76,7 +76,8 @@
document().textNodeSplit(*this);
- updateRendererAfterContentChange(0, oldData.length());
+ if (renderer())
+ renderer()->setTextWithOffset(data(), 0, oldData.length());
return newText;
}
@@ -214,9 +215,7 @@
void Text::updateRendererAfterContentChange(unsigned offsetOfReplacedData, unsigned lengthOfReplacedData)
{
- if (!isConnected())
- return;
-
+ ASSERT(parentNode());
if (styleValidity() >= Style::Validity::SubtreeAndRenderersInvalid)
return;
Modified: trunk/Source/WebCore/editing/CompositeEditCommand.cpp (275656 => 275657)
--- trunk/Source/WebCore/editing/CompositeEditCommand.cpp 2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/Source/WebCore/editing/CompositeEditCommand.cpp 2021-04-08 13:16:19 UTC (rev 275657)
@@ -1079,10 +1079,6 @@
int endOffset = textNode.ptr() == end.deprecatedNode() ? end.deprecatedEditingOffset() : static_cast<int>(textNode->length());
deleteInsignificantText(textNode, startOffset, endOffset);
}
- if (!nodes.isEmpty()) {
- // Callers expect render tree to be in sync.
- document().updateLayoutIgnorePendingStylesheets();
- }
}
void CompositeEditCommand::deleteInsignificantTextDownstream(const Position& position)
Modified: trunk/Source/WebCore/editing/markup.cpp (275656 => 275657)
--- trunk/Source/WebCore/editing/markup.cpp 2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/Source/WebCore/editing/markup.cpp 2021-04-08 13:16:19 UTC (rev 275657)
@@ -1387,6 +1387,7 @@
auto* containerChild = containerNode->firstChild();
if (containerChild && !containerChild->nextSibling()) {
if (is<Text>(*containerChild) && hasOneTextChild(fragment) && canUseSetDataOptimization(downcast<Text>(*containerChild), mutation)) {
+ ASSERT(!fragment->firstChild()->refCount());
downcast<Text>(*containerChild).setData(downcast<Text>(*fragment->firstChild()).data());
return { };
}
Modified: trunk/Source/WebCore/rendering/updating/RenderTreeUpdater.cpp (275656 => 275657)
--- trunk/Source/WebCore/rendering/updating/RenderTreeUpdater.cpp 2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/Source/WebCore/rendering/updating/RenderTreeUpdater.cpp 2021-04-08 13:16:19 UTC (rev 275657)
@@ -102,7 +102,7 @@
static ListHashSet<ContainerNode*> findRenderingRoots(const Style::Update& update)
{
ListHashSet<ContainerNode*> renderingRoots;
- for (auto& root : update.roots()) {
+ for (auto* root : update.roots()) {
auto* renderingRoot = findRenderingRoot(*root);
if (!renderingRoot)
continue;
Modified: trunk/Source/WebCore/style/StyleTreeResolver.cpp (275656 => 275657)
--- trunk/Source/WebCore/style/StyleTreeResolver.cpp 2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/Source/WebCore/style/StyleTreeResolver.cpp 2021-04-08 13:16:19 UTC (rev 275657)
@@ -63,9 +63,8 @@
DEFINE_ALLOCATOR_WITH_HEAP_IDENTIFIER(TreeResolverScope);
-TreeResolver::TreeResolver(Document& document, std::unique_ptr<Update> update)
+TreeResolver::TreeResolver(Document& document)
: m_document(document)
- , m_update(WTFMove(update))
{
}
@@ -584,12 +583,11 @@
return nullptr;
}
if (!documentElement->childNeedsStyleRecalc() && !documentElement->needsStyleRecalc())
- return WTFMove(m_update);
+ return nullptr;
m_didSeePendingStylesheet = m_document.styleScope().hasPendingSheetsBeforeBody();
- if (!m_update)
- m_update = makeUnique<Update>(m_document);
+ m_update = makeUnique<Update>(m_document);
m_scopeStack.append(adoptRef(*new Scope(m_document)));
m_parentStack.append(Parent(m_document));
Modified: trunk/Source/WebCore/style/StyleTreeResolver.h (275656 => 275657)
--- trunk/Source/WebCore/style/StyleTreeResolver.h 2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/Source/WebCore/style/StyleTreeResolver.h 2021-04-08 13:16:19 UTC (rev 275657)
@@ -49,7 +49,7 @@
DECLARE_ALLOCATOR_WITH_HEAP_IDENTIFIER(TreeResolverScope);
class TreeResolver {
public:
- TreeResolver(Document&, std::unique_ptr<Update> = { });
+ TreeResolver(Document&);
~TreeResolver();
std::unique_ptr<Update> resolve();
Modified: trunk/Source/WebCore/style/StyleUpdate.cpp (275656 => 275657)
--- trunk/Source/WebCore/style/StyleUpdate.cpp 2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/Source/WebCore/style/StyleUpdate.cpp 2021-04-08 13:16:19 UTC (rev 275657)
@@ -98,24 +98,12 @@
void Update::addText(Text& text, Element* parent, TextUpdate&& textUpdate)
{
+ ASSERT(!m_texts.contains(&text));
ASSERT(composedTreeAncestors(text).first() == parent);
addPossibleRoot(parent);
-
- auto result = m_texts.ensure(&text, [&] {
- return WTFMove(textUpdate);
- });
- if (!result.isNewEntry) {
- auto& entry = result.iterator->value;
- auto startOffset = std::min(entry.offset, textUpdate.offset);
- auto endOffset = std::max(entry.offset + entry.length, textUpdate.offset + textUpdate.length);
- entry.offset = startOffset;
- entry.length = endOffset - startOffset;
-
- ASSERT(!entry.inheritedDisplayContentsStyle || !textUpdate.inheritedDisplayContentsStyle);
- if (!entry.inheritedDisplayContentsStyle)
- entry.inheritedDisplayContentsStyle = WTFMove(textUpdate.inheritedDisplayContentsStyle);
- }
+
+ m_texts.add(&text, WTFMove(textUpdate));
}
void Update::addText(Text& text, TextUpdate&& textUpdate)
@@ -126,7 +114,7 @@
void Update::addPossibleRoot(Element* element)
{
if (!element) {
- m_roots.add(m_document.ptr());
+ m_roots.add(&m_document);
return;
}
if (m_elements.contains(element))
Modified: trunk/Source/WebCore/style/StyleUpdate.h (275656 => 275657)
--- trunk/Source/WebCore/style/StyleUpdate.h 2021-04-08 10:53:44 UTC (rev 275656)
+++ trunk/Source/WebCore/style/StyleUpdate.h 2021-04-08 13:16:19 UTC (rev 275657)
@@ -69,7 +69,7 @@
public:
Update(Document&);
- const ListHashSet<RefPtr<ContainerNode>>& roots() const { return m_roots; }
+ const ListHashSet<ContainerNode*>& roots() const { return m_roots; }
const ElementUpdates* elementUpdates(const Element&) const;
ElementUpdates* elementUpdates(const Element&);
@@ -90,10 +90,10 @@
private:
void addPossibleRoot(Element*);
- Ref<Document> m_document;
- ListHashSet<RefPtr<ContainerNode>> m_roots;
- HashMap<RefPtr<const Element>, ElementUpdates> m_elements;
- HashMap<RefPtr<const Text>, TextUpdate> m_texts;
+ Document& m_document;
+ ListHashSet<ContainerNode*> m_roots;
+ HashMap<const Element*, ElementUpdates> m_elements;
+ HashMap<const Text*, TextUpdate> m_texts;
};
}