Don't assume that a 'keydown' event is a KeyboardEvent

This commit is contained in:
Karl Seguin
2026-02-26 15:26:34 +08:00
parent 641c7b2c89
commit bad0fc386d
2 changed files with 14 additions and 1 deletions

View File

@@ -3069,7 +3069,7 @@ pub fn triggerKeyboard(self: *Page, keyboard_event: *KeyboardEvent) !void {
} }
pub fn handleKeydown(self: *Page, target: *Node, event: *Event) !void { pub fn handleKeydown(self: *Page, target: *Node, event: *Event) !void {
const keyboard_event = event.as(KeyboardEvent); const keyboard_event = event.is(KeyboardEvent) orelse return;
const key = keyboard_event.getKey(); const key = keyboard_event.getKey();
if (key == .Dead) { if (key == .Dead) {

View File

@@ -103,3 +103,16 @@
document.dispatchEvent(new KeyboardEvent('keytest', {key: 'b'})); document.dispatchEvent(new KeyboardEvent('keytest', {key: 'b'}));
testing.expectEqual(false, keyIsTrusted); testing.expectEqual(false, keyIsTrusted);
</script> </script>
<script id=non_keyboard_keydown>
// this used to crash
{
let called = false;
const div = document.createElement('div')
div.addEventListener('keydown', () => {
called = true;
});
div.dispatchEvent(new Event('keydown'));
testing.expectEqual(true, called);
}
</script>