Chromium Code Reviews| Index: third_party/WebKit/Source/web/ChromeClientImpl.cpp |
| diff --git a/third_party/WebKit/Source/web/ChromeClientImpl.cpp b/third_party/WebKit/Source/web/ChromeClientImpl.cpp |
| index 767849621044c8f3201fafa471cfd6b5eb58698d..e89395988146f5f1934958ee43674c91e694c686 100644 |
| --- a/third_party/WebKit/Source/web/ChromeClientImpl.cpp |
| +++ b/third_party/WebKit/Source/web/ChromeClientImpl.cpp |
| @@ -919,19 +919,44 @@ bool ChromeClientImpl::shouldOpenModalDialogDuringPageDismissal( |
| } |
| void ChromeClientImpl::setEventListenerProperties( |
| + LocalFrame* frame, |
| WebEventListenerClass eventClass, |
| WebEventListenerProperties properties) { |
| - if (WebLayerTreeView* treeView = m_webView->layerTreeView()) { |
| + WebLocalFrameImpl* webFrame = WebLocalFrameImpl::fromFrame(frame); |
| + if (!webFrame || webFrame->localRoot() == m_webView->mainFrame()) { |
| + setEventListenerProperties(m_webView->layerTreeView(), eventClass, |
| + properties); |
| + } else { |
| + WebFrameWidgetBase* widget = webFrame->localRoot()->frameWidget(); |
| + // The widget may be nullptr in some unit tests. |
|
dcheng
2016/11/10 07:46:11
How many tests does this break? If possible, we sh
wjmaclean
2016/11/10 15:57:15
I realize I missed a case, this isn't just broken
dcheng
2016/11/11 08:51:52
Can you clarify what you mean?
wjmaclean
2016/11/11 15:40:51
The event listener properties are stored as an arr
dcheng
2016/11/11 22:32:11
I don't think we can expose that to the layer tree
|
| + if (!widget) { |
| + LOG(INFO) << "Null frameWidget."; |
|
dcheng
2016/11/10 07:46:11
Nit: remove this LOG
wjmaclean
2016/11/10 15:57:15
Done.
|
| + return; |
| + } |
| + |
| + WebWidgetClient* client = widget->client(); |
| + // TODO(wjmaclean): Do we need to inform the WebView about these also? |
| + setEventListenerProperties(client->layerTreeView(), eventClass, properties); |
| + } |
| +} |
| + |
| +void ChromeClientImpl::setEventListenerProperties( |
| + WebLayerTreeView* treeView, |
| + WebEventListenerClass eventClass, |
| + WebEventListenerProperties properties) { |
| + if (treeView) { |
| treeView->setEventListenerProperties(eventClass, properties); |
| if (eventClass == WebEventListenerClass::TouchStartOrMove) { |
| m_webView->hasTouchEventHandlers( |
| properties != WebEventListenerProperties::Nothing || |
| - eventListenerProperties(WebEventListenerClass::TouchEndOrCancel) != |
| + eventListenerProperties(treeView, |
| + WebEventListenerClass::TouchEndOrCancel) != |
| WebEventListenerProperties::Nothing); |
| } else if (eventClass == WebEventListenerClass::TouchEndOrCancel) { |
| m_webView->hasTouchEventHandlers( |
| properties != WebEventListenerProperties::Nothing || |
| - eventListenerProperties(WebEventListenerClass::TouchStartOrMove) != |
| + eventListenerProperties(treeView, |
| + WebEventListenerClass::TouchStartOrMove) != |
| WebEventListenerProperties::Nothing); |
| } |
| } else { |
| @@ -947,8 +972,21 @@ void ChromeClientImpl::beginLifecycleUpdates() { |
| } |
| WebEventListenerProperties ChromeClientImpl::eventListenerProperties( |
| + LocalFrame* frame, |
| WebEventListenerClass eventClass) const { |
| - if (WebLayerTreeView* treeView = m_webView->layerTreeView()) |
| + WebLocalFrameImpl* webFrame = WebLocalFrameImpl::fromFrame(frame); |
| + if (!webFrame || webFrame->localRoot() == m_webView->mainFrame()) |
| + return eventListenerProperties(m_webView->layerTreeView(), eventClass); |
| + |
| + WebWidgetClient* client = |
| + WebLocalFrameImpl::fromFrame(frame)->localRoot()->frameWidget()->client(); |
| + return eventListenerProperties(client->layerTreeView(), eventClass); |
| +} |
| + |
| +WebEventListenerProperties ChromeClientImpl::eventListenerProperties( |
| + WebLayerTreeView* treeView, |
| + WebEventListenerClass eventClass) const { |
| + if (treeView) |
| return treeView->eventListenerProperties(eventClass); |
| return WebEventListenerProperties::Nothing; |
| } |