Define separate media acceptance criteria

A video tag, a positive codec query and advancing currentTime prove different things. Track resource loading, metadata readiness, decoded imagery, alpha composition, pause/seek/resume, end/loop behavior and audible output independently. A successful clock must not stand in for a screenshot or an audio check.

Observed media results

Check the codec, resource and playback behavior you need. Decoded imagery, alpha composition, timing and audible output are separate acceptance criteria.

CapabilityObserved behaviorLimit or design consequence
Packaged VP8Decoded imagery, advancing time, pause hold, seek and resume worked after metadata readiness.One tested native resource; arbitrary encodings and streaming were not certified.
VP8 and VP9 lifecycleEnd notifications and loop continuation were observed.Clock/end events alone do not establish alpha or audible audio.
VP9 alphaA native 32×32 sample was held near 0.40 seconds at an independently verified nonzero-alpha frame; compositing was visible over two backdrop colors.Applies to that resource and layout, not all profiles.
Video audioA host-verified non-silent VP8/Vorbis file produced playing/end events without user-confirmed audible output in the controlled EU replay.The exact PCM/host cause remains unresolved.
Native UI soundThe native PlaySound bridge with the fixed play event was audible in the same comparison.A useful positive control, not proof that video audio works.

Wait for metadata before starting

Immediate early playback stayed at zero in one test. Waiting for positive duration from durationchange allowed normal playback. Register the metadata listener before initiating the load, check current readiness as well, and start once. Retain the listener and a disposed/generation guard; a late event from an old document must not start a new owner's media.

Use the packaged resource path resolved by the client. Inspect the actual native media component and its callers when adapting its lifecycle. Do not infer remote streaming, authentication or Internet access from a local WebM success.

Dispose owned media with its view

For a normal close, cancel timers and frame callbacks, remove media listeners, pause owned video, detach its element and clear its source before destroying the window. Those operations stop the feature's owned work; they do not by themselves establish when the native decoder releases its allocations.

Owner loss and replay reconstruction cannot wait indefinitely for a frontend acknowledgment. Keep native destruction immediate when required, invalidate late callbacks, and use a bounded normal-close handshake only where the owner can support it. Interrupted loading is a separate acceptance case.

Rendering and audio diagnostics

Keep geometry checks separate from pixel checks. For alpha, hold a known frame over contrasting backgrounds; for audio, use a known non-silent source and an independently audible native positive control. Record volume and playback context. A silent result with a working native control narrows the boundary but does not identify the host implementation defect.

Canvas/SVG support is likewise feature-specific: a simple shape or gradient does not certify every text baseline, filter or blend mode. See frontend capabilities, repeated lifecycle validation, and native sounds and notifications.