browser-use--browser-harness
e0dcdd6905
Two related issues that have shown up across recent PRs: 1. press_key always emitted a `char` event after every single-char keyDown, regardless of modifiers. With Ctrl/Cmd held, that `char` makes Chrome treat the press as printable text input (typing "a") instead of firing the shortcut (Cmd+A). PR #258 worked around this inside fill_input by dispatching the select-all directly via raw CDP calls, but every other shortcut was still broken. 2. The keyDown's `code` and `windowsVirtualKeyCode` for letters/digits came from a literal-key fallback (code="a", vk=ord("a")=97). CDP's shortcut handlers compare against canonical physical-key codes — "KeyA" / 65 for the A key, "Digit5" / 53 for the 5 key. Without that, e.code in JS is wrong and shortcut listeners that check `e.code === "KeyA"` (a common pattern) do not fire. Fix at source so every shortcut works for any caller: - Added _key_metadata(key) which returns the canonical (vk, code, text) for letters (Key{X}, ord(upper)), digits (Digit{N}, ord(N)), and the pre-existing special-key table. Punctuation/symbols fall back to ASCII vk + literal code. - press_key suppresses both `text` on keyDown and the entire `char` event when any of Alt/Ctrl/Meta is set (modifier bits 0b0111). Shift alone is still text input. - fill_input's clear path now just calls press_key("a", modifiers=...) instead of dispatching directly via cdp; the helper does the right thing now. 10 new tests in tests/unit/test_helpers.py cover: - canonical code/vk for letters (KeyA/65, KeyZ/90) and digits (Digit5/53) - Enter/Backspace/etc still use the _KEYS table - no-modifier press emits text + char - Ctrl / Meta / Alt each suppress text + char - Shift alone keeps text + char - Ctrl+Shift combo suppresses (modifier wins over Shift) - keyUp metadata is consistent Identified via codex review (P1). Full suite: 93 passed (83 -> 93).