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

Unified Diff: third_party/WebKit/Source/core/input/EventHandler.cpp

Issue 2389073002: Fix link's hover state if the link under scrollbar (Closed)
Patch Set: add test Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/input/EventHandler.cpp
diff --git a/third_party/WebKit/Source/core/input/EventHandler.cpp b/third_party/WebKit/Source/core/input/EventHandler.cpp
index a40a5bc065dff8cd721b95a119fcf4bc36e0dad3..5c361158fb0612915a1e66e34a8c28722768dda7 100644
--- a/third_party/WebKit/Source/core/input/EventHandler.cpp
+++ b/third_party/WebKit/Source/core/input/EventHandler.cpp
@@ -278,8 +278,10 @@ HitTestResult EventHandler::hitTestResultAtPoint(
return result;
m_frame->contentLayoutItem().hitTest(result);
- if (!request.readOnly())
- m_frame->document()->updateHoverActiveState(request, result.innerElement());
+ if (!request.readOnly()) {
+ m_frame->document()->updateHoverActiveState(request, result.innerElement(),
+ result.scrollbar());
+ }
return result;
}
@@ -384,6 +386,11 @@ void EventHandler::updateCursor() {
}
}
+Cursor::Type EventHandler::selectCursorTypeForTest(
+ const HitTestResult& result) {
+ return selectCursor(result).cursor().getType();
+}
+
OptionalCursor EventHandler::selectCursor(const HitTestResult& result) {
if (m_scrollManager->inResizeMode())
return NoCursorChange;
@@ -529,6 +536,10 @@ OptionalCursor EventHandler::selectCursor(const HitTestResult& result) {
OptionalCursor EventHandler::selectAutoCursor(const HitTestResult& result,
Node* node,
const Cursor& iBeam) {
+ if (result.scrollbar()) {
+ return pointerCursor();
+ }
+
bool editable = (node && hasEditableStyle(*node));
const bool isOverLink =
@@ -811,7 +822,7 @@ WebInputEventResult EventHandler::handleMouseMoveOrLeaveEvent(
// So we must force the hit-test to fail, while still clearing hover/active
// state.
if (forceLeave) {
- m_frame->document()->updateHoverActiveState(request, 0);
+ m_frame->document()->updateHoverActiveState(request, 0, false);
} else {
mev = EventHandlingUtil::performMouseEventHitTest(m_frame, request,
mouseEvent);
@@ -1525,13 +1536,13 @@ void EventHandler::updateGestureHoverActiveState(const HitTestRequest& request,
// If the old hovered frame is different from the new hovered frame.
// we should clear the old hovered node from the old hovered frame.
if (newHoverFrame != oldHoverFrame)
- doc->updateHoverActiveState(request, nullptr);
+ doc->updateHoverActiveState(request, nullptr, false);
}
}
// Recursively set the new active/hover states on every frame in the chain of
// innerElement.
- m_frame->document()->updateHoverActiveState(request, innerElement);
+ m_frame->document()->updateHoverActiveState(request, innerElement, false);
}
// Update the mouseover/mouseenter/mouseout/mouseleave events across all frames
@@ -1857,7 +1868,8 @@ WebInputEventResult EventHandler::sendContextMenuEventForKey(
HitTestRequest request(HitTestRequest::Active);
HitTestResult result(request, locationInRootFrame);
result.setInnerNode(targetNode);
- doc->updateHoverActiveState(request, result.innerElement());
+ doc->updateHoverActiveState(request, result.innerElement(),
+ result.scrollbar());
// The contextmenu event is a mouse event even when invoked using the
// keyboard. This is required for web compatibility.
@@ -1923,8 +1935,8 @@ void EventHandler::hoverTimerFired(TimerBase*) {
view->rootFrameToContents(
m_mouseEventManager->lastKnownMousePosition()));
layoutItem.hitTest(result);
- m_frame->document()->updateHoverActiveState(request,
- result.innerElement());
+ m_frame->document()->updateHoverActiveState(
+ request, result.innerElement(), result.scrollbar());
}
}
}
@@ -1938,8 +1950,8 @@ void EventHandler::activeIntervalTimerFired(TimerBase*) {
// m_lastDeferredTapElement.get() == m_frame->document()->activeElement()
HitTestRequest request(HitTestRequest::TouchEvent |
HitTestRequest::Release);
- m_frame->document()->updateHoverActiveState(request,
- m_lastDeferredTapElement.get());
+ m_frame->document()->updateHoverActiveState(
+ request, m_lastDeferredTapElement.get(), false);
}
m_lastDeferredTapElement = nullptr;
}

Powered by Google App Engine
This is Rietveld 408576698