Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(405)

Side by Side Diff: third_party/WebKit/Source/web/ChromeClientImpl.cpp

Issue 2479663002: Move compositor InputHandler from RenderViewImpl to RenderWidget. (Closed)
Patch Set: Account for the fact that OOPIF subframes don't have an InnerViewportScrollLayer. Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 Google Inc. All rights reserved.
3 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). 3 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 911 matching lines...) Expand 10 before | Expand all | Expand 10 after
922 String message = String("Blocked ") + dialogTypeToString(dialogType) + "('" + 922 String message = String("Blocked ") + dialogTypeToString(dialogType) + "('" +
923 dialogMessage + "') during " + 923 dialogMessage + "') during " +
924 dismissalTypeToString(dismissalType) + "."; 924 dismissalTypeToString(dismissalType) + ".";
925 WebLocalFrameImpl::fromFrame(frame)->addMessageToConsole( 925 WebLocalFrameImpl::fromFrame(frame)->addMessageToConsole(
926 WebConsoleMessage(WebConsoleMessage::LevelError, message)); 926 WebConsoleMessage(WebConsoleMessage::LevelError, message));
927 927
928 return false; 928 return false;
929 } 929 }
930 930
931 void ChromeClientImpl::setEventListenerProperties( 931 void ChromeClientImpl::setEventListenerProperties(
932 LocalFrame* frame,
932 WebEventListenerClass eventClass, 933 WebEventListenerClass eventClass,
933 WebEventListenerProperties properties) { 934 WebEventListenerProperties properties) {
934 if (WebLayerTreeView* treeView = m_webView->layerTreeView()) { 935 // |frame| might be null if called via TreeScopeAdopter::
936 // moveNodeToNewDocument() and the new document has no frame attached.
937 // Since a document without a frame cannot attach one later, it is safe to
938 // exit early.
939 if (!frame)
940 return;
941
942 WebLocalFrameImpl* webFrame = WebLocalFrameImpl::fromFrame(frame);
943 WebFrameWidgetBase* widget = webFrame->localRoot()->frameWidget();
944 // The widget may be nullptr if the frame is provisional.
dcheng 2017/01/18 00:13:03 Please add a TODO(dcheng) referencing https://crbu
wjmaclean 2017/01/18 14:01:24 Done.
945 if (!widget) {
946 // If we hit a provisional frame, we expect it to be during initialization
947 // in which case the |properties| should be 'nothing'.
948 DCHECK(properties == WebEventListenerProperties::Nothing);
949 return;
950 }
951
952 // This relies on widget always pointing to a WebFrameWidgetImpl when
953 // |frame| points to an OOPIF frame, i.e. |frame|'s mainFrame() is
954 // remote.
955 setEventListenerProperties(*widget, eventClass, properties);
956 }
957
958 void ChromeClientImpl::setEventListenerProperties(
dcheng 2017/01/18 00:13:03 Nit: either merge this into the previous function,
wjmaclean 2017/01/18 14:01:24 Done.
959 WebFrameWidgetBase& widget,
960 WebEventListenerClass eventClass,
961 WebEventListenerProperties properties) {
962 WebWidgetClient* client = widget.client();
963 if (WebLayerTreeView* treeView = widget.getLayerTreeView()) {
935 treeView->setEventListenerProperties(eventClass, properties); 964 treeView->setEventListenerProperties(eventClass, properties);
936 if (eventClass == WebEventListenerClass::TouchStartOrMove) { 965 if (eventClass == WebEventListenerClass::TouchStartOrMove) {
937 m_webView->hasTouchEventHandlers( 966 client->hasTouchEventHandlers(
938 properties != WebEventListenerProperties::Nothing || 967 properties != WebEventListenerProperties::Nothing ||
939 eventListenerProperties(WebEventListenerClass::TouchEndOrCancel) != 968 treeView->eventListenerProperties(
969 WebEventListenerClass::TouchEndOrCancel) !=
940 WebEventListenerProperties::Nothing); 970 WebEventListenerProperties::Nothing);
941 } else if (eventClass == WebEventListenerClass::TouchEndOrCancel) { 971 } else if (eventClass == WebEventListenerClass::TouchEndOrCancel) {
942 m_webView->hasTouchEventHandlers( 972 client->hasTouchEventHandlers(
943 properties != WebEventListenerProperties::Nothing || 973 properties != WebEventListenerProperties::Nothing ||
944 eventListenerProperties(WebEventListenerClass::TouchStartOrMove) != 974 treeView->eventListenerProperties(
975 WebEventListenerClass::TouchStartOrMove) !=
945 WebEventListenerProperties::Nothing); 976 WebEventListenerProperties::Nothing);
946 } 977 }
947 } else { 978 } else {
948 m_webView->hasTouchEventHandlers(true); 979 client->hasTouchEventHandlers(true);
949 } 980 }
950 } 981 }
951 982
952 void ChromeClientImpl::beginLifecycleUpdates() { 983 void ChromeClientImpl::beginLifecycleUpdates() {
953 if (WebLayerTreeView* treeView = m_webView->layerTreeView()) { 984 if (WebLayerTreeView* treeView = m_webView->layerTreeView()) {
954 treeView->setDeferCommits(false); 985 treeView->setDeferCommits(false);
955 treeView->setNeedsBeginFrame(); 986 treeView->setNeedsBeginFrame();
956 } 987 }
957 } 988 }
958 989
959 WebEventListenerProperties ChromeClientImpl::eventListenerProperties( 990 WebEventListenerProperties ChromeClientImpl::eventListenerProperties(
991 LocalFrame* frame,
960 WebEventListenerClass eventClass) const { 992 WebEventListenerClass eventClass) const {
961 if (WebLayerTreeView* treeView = m_webView->layerTreeView()) 993 if (!frame)
962 return treeView->eventListenerProperties(eventClass); 994 return WebEventListenerProperties::Nothing;
963 return WebEventListenerProperties::Nothing; 995
996 WebFrameWidgetBase* widget =
997 WebLocalFrameImpl::fromFrame(frame)->localRoot()->frameWidget();
998
999 if (!widget || !widget->getLayerTreeView())
1000 return WebEventListenerProperties::Nothing;
1001 return widget->getLayerTreeView()->eventListenerProperties(eventClass);
964 } 1002 }
965 1003
966 void ChromeClientImpl::setHasScrollEventHandlers(bool hasEventHandlers) { 1004 void ChromeClientImpl::setHasScrollEventHandlers(LocalFrame* frame,
967 if (WebLayerTreeView* treeView = m_webView->layerTreeView()) 1005 bool hasEventHandlers) {
968 treeView->setHaveScrollEventHandlers(hasEventHandlers); 1006 // |frame| might be null if called via TreeScopeAdopter::
969 } 1007 // moveNodeToNewDocument() and the new document has no frame attached.
1008 // Since a document without a frame cannot attach one later, it is safe to
1009 // exit early.
1010 if (!frame)
1011 return;
970 1012
971 bool ChromeClientImpl::hasScrollEventHandlers() const { 1013 WebFrameWidgetBase* widget =
972 if (WebLayerTreeView* treeView = m_webView->layerTreeView()) 1014 WebLocalFrameImpl::fromFrame(frame)->localRoot()->frameWidget();
973 return treeView->haveScrollEventHandlers(); 1015 // While a frame is shutting down, we may get called after the layerTreeView
974 return false; 1016 // is gone: in this case we always expect |hasEventHandlers| to be false.
1017 DCHECK(!widget || widget->getLayerTreeView() || !hasEventHandlers);
1018 if (widget && widget->getLayerTreeView())
1019 widget->getLayerTreeView()->setHaveScrollEventHandlers(hasEventHandlers);
975 } 1020 }
976 1021
977 void ChromeClientImpl::setTouchAction(LocalFrame* frame, 1022 void ChromeClientImpl::setTouchAction(LocalFrame* frame,
978 TouchAction touchAction) { 1023 TouchAction touchAction) {
979 DCHECK(frame); 1024 DCHECK(frame);
980 WebLocalFrameImpl* webFrame = WebLocalFrameImpl::fromFrame(frame); 1025 WebLocalFrameImpl* webFrame = WebLocalFrameImpl::fromFrame(frame);
981 WebFrameWidgetBase* widget = webFrame->localRoot()->frameWidget(); 1026 WebFrameWidgetBase* widget = webFrame->localRoot()->frameWidget();
982 if (!widget) 1027 if (!widget)
983 return; 1028 return;
984 1029
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
1166 PresentationController::provideTo(frame, client->presentationClient()); 1211 PresentationController::provideTo(frame, client->presentationClient());
1167 if (RuntimeEnabledFeatures::audioOutputDevicesEnabled()) { 1212 if (RuntimeEnabledFeatures::audioOutputDevicesEnabled()) {
1168 provideAudioOutputDeviceClientTo(frame, 1213 provideAudioOutputDeviceClientTo(frame,
1169 new AudioOutputDeviceClientImpl(frame)); 1214 new AudioOutputDeviceClientImpl(frame));
1170 } 1215 }
1171 if (RuntimeEnabledFeatures::installedAppEnabled()) 1216 if (RuntimeEnabledFeatures::installedAppEnabled())
1172 InstalledAppController::provideTo(frame, client->installedAppClient()); 1217 InstalledAppController::provideTo(frame, client->installedAppClient());
1173 } 1218 }
1174 1219
1175 } // namespace blink 1220 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698