Commit 10f7028c authored by Jeonghee Ahn's avatar Jeonghee Ahn Committed by Commit Bot

[SpatNav] Make SpatialNavigation account for mouseover event handlers

This patch extend the previous patch below.
(https://chromium-review.googlesource.com/c/chromium/src/+/1461355)

If an element has a mouseover or mouse enter handler of some sort,
There's something for the user to interact with.
So it is reasonable to tell it could be focusable element.

And this is also related to the patch below.
(https://chromium-review.googlesource.com/c/chromium/src/+/1557870)
Moving with SpatNav triggers a mouseover event.
Conversely, some element having mouseover handler could be focusable.

In this patch,
element having mouseover or mouseenver event handler can be focusable.

Change-Id: I3f338253ab8aa137a7b9fb5f6e35e324b2ee72c0
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1859535
Commit-Queue: Jeonghee Ahn <jeonghee27.ahn@lge.com>
Reviewed-by: default avatarDavid Bokan <bokan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#719054}
parent 0ab5456a
...@@ -4277,7 +4277,9 @@ bool Element::SupportsSpatialNavigationFocus() const { ...@@ -4277,7 +4277,9 @@ bool Element::SupportsSpatialNavigationFocus() const {
if (HasJSBasedEventListeners(event_type_names::kClick) || if (HasJSBasedEventListeners(event_type_names::kClick) ||
HasJSBasedEventListeners(event_type_names::kKeydown) || HasJSBasedEventListeners(event_type_names::kKeydown) ||
HasJSBasedEventListeners(event_type_names::kKeypress) || HasJSBasedEventListeners(event_type_names::kKeypress) ||
HasJSBasedEventListeners(event_type_names::kKeyup)) HasJSBasedEventListeners(event_type_names::kKeyup) ||
HasJSBasedEventListeners(event_type_names::kMouseover) ||
HasJSBasedEventListeners(event_type_names::kMouseenter))
return true; return true;
// Some web apps use click-handlers to react on clicks within rects that are // Some web apps use click-handlers to react on clicks within rects that are
......
<!DOCTYPE html>
<div id="0">Click handler</div>
<div id="1">Keydown handler</div>
<div id="2">Keypress handler</div>
<div id="3">Keyup handler</div>
<div id="4">Mouseover handler</div>
<div id="5">Mouseenter handler</div>
<div id="6" tabindex="-1">Negative tabindex with click handler</div>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<script src="resources/snav-testharness.js"></script>
<script>
const divs = document.getElementsByTagName("div");
const noop = () => { };
divs[0].addEventListener('click', noop);
divs[1].addEventListener('keydown', noop);
divs[2].addEventListener('keypress', noop);
divs[3].addEventListener('keyup', noop);
divs[4].addEventListener('mouseover', noop);
divs[5].addEventListener('mouseenter', noop);
divs[6].addEventListener('click', noop);
var resultMap = [
["Down", "0"],
["Down", "1"],
["Down", "2"],
["Down", "3"],
["Down", "4"],
["Down", "5"],
["Down", "5"]
];
// Start at a known place.
snav.assertFocusMoves(resultMap);
</script>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment