| Index: Source/WebCore/page/Frame.cpp
 | 
| diff --git a/Source/WebCore/page/Frame.cpp b/Source/WebCore/page/Frame.cpp
 | 
| index 3e4bb2ea28f0e39f82a7e488306b3a0fe3a2c0c4..548e4668ed2f854973ddf3712c66a37d5e757b5b 100644
 | 
| --- a/Source/WebCore/page/Frame.cpp
 | 
| +++ b/Source/WebCore/page/Frame.cpp
 | 
| @@ -804,6 +804,31 @@ Document* Frame::documentAtPoint(const IntPoint& point)
 | 
|      return result.innerNode() ? result.innerNode()->document() : 0;
 | 
|  }
 | 
|  
 | 
| +PassRefPtr<Range> Frame::rangeForPoint(const IntPoint& framePoint)
 | 
| +{
 | 
| +    VisiblePosition position = visiblePositionForPoint(framePoint);
 | 
| +    if (position.isNull())
 | 
| +        return 0;
 | 
| +
 | 
| +    VisiblePosition previous = position.previous();
 | 
| +    if (previous.isNotNull()) {
 | 
| +        RefPtr<Range> previousCharacterRange = makeRange(previous, position);
 | 
| +        IntRect rect = editor()->firstRectForRange(previousCharacterRange.get());
 | 
| +        if (rect.contains(framePoint))
 | 
| +            return previousCharacterRange.release();
 | 
| +    }
 | 
| +
 | 
| +    VisiblePosition next = position.next();
 | 
| +    if (next.isNotNull()) {
 | 
| +        RefPtr<Range> nextCharacterRange = makeRange(position, next);
 | 
| +        IntRect rect = editor()->firstRectForRange(nextCharacterRange.get());
 | 
| +        if (rect.contains(framePoint))
 | 
| +            return nextCharacterRange.release();
 | 
| +    }
 | 
| +
 | 
| +    return 0;
 | 
| +}
 | 
| +
 | 
|  void Frame::createView(const IntSize& viewportSize,
 | 
|                         const Color& backgroundColor, bool transparent,
 | 
|                         const IntSize& fixedLayoutSize, bool useFixedLayout,
 | 
| 
 |