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

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

Issue 2389633002: reflow comments in web/ (Closed)
Patch Set: . Created 4 years, 2 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) 2011, 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 223
224 // Change the text zoom level by kTextSizeMultiplierRatio each time the user 224 // Change the text zoom level by kTextSizeMultiplierRatio each time the user
225 // zooms text in or out (ie., change by 20%). The min and max values limit 225 // zooms text in or out (ie., change by 20%). The min and max values limit
226 // text zoom to half and 3x the original text size. These three values match 226 // text zoom to half and 3x the original text size. These three values match
227 // those in Apple's port in WebKit/WebKit/WebView/WebView.mm 227 // those in Apple's port in WebKit/WebKit/WebView/WebView.mm
228 const double WebView::textSizeMultiplierRatio = 1.2; 228 const double WebView::textSizeMultiplierRatio = 1.2;
229 const double WebView::minTextSizeMultiplier = 0.5; 229 const double WebView::minTextSizeMultiplier = 0.5;
230 const double WebView::maxTextSizeMultiplier = 3.0; 230 const double WebView::maxTextSizeMultiplier = 3.0;
231 231
232 // Used to defer all page activity in cases where the embedder wishes to run 232 // Used to defer all page activity in cases where the embedder wishes to run
233 // a nested event loop. Using a stack enables nesting of message loop invocation s. 233 // a nested event loop. Using a stack enables nesting of message loop
234 // invocations.
234 static Vector<std::unique_ptr<ScopedPageLoadDeferrer>>& 235 static Vector<std::unique_ptr<ScopedPageLoadDeferrer>>&
235 pageLoadDeferrerStack() { 236 pageLoadDeferrerStack() {
236 DEFINE_STATIC_LOCAL(Vector<std::unique_ptr<ScopedPageLoadDeferrer>>, 237 DEFINE_STATIC_LOCAL(Vector<std::unique_ptr<ScopedPageLoadDeferrer>>,
237 deferrerStack, ()); 238 deferrerStack, ());
238 return deferrerStack; 239 return deferrerStack;
239 } 240 }
240 241
241 // Ensure that the WebDragOperation enum values stay in sync with the original 242 // Ensure that the WebDragOperation enum values stay in sync with the original
242 // DragOperation constants. 243 // DragOperation constants.
243 #define STATIC_ASSERT_ENUM(a, b) \ 244 #define STATIC_ASSERT_ENUM(a, b) \
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 } 550 }
550 551
551 PageWidgetEventHandler::handleMouseDown(mainFrame, event); 552 PageWidgetEventHandler::handleMouseDown(mainFrame, event);
552 553
553 if (event.button == WebMouseEvent::Button::Left && m_mouseCaptureNode) 554 if (event.button == WebMouseEvent::Button::Left && m_mouseCaptureNode)
554 m_mouseCaptureGestureToken = 555 m_mouseCaptureGestureToken =
555 mainFrame.eventHandler().takeLastMouseDownGestureToken(); 556 mainFrame.eventHandler().takeLastMouseDownGestureToken();
556 557
557 if (m_pagePopup && pagePopup && 558 if (m_pagePopup && pagePopup &&
558 m_pagePopup->hasSamePopupClient(pagePopup.get())) { 559 m_pagePopup->hasSamePopupClient(pagePopup.get())) {
559 // That click triggered a page popup that is the same as the one we just clo sed. 560 // That click triggered a page popup that is the same as the one we just
560 // It needs to be closed. 561 // closed. It needs to be closed.
561 cancelPagePopup(); 562 cancelPagePopup();
562 } 563 }
563 564
564 // Dispatch the contextmenu event regardless of if the click was swallowed. 565 // Dispatch the contextmenu event regardless of if the click was swallowed.
565 if (!page()->settings().showContextMenuOnMouseUp()) { 566 if (!page()->settings().showContextMenuOnMouseUp()) {
566 #if OS(MACOSX) 567 #if OS(MACOSX)
567 if (event.button == WebMouseEvent::Button::Right || 568 if (event.button == WebMouseEvent::Button::Right ||
568 (event.button == WebMouseEvent::Button::Left && 569 (event.button == WebMouseEvent::Button::Left &&
569 event.modifiers & WebMouseEvent::ControlKey)) 570 event.modifiers & WebMouseEvent::ControlKey))
570 mouseContextMenu(event); 571 mouseContextMenu(event);
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
675 syntheticWheel.x = m_positionOnFlingStart.x; 676 syntheticWheel.x = m_positionOnFlingStart.x;
676 syntheticWheel.y = m_positionOnFlingStart.y; 677 syntheticWheel.y = m_positionOnFlingStart.y;
677 syntheticWheel.globalX = m_globalPositionOnFlingStart.x; 678 syntheticWheel.globalX = m_globalPositionOnFlingStart.x;
678 syntheticWheel.globalY = m_globalPositionOnFlingStart.y; 679 syntheticWheel.globalY = m_globalPositionOnFlingStart.y;
679 syntheticWheel.modifiers = m_flingModifier; 680 syntheticWheel.modifiers = m_flingModifier;
680 681
681 if (handleMouseWheel(*m_page->deprecatedLocalMainFrame(), syntheticWheel) != 682 if (handleMouseWheel(*m_page->deprecatedLocalMainFrame(), syntheticWheel) !=
682 WebInputEventResult::NotHandled) 683 WebInputEventResult::NotHandled)
683 return true; 684 return true;
684 685
685 // TODO(dtapuska): Remove these GSB/GSE sequences when trackpad latching is implemented; see crbug.com/526463. 686 // TODO(dtapuska): Remove these GSB/GSE sequences when trackpad latching is
687 // implemented; see crbug.com/526463.
686 WebGestureEvent syntheticScrollBegin = createGestureScrollEventFromFling( 688 WebGestureEvent syntheticScrollBegin = createGestureScrollEventFromFling(
687 WebInputEvent::GestureScrollBegin, WebGestureDeviceTouchpad); 689 WebInputEvent::GestureScrollBegin, WebGestureDeviceTouchpad);
688 syntheticScrollBegin.data.scrollBegin.deltaXHint = delta.width; 690 syntheticScrollBegin.data.scrollBegin.deltaXHint = delta.width;
689 syntheticScrollBegin.data.scrollBegin.deltaYHint = delta.height; 691 syntheticScrollBegin.data.scrollBegin.deltaYHint = delta.height;
690 syntheticScrollBegin.data.scrollBegin.inertialPhase = 692 syntheticScrollBegin.data.scrollBegin.inertialPhase =
691 WebGestureEvent::MomentumPhase; 693 WebGestureEvent::MomentumPhase;
692 handleGestureEvent(syntheticScrollBegin); 694 handleGestureEvent(syntheticScrollBegin);
693 695
694 WebGestureEvent syntheticScrollUpdate = createGestureScrollEventFromFling( 696 WebGestureEvent syntheticScrollUpdate = createGestureScrollEventFromFling(
695 WebInputEvent::GestureScrollUpdate, WebGestureDeviceTouchpad); 697 WebInputEvent::GestureScrollUpdate, WebGestureDeviceTouchpad);
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
786 788
787 // Special handling for double tap and scroll events as we don't want to 789 // Special handling for double tap and scroll events as we don't want to
788 // hit test for them. 790 // hit test for them.
789 switch (event.type) { 791 switch (event.type) {
790 case WebInputEvent::GestureDoubleTap: 792 case WebInputEvent::GestureDoubleTap:
791 if (m_webSettings->doubleTapToZoomEnabled() && 793 if (m_webSettings->doubleTapToZoomEnabled() &&
792 minimumPageScaleFactor() != maximumPageScaleFactor()) { 794 minimumPageScaleFactor() != maximumPageScaleFactor()) {
793 m_client->cancelScheduledContentIntents(); 795 m_client->cancelScheduledContentIntents();
794 animateDoubleTapZoom(platformEvent.position()); 796 animateDoubleTapZoom(platformEvent.position());
795 } 797 }
796 // GestureDoubleTap is currently only used by Android for zooming. For Web Core, 798 // GestureDoubleTap is currently only used by Android for zooming. For
797 // GestureTap with tap count = 2 is used instead. So we drop GestureDouble Tap here. 799 // WebCore, GestureTap with tap count = 2 is used instead. So we drop
800 // GestureDoubleTap here.
798 eventResult = WebInputEventResult::HandledSystem; 801 eventResult = WebInputEventResult::HandledSystem;
799 m_client->didHandleGestureEvent(event, eventCancelled); 802 m_client->didHandleGestureEvent(event, eventCancelled);
800 return eventResult; 803 return eventResult;
801 case WebInputEvent::GestureScrollBegin: 804 case WebInputEvent::GestureScrollBegin:
802 m_client->cancelScheduledContentIntents(); 805 m_client->cancelScheduledContentIntents();
803 case WebInputEvent::GestureScrollEnd: 806 case WebInputEvent::GestureScrollEnd:
804 case WebInputEvent::GestureScrollUpdate: 807 case WebInputEvent::GestureScrollUpdate:
805 case WebInputEvent::GestureFlingStart: 808 case WebInputEvent::GestureFlingStart:
806 // Scrolling-related gesture events invoke EventHandler recursively for ea ch frame down 809 // Scrolling-related gesture events invoke EventHandler recursively for
807 // the chain, doing a single-frame hit-test per frame. This matches handle WheelEvent. 810 // each frame down the chain, doing a single-frame hit-test per frame.
808 // Perhaps we could simplify things by rewriting scroll handling to work i nner frame 811 // This matches handleWheelEvent. Perhaps we could simplify things by
809 // out, and then unify with other gesture events. 812 // rewriting scroll handling to work inner frame out, and then unify with
813 // other gesture events.
810 eventResult = 814 eventResult =
811 mainFrameImpl()->frame()->eventHandler().handleGestureScrollEvent( 815 mainFrameImpl()->frame()->eventHandler().handleGestureScrollEvent(
812 platformEvent); 816 platformEvent);
813 m_client->didHandleGestureEvent(event, eventCancelled); 817 m_client->didHandleGestureEvent(event, eventCancelled);
814 return eventResult; 818 return eventResult;
815 case WebInputEvent::GesturePinchBegin: 819 case WebInputEvent::GesturePinchBegin:
816 case WebInputEvent::GesturePinchEnd: 820 case WebInputEvent::GesturePinchEnd:
817 case WebInputEvent::GesturePinchUpdate: 821 case WebInputEvent::GesturePinchUpdate:
818 return WebInputEventResult::NotHandled; 822 return WebInputEventResult::NotHandled;
819 default: 823 default:
820 break; 824 break;
821 } 825 }
822 826
823 // Hit test across all frames and do touch adjustment as necessary for the eve nt type. 827 // Hit test across all frames and do touch adjustment as necessary for the
828 // event type.
824 GestureEventWithHitTestResults targetedEvent = 829 GestureEventWithHitTestResults targetedEvent =
825 m_page->deprecatedLocalMainFrame()->eventHandler().targetGestureEvent( 830 m_page->deprecatedLocalMainFrame()->eventHandler().targetGestureEvent(
826 platformEvent); 831 platformEvent);
827 832
828 // Handle link highlighting outside the main switch to avoid getting lost in t he 833 // Handle link highlighting outside the main switch to avoid getting lost in
829 // complicated set of cases handled below. 834 // the complicated set of cases handled below.
830 switch (event.type) { 835 switch (event.type) {
831 case WebInputEvent::GestureShowPress: 836 case WebInputEvent::GestureShowPress:
832 // Queue a highlight animation, then hand off to regular handler. 837 // Queue a highlight animation, then hand off to regular handler.
833 enableTapHighlightAtPoint(targetedEvent); 838 enableTapHighlightAtPoint(targetedEvent);
834 break; 839 break;
835 case WebInputEvent::GestureTapCancel: 840 case WebInputEvent::GestureTapCancel:
836 case WebInputEvent::GestureTap: 841 case WebInputEvent::GestureTap:
837 case WebInputEvent::GestureLongPress: 842 case WebInputEvent::GestureLongPress:
838 for (size_t i = 0; i < m_linkHighlights.size(); ++i) 843 for (size_t i = 0; i < m_linkHighlights.size(); ++i)
839 m_linkHighlights[i]->startHighlightAnimationIfNeeded(); 844 m_linkHighlights[i]->startHighlightAnimationIfNeeded();
(...skipping 10 matching lines...) Expand all
850 RefPtr<WebPagePopupImpl> pagePopup = m_pagePopup; 855 RefPtr<WebPagePopupImpl> pagePopup = m_pagePopup;
851 hidePopups(); 856 hidePopups();
852 DCHECK(!m_pagePopup); 857 DCHECK(!m_pagePopup);
853 858
854 m_client->cancelScheduledContentIntents(); 859 m_client->cancelScheduledContentIntents();
855 if (detectContentOnTouch(targetedEvent)) { 860 if (detectContentOnTouch(targetedEvent)) {
856 eventResult = WebInputEventResult::HandledSystem; 861 eventResult = WebInputEventResult::HandledSystem;
857 break; 862 break;
858 } 863 }
859 864
860 // Don't trigger a disambiguation popup on sites designed for mobile devic es. 865 // Don't trigger a disambiguation popup on sites designed for mobile
861 // Instead, assume that the page has been designed with big enough buttons and links. 866 // devices. Instead, assume that the page has been designed with big
862 // Don't trigger a disambiguation popup when screencasting, since it's imp lemented outside of 867 // enough buttons and links. Don't trigger a disambiguation popup when
863 // compositor pipeline and is not being screencasted itself. This leads to bad user experience. 868 // screencasting, since it's implemented outside of compositor pipeline
869 // and is not being screencasted itself. This leads to bad user
870 // experience.
864 WebDevToolsAgentImpl* devTools = mainFrameDevToolsAgentImpl(); 871 WebDevToolsAgentImpl* devTools = mainFrameDevToolsAgentImpl();
865 VisualViewport& visualViewport = page()->frameHost().visualViewport(); 872 VisualViewport& visualViewport = page()->frameHost().visualViewport();
866 bool screencastEnabled = devTools && devTools->screencastEnabled(); 873 bool screencastEnabled = devTools && devTools->screencastEnabled();
867 if (event.data.tap.width > 0 && 874 if (event.data.tap.width > 0 &&
868 !visualViewport.shouldDisableDesktopWorkarounds() && 875 !visualViewport.shouldDisableDesktopWorkarounds() &&
869 !screencastEnabled) { 876 !screencastEnabled) {
870 IntRect boundingBox(visualViewport.viewportToRootFrame( 877 IntRect boundingBox(visualViewport.viewportToRootFrame(
871 IntRect(event.x - event.data.tap.width / 2, 878 IntRect(event.x - event.data.tap.width / 2,
872 event.y - event.data.tap.height / 2, event.data.tap.width, 879 event.y - event.data.tap.height / 2, event.data.tap.width,
873 event.data.tap.height))); 880 event.data.tap.height)));
874 881
875 // TODO(bokan): We shouldn't pass details of the VisualViewport offset t o render_view_impl. 882 // TODO(bokan): We shouldn't pass details of the VisualViewport offset
876 // crbug.com/459591 883 // to render_view_impl. crbug.com/459591
877 WebSize visualViewportOffset = 884 WebSize visualViewportOffset =
878 flooredIntSize(visualViewport.location()); 885 flooredIntSize(visualViewport.location());
879 886
880 if (m_webSettings->multiTargetTapNotificationEnabled()) { 887 if (m_webSettings->multiTargetTapNotificationEnabled()) {
881 Vector<IntRect> goodTargets; 888 Vector<IntRect> goodTargets;
882 HeapVector<Member<Node>> highlightNodes; 889 HeapVector<Member<Node>> highlightNodes;
883 findGoodTouchTargets(boundingBox, mainFrameImpl()->frame(), 890 findGoodTouchTargets(boundingBox, mainFrameImpl()->frame(),
884 goodTargets, highlightNodes); 891 goodTargets, highlightNodes);
885 // FIXME: replace touch adjustment code when numberOfGoodTargets == 1? 892 // FIXME: replace touch adjustment code when numberOfGoodTargets == 1?
886 // Single candidate case is currently handled by: https://bugs.webkit. org/show_bug.cgi?id=85101 893 // Single candidate case is currently handled by:
894 // https://bugs.webkit.org/show_bug.cgi?id=85101
887 if (goodTargets.size() >= 2 && m_client && 895 if (goodTargets.size() >= 2 && m_client &&
888 m_client->didTapMultipleTargets(visualViewportOffset, boundingBox, 896 m_client->didTapMultipleTargets(visualViewportOffset, boundingBox,
889 goodTargets)) { 897 goodTargets)) {
890 enableTapHighlights(highlightNodes); 898 enableTapHighlights(highlightNodes);
891 for (size_t i = 0; i < m_linkHighlights.size(); ++i) 899 for (size_t i = 0; i < m_linkHighlights.size(); ++i)
892 m_linkHighlights[i]->startHighlightAnimationIfNeeded(); 900 m_linkHighlights[i]->startHighlightAnimationIfNeeded();
893 eventResult = WebInputEventResult::HandledSystem; 901 eventResult = WebInputEventResult::HandledSystem;
894 eventCancelled = true; 902 eventCancelled = true;
895 break; 903 break;
896 } 904 }
897 } 905 }
898 } 906 }
899 907
900 eventResult = mainFrameImpl()->frame()->eventHandler().handleGestureEvent( 908 eventResult = mainFrameImpl()->frame()->eventHandler().handleGestureEvent(
901 targetedEvent); 909 targetedEvent);
902 910
903 if (m_pagePopup && pagePopup && 911 if (m_pagePopup && pagePopup &&
904 m_pagePopup->hasSamePopupClient(pagePopup.get())) { 912 m_pagePopup->hasSamePopupClient(pagePopup.get())) {
905 // The tap triggered a page popup that is the same as the one we just cl osed. 913 // The tap triggered a page popup that is the same as the one we just
906 // It needs to be closed. 914 // closed. It needs to be closed.
907 cancelPagePopup(); 915 cancelPagePopup();
908 } 916 }
909 break; 917 break;
910 } 918 }
911 case WebInputEvent::GestureTwoFingerTap: 919 case WebInputEvent::GestureTwoFingerTap:
912 case WebInputEvent::GestureLongPress: 920 case WebInputEvent::GestureLongPress:
913 case WebInputEvent::GestureLongTap: { 921 case WebInputEvent::GestureLongTap: {
914 if (!mainFrameImpl() || !mainFrameImpl()->frameView()) 922 if (!mainFrameImpl() || !mainFrameImpl()->frameView())
915 break; 923 break;
916 924
(...skipping 21 matching lines...) Expand all
938 NOTREACHED(); 946 NOTREACHED();
939 } 947 }
940 m_client->didHandleGestureEvent(event, eventCancelled); 948 m_client->didHandleGestureEvent(event, eventCancelled);
941 return eventResult; 949 return eventResult;
942 } 950 }
943 951
944 WebInputEventResult WebViewImpl::handleSyntheticWheelFromTouchpadPinchEvent( 952 WebInputEventResult WebViewImpl::handleSyntheticWheelFromTouchpadPinchEvent(
945 const WebGestureEvent& pinchEvent) { 953 const WebGestureEvent& pinchEvent) {
946 DCHECK_EQ(pinchEvent.type, WebInputEvent::GesturePinchUpdate); 954 DCHECK_EQ(pinchEvent.type, WebInputEvent::GesturePinchUpdate);
947 955
948 // For pinch gesture events, match typical trackpad behavior on Windows by sen ding fake 956 // For pinch gesture events, match typical trackpad behavior on Windows by
949 // wheel events with the ctrl modifier set when we see trackpad pinch gestures . Ideally 957 // sending fake wheel events with the ctrl modifier set when we see trackpad
950 // we'd someday get a platform 'pinch' event and send that instead. 958 // pinch gestures. Ideally we'd someday get a platform 'pinch' event and
959 // send that instead.
951 WebMouseWheelEvent wheelEvent; 960 WebMouseWheelEvent wheelEvent;
952 wheelEvent.type = WebInputEvent::MouseWheel; 961 wheelEvent.type = WebInputEvent::MouseWheel;
953 wheelEvent.timeStampSeconds = pinchEvent.timeStampSeconds; 962 wheelEvent.timeStampSeconds = pinchEvent.timeStampSeconds;
954 wheelEvent.windowX = wheelEvent.x = pinchEvent.x; 963 wheelEvent.windowX = wheelEvent.x = pinchEvent.x;
955 wheelEvent.windowY = wheelEvent.y = pinchEvent.y; 964 wheelEvent.windowY = wheelEvent.y = pinchEvent.y;
956 wheelEvent.globalX = pinchEvent.globalX; 965 wheelEvent.globalX = pinchEvent.globalX;
957 wheelEvent.globalY = pinchEvent.globalY; 966 wheelEvent.globalY = pinchEvent.globalY;
958 wheelEvent.modifiers = pinchEvent.modifiers | WebInputEvent::ControlKey; 967 wheelEvent.modifiers = pinchEvent.modifiers | WebInputEvent::ControlKey;
959 wheelEvent.deltaX = 0; 968 wheelEvent.deltaX = 0;
960 969
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
1128 } 1137 }
1129 1138
1130 if (!focusedFrame || !focusedFrame->isLocalFrame()) 1139 if (!focusedFrame || !focusedFrame->isLocalFrame())
1131 return WebInputEventResult::NotHandled; 1140 return WebInputEventResult::NotHandled;
1132 1141
1133 LocalFrame* frame = toLocalFrame(focusedFrame); 1142 LocalFrame* frame = toLocalFrame(focusedFrame);
1134 1143
1135 WebInputEventResult result = frame->eventHandler().keyEvent(event); 1144 WebInputEventResult result = frame->eventHandler().keyEvent(event);
1136 if (result != WebInputEventResult::NotHandled) { 1145 if (result != WebInputEventResult::NotHandled) {
1137 if (WebInputEvent::RawKeyDown == event.type) { 1146 if (WebInputEvent::RawKeyDown == event.type) {
1138 // Suppress the next keypress event unless the focused node is a plugin no de. 1147 // Suppress the next keypress event unless the focused node is a plugin
1139 // (Flash needs these keypress events to handle non-US keyboards.) 1148 // node. (Flash needs these keypress events to handle non-US keyboards.)
1140 Element* element = focusedElement(); 1149 Element* element = focusedElement();
1141 if (element && element->layoutObject() && 1150 if (element && element->layoutObject() &&
1142 element->layoutObject()->isEmbeddedObject()) { 1151 element->layoutObject()->isEmbeddedObject()) {
1143 if (event.windowsKeyCode == VKEY_TAB) { 1152 if (event.windowsKeyCode == VKEY_TAB) {
1144 // If the plugin supports keyboard focus then we should not send a tab keypress event. 1153 // If the plugin supports keyboard focus then we should not send a tab
1154 // keypress event.
1145 Widget* widget = toLayoutPart(element->layoutObject())->widget(); 1155 Widget* widget = toLayoutPart(element->layoutObject())->widget();
1146 if (widget && widget->isPluginContainer()) { 1156 if (widget && widget->isPluginContainer()) {
1147 WebPluginContainerImpl* plugin = toWebPluginContainerImpl(widget); 1157 WebPluginContainerImpl* plugin = toWebPluginContainerImpl(widget);
1148 if (plugin && plugin->supportsKeyboardFocus()) 1158 if (plugin && plugin->supportsKeyboardFocus())
1149 m_suppressNextKeypressEvent = true; 1159 m_suppressNextKeypressEvent = true;
1150 } 1160 }
1151 } 1161 }
1152 } else { 1162 } else {
1153 m_suppressNextKeypressEvent = true; 1163 m_suppressNextKeypressEvent = true;
1154 } 1164 }
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
1251 HitTestResult result = 1261 HitTestResult result =
1252 mainFrameImpl()->frame()->eventHandler().hitTestResultAtPoint(point, 1262 mainFrameImpl()->frame()->eventHandler().hitTestResultAtPoint(point,
1253 hitType); 1263 hitType);
1254 result.setToShadowHostIfInUserAgentShadowRoot(); 1264 result.setToShadowHostIfInUserAgentShadowRoot();
1255 1265
1256 Node* node = result.innerNodeOrImageMapImage(); 1266 Node* node = result.innerNodeOrImageMapImage();
1257 if (!node) 1267 if (!node)
1258 return WebRect(); 1268 return WebRect();
1259 1269
1260 // Find the block type node based on the hit node. 1270 // Find the block type node based on the hit node.
1261 // FIXME: This wants to walk flat tree with LayoutTreeBuilderTraversal::parent (). 1271 // FIXME: This wants to walk flat tree with
1272 // LayoutTreeBuilderTraversal::parent().
1262 while (node && (!node->layoutObject() || node->layoutObject()->isInline())) 1273 while (node && (!node->layoutObject() || node->layoutObject()->isInline()))
1263 node = LayoutTreeBuilderTraversal::parent(*node); 1274 node = LayoutTreeBuilderTraversal::parent(*node);
1264 1275
1265 // Return the bounding box in the root frame's coordinate space. 1276 // Return the bounding box in the root frame's coordinate space.
1266 if (node) { 1277 if (node) {
1267 IntRect pointInRootFrame = node->Node::pixelSnappedBoundingBox(); 1278 IntRect pointInRootFrame = node->Node::pixelSnappedBoundingBox();
1268 LocalFrame* frame = node->document().frame(); 1279 LocalFrame* frame = node->document().frame();
1269 return frame->view()->contentsToRootFrame(pointInRootFrame); 1280 return frame->view()->contentsToRootFrame(pointInRootFrame);
1270 } 1281 }
1271 return WebRect(); 1282 return WebRect();
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
1434 1445
1435 Node* cursorDefiningAncestor = findCursorDefiningAncestor( 1446 Node* cursorDefiningAncestor = findCursorDefiningAncestor(
1436 bestTouchNode, m_page->deprecatedLocalMainFrame()); 1447 bestTouchNode, m_page->deprecatedLocalMainFrame());
1437 // We show a highlight on tap only when the current node shows a hand cursor 1448 // We show a highlight on tap only when the current node shows a hand cursor
1438 if (!cursorDefiningAncestor || 1449 if (!cursorDefiningAncestor ||
1439 !showsHandCursor(cursorDefiningAncestor, 1450 !showsHandCursor(cursorDefiningAncestor,
1440 m_page->deprecatedLocalMainFrame())) { 1451 m_page->deprecatedLocalMainFrame())) {
1441 return nullptr; 1452 return nullptr;
1442 } 1453 }
1443 1454
1444 // We should pick the largest enclosing node with hand cursor set. We do this by first jumping 1455 // We should pick the largest enclosing node with hand cursor set. We do this
1445 // up to cursorDefiningAncestor (which is already known to have hand cursor se t). Then we locate 1456 // by first jumping up to cursorDefiningAncestor (which is already known to
1446 // the next cursor-defining ancestor up in the the tree and repeat the jumps a s long as the node 1457 // have hand cursor set). Then we locate the next cursor-defining ancestor up
1447 // has hand cursor set. 1458 // in the the tree and repeat the jumps as long as the node has hand cursor
1459 // set.
1448 do { 1460 do {
1449 bestTouchNode = cursorDefiningAncestor; 1461 bestTouchNode = cursorDefiningAncestor;
1450 cursorDefiningAncestor = findCursorDefiningAncestor( 1462 cursorDefiningAncestor = findCursorDefiningAncestor(
1451 LayoutTreeBuilderTraversal::parent(*bestTouchNode), 1463 LayoutTreeBuilderTraversal::parent(*bestTouchNode),
1452 m_page->deprecatedLocalMainFrame()); 1464 m_page->deprecatedLocalMainFrame());
1453 } while (cursorDefiningAncestor && 1465 } while (cursorDefiningAncestor &&
1454 showsHandCursor(cursorDefiningAncestor, 1466 showsHandCursor(cursorDefiningAncestor,
1455 m_page->deprecatedLocalMainFrame())); 1467 m_page->deprecatedLocalMainFrame()));
1456 1468
1457 return bestTouchNode; 1469 return bestTouchNode;
(...skipping 18 matching lines...) Expand all
1476 // don't get a new target to highlight. 1488 // don't get a new target to highlight.
1477 m_linkHighlights.clear(); 1489 m_linkHighlights.clear();
1478 1490
1479 for (size_t i = 0; i < highlightNodes.size(); ++i) { 1491 for (size_t i = 0; i < highlightNodes.size(); ++i) {
1480 Node* node = highlightNodes[i]; 1492 Node* node = highlightNodes[i];
1481 1493
1482 if (!node || !node->layoutObject()) 1494 if (!node || !node->layoutObject())
1483 continue; 1495 continue;
1484 1496
1485 Color highlightColor = node->layoutObject()->style()->tapHighlightColor(); 1497 Color highlightColor = node->layoutObject()->style()->tapHighlightColor();
1486 // Safari documentation for -webkit-tap-highlight-color says if the specifie d color has 0 alpha, 1498 // Safari documentation for -webkit-tap-highlight-color says if the
1487 // then tap highlighting is disabled. 1499 // specified color has 0 alpha, then tap highlighting is disabled.
1488 // http://developer.apple.com/library/safari/#documentation/appleapplication s/reference/safaricssref/articles/standardcssproperties.html 1500 // http://developer.apple.com/library/safari/#documentation/appleapplication s/reference/safaricssref/articles/standardcssproperties.html
1489 if (!highlightColor.alpha()) 1501 if (!highlightColor.alpha())
1490 continue; 1502 continue;
1491 1503
1492 m_linkHighlights.append(LinkHighlightImpl::create(node, this)); 1504 m_linkHighlights.append(LinkHighlightImpl::create(node, this));
1493 } 1505 }
1494 1506
1495 updateAllLifecyclePhases(); 1507 updateAllLifecyclePhases();
1496 } 1508 }
1497 1509
(...skipping 25 matching lines...) Expand all
1523 scale = minimumPageScaleFactor(); 1535 scale = minimumPageScaleFactor();
1524 IntPoint targetPosition = 1536 IntPoint targetPosition =
1525 mainFrameImpl()->frameView()->rootFrameToContents(pointInRootFrame); 1537 mainFrameImpl()->frameView()->rootFrameToContents(pointInRootFrame);
1526 isAnimating = startPageScaleAnimation( 1538 isAnimating = startPageScaleAnimation(
1527 targetPosition, true, scale, doubleTapZoomAnimationDurationInSeconds); 1539 targetPosition, true, scale, doubleTapZoomAnimationDurationInSeconds);
1528 } else { 1540 } else {
1529 isAnimating = startPageScaleAnimation( 1541 isAnimating = startPageScaleAnimation(
1530 scroll, false, scale, doubleTapZoomAnimationDurationInSeconds); 1542 scroll, false, scale, doubleTapZoomAnimationDurationInSeconds);
1531 } 1543 }
1532 1544
1533 // TODO(dglazkov): The only reason why we're using isAnimating and not just ch ecking for 1545 // TODO(dglazkov): The only reason why we're using isAnimating and not just
1534 // m_layerTreeView->hasPendingPageScaleAnimation() is because of fake page sca le animation plumbing 1546 // checking for m_layerTreeView->hasPendingPageScaleAnimation() is because of
1535 // for testing, which doesn't actually initiate a page scale animation. 1547 // fake page scale animation plumbing for testing, which doesn't actually
1548 // initiate a page scale animation.
1536 if (isAnimating) { 1549 if (isAnimating) {
1537 m_doubleTapZoomPageScaleFactor = scale; 1550 m_doubleTapZoomPageScaleFactor = scale;
1538 m_doubleTapZoomPending = true; 1551 m_doubleTapZoomPending = true;
1539 } 1552 }
1540 } 1553 }
1541 1554
1542 void WebViewImpl::zoomToFindInPageRect(const WebRect& rectInRootFrame) { 1555 void WebViewImpl::zoomToFindInPageRect(const WebRect& rectInRootFrame) {
1543 if (!mainFrameImpl()) 1556 if (!mainFrameImpl())
1544 return; 1557 return;
1545 1558
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1583 multipleTargetsZoomAnimationDurationInSeconds); 1596 multipleTargetsZoomAnimationDurationInSeconds);
1584 return true; 1597 return true;
1585 } 1598 }
1586 1599
1587 void WebViewImpl::hasTouchEventHandlers(bool hasTouchHandlers) { 1600 void WebViewImpl::hasTouchEventHandlers(bool hasTouchHandlers) {
1588 if (m_client) 1601 if (m_client)
1589 m_client->hasTouchEventHandlers(hasTouchHandlers); 1602 m_client->hasTouchEventHandlers(hasTouchHandlers);
1590 } 1603 }
1591 1604
1592 bool WebViewImpl::hasTouchEventHandlersAt(const WebPoint& point) { 1605 bool WebViewImpl::hasTouchEventHandlersAt(const WebPoint& point) {
1593 // FIXME: Implement this. Note that the point must be divided by pageScaleFact or. 1606 // FIXME: Implement this. Note that the point must be divided by
1607 // pageScaleFactor.
1594 return true; 1608 return true;
1595 } 1609 }
1596 1610
1597 #if !OS(MACOSX) 1611 #if !OS(MACOSX)
1598 // Mac has no way to open a context menu based on a keyboard event. 1612 // Mac has no way to open a context menu based on a keyboard event.
1599 WebInputEventResult WebViewImpl::sendContextMenuEvent( 1613 WebInputEventResult WebViewImpl::sendContextMenuEvent(
1600 const WebKeyboardEvent& event) { 1614 const WebKeyboardEvent& event) {
1601 // The contextMenuController() holds onto the last context menu that was 1615 // The contextMenuController() holds onto the last context menu that was
1602 // popped up on the page until a new one is created. We need to clear 1616 // popped up on the page until a new one is created. We need to clear
1603 // this menu before propagating the event through the DOM so that we can 1617 // this menu before propagating the event through the DOM so that we can
1604 // detect if we create a new menu for this event, since we won't create 1618 // detect if we create a new menu for this event, since we won't create
1605 // a new menu if the DOM swallows the event and the defaultEventHandler does 1619 // a new menu if the DOM swallows the event and the defaultEventHandler does
1606 // not run. 1620 // not run.
1607 page()->contextMenuController().clearContextMenu(); 1621 page()->contextMenuController().clearContextMenu();
1608 1622
1609 { 1623 {
1610 ContextMenuAllowedScope scope; 1624 ContextMenuAllowedScope scope;
1611 Frame* focusedFrame = page()->focusController().focusedOrMainFrame(); 1625 Frame* focusedFrame = page()->focusController().focusedOrMainFrame();
1612 if (!focusedFrame->isLocalFrame()) 1626 if (!focusedFrame->isLocalFrame())
1613 return WebInputEventResult::NotHandled; 1627 return WebInputEventResult::NotHandled;
1614 // Firefox reveal focus based on "keydown" event but not "contextmenu" event , we match FF. 1628 // Firefox reveal focus based on "keydown" event but not "contextmenu"
1629 // event, we match FF.
1615 if (Element* focusedElement = 1630 if (Element* focusedElement =
1616 toLocalFrame(focusedFrame)->document()->focusedElement()) 1631 toLocalFrame(focusedFrame)->document()->focusedElement())
1617 focusedElement->scrollIntoViewIfNeeded(); 1632 focusedElement->scrollIntoViewIfNeeded();
1618 return toLocalFrame(focusedFrame) 1633 return toLocalFrame(focusedFrame)
1619 ->eventHandler() 1634 ->eventHandler()
1620 .sendContextMenuEventForKey(nullptr); 1635 .sendContextMenuEventForKey(nullptr);
1621 } 1636 }
1622 } 1637 }
1623 #endif 1638 #endif
1624 1639
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
1947 } 1962 }
1948 1963
1949 void WebViewImpl::resizeViewWhileAnchored(FrameView* view, 1964 void WebViewImpl::resizeViewWhileAnchored(FrameView* view,
1950 float topControlsHeight, 1965 float topControlsHeight,
1951 bool topControlsShrinkLayout) { 1966 bool topControlsShrinkLayout) {
1952 DCHECK(mainFrameImpl()); 1967 DCHECK(mainFrameImpl());
1953 1968
1954 topControls().setHeight(topControlsHeight, topControlsShrinkLayout); 1969 topControls().setHeight(topControlsHeight, topControlsShrinkLayout);
1955 1970
1956 { 1971 {
1957 // Avoids unnecessary invalidations while various bits of state in TextAutos izer are updated. 1972 // Avoids unnecessary invalidations while various bits of state in
1973 // TextAutosizer are updated.
1958 TextAutosizer::DeferUpdatePageInfo deferUpdatePageInfo(page()); 1974 TextAutosizer::DeferUpdatePageInfo deferUpdatePageInfo(page());
1959 performResize(); 1975 performResize();
1960 } 1976 }
1961 1977
1962 m_fullscreenController->updateSize(); 1978 m_fullscreenController->updateSize();
1963 1979
1964 // Update lifecyle phases immediately to recalculate the minimum scale limit f or rotation anchoring, 1980 // Update lifecyle phases immediately to recalculate the minimum scale limit
1965 // and to make sure that no lifecycle states are stale if this WebView is embe dded in another one. 1981 // for rotation anchoring, and to make sure that no lifecycle states are
1982 // stale if this WebView is embedded in another one.
1966 updateAllLifecyclePhases(); 1983 updateAllLifecyclePhases();
1967 } 1984 }
1968 1985
1969 void WebViewImpl::resizeWithTopControls(const WebSize& newSize, 1986 void WebViewImpl::resizeWithTopControls(const WebSize& newSize,
1970 float topControlsHeight, 1987 float topControlsHeight,
1971 bool topControlsShrinkLayout) { 1988 bool topControlsShrinkLayout) {
1972 if (m_shouldAutoResize) 1989 if (m_shouldAutoResize)
1973 return; 1990 return;
1974 1991
1975 if (m_size == newSize && topControls().height() == topControlsHeight && 1992 if (m_size == newSize && topControls().height() == topControlsHeight &&
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
2089 2106
2090 if (InspectorOverlay* overlay = inspectorOverlay()) { 2107 if (InspectorOverlay* overlay = inspectorOverlay()) {
2091 overlay->updateAllLifecyclePhases(); 2108 overlay->updateAllLifecyclePhases();
2092 // TODO(chrishtr): integrate paint into the overlay's lifecycle. 2109 // TODO(chrishtr): integrate paint into the overlay's lifecycle.
2093 if (overlay->pageOverlay() && overlay->pageOverlay()->graphicsLayer()) 2110 if (overlay->pageOverlay() && overlay->pageOverlay()->graphicsLayer())
2094 overlay->pageOverlay()->graphicsLayer()->paint(nullptr); 2111 overlay->pageOverlay()->graphicsLayer()->paint(nullptr);
2095 } 2112 }
2096 if (m_pageColorOverlay) 2113 if (m_pageColorOverlay)
2097 m_pageColorOverlay->graphicsLayer()->paint(nullptr); 2114 m_pageColorOverlay->graphicsLayer()->paint(nullptr);
2098 2115
2099 // TODO(chrishtr): link highlights don't currently paint themselves, it's stil l driven by cc. 2116 // TODO(chrishtr): link highlights don't currently paint themselves, it's
2100 // Fix this. 2117 // still driven by cc. Fix this.
2101 for (size_t i = 0; i < m_linkHighlights.size(); ++i) 2118 for (size_t i = 0; i < m_linkHighlights.size(); ++i)
2102 m_linkHighlights[i]->updateGeometry(); 2119 m_linkHighlights[i]->updateGeometry();
2103 2120
2104 if (FrameView* view = mainFrameImpl()->frameView()) { 2121 if (FrameView* view = mainFrameImpl()->frameView()) {
2105 LocalFrame* frame = mainFrameImpl()->frame(); 2122 LocalFrame* frame = mainFrameImpl()->frame();
2106 WebWidgetClient* client = 2123 WebWidgetClient* client =
2107 WebLocalFrameImpl::fromFrame(frame)->frameWidget()->client(); 2124 WebLocalFrameImpl::fromFrame(frame)->frameWidget()->client();
2108 2125
2109 if (m_shouldDispatchFirstVisuallyNonEmptyLayout && 2126 if (m_shouldDispatchFirstVisuallyNonEmptyLayout &&
2110 view->isVisuallyNonEmpty()) { 2127 view->isVisuallyNonEmpty()) {
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
2228 return WebInputEventResult::HandledSuppressed; 2245 return WebInputEventResult::HandledSuppressed;
2229 2246
2230 if (m_devToolsEmulator->handleInputEvent(inputEvent)) 2247 if (m_devToolsEmulator->handleInputEvent(inputEvent))
2231 return WebInputEventResult::HandledSuppressed; 2248 return WebInputEventResult::HandledSuppressed;
2232 2249
2233 if (InspectorOverlay* overlay = inspectorOverlay()) { 2250 if (InspectorOverlay* overlay = inspectorOverlay()) {
2234 if (overlay->handleInputEvent(inputEvent)) 2251 if (overlay->handleInputEvent(inputEvent))
2235 return WebInputEventResult::HandledSuppressed; 2252 return WebInputEventResult::HandledSuppressed;
2236 } 2253 }
2237 2254
2238 // Report the event to be NOT processed by WebKit, so that the browser can han dle it appropriately. 2255 // Report the event to be NOT processed by WebKit, so that the browser can
2256 // handle it appropriately.
2239 if (m_ignoreInputEvents) 2257 if (m_ignoreInputEvents)
2240 return WebInputEventResult::NotHandled; 2258 return WebInputEventResult::NotHandled;
2241 2259
2242 AutoReset<const WebInputEvent*> currentEventChange(&m_currentInputEvent, 2260 AutoReset<const WebInputEvent*> currentEventChange(&m_currentInputEvent,
2243 &inputEvent); 2261 &inputEvent);
2244 UIEventWithKeyState::clearNewTabModifierSetFromIsolatedWorld(); 2262 UIEventWithKeyState::clearNewTabModifierSetFromIsolatedWorld();
2245 2263
2246 bool isPointerLocked = false; 2264 bool isPointerLocked = false;
2247 if (WebFrameWidgetBase* widget = mainFrameImpl()->frameWidget()) { 2265 if (WebFrameWidgetBase* widget = mainFrameImpl()->frameWidget()) {
2248 if (WebWidgetClient* client = widget->client()) 2266 if (WebWidgetClient* client = widget->client())
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
2381 LocalFrame* focusedFrame = focusedLocalFrameInWidget(); 2399 LocalFrame* focusedFrame = focusedLocalFrameInWidget();
2382 if (focusedFrame) { 2400 if (focusedFrame) {
2383 // Finish an ongoing composition to delete the composition node. 2401 // Finish an ongoing composition to delete the composition node.
2384 if (focusedFrame->inputMethodController().hasComposition()) { 2402 if (focusedFrame->inputMethodController().hasComposition()) {
2385 WebAutofillClient* autofillClient = 2403 WebAutofillClient* autofillClient =
2386 WebLocalFrameImpl::fromFrame(focusedFrame)->autofillClient(); 2404 WebLocalFrameImpl::fromFrame(focusedFrame)->autofillClient();
2387 2405
2388 if (autofillClient) 2406 if (autofillClient)
2389 autofillClient->setIgnoreTextChanges(true); 2407 autofillClient->setIgnoreTextChanges(true);
2390 2408
2391 // TODO(xiaochengh): The use of updateStyleAndLayoutIgnorePendingStylesh eets 2409 // TODO(xiaochengh): The use of
2410 // updateStyleAndLayoutIgnorePendingStylesheets
2392 // needs to be audited. See http://crbug.com/590369 for more details. 2411 // needs to be audited. See http://crbug.com/590369 for more details.
2393 focusedFrame->document() 2412 focusedFrame->document()
2394 ->updateStyleAndLayoutIgnorePendingStylesheets(); 2413 ->updateStyleAndLayoutIgnorePendingStylesheets();
2395 2414
2396 focusedFrame->inputMethodController().finishComposingText( 2415 focusedFrame->inputMethodController().finishComposingText(
2397 InputMethodController::KeepSelection); 2416 InputMethodController::KeepSelection);
2398 2417
2399 if (autofillClient) 2418 if (autofillClient)
2400 autofillClient->setIgnoreTextChanges(false); 2419 autofillClient->setIgnoreTextChanges(false);
2401 } 2420 }
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
2540 info.inputMode = inputModeOfFocusedElement(); 2559 info.inputMode = inputModeOfFocusedElement();
2541 2560
2542 info.type = textInputType(); 2561 info.type = textInputType();
2543 info.flags = textInputFlags(); 2562 info.flags = textInputFlags();
2544 if (info.type == WebTextInputTypeNone) 2563 if (info.type == WebTextInputTypeNone)
2545 return info; 2564 return info;
2546 2565
2547 if (!focused->editor().canEdit()) 2566 if (!focused->editor().canEdit())
2548 return info; 2567 return info;
2549 2568
2550 // TODO(dglazkov): The use of updateStyleAndLayoutIgnorePendingStylesheets nee ds to be audited. 2569 // TODO(dglazkov): The use of updateStyleAndLayoutIgnorePendingStylesheets
2551 // see http://crbug.com/590369 for more details. 2570 // needs to be audited. see http://crbug.com/590369 for more details.
2552 focused->document()->updateStyleAndLayoutIgnorePendingStylesheets(); 2571 focused->document()->updateStyleAndLayoutIgnorePendingStylesheets();
2553 2572
2554 DocumentLifecycle::DisallowTransitionScope disallowTransition( 2573 DocumentLifecycle::DisallowTransitionScope disallowTransition(
2555 focused->document()->lifecycle()); 2574 focused->document()->lifecycle());
2556 2575
2557 // Emits an object replacement character for each replaced element so that 2576 // Emits an object replacement character for each replaced element so that
2558 // it is exposed to IME and thus could be deleted by IME on android. 2577 // it is exposed to IME and thus could be deleted by IME on android.
2559 info.value = plainText(EphemeralRange::rangeOfContents(*element), 2578 info.value = plainText(EphemeralRange::rangeOfContents(*element),
2560 TextIteratorEmitsObjectReplacementCharacter); 2579 TextIteratorEmitsObjectReplacementCharacter);
2561 2580
(...skipping 27 matching lines...) Expand all
2589 WebTextInputType WebViewImpl::textInputType() { 2608 WebTextInputType WebViewImpl::textInputType() {
2590 LocalFrame* focusedFrame = focusedLocalFrameInWidget(); 2609 LocalFrame* focusedFrame = focusedLocalFrameInWidget();
2591 if (!focusedFrame) 2610 if (!focusedFrame)
2592 return WebTextInputTypeNone; 2611 return WebTextInputTypeNone;
2593 2612
2594 if (!focusedFrame->selection().isAvailable()) { 2613 if (!focusedFrame->selection().isAvailable()) {
2595 // "mouse-capture-inside-shadow.html" reaches here. 2614 // "mouse-capture-inside-shadow.html" reaches here.
2596 return WebTextInputTypeNone; 2615 return WebTextInputTypeNone;
2597 } 2616 }
2598 2617
2599 // It's important to preserve the equivalence of textInputInfo().type and text InputType(), 2618 // It's important to preserve the equivalence of textInputInfo().type and
2600 // so perform the same rootEditableElement() existence check here for consiste ncy. 2619 // textInputType(), so perform the same rootEditableElement() existence check
2620 // here for consistency.
2601 if (!focusedFrame->selection().selection().rootEditableElement()) 2621 if (!focusedFrame->selection().selection().rootEditableElement())
2602 return WebTextInputTypeNone; 2622 return WebTextInputTypeNone;
2603 2623
2604 Document* document = focusedFrame->document(); 2624 Document* document = focusedFrame->document();
2605 if (!document) 2625 if (!document)
2606 return WebTextInputTypeNone; 2626 return WebTextInputTypeNone;
2607 2627
2608 Element* element = document->focusedElement(); 2628 Element* element = document->focusedElement();
2609 if (!element) 2629 if (!element)
2610 return WebTextInputTypeNone; 2630 return WebTextInputTypeNone;
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
2989 3009
2990 return m_page->deprecatedLocalMainFrame()->document()->encodingName(); 3010 return m_page->deprecatedLocalMainFrame()->document()->encodingName();
2991 } 3011 }
2992 3012
2993 WebFrame* WebViewImpl::mainFrame() { 3013 WebFrame* WebViewImpl::mainFrame() {
2994 return WebFrame::fromFrame(m_page ? m_page->mainFrame() : nullptr); 3014 return WebFrame::fromFrame(m_page ? m_page->mainFrame() : nullptr);
2995 } 3015 }
2996 3016
2997 WebFrame* WebViewImpl::findFrameByName(const WebString& name, 3017 WebFrame* WebViewImpl::findFrameByName(const WebString& name,
2998 WebFrame* relativeToFrame) { 3018 WebFrame* relativeToFrame) {
2999 // FIXME: Either this should only deal with WebLocalFrames or it should move t o WebFrame. 3019 // FIXME: Either this should only deal with WebLocalFrames or it should move
3020 // to WebFrame.
3000 if (!relativeToFrame) 3021 if (!relativeToFrame)
3001 relativeToFrame = mainFrame(); 3022 relativeToFrame = mainFrame();
3002 Frame* frame = toWebLocalFrameImpl(relativeToFrame)->frame(); 3023 Frame* frame = toWebLocalFrameImpl(relativeToFrame)->frame();
3003 frame = frame->tree().find(name); 3024 frame = frame->tree().find(name);
3004 if (!frame || !frame->isLocalFrame()) 3025 if (!frame || !frame->isLocalFrame())
3005 return nullptr; 3026 return nullptr;
3006 return WebLocalFrameImpl::fromFrame(toLocalFrame(frame)); 3027 return WebLocalFrameImpl::fromFrame(toLocalFrame(frame));
3007 } 3028 }
3008 3029
3009 WebLocalFrame* WebViewImpl::focusedFrame() { 3030 WebLocalFrame* WebViewImpl::focusedFrame() {
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
3110 if (!isElementEditable(element)) 3131 if (!isElementEditable(element))
3111 return false; 3132 return false;
3112 3133
3113 element->document().updateStyleAndLayoutIgnorePendingStylesheets(); 3134 element->document().updateStyleAndLayoutIgnorePendingStylesheets();
3114 3135
3115 bool zoomInToLegibleScale = 3136 bool zoomInToLegibleScale =
3116 m_webSettings->autoZoomFocusedNodeToLegibleScale() && 3137 m_webSettings->autoZoomFocusedNodeToLegibleScale() &&
3117 !page()->frameHost().visualViewport().shouldDisableDesktopWorkarounds(); 3138 !page()->frameHost().visualViewport().shouldDisableDesktopWorkarounds();
3118 3139
3119 if (zoomInToLegibleScale) { 3140 if (zoomInToLegibleScale) {
3120 // When deciding whether to zoom in on a focused text box, we should decide not to 3141 // When deciding whether to zoom in on a focused text box, we should decide
3121 // zoom in if the user won't be able to zoom out. e.g if the textbox is with in a 3142 // not to zoom in if the user won't be able to zoom out. e.g if the textbox
3122 // touch-action: none container the user can't zoom back out. 3143 // is within a touch-action: none container the user can't zoom back out.
3123 TouchAction action = TouchActionUtil::computeEffectiveTouchAction(*element); 3144 TouchAction action = TouchActionUtil::computeEffectiveTouchAction(*element);
3124 if (!(action & TouchActionPinchZoom)) 3145 if (!(action & TouchActionPinchZoom))
3125 zoomInToLegibleScale = false; 3146 zoomInToLegibleScale = false;
3126 } 3147 }
3127 3148
3128 float scale; 3149 float scale;
3129 IntPoint scroll; 3150 IntPoint scroll;
3130 bool needAnimation; 3151 bool needAnimation;
3131 computeScaleAndScrollForFocusedNode(element, zoomInToLegibleScale, scale, 3152 computeScaleAndScrollForFocusedNode(element, zoomInToLegibleScale, scale,
3132 scroll, needAnimation); 3153 scroll, needAnimation);
(...skipping 13 matching lines...) Expand all
3146 void WebViewImpl::computeScaleAndScrollForFocusedNode(Node* focusedNode, 3167 void WebViewImpl::computeScaleAndScrollForFocusedNode(Node* focusedNode,
3147 bool zoomInToLegibleScale, 3168 bool zoomInToLegibleScale,
3148 float& newScale, 3169 float& newScale,
3149 IntPoint& newScroll, 3170 IntPoint& newScroll,
3150 bool& needAnimation) { 3171 bool& needAnimation) {
3151 VisualViewport& visualViewport = page()->frameHost().visualViewport(); 3172 VisualViewport& visualViewport = page()->frameHost().visualViewport();
3152 3173
3153 WebRect caretInViewport, unusedEnd; 3174 WebRect caretInViewport, unusedEnd;
3154 selectionBounds(caretInViewport, unusedEnd); 3175 selectionBounds(caretInViewport, unusedEnd);
3155 3176
3156 // 'caretInDocument' is rect encompassing the blinking cursor relative to the root document. 3177 // 'caretInDocument' is rect encompassing the blinking cursor relative to the
3178 // root document.
3157 IntRect caretInDocument = mainFrameImpl()->frameView()->frameToContents( 3179 IntRect caretInDocument = mainFrameImpl()->frameView()->frameToContents(
3158 visualViewport.viewportToRootFrame(caretInViewport)); 3180 visualViewport.viewportToRootFrame(caretInViewport));
3159 IntRect textboxRectInDocument = mainFrameImpl()->frameView()->frameToContents( 3181 IntRect textboxRectInDocument = mainFrameImpl()->frameView()->frameToContents(
3160 focusedNode->document().view()->contentsToRootFrame( 3182 focusedNode->document().view()->contentsToRootFrame(
3161 pixelSnappedIntRect(focusedNode->Node::boundingBox()))); 3183 pixelSnappedIntRect(focusedNode->Node::boundingBox())));
3162 3184
3163 if (!zoomInToLegibleScale) { 3185 if (!zoomInToLegibleScale) {
3164 newScale = pageScaleFactor(); 3186 newScale = pageScaleFactor();
3165 } else { 3187 } else {
3166 // Pick a scale which is reasonably readable. This is the scale at which 3188 // Pick a scale which is reasonably readable. This is the scale at which
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
3273 m_zoomLevel = m_maximumZoomLevel; 3295 m_zoomLevel = m_maximumZoomLevel;
3274 else 3296 else
3275 m_zoomLevel = zoomLevel; 3297 m_zoomLevel = zoomLevel;
3276 3298
3277 float zoomFactor = 3299 float zoomFactor =
3278 m_zoomFactorOverride 3300 m_zoomFactorOverride
3279 ? m_zoomFactorOverride 3301 ? m_zoomFactorOverride
3280 : static_cast<float>(zoomLevelToZoomFactor(m_zoomLevel)); 3302 : static_cast<float>(zoomLevelToZoomFactor(m_zoomLevel));
3281 if (m_zoomFactorForDeviceScaleFactor) { 3303 if (m_zoomFactorForDeviceScaleFactor) {
3282 if (m_compositorDeviceScaleFactorOverride) { 3304 if (m_compositorDeviceScaleFactorOverride) {
3283 // Adjust the page's DSF so that DevicePixelRatio becomes m_zoomFactorForD eviceScaleFactor. 3305 // Adjust the page's DSF so that DevicePixelRatio becomes
3306 // m_zoomFactorForDeviceScaleFactor.
3284 page()->setDeviceScaleFactor(m_zoomFactorForDeviceScaleFactor / 3307 page()->setDeviceScaleFactor(m_zoomFactorForDeviceScaleFactor /
3285 m_compositorDeviceScaleFactorOverride); 3308 m_compositorDeviceScaleFactorOverride);
3286 zoomFactor *= m_compositorDeviceScaleFactorOverride; 3309 zoomFactor *= m_compositorDeviceScaleFactorOverride;
3287 } else { 3310 } else {
3288 page()->setDeviceScaleFactor(1.f); 3311 page()->setDeviceScaleFactor(1.f);
3289 zoomFactor *= m_zoomFactorForDeviceScaleFactor; 3312 zoomFactor *= m_zoomFactorForDeviceScaleFactor;
3290 } 3313 }
3291 } 3314 }
3292 propagateZoomFactorToLocalFrameRoots(m_page->mainFrame(), zoomFactor); 3315 propagateZoomFactorToLocalFrameRoots(m_page->mainFrame(), zoomFactor);
3293 3316
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
3502 pageScaleConstraintsSet().finalConstraints().initialScale != -1) { 3525 pageScaleConstraintsSet().finalConstraints().initialScale != -1) {
3503 newPageScaleFactor = 3526 newPageScaleFactor =
3504 pageScaleConstraintsSet().finalConstraints().initialScale; 3527 pageScaleConstraintsSet().finalConstraints().initialScale;
3505 pageScaleConstraintsSet().setNeedsReset(false); 3528 pageScaleConstraintsSet().setNeedsReset(false);
3506 } 3529 }
3507 setPageScaleFactor(newPageScaleFactor); 3530 setPageScaleFactor(newPageScaleFactor);
3508 3531
3509 updateLayerTreeViewport(); 3532 updateLayerTreeViewport();
3510 3533
3511 // Changes to page-scale during layout may require an additional frame. 3534 // Changes to page-scale during layout may require an additional frame.
3512 // We can't update the lifecycle here because we may be in the middle of layou t in the 3535 // We can't update the lifecycle here because we may be in the middle of
3513 // caller of this method. 3536 // layout in the caller of this method.
3514 // TODO(chrishtr): clean all this up. All layout should happen in one lifecycl e run (crbug.com/578239). 3537 // TODO(chrishtr): clean all this up. All layout should happen in one
3538 // lifecycle run (crbug.com/578239).
3515 if (mainFrameImpl()->frameView()->needsLayout()) 3539 if (mainFrameImpl()->frameView()->needsLayout())
3516 mainFrameImpl()->frameWidget()->scheduleAnimation(); 3540 mainFrameImpl()->frameWidget()->scheduleAnimation();
3517 } 3541 }
3518 3542
3519 void WebViewImpl::updatePageDefinedViewportConstraints( 3543 void WebViewImpl::updatePageDefinedViewportConstraints(
3520 const ViewportDescription& description) { 3544 const ViewportDescription& description) {
3521 if (!page() || (!m_size.width && !m_size.height) || 3545 if (!page() || (!m_size.width && !m_size.height) ||
3522 !page()->mainFrame()->isLocalFrame()) 3546 !page()->mainFrame()->isLocalFrame())
3523 return; 3547 return;
3524 3548
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
3892 static_cast<DragOperation>(m_operationsAllowed)); 3916 static_cast<DragOperation>(m_operationsAllowed));
3893 3917
3894 DragSession dragSession; 3918 DragSession dragSession;
3895 if (dragAction == DragEnter) 3919 if (dragAction == DragEnter)
3896 dragSession = m_page->dragController().dragEntered(&dragData); 3920 dragSession = m_page->dragController().dragEntered(&dragData);
3897 else 3921 else
3898 dragSession = m_page->dragController().dragUpdated(&dragData); 3922 dragSession = m_page->dragController().dragUpdated(&dragData);
3899 3923
3900 DragOperation dropEffect = dragSession.operation; 3924 DragOperation dropEffect = dragSession.operation;
3901 3925
3902 // Mask the drop effect operation against the drag source's allowed operations . 3926 // Mask the drop effect operation against the drag source's allowed
3927 // operations.
3903 if (!(dropEffect & dragData.draggingSourceOperationMask())) 3928 if (!(dropEffect & dragData.draggingSourceOperationMask()))
3904 dropEffect = DragOperationNone; 3929 dropEffect = DragOperationNone;
3905 3930
3906 m_dragOperation = static_cast<WebDragOperation>(dropEffect); 3931 m_dragOperation = static_cast<WebDragOperation>(dropEffect);
3907 3932
3908 return m_dragOperation; 3933 return m_dragOperation;
3909 } 3934 }
3910 3935
3911 void WebViewImpl::sendResizeEventAndRepaint() { 3936 void WebViewImpl::sendResizeEventAndRepaint() {
3912 // FIXME: This is wrong. The FrameView is responsible sending a resizeEvent 3937 // FIXME: This is wrong. The FrameView is responsible sending a resizeEvent
(...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after
4470 m_layerTreeView = m_client->widgetClient()->layerTreeView(); 4495 m_layerTreeView = m_client->widgetClient()->layerTreeView();
4471 } 4496 }
4472 4497
4473 if (WebDevToolsAgentImpl* devTools = mainFrameDevToolsAgentImpl()) 4498 if (WebDevToolsAgentImpl* devTools = mainFrameDevToolsAgentImpl())
4474 devTools->layerTreeViewChanged(m_layerTreeView); 4499 devTools->layerTreeViewChanged(m_layerTreeView);
4475 4500
4476 m_page->settings().setAcceleratedCompositingEnabled(m_layerTreeView); 4501 m_page->settings().setAcceleratedCompositingEnabled(m_layerTreeView);
4477 if (m_layerTreeView) 4502 if (m_layerTreeView)
4478 m_page->layerTreeViewInitialized(*m_layerTreeView); 4503 m_page->layerTreeViewInitialized(*m_layerTreeView);
4479 4504
4480 // FIXME: only unittests, click to play, Android printing, and printing (for h eaders and footers) 4505 // FIXME: only unittests, click to play, Android printing, and printing (for
4481 // make this assert necessary. We should make them not hit this code and then delete allowsBrokenNullLayerTreeView. 4506 // headers and footers) make this assert necessary. We should make them not
4507 // hit this code and then delete allowsBrokenNullLayerTreeView.
4482 DCHECK(m_layerTreeView || !m_client || 4508 DCHECK(m_layerTreeView || !m_client ||
4483 m_client->widgetClient()->allowsBrokenNullLayerTreeView()); 4509 m_client->widgetClient()->allowsBrokenNullLayerTreeView());
4484 4510
4485 if (Platform::current()->isThreadedAnimationEnabled() && m_layerTreeView) { 4511 if (Platform::current()->isThreadedAnimationEnabled() && m_layerTreeView) {
4486 m_linkHighlightsTimeline = CompositorAnimationTimeline::create(); 4512 m_linkHighlightsTimeline = CompositorAnimationTimeline::create();
4487 attachCompositorAnimationTimeline(m_linkHighlightsTimeline.get()); 4513 attachCompositorAnimationTimeline(m_linkHighlightsTimeline.get());
4488 } 4514 }
4489 } 4515 }
4490 4516
4491 void WebViewImpl::applyViewportDeltas( 4517 void WebViewImpl::applyViewportDeltas(
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
4553 void WebViewImpl::updateRootLayerTransform() { 4579 void WebViewImpl::updateRootLayerTransform() {
4554 if (m_visualViewportContainerLayer) 4580 if (m_visualViewportContainerLayer)
4555 m_visualViewportContainerLayer->setTransform(m_rootLayerTransform); 4581 m_visualViewportContainerLayer->setTransform(m_rootLayerTransform);
4556 } 4582 }
4557 4583
4558 bool WebViewImpl::detectContentOnTouch( 4584 bool WebViewImpl::detectContentOnTouch(
4559 const GestureEventWithHitTestResults& targetedEvent) { 4585 const GestureEventWithHitTestResults& targetedEvent) {
4560 if (!m_page->mainFrame()->isLocalFrame()) 4586 if (!m_page->mainFrame()->isLocalFrame())
4561 return false; 4587 return false;
4562 4588
4563 // Need a local copy of the hit test as setToShadowHostIfInUserAgentShadowRoot () will modify it. 4589 // Need a local copy of the hit test as
4590 // setToShadowHostIfInUserAgentShadowRoot() will modify it.
4564 HitTestResult touchHit = targetedEvent.hitTestResult(); 4591 HitTestResult touchHit = targetedEvent.hitTestResult();
4565 touchHit.setToShadowHostIfInUserAgentShadowRoot(); 4592 touchHit.setToShadowHostIfInUserAgentShadowRoot();
4566 4593
4567 if (touchHit.isContentEditable()) 4594 if (touchHit.isContentEditable())
4568 return false; 4595 return false;
4569 4596
4570 Node* node = touchHit.innerNode(); 4597 Node* node = touchHit.innerNode();
4571 if (!node || !node->isTextNode()) 4598 if (!node || !node->isTextNode())
4572 return false; 4599 return false;
4573 4600
4574 // Ignore when tapping on links or nodes listening to click events, unless the click event is on the 4601 // Ignore when tapping on links or nodes listening to click events, unless
4575 // body element, in which case it's unlikely that the original node itself was intended to be clickable. 4602 // the click event is on the body element, in which case it's unlikely that
4603 // the original node itself was intended to be clickable.
4576 for (; node && !isHTMLBodyElement(*node); 4604 for (; node && !isHTMLBodyElement(*node);
4577 node = LayoutTreeBuilderTraversal::parent(*node)) { 4605 node = LayoutTreeBuilderTraversal::parent(*node)) {
4578 if (node->isLink() || node->willRespondToTouchEvents() || 4606 if (node->isLink() || node->willRespondToTouchEvents() ||
4579 node->willRespondToMouseClickEvents()) 4607 node->willRespondToMouseClickEvents())
4580 return false; 4608 return false;
4581 } 4609 }
4582 4610
4583 WebURL intent = m_client->detectContentIntentAt(touchHit); 4611 WebURL intent = m_client->detectContentIntentAt(touchHit);
4584 if (!intent.isValid()) 4612 if (!intent.isValid())
4585 return false; 4613 return false;
4586 4614
4587 // This code is called directly after hit test code, with no user code running in between, 4615 // This code is called directly after hit test code, with no user code
4588 // thus it is assumed that the frame pointer is non-null. 4616 // running in between, thus it is assumed that the frame pointer is non-null.
4589 bool isMainFrame = node ? node->document().frame()->isMainFrame() : true; 4617 bool isMainFrame = node ? node->document().frame()->isMainFrame() : true;
4590 m_client->scheduleContentIntent(intent, isMainFrame); 4618 m_client->scheduleContentIntent(intent, isMainFrame);
4591 return true; 4619 return true;
4592 } 4620 }
4593 4621
4594 WebViewScheduler* WebViewImpl::scheduler() const { 4622 WebViewScheduler* WebViewImpl::scheduler() const {
4595 return m_scheduler.get(); 4623 return m_scheduler.get();
4596 } 4624 }
4597 4625
4598 void WebViewImpl::setVisibilityState(WebPageVisibilityState visibilityState, 4626 void WebViewImpl::setVisibilityState(WebPageVisibilityState visibilityState,
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
4673 if (m_pageColorOverlay) 4701 if (m_pageColorOverlay)
4674 m_pageColorOverlay->update(); 4702 m_pageColorOverlay->update();
4675 if (InspectorOverlay* overlay = inspectorOverlay()) { 4703 if (InspectorOverlay* overlay = inspectorOverlay()) {
4676 PageOverlay* inspectorPageOverlay = overlay->pageOverlay(); 4704 PageOverlay* inspectorPageOverlay = overlay->pageOverlay();
4677 if (inspectorPageOverlay) 4705 if (inspectorPageOverlay)
4678 inspectorPageOverlay->update(); 4706 inspectorPageOverlay->update();
4679 } 4707 }
4680 } 4708 }
4681 4709
4682 float WebViewImpl::deviceScaleFactor() const { 4710 float WebViewImpl::deviceScaleFactor() const {
4683 // TODO(oshima): Investigate if this should return the ScreenInfo's scale fact or rather than 4711 // TODO(oshima): Investigate if this should return the ScreenInfo's scale
4684 // page's scale factor, which can be 1 in use-zoom-for-dsf mode. 4712 // factor rather than page's scale factor, which can be 1 in use-zoom-for-dsf
4713 // mode.
4685 if (!page()) 4714 if (!page())
4686 return 1; 4715 return 1;
4687 4716
4688 return page()->deviceScaleFactor(); 4717 return page()->deviceScaleFactor();
4689 } 4718 }
4690 4719
4691 LocalFrame* WebViewImpl::focusedLocalFrameInWidget() const { 4720 LocalFrame* WebViewImpl::focusedLocalFrameInWidget() const {
4692 if (!mainFrameImpl()) 4721 if (!mainFrameImpl())
4693 return nullptr; 4722 return nullptr;
4694 4723
4695 LocalFrame* focusedFrame = toLocalFrame(focusedCoreFrame()); 4724 LocalFrame* focusedFrame = toLocalFrame(focusedCoreFrame());
4696 if (focusedFrame->localFrameRoot() != mainFrameImpl()->frame()) 4725 if (focusedFrame->localFrameRoot() != mainFrameImpl()->frame())
4697 return nullptr; 4726 return nullptr;
4698 return focusedFrame; 4727 return focusedFrame;
4699 } 4728 }
4700 4729
4701 LocalFrame* WebViewImpl::focusedLocalFrameAvailableForIme() const { 4730 LocalFrame* WebViewImpl::focusedLocalFrameAvailableForIme() const {
4702 return m_imeAcceptEvents ? focusedLocalFrameInWidget() : nullptr; 4731 return m_imeAcceptEvents ? focusedLocalFrameInWidget() : nullptr;
4703 } 4732 }
4704 4733
4705 } // namespace blink 4734 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/web/WebViewImpl.h ('k') | third_party/WebKit/Source/web/mac/WebSubstringUtil.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698