html: AudoTrackList is a List

BUG=
R=terry@google.com

Review-Url: https://codereview.chromium.org/2884813002 .
This commit is contained in:
Stephen Adams 2017-05-15 14:44:34 -07:00
parent c519414702
commit 89b9c7c8dd
3 changed files with 102 additions and 6 deletions

View file

@ -1010,7 +1010,9 @@ class AudioTrack extends Interceptor {
@DomName('AudioTrackList')
@Experimental() // untriaged
@Native("AudioTrackList")
class AudioTrackList extends EventTarget {
class AudioTrackList extends EventTarget
with ListMixin<AudioTrack>, ImmutableListMixin<AudioTrack>
implements JavaScriptIndexingBehavior<AudioTrack>, List<AudioTrack> {
// To suppress missing implicit constructor warnings.
factory AudioTrackList._() {
throw new UnsupportedError("Not supported");
@ -1025,7 +1027,50 @@ class AudioTrackList extends EventTarget {
@DomName('AudioTrackList.length')
@DocsEditable()
@Experimental() // untriaged
final int length;
int get length => JS("int", "#.length", this);
AudioTrack operator [](int index) {
if (JS("bool", "# >>> 0 !== # || # >= #", index, index, index, length))
throw new RangeError.index(index, this);
return JS("AudioTrack", "#[#]", this, index);
}
void operator []=(int index, AudioTrack value) {
throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<AudioTrack> mixins.
// AudioTrack is the element type.
set length(int value) {
throw new UnsupportedError("Cannot resize immutable List.");
}
AudioTrack get first {
if (this.length > 0) {
return JS('AudioTrack', '#[0]', this);
}
throw new StateError("No elements");
}
AudioTrack get last {
int len = this.length;
if (len > 0) {
return JS('AudioTrack', '#[#]', this, len - 1);
}
throw new StateError("No elements");
}
AudioTrack get single {
int len = this.length;
if (len == 1) {
return JS('AudioTrack', '#[0]', this);
}
if (len == 0) throw new StateError("No elements");
throw new StateError("More than one element");
}
AudioTrack elementAt(int index) => this[index];
// -- end List<AudioTrack> mixins.
@DomName('AudioTrackList.__getter__')
@DocsEditable()
@ -23080,7 +23125,9 @@ class MediaElement extends HtmlElement {
@DomName('HTMLMediaElement.audioTracks')
@DocsEditable()
@Experimental() // untriaged
final AudioTrackList audioTracks;
@Returns('AudioTrackList|Null')
@Creates('AudioTrackList')
final List<AudioTrack> audioTracks;
@DomName('HTMLMediaElement.autoplay')
@DocsEditable()

View file

@ -2127,7 +2127,9 @@ class AudioTrack extends DartHtmlDomObject {
@DocsEditable()
@DomName('AudioTrackList')
@Experimental() // untriaged
class AudioTrackList extends EventTarget {
class AudioTrackList extends EventTarget
with ListMixin<AudioTrack>, ImmutableListMixin<AudioTrack>
implements List<AudioTrack> {
// To suppress missing implicit constructor warnings.
factory AudioTrackList._() {
throw new UnsupportedError("Not supported");
@ -2150,6 +2152,51 @@ class AudioTrackList extends EventTarget {
@Experimental() // untriaged
int get length => _blink.BlinkAudioTrackList.instance.length_Getter_(this);
AudioTrack operator [](int index) {
if (index < 0 || index >= length) throw new RangeError.index(index, this);
return _nativeIndexedGetter(index);
}
AudioTrack _nativeIndexedGetter(int index) =>
(_blink.BlinkAudioTrackList.instance.item_Callback_1_(this, index));
void operator []=(int index, AudioTrack value) {
throw new UnsupportedError("Cannot assign element of immutable List.");
}
// -- start List<AudioTrack> mixins.
// AudioTrack is the element type.
set length(int value) {
throw new UnsupportedError("Cannot resize immutable List.");
}
AudioTrack get first {
if (this.length > 0) {
return _nativeIndexedGetter(0);
}
throw new StateError("No elements");
}
AudioTrack get last {
int len = this.length;
if (len > 0) {
return _nativeIndexedGetter(len - 1);
}
throw new StateError("No elements");
}
AudioTrack get single {
int len = this.length;
if (len == 1) {
return _nativeIndexedGetter(0);
}
if (len == 0) throw new StateError("No elements");
throw new StateError("More than one element");
}
AudioTrack elementAt(int index) => this[index];
// -- end List<AudioTrack> mixins.
@DomName('AudioTrackList.__getter__')
@DocsEditable()
@Experimental() // untriaged
@ -26178,8 +26225,8 @@ class MediaElement extends HtmlElement {
@DomName('HTMLMediaElement.audioTracks')
@DocsEditable()
@Experimental() // untriaged
AudioTrackList get audioTracks =>
_blink.BlinkHTMLMediaElement.instance.audioTracks_Getter_(this);
List<AudioTrack> get audioTracks =>
(_blink.BlinkHTMLMediaElement.instance.audioTracks_Getter_(this));
@DomName('HTMLMediaElement.autoplay')
@DocsEditable()

View file

@ -1492,6 +1492,8 @@ _idl_type_registry = monitored.Dict('generator._idl_type_registry', {
'StyleSheet': TypeData(clazz='Interface', conversion_includes=['CSSStyleSheet']),
'SVGElement': TypeData(clazz='Interface', custom_to_dart=True),
'AudioTrackList': TypeData(clazz='Interface', item_type='AudioTrack',
suppress_interface=False, dart_type='List<AudioTrack>'),
'ClientRectList': TypeData(clazz='Interface',
item_type='ClientRect', dart_type='List<Rectangle>',
suppress_interface=True),