| Index: Source/core/accessibility/AXRenderObject.cpp
|
| diff --git a/Source/core/accessibility/AXRenderObject.cpp b/Source/core/accessibility/AXRenderObject.cpp
|
| index 99c6da4e3462700679dc08c776b92211f511c083..41a7288f69c7e8b7506bab7e36ab90310f210a70 100644
|
| --- a/Source/core/accessibility/AXRenderObject.cpp
|
| +++ b/Source/core/accessibility/AXRenderObject.cpp
|
| @@ -77,14 +77,14 @@ namespace WebCore {
|
|
|
| using namespace HTMLNames;
|
|
|
| -static inline RenderObject* firstChildInContinuation(RenderObject* renderer)
|
| +static inline RenderObject* firstChildInContinuation(const RenderInline& renderer)
|
| {
|
| - RenderObject* r = toRenderInline(renderer)->continuation();
|
| + RenderBoxModelObject* r = renderer.continuation();
|
|
|
| while (r) {
|
| if (r->isRenderBlock())
|
| return r;
|
| - if (RenderObject* child = r->firstChild())
|
| + if (RenderObject* child = r->slowFirstChild())
|
| return child;
|
| r = toRenderInline(r)->continuation();
|
| }
|
| @@ -106,10 +106,10 @@ static inline bool isInlineWithContinuation(RenderObject* object)
|
|
|
| static inline RenderObject* firstChildConsideringContinuation(RenderObject* renderer)
|
| {
|
| - RenderObject* firstChild = renderer->firstChild();
|
| + RenderObject* firstChild = renderer->slowFirstChild();
|
|
|
| if (!firstChild && isInlineWithContinuation(renderer))
|
| - firstChild = firstChildInContinuation(renderer);
|
| + firstChild = firstChildInContinuation(toRenderInline(*renderer));
|
|
|
| return firstChild;
|
| }
|
| @@ -150,7 +150,8 @@ static inline RenderObject* endOfContinuations(RenderObject* renderer)
|
|
|
| static inline bool lastChildHasContinuation(RenderObject* renderer)
|
| {
|
| - return renderer->lastChild() && isInlineWithContinuation(renderer->lastChild());
|
| + RenderObject* lastChild = renderer->slowLastChild();
|
| + return lastChild && isInlineWithContinuation(lastChild);
|
| }
|
|
|
| static RenderBoxModelObject* nextContinuation(RenderObject* renderer)
|
| @@ -1381,9 +1382,9 @@ AXObject* AXRenderObject::nextSibling() const
|
| } else if (m_renderer->isAnonymousBlock() && lastChildHasContinuation(m_renderer)) {
|
| // Case 2: Anonymous block parent of the start of a continuation - skip all the way to
|
| // after the parent of the end, since everything in between will be linked up via the continuation.
|
| - RenderObject* lastParent = endOfContinuations(m_renderer->lastChild())->parent();
|
| + RenderObject* lastParent = endOfContinuations(toRenderBlock(m_renderer)->lastChild())->parent();
|
| while (lastChildHasContinuation(lastParent))
|
| - lastParent = endOfContinuations(lastParent->lastChild())->parent();
|
| + lastParent = endOfContinuations(lastParent->slowLastChild())->parent();
|
| nextSibling = lastParent->nextSibling();
|
| } else if (RenderObject* ns = m_renderer->nextSibling()) {
|
| // Case 3: node has an actual next sibling
|
| @@ -1961,7 +1962,7 @@ RenderObject* AXRenderObject::renderParentObject() const
|
| // Case 2: node's parent is an inline which is some node's continuation; parent is
|
| // the earliest node in the continuation chain.
|
| parent = startOfConts;
|
| - } else if (parent && (firstChild = parent->firstChild()) && firstChild->node()) {
|
| + } else if (parent && (firstChild = parent->slowFirstChild()) && firstChild->node()) {
|
| // Case 3: The first sibling is the beginning of a continuation chain. Find the origin of that continuation.
|
| // Get the node's renderer and follow that continuation chain until the first child is found.
|
| RenderObject* nodeRenderFirstChild = firstChild->node()->renderer();
|
| @@ -1972,9 +1973,10 @@ RenderObject* AXRenderObject::renderParentObject() const
|
| break;
|
| }
|
| }
|
| - if (firstChild == parent->firstChild())
|
| + RenderObject* newFirstChild = parent->slowFirstChild();
|
| + if (firstChild == newFirstChild)
|
| break;
|
| - firstChild = parent->firstChild();
|
| + firstChild = newFirstChild;
|
| if (!firstChild->node())
|
| break;
|
| nodeRenderFirstChild = firstChild->node()->renderer();
|
|
|