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))); |