| Index: Source/core/layout/LayoutPart.cpp
|
| diff --git a/Source/core/layout/LayoutPart.cpp b/Source/core/layout/LayoutPart.cpp
|
| index 1f21e6f37993227580d6f39d4d2a665acaf6a9b8..63243c8bff743a17d6374763d02e6a58bc72f440 100644
|
| --- a/Source/core/layout/LayoutPart.cpp
|
| +++ b/Source/core/layout/LayoutPart.cpp
|
| @@ -184,8 +184,21 @@ bool LayoutPart::nodeAtPoint(HitTestResult& result, const HitTestLocation& locat
|
| result = childFrameResult;
|
| }
|
|
|
| - if (isInsideChildFrame)
|
| - return true;
|
| + // Don't trust |isInsideChildFrame|. For rect-based hit-test, returns
|
| + // true only when the hit test rect is totally within the iframe,
|
| + // i.e. nodeAtPointOverWidget() also returns true.
|
| + // Use a temporary HitTestResult because we don't want to collect the
|
| + // iframe element itself if the hit-test rect is totally within the iframe.
|
| + if (isInsideChildFrame) {
|
| + if (!locationInContainer.isRectBasedTest())
|
| + return true;
|
| + HitTestResult pointOverWidgetResult = result;
|
| + bool pointOverWidget = nodeAtPointOverWidget(pointOverWidgetResult, locationInContainer, accumulatedOffset, action);
|
| + if (pointOverWidget)
|
| + return true;
|
| + result = pointOverWidgetResult;
|
| + return false;
|
| + }
|
| }
|
| }
|
|
|
|
|