ChromeVox: key event handling in mv3

Key event handling is more complex in mv3. Currently it is
asynchronous due to communication between the offscreen document
and service worker, which introduces bugs where some key events are
not properly canceled.

This change fixes key event handling so that it works properly in mv3.
Summary of changes:

1. AccessibilityEventRewriter cancels and stores all registered
key events in a queue
2. Key events are sent to the ChromeVox extension using a new
accessibility private API event
3. The extension handles the custom key events, then uses a new
extension API to tell AccessibilityEventRewriter how to handle
the events
4. AccessibilityEventRewriter either drops or propagates key events
depending on the request from ChromeVox

Please see this design document for full details:
https://docs.google.com/document/d/1MRyDZ6wUzGMjdwPDr-zry1ahHm7yoMM3QyyHeWZgess/edit?usp=sharing

Bug: 388867840
Change-Id: I6b39af34efbb13b8775685807481d2489c04a5b3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6802641
Reviewed-by: David Tseng <dtseng@chromium.org>
Reviewed-by: Andrea Orru <andreaorru@chromium.org>
Reviewed-by: James Cook <jamescook@chromium.org>
Reviewed-by: Kelvin Jiang <kelvinjiang@chromium.org>
Commit-Queue: Akihiro Ota <akihiroota@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1521517}
NOKEYCHECK=True
GitOrigin-RevId: 506a6277d6e6172c788f4883eae329bcc7d184d2
1 file changed