| Index: Source/core/rendering/RenderBlock.cpp
|
| diff --git a/Source/core/rendering/RenderBlock.cpp b/Source/core/rendering/RenderBlock.cpp
|
| index 25c4d2a6ee51a933700af5e15b0dabfed9b9ada1..a1d94cdef85ba53682b4fbd83d968893fdd8dfe7 100644
|
| --- a/Source/core/rendering/RenderBlock.cpp
|
| +++ b/Source/core/rendering/RenderBlock.cpp
|
| @@ -801,7 +801,7 @@ void RenderBlock::addChildIgnoringAnonymousColumnBlocks(RenderObject* newChild,
|
| || beforeChildAnonymousContainer->isRenderFullScreenPlaceholder()
|
| ) {
|
| // Insert the child into the anonymous block box instead of here.
|
| - if (newChild->isInline() || newChild->isFloatingOrOutOfFlowPositioned() || beforeChild->parent()->firstChild() != beforeChild)
|
| + if (newChild->isInline() || newChild->isFloatingOrOutOfFlowPositioned() || beforeChild->parent()->slowFirstChild() != beforeChild)
|
| beforeChild->parent()->addChild(newChild, beforeChild);
|
| else
|
| addChild(newChild, beforeChild->parent());
|
| @@ -2681,7 +2681,7 @@ void RenderBlock::removePercentHeightDescendantIfNeeded(RenderBox* descendant)
|
| void RenderBlock::clearPercentHeightDescendantsFrom(RenderBox* parent)
|
| {
|
| ASSERT(gPercentHeightContainerMap);
|
| - for (RenderObject* curr = parent->firstChild(); curr; curr = curr->nextInPreOrder(parent)) {
|
| + for (RenderObject* curr = parent->slowFirstChild(); curr; curr = curr->nextInPreOrder(parent)) {
|
| if (!curr->isBox())
|
| continue;
|
|
|
| @@ -3881,10 +3881,12 @@ RenderBlock* RenderBlock::firstLineBlock() const
|
| // FIXME: Remove when buttons are implemented with align-items instead
|
| // of flexbox.
|
| if (firstLineBlock->isReplaced() || firstLineBlock->isFloating()
|
| - || !parentBlock || parentBlock->firstChild() != firstLineBlock
|
| + || !parentBlock
|
| || (!parentBlock->isRenderBlockFlow() && !parentBlock->isRenderButton()))
|
| break;
|
| ASSERT_WITH_SECURITY_IMPLICATION(parentBlock->isRenderBlock());
|
| + if (toRenderBlock(parentBlock)->firstChild() != firstLineBlock)
|
| + break;
|
| firstLineBlock = toRenderBlock(parentBlock);
|
| }
|
|
|
| @@ -3939,8 +3941,12 @@ static inline RenderObject* findFirstLetterBlock(RenderBlock* start)
|
| return firstLetterBlock;
|
|
|
| RenderObject* parentBlock = firstLetterBlock->parent();
|
| - if (firstLetterBlock->isReplaced() || !parentBlock || parentBlock->firstChild() != firstLetterBlock ||
|
| - (!parentBlock->isRenderBlockFlow() && !parentBlock->isRenderButton()))
|
| + if (firstLetterBlock->isReplaced() || !parentBlock
|
| + || (!parentBlock->isRenderBlockFlow() && !parentBlock->isRenderButton())) {
|
| + return 0;
|
| + }
|
| + ASSERT(parentBlock->isRenderBlock());
|
| + if (toRenderBlock(parentBlock)->firstChild() != firstLetterBlock)
|
| return 0;
|
| firstLetterBlock = parentBlock;
|
| }
|
| @@ -3966,7 +3972,7 @@ void RenderBlock::updateFirstLetterStyle(RenderObject* firstLetterBlock, RenderO
|
|
|
| // Move the first letter into the new renderer.
|
| LayoutStateDisabler layoutStateDisabler(*this);
|
| - while (RenderObject* child = firstLetter->firstChild()) {
|
| + while (RenderObject* child = firstLetter->slowFirstChild()) {
|
| if (child->isText())
|
| toRenderText(child)->removeAndDestroyTextBoxes();
|
| firstLetter->removeChild(child);
|
| @@ -3989,7 +3995,7 @@ void RenderBlock::updateFirstLetterStyle(RenderObject* firstLetterBlock, RenderO
|
| } else
|
| firstLetter->setStyle(pseudoStyle);
|
|
|
| - for (RenderObject* genChild = firstLetter->firstChild(); genChild; genChild = genChild->nextSibling()) {
|
| + for (RenderObject* genChild = firstLetter->slowFirstChild(); genChild; genChild = genChild->nextSibling()) {
|
| if (genChild->isText())
|
| genChild->setStyle(pseudoStyle);
|
| }
|
| @@ -4092,7 +4098,7 @@ void RenderBlock::updateFirstLetter()
|
| return;
|
|
|
| // Drill into inlines looking for our first text child.
|
| - RenderObject* currChild = firstLetterBlock->firstChild();
|
| + RenderObject* currChild = firstLetterBlock->slowFirstChild();
|
| unsigned length = 0;
|
| while (currChild) {
|
| if (currChild->isText()) {
|
| @@ -4106,18 +4112,19 @@ void RenderBlock::updateFirstLetter()
|
| currChild = currChild->nextSibling();
|
| } else if (currChild->isFloatingOrOutOfFlowPositioned()) {
|
| if (currChild->style()->styleType() == FIRST_LETTER) {
|
| - currChild = currChild->firstChild();
|
| + currChild = currChild->slowFirstChild();
|
| break;
|
| }
|
| currChild = currChild->nextSibling();
|
| - } else if (currChild->isReplaced() || currChild->isRenderButton() || currChild->isMenuList())
|
| + } else if (currChild->isReplaced() || currChild->isRenderButton() || currChild->isMenuList()) {
|
| break;
|
| - else if (currChild->style()->hasPseudoStyle(FIRST_LETTER) && currChild->canHaveGeneratedChildren()) {
|
| + } else if (currChild->style()->hasPseudoStyle(FIRST_LETTER) && currChild->canHaveGeneratedChildren()) {
|
| // We found a lower-level node with first-letter, which supersedes the higher-level style
|
| firstLetterBlock = currChild;
|
| - currChild = currChild->firstChild();
|
| - } else
|
| - currChild = currChild->firstChild();
|
| + currChild = currChild->slowFirstChild();
|
| + } else {
|
| + currChild = currChild->slowFirstChild();
|
| + }
|
| }
|
|
|
| if (!currChild)
|
|
|