927ac8f24b851a0a13206730239173cc9b0ea121
[WebKit-https.git] / Source / WebCore / html / HTMLMediaElement.idl
1 /*
2  * Copyright (C) 2007, 2010, 2011, 2012 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26
27 typedef (
28 #if defined(ENABLE_MEDIA_STREAM) && ENABLE_MEDIA_STREAM
29     MediaStream or
30 #endif
31 #if defined(ENABLE_MEDIA_SOURCE) && ENABLE_MEDIA_SOURCE
32     MediaSource or
33 #endif
34     Blob) MediaProvider;
35
36 [
37     ActiveDOMObject,
38     Conditional=VIDEO,
39     ExportMacro=WEBCORE_EXPORT,
40     JSGenerateToNativeObject,
41 ] interface HTMLMediaElement : HTMLElement {
42
43     // error state
44     readonly attribute MediaError error;
45
46     // network state
47     [Reflect, URL] attribute USVString src;
48     attribute MediaProvider? srcObject;
49     [URL] readonly attribute USVString currentSrc;
50     attribute DOMString? crossOrigin;
51
52     const unsigned short NETWORK_EMPTY = 0;
53     const unsigned short NETWORK_IDLE = 1;
54     const unsigned short NETWORK_LOADING = 2;
55     const unsigned short NETWORK_NO_SOURCE = 3;
56     readonly attribute unsigned short networkState;
57     attribute DOMString preload;
58
59     readonly attribute TimeRanges buffered;
60     void load();
61
62     DOMString canPlayType(DOMString type);
63
64     // ready state
65     const unsigned short HAVE_NOTHING = 0;
66     const unsigned short HAVE_METADATA = 1;
67     const unsigned short HAVE_CURRENT_DATA = 2;
68     const unsigned short HAVE_FUTURE_DATA = 3;
69     const unsigned short HAVE_ENOUGH_DATA = 4;
70     readonly attribute unsigned short readyState;
71     readonly attribute boolean seeking;
72
73     // playback state
74     [ImplementedAs=currentTimeForBindings] attribute unrestricted double currentTime;
75     readonly attribute unrestricted double duration;
76     Date getStartDate();
77     readonly attribute boolean paused;
78     attribute unrestricted double defaultPlaybackRate;
79     attribute unrestricted double playbackRate;
80     readonly attribute TimeRanges played;
81     readonly attribute TimeRanges seekable;
82     readonly attribute boolean ended;
83     [Reflect] attribute boolean autoplay;
84     [Reflect] attribute boolean loop;
85     Promise<void> play();
86     void pause();
87     void fastSeek(unrestricted double time);
88
89     // controls
90     attribute boolean controls;
91     attribute double volume;
92     attribute boolean muted;
93     [Reflect=muted] attribute boolean defaultMuted;
94
95     // WebKit extensions
96     attribute boolean webkitPreservesPitch;
97
98     readonly attribute boolean webkitHasClosedCaptions;
99     attribute boolean webkitClosedCaptionsVisible;
100
101     // The number of bytes consumed by the media decoder.
102     [Conditional=MEDIA_STATISTICS] readonly attribute unsigned long webkitAudioDecodedByteCount;
103     [Conditional=MEDIA_STATISTICS] readonly attribute unsigned long webkitVideoDecodedByteCount;
104
105     [Conditional=LEGACY_ENCRYPTED_MEDIA, EnabledAtRuntime=LegacyEncryptedMediaAPI] readonly attribute WebKitMediaKeys webkitKeys;
106     [Conditional=LEGACY_ENCRYPTED_MEDIA, EnabledAtRuntime=LegacyEncryptedMediaAPI] void webkitSetMediaKeys(WebKitMediaKeys? mediaKeys);
107     [Conditional=ENCRYPTED_MEDIA, EnabledAtRuntime=EncryptedMediaAPI, DisabledByQuirk=hasBrokenEncryptedMediaAPISupport] readonly attribute MediaKeys mediaKeys;
108     [Conditional=ENCRYPTED_MEDIA, EnabledAtRuntime=EncryptedMediaAPI, DisabledByQuirk=hasBrokenEncryptedMediaAPISupport] attribute EventHandler onencrypted;
109     [Conditional=ENCRYPTED_MEDIA, EnabledAtRuntime=EncryptedMediaAPI, DisabledByQuirk=hasBrokenEncryptedMediaAPISupport] attribute EventHandler onwaitingforkey;
110     [Conditional=ENCRYPTED_MEDIA, EnabledAtRuntime=EncryptedMediaAPI, DisabledByQuirk=hasBrokenEncryptedMediaAPISupport] Promise<void> setMediaKeys(MediaKeys? mediaKeys);
111
112     [Conditional=VIDEO_TRACK, MayThrowException] TextTrack addTextTrack(DOMString kind, optional DOMString label = "", optional DOMString language = "");
113     [Conditional=VIDEO_TRACK, ImplementedAs=ensureAudioTracks] readonly attribute AudioTrackList audioTracks;
114     [Conditional=VIDEO_TRACK, ImplementedAs=ensureTextTracks] readonly attribute TextTrackList textTracks;
115     [Conditional=VIDEO_TRACK, ImplementedAs=ensureVideoTracks] readonly attribute VideoTrackList videoTracks;
116
117     [Reflect] attribute DOMString mediaGroup;
118
119     [ImplementedAs=controllerForBindings] attribute MediaController? controller;
120
121     [Conditional=MEDIA_SOURCE] VideoPlaybackQuality getVideoPlaybackQuality();
122
123     [Conditional=WIRELESS_PLAYBACK_TARGET] void webkitShowPlaybackTargetPicker();
124     [Conditional=WIRELESS_PLAYBACK_TARGET] readonly attribute boolean webkitCurrentPlaybackTargetIsWireless;
125 };