mirror of
https://github.com/servo/servo
synced 2026-04-25 17:15:48 +02:00
Follow the specification and allow to render media controls (expose a user interface to the user) without any HTMLMediaElement `readyState` precondition. The media controls be shown for the following examples without specified media source (e.g. without `src` attribute). ``` <audio controls></audio> <video controls>/<video> ``` See https://html.spec.whatwg.org/multipage/media.html#user-interface For media controls UI don't define root `div` element's style `width` property from the video natural size (`videoWidth/Height` IDL attributes which return `0` if `readyState` is `HAVE_NOTHING`). When the `media` element is adopted between different documents need adopt the media controls id, so media controls UI will keep access to the whilelist of media controls identifiers via `document.servoGetMediaControls(id)` API. Testing: Improvements in the following tests - html/rendering/replaced-elements/embedded-content-rendering-rules/audio-controls-00* - html/semantics/the-button-element/command-and-commandfor/on-audio-behavior.tentative.html - html/semantics/the-button-element/command-and-commandfor/on-audio-invalid-behavior.tentative.html Note that `Invoker Commands` API is not yet supported so these `command and commandfor` tests should fail, but due to previous bug with delayed media controls shown up. The invoker `onClick` function send actions with mouse events (move/up/down) to the test driver at the position of the button element (via getBoundingClientRect), but before test driver will handle these actions the mediadata is received and media controls are shown up with "play" button at this position. So the media control "play" button is clicked instead of the button, and it triggers media element `pause` state change. See https://open-ui.org/components/invokers.explainer/ Signed-off-by: Andrei Volykhin <andrei.volykhin@gmail.com>