| OLD | NEW |
| 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 Loading... |
| 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. |
| 945 // TODO(dcheng): This needs to be cleaned up at some point. |
| 946 // https://crbug.com/578349 |
| 947 if (!widget) { |
| 948 // If we hit a provisional frame, we expect it to be during initialization |
| 949 // in which case the |properties| should be 'nothing'. |
| 950 DCHECK(properties == WebEventListenerProperties::Nothing); |
| 951 return; |
| 952 } |
| 953 |
| 954 // This relies on widget always pointing to a WebFrameWidgetImpl when |
| 955 // |frame| points to an OOPIF frame, i.e. |frame|'s mainFrame() is |
| 956 // remote. |
| 957 WebWidgetClient* client = widget->client(); |
| 958 if (WebLayerTreeView* treeView = widget->getLayerTreeView()) { |
| 935 treeView->setEventListenerProperties(eventClass, properties); | 959 treeView->setEventListenerProperties(eventClass, properties); |
| 936 if (eventClass == WebEventListenerClass::TouchStartOrMove) { | 960 if (eventClass == WebEventListenerClass::TouchStartOrMove) { |
| 937 m_webView->hasTouchEventHandlers( | 961 client->hasTouchEventHandlers( |
| 938 properties != WebEventListenerProperties::Nothing || | 962 properties != WebEventListenerProperties::Nothing || |
| 939 eventListenerProperties(WebEventListenerClass::TouchEndOrCancel) != | 963 treeView->eventListenerProperties( |
| 964 WebEventListenerClass::TouchEndOrCancel) != |
| 940 WebEventListenerProperties::Nothing); | 965 WebEventListenerProperties::Nothing); |
| 941 } else if (eventClass == WebEventListenerClass::TouchEndOrCancel) { | 966 } else if (eventClass == WebEventListenerClass::TouchEndOrCancel) { |
| 942 m_webView->hasTouchEventHandlers( | 967 client->hasTouchEventHandlers( |
| 943 properties != WebEventListenerProperties::Nothing || | 968 properties != WebEventListenerProperties::Nothing || |
| 944 eventListenerProperties(WebEventListenerClass::TouchStartOrMove) != | 969 treeView->eventListenerProperties( |
| 970 WebEventListenerClass::TouchStartOrMove) != |
| 945 WebEventListenerProperties::Nothing); | 971 WebEventListenerProperties::Nothing); |
| 946 } | 972 } |
| 947 } else { | 973 } else { |
| 948 m_webView->hasTouchEventHandlers(true); | 974 client->hasTouchEventHandlers(true); |
| 949 } | 975 } |
| 950 } | 976 } |
| 951 | 977 |
| 952 void ChromeClientImpl::beginLifecycleUpdates() { | 978 void ChromeClientImpl::beginLifecycleUpdates() { |
| 953 if (WebLayerTreeView* treeView = m_webView->layerTreeView()) { | 979 if (WebLayerTreeView* treeView = m_webView->layerTreeView()) { |
| 954 treeView->setDeferCommits(false); | 980 treeView->setDeferCommits(false); |
| 955 treeView->setNeedsBeginFrame(); | 981 treeView->setNeedsBeginFrame(); |
| 956 } | 982 } |
| 957 } | 983 } |
| 958 | 984 |
| 959 WebEventListenerProperties ChromeClientImpl::eventListenerProperties( | 985 WebEventListenerProperties ChromeClientImpl::eventListenerProperties( |
| 986 LocalFrame* frame, |
| 960 WebEventListenerClass eventClass) const { | 987 WebEventListenerClass eventClass) const { |
| 961 if (WebLayerTreeView* treeView = m_webView->layerTreeView()) | 988 if (!frame) |
| 962 return treeView->eventListenerProperties(eventClass); | 989 return WebEventListenerProperties::Nothing; |
| 963 return WebEventListenerProperties::Nothing; | 990 |
| 991 WebFrameWidgetBase* widget = |
| 992 WebLocalFrameImpl::fromFrame(frame)->localRoot()->frameWidget(); |
| 993 |
| 994 if (!widget || !widget->getLayerTreeView()) |
| 995 return WebEventListenerProperties::Nothing; |
| 996 return widget->getLayerTreeView()->eventListenerProperties(eventClass); |
| 964 } | 997 } |
| 965 | 998 |
| 966 void ChromeClientImpl::setHasScrollEventHandlers(bool hasEventHandlers) { | 999 void ChromeClientImpl::setHasScrollEventHandlers(LocalFrame* frame, |
| 967 if (WebLayerTreeView* treeView = m_webView->layerTreeView()) | 1000 bool hasEventHandlers) { |
| 968 treeView->setHaveScrollEventHandlers(hasEventHandlers); | 1001 // |frame| might be null if called via TreeScopeAdopter:: |
| 969 } | 1002 // moveNodeToNewDocument() and the new document has no frame attached. |
| 1003 // Since a document without a frame cannot attach one later, it is safe to |
| 1004 // exit early. |
| 1005 if (!frame) |
| 1006 return; |
| 970 | 1007 |
| 971 bool ChromeClientImpl::hasScrollEventHandlers() const { | 1008 WebFrameWidgetBase* widget = |
| 972 if (WebLayerTreeView* treeView = m_webView->layerTreeView()) | 1009 WebLocalFrameImpl::fromFrame(frame)->localRoot()->frameWidget(); |
| 973 return treeView->haveScrollEventHandlers(); | 1010 // While a frame is shutting down, we may get called after the layerTreeView |
| 974 return false; | 1011 // is gone: in this case we always expect |hasEventHandlers| to be false. |
| 1012 DCHECK(!widget || widget->getLayerTreeView() || !hasEventHandlers); |
| 1013 if (widget && widget->getLayerTreeView()) |
| 1014 widget->getLayerTreeView()->setHaveScrollEventHandlers(hasEventHandlers); |
| 975 } | 1015 } |
| 976 | 1016 |
| 977 void ChromeClientImpl::setTouchAction(LocalFrame* frame, | 1017 void ChromeClientImpl::setTouchAction(LocalFrame* frame, |
| 978 TouchAction touchAction) { | 1018 TouchAction touchAction) { |
| 979 DCHECK(frame); | 1019 DCHECK(frame); |
| 980 WebLocalFrameImpl* webFrame = WebLocalFrameImpl::fromFrame(frame); | 1020 WebLocalFrameImpl* webFrame = WebLocalFrameImpl::fromFrame(frame); |
| 981 WebFrameWidgetBase* widget = webFrame->localRoot()->frameWidget(); | 1021 WebFrameWidgetBase* widget = webFrame->localRoot()->frameWidget(); |
| 982 if (!widget) | 1022 if (!widget) |
| 983 return; | 1023 return; |
| 984 | 1024 |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1166 PresentationController::provideTo(frame, client->presentationClient()); | 1206 PresentationController::provideTo(frame, client->presentationClient()); |
| 1167 if (RuntimeEnabledFeatures::audioOutputDevicesEnabled()) { | 1207 if (RuntimeEnabledFeatures::audioOutputDevicesEnabled()) { |
| 1168 provideAudioOutputDeviceClientTo(frame, | 1208 provideAudioOutputDeviceClientTo(frame, |
| 1169 new AudioOutputDeviceClientImpl(frame)); | 1209 new AudioOutputDeviceClientImpl(frame)); |
| 1170 } | 1210 } |
| 1171 if (RuntimeEnabledFeatures::installedAppEnabled()) | 1211 if (RuntimeEnabledFeatures::installedAppEnabled()) |
| 1172 InstalledAppController::provideTo(frame, client->installedAppClient()); | 1212 InstalledAppController::provideTo(frame, client->installedAppClient()); |
| 1173 } | 1213 } |
| 1174 | 1214 |
| 1175 } // namespace blink | 1215 } // namespace blink |
| OLD | NEW |