| Index: Source/web/LinkHighlight.cpp
|
| diff --git a/Source/web/LinkHighlight.cpp b/Source/web/LinkHighlight.cpp
|
| index afaed964dea86d828d588867dab34a3ac36f2986..34006a1ae200c8126c4b71b09904ee1895428436 100644
|
| --- a/Source/web/LinkHighlight.cpp
|
| +++ b/Source/web/LinkHighlight.cpp
|
| @@ -29,6 +29,7 @@
|
|
|
| #include "SkMatrix44.h"
|
| #include "core/dom/Node.h"
|
| +#include "core/dom/NodeRenderingTraversal.h"
|
| #include "core/frame/FrameView.h"
|
| #include "core/frame/LocalFrame.h"
|
| #include "core/rendering/RenderLayer.h"
|
| @@ -180,18 +181,23 @@ static void addQuadToPath(const FloatQuad& quad, Path& path)
|
| path.closeSubpath();
|
| }
|
|
|
| -void LinkHighlight::computeQuads(RenderObject& renderer, Vector<FloatQuad>& outQuads) const
|
| +void LinkHighlight::computeQuads(const Node& node, Vector<FloatQuad>& outQuads) const
|
| {
|
| + if (!node.renderer())
|
| + return;
|
| +
|
| + RenderObject* renderer = node.renderer();
|
| +
|
| // For inline elements, absoluteQuads will return a line box based on the line-height
|
| // and font metrics, which is technically incorrect as replaced elements like images
|
| // should use their intristic height and expand the linebox as needed. To get an
|
| // appropriately sized highlight we descend into the children and have them add their
|
| // boxes.
|
| - if (renderer.isRenderInline()) {
|
| - for (RenderObject* child = renderer.slowFirstChild(); child; child = child->nextSibling())
|
| + if (renderer->isRenderInline()) {
|
| + for (Node* child = NodeRenderingTraversal::firstChild(&node); child; child = NodeRenderingTraversal::nextSibling(child))
|
| computeQuads(*child, outQuads);
|
| } else {
|
| - renderer.absoluteQuads(outQuads);
|
| + renderer->absoluteQuads(outQuads);
|
| }
|
| }
|
|
|
| @@ -204,7 +210,7 @@ bool LinkHighlight::computeHighlightLayerPathAndPosition(RenderLayer* compositin
|
|
|
| // Get quads for node in absolute coordinates.
|
| Vector<FloatQuad> quads;
|
| - computeQuads(*m_node->renderer(), quads);
|
| + computeQuads(*m_node, quads);
|
| ASSERT(quads.size());
|
|
|
| // Adjust for offset between target graphics layer and the node's renderer.
|
|
|