Chromium Code Reviews| Index: third_party/WebKit/Source/core/frame/EventHandlerRegistry.cpp |
| diff --git a/third_party/WebKit/Source/core/frame/EventHandlerRegistry.cpp b/third_party/WebKit/Source/core/frame/EventHandlerRegistry.cpp |
| index 407f5384f073aebe4447f6dca71a40c70fd7f13e..cc09148ec328df13f34f1f60d39ef0c50a2b2854 100644 |
| --- a/third_party/WebKit/Source/core/frame/EventHandlerRegistry.cpp |
| +++ b/third_party/WebKit/Source/core/frame/EventHandlerRegistry.cpp |
| @@ -119,8 +119,18 @@ void EventHandlerRegistry::updateEventHandlerInternal( |
| bool targetSetChanged = updateEventHandlerTargets(op, handlerClass, target); |
| bool hasHandlers = m_targets[handlerClass].size(); |
| - if (hadHandlers != hasHandlers) |
| - notifyHasHandlersChanged(handlerClass, hasHandlers); |
| + if (hadHandlers != hasHandlers) { |
| + LocalFrame* frame = nullptr; |
| + if (Node* node = target->toNode()) { |
| + frame = node->document().frame(); |
| + } else if (LocalDOMWindow* domWindow = target->toLocalDOMWindow()) { |
| + frame = domWindow->frame(); |
| + } else { |
| + DCHECK(false) << "Unexpected target type for event handler."; |
|
dcheng
2017/01/16 11:05:40
Nit: NOTREACHED()
wjmaclean
2017/01/17 18:23:27
Done.
|
| + } |
| + |
| + notifyHasHandlersChanged(frame, handlerClass, hasHandlers); |
| + } |
| if (targetSetChanged) |
| notifyDidAddOrRemoveEventHandlerTarget(handlerClass); |
| @@ -203,23 +213,25 @@ void EventHandlerRegistry::didRemoveAllEventHandlers(EventTarget& target) { |
| } |
| void EventHandlerRegistry::notifyHasHandlersChanged( |
| + LocalFrame* frame, |
| EventHandlerClass handlerClass, |
| bool hasActiveHandlers) { |
| switch (handlerClass) { |
| case ScrollEvent: |
| - m_frameHost->chromeClient().setHasScrollEventHandlers(hasActiveHandlers); |
| + m_frameHost->chromeClient().setHasScrollEventHandlers(frame, |
| + hasActiveHandlers); |
| break; |
| case WheelEventBlocking: |
| case WheelEventPassive: |
| m_frameHost->chromeClient().setEventListenerProperties( |
| - WebEventListenerClass::MouseWheel, |
| + frame, WebEventListenerClass::MouseWheel, |
| webEventListenerProperties(hasEventHandlers(WheelEventBlocking), |
| hasEventHandlers(WheelEventPassive))); |
| break; |
| case TouchStartOrMoveEventBlocking: |
| case TouchStartOrMoveEventPassive: |
| m_frameHost->chromeClient().setEventListenerProperties( |
| - WebEventListenerClass::TouchStartOrMove, |
| + frame, WebEventListenerClass::TouchStartOrMove, |
| webEventListenerProperties( |
| hasEventHandlers(TouchStartOrMoveEventBlocking), |
| hasEventHandlers(TouchStartOrMoveEventPassive))); |
| @@ -227,7 +239,7 @@ void EventHandlerRegistry::notifyHasHandlersChanged( |
| case TouchEndOrCancelEventBlocking: |
| case TouchEndOrCancelEventPassive: |
| m_frameHost->chromeClient().setEventListenerProperties( |
| - WebEventListenerClass::TouchEndOrCancel, |
| + frame, WebEventListenerClass::TouchEndOrCancel, |
| webEventListenerProperties( |
| hasEventHandlers(TouchEndOrCancelEventBlocking), |
| hasEventHandlers(TouchEndOrCancelEventPassive))); |