| Index: third_party/WebKit/Source/core/layout/LayoutBox.cpp | 
| diff --git a/third_party/WebKit/Source/core/layout/LayoutBox.cpp b/third_party/WebKit/Source/core/layout/LayoutBox.cpp | 
| index 1c72db18a5e3d889ed463b69574fc7d61d53be61..5a33bd0da0e8ce664076b437ec7e9aa20a4623cc 100644 | 
| --- a/third_party/WebKit/Source/core/layout/LayoutBox.cpp | 
| +++ b/third_party/WebKit/Source/core/layout/LayoutBox.cpp | 
| @@ -1191,29 +1191,36 @@ bool LayoutBox::nodeAtPoint(HitTestResult& result, const HitTestLocation& locati | 
| { | 
| LayoutPoint adjustedLocation = accumulatedOffset + location(); | 
|  | 
| -    // Exit early if no children can be hit. | 
| -    LayoutRect overflowRect = visualOverflowRect(); | 
| -    overflowRect.moveBy(adjustedLocation); | 
| -    if (!locationInContainer.intersects(overflowRect)) | 
| -        return false; | 
| +    if (!isLayoutView()) { | 
| +        // Check if we need to do anything at all. | 
| +        // If we have clipping, then we can't have any spillout. | 
| +        LayoutRect overflowBox = hasOverflowClip() ? borderBoxRect() : visualOverflowRect(); | 
| +        flipForWritingMode(overflowBox); | 
| +        overflowBox.moveBy(adjustedLocation); | 
| +        if (!locationInContainer.intersects(overflowBox)) | 
| +            return false; | 
| +    } | 
|  | 
| // TODO(pdr): We should also check for css clip in the !isSelfPaintingLayer | 
| //            case, similar to overflow clip in LayoutBlock::nodeAtPoint. | 
|  | 
| +    // TODO(pdr): We should also include checks for hit testing border radius at | 
| +    //            the layer level (see: crbug.com/568904). | 
| + | 
| if (hitTestChildren(result, locationInContainer, adjustedLocation, action)) | 
| return true; | 
|  | 
| if (hitTestClippedOutByRoundedBorder(locationInContainer, adjustedLocation)) | 
| return false; | 
|  | 
| -    // Check our bounds next. For this purpose always assume that we can only be hit in the | 
| -    // foreground phase (which is true for replaced elements like images). | 
| -    LayoutRect boundsRect = borderBoxRect(); | 
| -    boundsRect.moveBy(adjustedLocation); | 
| -    if (visibleToHitTestRequest(result.hitTestRequest()) && action == HitTestForeground && locationInContainer.intersects(boundsRect)) { | 
| -        updateHitTestResult(result, locationInContainer.point() - toLayoutSize(adjustedLocation)); | 
| -        if (result.addNodeToListBasedTestResult(node(), locationInContainer, boundsRect) == StopHitTesting) | 
| -            return true; | 
| +    // Now hit test ourselves. | 
| +    if (isInSelfHitTestingPhase(action) && visibleToHitTestRequest(result.hitTestRequest())) { | 
| +        LayoutRect boundsRect(adjustedLocation, size()); | 
| +        if (locationInContainer.intersects(boundsRect)) { | 
| +            updateHitTestResult(result, flipForWritingMode(locationInContainer.point() - toLayoutSize(adjustedLocation))); | 
| +            if (result.addNodeToListBasedTestResult(nodeForHitTest(), locationInContainer, boundsRect) == StopHitTesting) | 
| +                return true; | 
| +        } | 
| } | 
|  | 
| return false; | 
|  |