Commit 149be7da authored by Alice Boxhall's avatar Alice Boxhall Committed by Commit Bot

Fix crash when removing a node in keydown handler triggered synthetically

Bug: 1102116
Change-Id: If6a66d5b0b53dbffd0d56d63fd8d1a13003fc992
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2279268Reviewed-by: default avatarMeredith Lane <meredithl@chromium.org>
Commit-Queue: Alice Boxhall <aboxhall@chromium.org>
Cr-Commit-Position: refs/heads/master@{#785302}
parent 1b59cea4
......@@ -219,6 +219,10 @@ void AXNodeObject::AlterSliderOrSpinButtonValue(bool increase) {
// TODO(crbug.com/1099069): add a brief pause between keydown and keyup?
// TODO(crbug.com/1099069): fire a "char" event depending on platform?
// The keydown handler may have caused the node to be removed.
if (!GetNode())
return;
KeyboardEvent* keyup = CreateKeyboardEvent(
local_dom_window, WebInputEvent::Type::kKeyUp, action);
GetNode()->DispatchEvent(*keyup);
......
<!DOCTYPE HTML>
<script src="../resources/gc.js"></script>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<body id=body>
<div id=slider role=slider></div>
<script>
async_test((t) => {
function handleKeyDown() {
document.getElementById("body").removeChild(document.getElementById("slider"));
t.done();
}
document.getElementById("slider").addEventListener('keydown', t.step_func(handleKeyDown));
var axSlider = accessibilityController.accessibleElementById("slider");
axSlider.increment();
}, "Decrementing a slider that is destroyed and has a keyup listener doesn't crash");
</script>
</body>
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