Files
tubestation/dom/webidl/HTMLVideoElement.webidl
Kagami Sascha Rosylight b20ca6e78f Bug 1858168 - Allow [InstrumentedProps] only for proxy-based interfaces r=peterv
1. This tries to do the same checks that CGDOMJSProxyHandler does: https://searchfox.org/mozilla-central/rev/1865e9fba4166ab2aa6c9d539913115723d9cc53/dom/bindings/Codegen.py#16516-16520
2. All attributes in non-proxy-interface are removed, because I'm sure the list should change once we ever get the support on non-proxy ones.
3. The attribute on Document is moved back to HTMLDocument. It's technically fine to be in Document as HTMLDocument calls the Document function anyway, but allowing such case looked complex to me so I just decided to not care.

Differential Revision: https://phabricator.services.mozilla.com/D190585
2025-02-02 00:27:33 +00:00

111 lines
4.1 KiB
Plaintext

/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* 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 http://mozilla.org/MPL/2.0/.
*
* The origin of this IDL file is
* https://html.spec.whatwg.org/multipage/media.html#the-video-element
* https://wicg.github.io/video-rvfc/
*
* © Copyright 2004-2011 Apple Computer, Inc., Mozilla Foundation, and
* Opera Software ASA. You are granted a license to use, reproduce
* and create derivative works of this document.
*/
dictionary VideoFrameCallbackMetadata {
required DOMHighResTimeStamp presentationTime;
required DOMHighResTimeStamp expectedDisplayTime;
required unsigned long width;
required unsigned long height;
required double mediaTime;
required unsigned long presentedFrames;
double processingDuration;
DOMHighResTimeStamp captureTime;
DOMHighResTimeStamp receiveTime;
unsigned long rtpTimestamp;
};
callback VideoFrameRequestCallback =
undefined(DOMHighResTimeStamp now, VideoFrameCallbackMetadata metadata);
[Exposed=Window]
interface HTMLVideoElement : HTMLMediaElement {
[HTMLConstructor] constructor();
[CEReactions, SetterThrows]
attribute unsigned long width;
[CEReactions, SetterThrows]
attribute unsigned long height;
readonly attribute unsigned long videoWidth;
readonly attribute unsigned long videoHeight;
[CEReactions, SetterThrows]
attribute DOMString poster;
};
partial interface HTMLVideoElement {
// A count of the number of video frames that have demuxed from the media
// resource. If we were playing perfectly, we'd be able to paint this many
// frames.
readonly attribute unsigned long mozParsedFrames;
// A count of the number of frames that have been decoded. We may drop
// frames if the decode is taking too much time.
readonly attribute unsigned long mozDecodedFrames;
// A count of the number of frames that have been presented to the rendering
// pipeline. We may drop frames if they arrive late at the renderer.
readonly attribute unsigned long mozPresentedFrames;
// Number of presented frames which were painted on screen.
readonly attribute unsigned long mozPaintedFrames;
// Time which the last painted video frame was late by, in seconds.
readonly attribute double mozFrameDelay;
// True if the video has an audio track available.
readonly attribute boolean mozHasAudio;
// Clones the frames playing in this <video> to the target. Cloning ends
// when either node is removed from their DOM trees. Throws if one or
// both <video> elements are not attached to a DOM tree.
// Returns a promise that resolves when the target's ImageContainer has been
// installed in this <video>'s MediaDecoder, or selected video
// MediaStreamTrack, whichever is available first. Note that it might never
// resolve.
[NewObject, Func="IsChromeOrUAWidget"]
Promise<undefined> cloneElementVisually(HTMLVideoElement target);
// Stops a <video> from cloning visually. Does nothing if the <video>
// wasn't cloning in the first place.
[Func="IsChromeOrUAWidget"]
undefined stopCloningElementVisually();
// Returns true if the <video> is being cloned visually to another
// <video> element (see cloneElementVisually).
[Func="IsChromeOrUAWidget"]
readonly attribute boolean isCloningElementVisually;
};
// https://dvcs.w3.org/hg/html-media/raw-file/default/media-source/media-source.html#idl-def-HTMLVideoElement
partial interface HTMLVideoElement {
[Pref="media.mediasource.enabled", NewObject]
VideoPlaybackQuality getVideoPlaybackQuality();
};
// https://w3c.github.io/picture-in-picture/#htmlvideoelement-extensions
partial interface HTMLVideoElement {
[CEReactions, SetterThrows] attribute boolean disablePictureInPicture;
};
// https://wicg.github.io/video-rvfc
partial interface HTMLVideoElement {
[Pref="media.rvfc.enabled", Throws]
unsigned long requestVideoFrameCallback(VideoFrameRequestCallback callback);
[Pref="media.rvfc.enabled"]
undefined cancelVideoFrameCallback(unsigned long handle);
};