mirror of
https://github.com/servo/servo
synced 2026-05-10 17:12:23 +02:00
Support `keyCode` and `charCode` fields in KeyboardEventInit for Speedometer 3.0 Speedometer 3.0 fails because Servo's KeyboardEvent constructor ignores keyCode and charCode parameters, hardcoding them to 0. This breaks frameworks that check `event.keyCode === 13` for Enter key detection. This is how [Speedometer 3.0 dispatches key events](8d67f28d02/resources/benchmark-runner.mjs (L166)) vs [Speedometer 2.0 triggerEnter](491acc2d64/resources/tests.mjs (L60)). Speedometer 3.0 uses the modern KeyboardEvent constructor but passes [legacy fields like keyCode and charCode](https://w3c.github.io/uievents/#legacy-dictionary-KeyboardEventInit) in the init dictionary for backwards compatibility with older frameworks(for example: backbone.js) This change uncomments the legacy KeyboardEventInit fields and updates the constructor to read them from the init dictionary instead of hardcoding to 0. Testing: No new tests added. Fixes: part of https://github.com/servo/servo/issues/16719 Servo running Speedometer3.0 successfully <img width="1136" height="880" alt="speedometer 3 0" src="https://github.com/user-attachments/assets/cf5199a5-d88d-4495-ae96-05fa6332b97e" /> --------- Signed-off-by: atbrakhi <atbrakhi@igalia.com>
61 lines
2.4 KiB
Plaintext
61 lines
2.4 KiB
Plaintext
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
/*
|
|
* The origin of this IDL file is
|
|
* https://w3c.github.io/uievents/#interface-keyboardevent
|
|
*
|
|
*/
|
|
|
|
[Exposed=Window]
|
|
interface KeyboardEvent : UIEvent {
|
|
[Throws] constructor(DOMString typeArg, optional KeyboardEventInit keyboardEventInitDict = {});
|
|
// KeyLocationCode
|
|
const unsigned long DOM_KEY_LOCATION_STANDARD = 0x00;
|
|
const unsigned long DOM_KEY_LOCATION_LEFT = 0x01;
|
|
const unsigned long DOM_KEY_LOCATION_RIGHT = 0x02;
|
|
const unsigned long DOM_KEY_LOCATION_NUMPAD = 0x03;
|
|
readonly attribute DOMString key;
|
|
readonly attribute DOMString code;
|
|
readonly attribute unsigned long location;
|
|
readonly attribute boolean ctrlKey;
|
|
readonly attribute boolean shiftKey;
|
|
readonly attribute boolean altKey;
|
|
readonly attribute boolean metaKey;
|
|
readonly attribute boolean repeat;
|
|
readonly attribute boolean isComposing;
|
|
boolean getModifierState (DOMString keyArg);
|
|
};
|
|
|
|
// https://w3c.github.io/uievents/#idl-interface-KeyboardEvent-initializers
|
|
partial interface KeyboardEvent {
|
|
// Originally introduced (and deprecated) in DOM Level 3
|
|
undefined initKeyboardEvent (DOMString typeArg, boolean bubblesArg, boolean cancelableArg, Window? viewArg,
|
|
DOMString keyArg, unsigned long locationArg, DOMString modifiersListArg,
|
|
boolean repeat, DOMString locale);
|
|
};
|
|
|
|
// https://w3c.github.io/uievents/#legacy-interface-KeyboardEvent
|
|
partial interface KeyboardEvent {
|
|
// The following support legacy user agents
|
|
readonly attribute unsigned long charCode;
|
|
readonly attribute unsigned long keyCode;
|
|
readonly attribute unsigned long which;
|
|
};
|
|
|
|
// https://w3c.github.io/uievents/#dictdef-keyboardeventinit
|
|
dictionary KeyboardEventInit : EventModifierInit {
|
|
DOMString key = "";
|
|
DOMString code = "";
|
|
unsigned long location = 0;
|
|
boolean repeat = false;
|
|
boolean isComposing = false;
|
|
};
|
|
|
|
// https://w3c.github.io/uievents/#legacy-dictionary-KeyboardEventInit
|
|
partial dictionary KeyboardEventInit {
|
|
unsigned long charCode = 0;
|
|
unsigned long keyCode = 0;
|
|
unsigned long which = 0;
|
|
};
|