| Index: third_party/WebKit/Source/web/WebViewImpl.cpp
|
| diff --git a/third_party/WebKit/Source/web/WebViewImpl.cpp b/third_party/WebKit/Source/web/WebViewImpl.cpp
|
| index 5cf6ad4532dc1a9c8ca0fdd30c0913b82f212f3f..86cf7140e5155d913bdaf9d40f4522308fb925e6 100644
|
| --- a/third_party/WebKit/Source/web/WebViewImpl.cpp
|
| +++ b/third_party/WebKit/Source/web/WebViewImpl.cpp
|
| @@ -631,7 +631,7 @@ void WebViewImpl::handleMouseUp(LocalFrame& mainFrame, const WebMouseEvent& even
|
| }
|
| }
|
|
|
| -bool WebViewImpl::handleMouseWheel(LocalFrame& mainFrame, const WebMouseWheelEvent& event)
|
| +WebInputEventResult WebViewImpl::handleMouseWheel(LocalFrame& mainFrame, const WebMouseWheelEvent& event)
|
| {
|
| hidePopups();
|
| return PageWidgetEventHandler::handleMouseWheel(mainFrame, event);
|
| @@ -656,7 +656,7 @@ bool WebViewImpl::scrollBy(const WebFloatSize& delta, const WebFloatSize& veloci
|
| syntheticWheel.modifiers = m_flingModifier;
|
|
|
| if (m_page && m_page->mainFrame() && m_page->mainFrame()->isLocalFrame() && m_page->deprecatedLocalMainFrame()->view())
|
| - return handleMouseWheel(*m_page->deprecatedLocalMainFrame(), syntheticWheel);
|
| + return handleMouseWheel(*m_page->deprecatedLocalMainFrame(), syntheticWheel) != WebInputEventResult::NotHandled;
|
| } else {
|
| WebGestureEvent syntheticGestureEvent;
|
|
|
| @@ -675,17 +675,17 @@ bool WebViewImpl::scrollBy(const WebFloatSize& delta, const WebFloatSize& veloci
|
| syntheticGestureEvent.data.scrollUpdate.inertial = true;
|
|
|
| if (m_page && m_page->mainFrame() && m_page->mainFrame()->isLocalFrame() && m_page->deprecatedLocalMainFrame()->view())
|
| - return handleGestureEvent(syntheticGestureEvent);
|
| + return handleGestureEvent(syntheticGestureEvent) != WebInputEventResult::NotHandled;
|
| }
|
| return false;
|
| }
|
|
|
| -bool WebViewImpl::handleGestureEvent(const WebGestureEvent& event)
|
| +WebInputEventResult WebViewImpl::handleGestureEvent(const WebGestureEvent& event)
|
| {
|
| if (!m_client)
|
| - return false;
|
| + return WebInputEventResult::NotHandled;
|
|
|
| - bool eventSwallowed = false;
|
| + WebInputEventResult eventResult = WebInputEventResult::NotHandled;
|
| bool eventCancelled = false; // for disambiguation
|
|
|
| // Special handling for slow-path fling gestures.
|
| @@ -704,23 +704,24 @@ bool WebViewImpl::handleGestureEvent(const WebGestureEvent& event)
|
| ASSERT(flingCurve);
|
| m_gestureAnimation = WebActiveGestureAnimation::createAtAnimationStart(flingCurve.release(), this);
|
| scheduleAnimation();
|
| - eventSwallowed = true;
|
| + eventResult = WebInputEventResult::HandledSystem;
|
|
|
| // Plugins may need to see GestureFlingStart to balance
|
| // GestureScrollBegin (since the former replaces GestureScrollEnd when
|
| // transitioning to a fling).
|
| PlatformGestureEventBuilder platformEvent(mainFrameImpl()->frameView(), event);
|
| + // TODO(dtapuska): Why isn't the response used?
|
| mainFrameImpl()->frame()->eventHandler().handleGestureScrollEvent(platformEvent);
|
|
|
| m_client->didHandleGestureEvent(event, eventCancelled);
|
| - return eventSwallowed;
|
| + return WebInputEventResult::HandledSystem;
|
| }
|
| case WebInputEvent::GestureFlingCancel:
|
| if (endActiveFlingAnimation())
|
| - eventSwallowed = true;
|
| + eventResult = WebInputEventResult::HandledSuppressed;
|
|
|
| m_client->didHandleGestureEvent(event, eventCancelled);
|
| - return eventSwallowed;
|
| + return eventResult;
|
| default:
|
| break;
|
| }
|
| @@ -737,9 +738,9 @@ bool WebViewImpl::handleGestureEvent(const WebGestureEvent& event)
|
| }
|
| // GestureDoubleTap is currently only used by Android for zooming. For WebCore,
|
| // GestureTap with tap count = 2 is used instead. So we drop GestureDoubleTap here.
|
| - eventSwallowed = true;
|
| + eventResult = WebInputEventResult::HandledSystem;
|
| m_client->didHandleGestureEvent(event, eventCancelled);
|
| - return eventSwallowed;
|
| + return eventResult;
|
| case WebInputEvent::GestureScrollBegin:
|
| m_client->cancelScheduledContentIntents();
|
| case WebInputEvent::GestureScrollEnd:
|
| @@ -749,13 +750,13 @@ bool WebViewImpl::handleGestureEvent(const WebGestureEvent& event)
|
| // the chain, doing a single-frame hit-test per frame. This matches handleWheelEvent.
|
| // Perhaps we could simplify things by rewriting scroll handling to work inner frame
|
| // out, and then unify with other gesture events.
|
| - eventSwallowed = mainFrameImpl()->frame()->eventHandler().handleGestureScrollEvent(platformEvent);
|
| + eventResult = mainFrameImpl()->frame()->eventHandler().handleGestureScrollEvent(platformEvent);
|
| m_client->didHandleGestureEvent(event, eventCancelled);
|
| - return eventSwallowed;
|
| + return eventResult;
|
| case WebInputEvent::GesturePinchBegin:
|
| case WebInputEvent::GesturePinchEnd:
|
| case WebInputEvent::GesturePinchUpdate:
|
| - return false;
|
| + return WebInputEventResult::NotHandled;
|
| default:
|
| break;
|
| }
|
| @@ -792,7 +793,7 @@ bool WebViewImpl::handleGestureEvent(const WebGestureEvent& event)
|
|
|
| m_client->cancelScheduledContentIntents();
|
| if (detectContentOnTouch(targetedEvent)) {
|
| - eventSwallowed = true;
|
| + eventResult = WebInputEventResult::HandledSystem;
|
| break;
|
| }
|
|
|
| @@ -826,14 +827,14 @@ bool WebViewImpl::handleGestureEvent(const WebGestureEvent& event)
|
| enableTapHighlights(highlightNodes);
|
| for (size_t i = 0; i < m_linkHighlights.size(); ++i)
|
| m_linkHighlights[i]->startHighlightAnimationIfNeeded();
|
| - eventSwallowed = true;
|
| + eventResult = WebInputEventResult::HandledSystem;
|
| eventCancelled = true;
|
| break;
|
| }
|
| }
|
| }
|
|
|
| - eventSwallowed = mainFrameImpl()->frame()->eventHandler().handleGestureEvent(targetedEvent);
|
| + eventResult = mainFrameImpl()->frame()->eventHandler().handleGestureEvent(targetedEvent);
|
|
|
| if (m_pagePopup && pagePopup && m_pagePopup->hasSamePopupClient(pagePopup.get())) {
|
| // The tap triggered a page popup that is the same as the one we just closed.
|
| @@ -852,7 +853,7 @@ bool WebViewImpl::handleGestureEvent(const WebGestureEvent& event)
|
| m_page->contextMenuController().clearContextMenu();
|
| {
|
| ContextMenuAllowedScope scope;
|
| - eventSwallowed = mainFrameImpl()->frame()->eventHandler().handleGestureEvent(targetedEvent);
|
| + eventResult = mainFrameImpl()->frame()->eventHandler().handleGestureEvent(targetedEvent);
|
| }
|
|
|
| break;
|
| @@ -862,17 +863,17 @@ bool WebViewImpl::handleGestureEvent(const WebGestureEvent& event)
|
| case WebInputEvent::GestureTapDown:
|
| case WebInputEvent::GestureTapCancel:
|
| case WebInputEvent::GestureTapUnconfirmed: {
|
| - eventSwallowed = mainFrameImpl()->frame()->eventHandler().handleGestureEvent(targetedEvent);
|
| + eventResult = mainFrameImpl()->frame()->eventHandler().handleGestureEvent(targetedEvent);
|
| break;
|
| }
|
| default:
|
| ASSERT_NOT_REACHED();
|
| }
|
| m_client->didHandleGestureEvent(event, eventCancelled);
|
| - return eventSwallowed;
|
| + return eventResult;
|
| }
|
|
|
| -bool WebViewImpl::handleSyntheticWheelFromTouchpadPinchEvent(const WebGestureEvent& pinchEvent)
|
| +WebInputEventResult WebViewImpl::handleSyntheticWheelFromTouchpadPinchEvent(const WebGestureEvent& pinchEvent)
|
| {
|
| ASSERT(pinchEvent.type == WebInputEvent::GesturePinchUpdate);
|
|
|
| @@ -1021,7 +1022,7 @@ void WebViewImpl::acceptLanguagesChanged()
|
| page()->acceptLanguagesChanged();
|
| }
|
|
|
| -bool WebViewImpl::handleKeyEvent(const WebKeyboardEvent& event)
|
| +WebInputEventResult WebViewImpl::handleKeyEvent(const WebKeyboardEvent& event)
|
| {
|
| ASSERT((event.type == WebInputEvent::RawKeyDown)
|
| || (event.type == WebInputEvent::KeyDown)
|
| @@ -1049,24 +1050,25 @@ bool WebViewImpl::handleKeyEvent(const WebKeyboardEvent& event)
|
| // enter when selecting an item in the popup will go to the page.
|
| if (WebInputEvent::RawKeyDown == event.type)
|
| m_suppressNextKeypressEvent = true;
|
| - return true;
|
| + return WebInputEventResult::HandledSystem;
|
| }
|
|
|
| RefPtrWillBeRawPtr<Frame> focusedFrame = focusedCoreFrame();
|
| if (focusedFrame && focusedFrame->isRemoteFrame()) {
|
| WebRemoteFrameImpl* webFrame = WebRemoteFrameImpl::fromFrame(*toRemoteFrame(focusedFrame.get()));
|
| webFrame->client()->forwardInputEvent(&event);
|
| - return true;
|
| + return WebInputEventResult::HandledSystem;
|
| }
|
|
|
| if (!focusedFrame || !focusedFrame->isLocalFrame())
|
| - return false;
|
| + return WebInputEventResult::NotHandled;
|
|
|
| LocalFrame* frame = toLocalFrame(focusedFrame.get());
|
|
|
| PlatformKeyboardEventBuilder evt(event);
|
|
|
| - if (frame->eventHandler().keyEvent(evt)) {
|
| + WebInputEventResult result = frame->eventHandler().keyEvent(evt);
|
| + if (result != WebInputEventResult::NotHandled) {
|
| if (WebInputEvent::RawKeyDown == event.type) {
|
| // Suppress the next keypress event unless the focused node is a plugin node.
|
| // (Flash needs these keypress events to handle non-US keyboards.)
|
| @@ -1085,7 +1087,7 @@ bool WebViewImpl::handleKeyEvent(const WebKeyboardEvent& event)
|
| m_suppressNextKeypressEvent = true;
|
| }
|
| }
|
| - return true;
|
| + return result;
|
| }
|
|
|
| #if !OS(MACOSX)
|
| @@ -1100,14 +1102,16 @@ bool WebViewImpl::handleKeyEvent(const WebKeyboardEvent& event)
|
| bool isShiftF10 = event.modifiers == WebInputEvent::ShiftKey && event.windowsKeyCode == VKEY_F10;
|
| if ((isUnmodifiedMenuKey || isShiftF10) && event.type == contextMenuTriggeringEventType) {
|
| sendContextMenuEvent(event);
|
| - return true;
|
| + return WebInputEventResult::HandledSystem;
|
| }
|
| #endif // !OS(MACOSX)
|
|
|
| - return keyEventDefault(event);
|
| + if (keyEventDefault(event))
|
| + return WebInputEventResult::HandledSystem;
|
| + return WebInputEventResult::NotHandled;
|
| }
|
|
|
| -bool WebViewImpl::handleCharEvent(const WebKeyboardEvent& event)
|
| +WebInputEventResult WebViewImpl::handleCharEvent(const WebKeyboardEvent& event)
|
| {
|
| ASSERT(event.type == WebInputEvent::Char);
|
| TRACE_EVENT1("input", "WebViewImpl::handleCharEvent",
|
| @@ -1128,29 +1132,35 @@ bool WebViewImpl::handleCharEvent(const WebKeyboardEvent& event)
|
|
|
| LocalFrame* frame = toLocalFrame(focusedCoreFrame());
|
| if (!frame)
|
| - return suppress;
|
| + return suppress ? WebInputEventResult::HandledSuppressed : WebInputEventResult::NotHandled;
|
|
|
| EventHandler& handler = frame->eventHandler();
|
|
|
| PlatformKeyboardEventBuilder evt(event);
|
| if (!evt.isCharacterKey())
|
| - return true;
|
| + return WebInputEventResult::HandledSuppressed;
|
|
|
| // Accesskeys are triggered by char events and can't be suppressed.
|
| if (handler.handleAccessKey(evt))
|
| - return true;
|
| + return WebInputEventResult::HandledSystem;
|
|
|
| // Safari 3.1 does not pass off windows system key messages (WM_SYSCHAR) to
|
| // the eventHandler::keyEvent. We mimic this behavior on all platforms since
|
| // for now we are converting other platform's key events to windows key
|
| // events.
|
| if (evt.isSystemKey())
|
| - return false;
|
| + return WebInputEventResult::NotHandled;
|
|
|
| - if (!suppress && !handler.keyEvent(evt))
|
| - return keyEventDefault(event);
|
| + if (suppress)
|
| + return WebInputEventResult::HandledSuppressed;
|
|
|
| - return true;
|
| + WebInputEventResult result = handler.keyEvent(evt);
|
| + if (result != WebInputEventResult::NotHandled)
|
| + return result;
|
| + if (keyEventDefault(event))
|
| + return WebInputEventResult::HandledSystem;
|
| +
|
| + return WebInputEventResult::NotHandled;
|
| }
|
|
|
| WebRect WebViewImpl::computeBlockBound(const WebPoint& pointInRootFrame, bool ignoreClipping)
|
| @@ -1478,7 +1488,7 @@ bool WebViewImpl::hasTouchEventHandlersAt(const WebPoint& point)
|
|
|
| #if !OS(MACOSX)
|
| // Mac has no way to open a context menu based on a keyboard event.
|
| -bool WebViewImpl::sendContextMenuEvent(const WebKeyboardEvent& event)
|
| +WebInputEventResult WebViewImpl::sendContextMenuEvent(const WebKeyboardEvent& event)
|
| {
|
| // The contextMenuController() holds onto the last context menu that was
|
| // popped up on the page until a new one is created. We need to clear
|
| @@ -1488,15 +1498,13 @@ bool WebViewImpl::sendContextMenuEvent(const WebKeyboardEvent& event)
|
| // not run.
|
| page()->contextMenuController().clearContextMenu();
|
|
|
| - bool handled;
|
| {
|
| ContextMenuAllowedScope scope;
|
| Frame* focusedFrame = page()->focusController().focusedOrMainFrame();
|
| if (!focusedFrame->isLocalFrame())
|
| - return false;
|
| - handled = toLocalFrame(focusedFrame)->eventHandler().sendContextMenuEventForKey(nullptr);
|
| + return WebInputEventResult::NotHandled;
|
| + return toLocalFrame(focusedFrame)->eventHandler().sendContextMenuEventForKey(nullptr);
|
| }
|
| - return handled;
|
| }
|
| #endif
|
|
|
| @@ -2032,13 +2040,13 @@ bool WebViewImpl::hasVerticalScrollbar()
|
|
|
| const WebInputEvent* WebViewImpl::m_currentInputEvent = nullptr;
|
|
|
| -bool WebViewImpl::handleInputEvent(const WebInputEvent& inputEvent)
|
| +WebInputEventResult WebViewImpl::handleInputEvent(const WebInputEvent& inputEvent)
|
| {
|
| // TODO(dcheng): The fact that this is getting called when there is no local
|
| // main frame is problematic and probably indicates a bug in the input event
|
| // routing code.
|
| if (!mainFrameImpl())
|
| - return false;
|
| + return WebInputEventResult::NotHandled;
|
|
|
| WebAutofillClient* autofillClient = mainFrameImpl()->autofillClient();
|
| UserGestureNotifier notifier(autofillClient, &m_userGestureObserved);
|
| @@ -2060,14 +2068,14 @@ bool WebViewImpl::handleInputEvent(const WebInputEvent& inputEvent)
|
| // If we've started a drag and drop operation, ignore input events until
|
| // we're done.
|
| if (m_doingDragAndDrop)
|
| - return true;
|
| + return WebInputEventResult::HandledSuppressed;
|
|
|
| if (m_devToolsEmulator->handleInputEvent(inputEvent))
|
| - return true;
|
| + return WebInputEventResult::HandledSuppressed;
|
|
|
| if (InspectorOverlay* overlay = inspectorOverlay()) {
|
| if (overlay->handleInputEvent(inputEvent))
|
| - return true;
|
| + return WebInputEventResult::HandledSuppressed;
|
| }
|
|
|
| if (inputEvent.modifiers & WebInputEvent::IsTouchAccessibility
|
| @@ -2095,14 +2103,14 @@ bool WebViewImpl::handleInputEvent(const WebInputEvent& inputEvent)
|
|
|
| // Report the event to be NOT processed by WebKit, so that the browser can handle it appropriately.
|
| if (m_ignoreInputEvents)
|
| - return false;
|
| + return WebInputEventResult::NotHandled;
|
|
|
| TemporaryChange<const WebInputEvent*> currentEventChange(m_currentInputEvent, &inputEvent);
|
| UIEventWithKeyState::clearNewTabModifierSetFromIsolatedWorld();
|
|
|
| if (isPointerLocked() && WebInputEvent::isMouseEventType(inputEvent.type)) {
|
| pointerLockMouseEvent(inputEvent);
|
| - return true;
|
| + return WebInputEventResult::HandledSystem;
|
| }
|
|
|
| if (m_mouseCaptureNode && WebInputEvent::isMouseEventType(inputEvent.type)) {
|
| @@ -2140,29 +2148,31 @@ bool WebViewImpl::handleInputEvent(const WebInputEvent& inputEvent)
|
| node->dispatchMouseEvent(
|
| PlatformMouseEventBuilder(mainFrameImpl()->frameView(), static_cast<const WebMouseEvent&>(inputEvent)),
|
| eventType, static_cast<const WebMouseEvent&>(inputEvent).clickCount);
|
| - return true;
|
| + return WebInputEventResult::HandledSystem;
|
| }
|
|
|
| // FIXME: This should take in the intended frame, not the local frame root.
|
| - if (PageWidgetDelegate::handleInputEvent(*this, inputEvent, mainFrameImpl()->frame()))
|
| - return true;
|
| + WebInputEventResult result = PageWidgetDelegate::handleInputEvent(*this, inputEvent, mainFrameImpl()->frame());
|
| + if (result != WebInputEventResult::NotHandled)
|
| + return result;
|
|
|
| // Unhandled touchpad gesture pinch events synthesize mouse wheel events.
|
| if (inputEvent.type == WebInputEvent::GesturePinchUpdate) {
|
| const WebGestureEvent& pinchEvent = static_cast<const WebGestureEvent&>(inputEvent);
|
|
|
| // First, synthesize a Windows-like wheel event to send to any handlers that may exist.
|
| - if (handleSyntheticWheelFromTouchpadPinchEvent(pinchEvent))
|
| - return true;
|
| + result = handleSyntheticWheelFromTouchpadPinchEvent(pinchEvent);
|
| + if (result != WebInputEventResult::NotHandled)
|
| + return result;
|
|
|
| if (pinchEvent.data.pinchUpdate.zoomDisabled)
|
| - return false;
|
| + return WebInputEventResult::NotHandled;
|
|
|
| if (page()->frameHost().visualViewport().magnifyScaleAroundAnchor(pinchEvent.data.pinchUpdate.scale, FloatPoint(pinchEvent.x, pinchEvent.y)))
|
| - return true;
|
| + return WebInputEventResult::HandledSystem;
|
| }
|
|
|
| - return false;
|
| + return WebInputEventResult::NotHandled;
|
| }
|
|
|
| void WebViewImpl::setCursorVisibilityState(bool isVisible)
|
|
|