Index: Source/core/page/EventHandler.cpp |
diff --git a/Source/core/page/EventHandler.cpp b/Source/core/page/EventHandler.cpp |
index 0bc19a21a3ae478648db1867035abbfdf6b072c4..0e316867dde4e9d182bb7dcadd68c0dd87713ab5 100644 |
--- a/Source/core/page/EventHandler.cpp |
+++ b/Source/core/page/EventHandler.cpp |
@@ -3448,7 +3448,7 @@ bool EventHandler::handleTouchEvent(const PlatformTouchEvent& event) |
// See http://crbug.com/345372. |
m_targetForTouchID.set(point.id(), node); |
- TouchAction effectiveTouchAction = computeEffectiveTouchAction(pagePoint); |
+ TouchAction effectiveTouchAction = computeEffectiveTouchAction(*node); |
if (effectiveTouchAction != TouchActionAuto) |
m_frame->page()->chrome().client().setTouchAction(effectiveTouchAction); |
} |
@@ -3622,25 +3622,20 @@ TouchAction EventHandler::intersectTouchAction(TouchAction action1, TouchAction |
return action1 & action2; |
} |
-TouchAction EventHandler::computeEffectiveTouchAction(const LayoutPoint& point) |
+TouchAction EventHandler::computeEffectiveTouchAction(const Node& node) |
{ |
// Optimization to minimize risk of this new feature (behavior should be identical |
// since there's no way to get non-default touch-action values). |
if (!RuntimeEnabledFeatures::cssTouchActionEnabled()) |
return TouchActionAuto; |
- HitTestResult taResult = hitTestResultAtPoint(point, HitTestRequest::TouchEvent | HitTestRequest::ReadOnly | HitTestRequest::Active | HitTestRequest::TouchAction); |
- Node* node = taResult.innerNode(); |
- if (!node) |
- return TouchActionAuto; |
- |
// Start by permitting all actions, then walk the elements supporting |
// touch-action from the target node up to the nearest scrollable ancestor |
// and exclude any prohibited actions. |
TouchAction effectiveTouchAction = TouchActionAuto; |
- for (const Node* curNode = node; curNode; curNode = NodeRenderingTraversal::parent(curNode)) { |
+ for (const Node* curNode = &node; curNode; curNode = NodeRenderingTraversal::parent(curNode)) { |
if (RenderObject* renderer = curNode->renderer()) { |
- if (renderer->visibleForTouchAction()) { |
+ if (renderer->supportsTouchAction()) { |
TouchAction action = renderer->style()->touchAction(); |
effectiveTouchAction = intersectTouchAction(action, effectiveTouchAction); |
if (effectiveTouchAction == TouchActionNone) |