@@ -123,7 +123,7 @@ export function MediaTracksMixin<T>(MediaElementClass: T): WithMediaTracks<T> {
123123 let renditions = getPrivate ( media ) . videoRenditions ;
124124 if ( ! renditions ) {
125125 renditions = new VideoRenditionList ( ) ;
126- getPrivate ( renditions ) . media = media ;
126+ getPrivate ( renditions ) . media = new WeakRef ( media ) ;
127127 getPrivate ( media ) . videoRenditions = renditions ;
128128 }
129129 return renditions ;
@@ -141,7 +141,7 @@ export function MediaTracksMixin<T>(MediaElementClass: T): WithMediaTracks<T> {
141141 let renditions = getPrivate ( media ) . audioRenditions ;
142142 if ( ! renditions ) {
143143 renditions = new AudioRenditionList ( ) ;
144- getPrivate ( renditions ) . media = media ;
144+ getPrivate ( renditions ) . media = new WeakRef ( media ) ;
145145 getPrivate ( media ) . audioRenditions = renditions ;
146146 }
147147 return renditions ;
@@ -171,11 +171,11 @@ function getVideoTracks(media: any) {
171171 addVideoTrack ( media , nativeTrack ) ;
172172 }
173173
174- nativeTracks . addEventListener ( 'change' , ( ) => {
174+ const onChange = ( ) => {
175175 tracks . dispatchEvent ( new Event ( 'change' ) ) ;
176- } ) ;
176+ } ;
177177
178- nativeTracks . addEventListener ( 'addtrack' , ( event : TrackEvent ) => {
178+ const onAddTrack = ( event : TrackEvent ) => {
179179 // Note: adding native track instances to the shim track list here.
180180 // This works because the API is identical and change event is forwarded.
181181 // If tracks were manually added prevent native tracks from being added...
@@ -189,11 +189,15 @@ function getVideoTracks(media: any) {
189189 }
190190
191191 addVideoTrack ( media , event . track as VideoTrack ) ;
192- } ) ;
192+ } ;
193193
194- nativeTracks . addEventListener ( 'removetrack' , ( event : TrackEvent ) => {
195- removeVideoTrack ( event . track as VideoTrack ) ;
196- } ) ;
194+ const onRemoveTrack = ( event : TrackEvent ) => {
195+ removeVideoTrack ( event . track as VideoTrack ) ;
196+ } ;
197+
198+ nativeTracks . addEventListener ( 'change' , onChange ) ;
199+ nativeTracks . addEventListener ( 'addtrack' , onAddTrack ) ;
200+ nativeTracks . addEventListener ( 'removetrack' , onRemoveTrack ) ;
197201 }
198202 }
199203 return tracks ;
@@ -214,11 +218,11 @@ function getAudioTracks(media: any) {
214218 addAudioTrack ( media , nativeTrack ) ;
215219 }
216220
217- nativeTracks . addEventListener ( 'change' , ( ) => {
221+ const onChange = ( ) => {
218222 tracks . dispatchEvent ( new Event ( 'change' ) ) ;
219- } ) ;
223+ } ;
220224
221- nativeTracks . addEventListener ( 'addtrack' , ( event : TrackEvent ) => {
225+ const onAddTrack = ( event : TrackEvent ) => {
222226 // Note: adding native track instances to the shim track list here.
223227 // This works because the API is identical and change event is forwarded.
224228 // If tracks were manually added prevent native tracks from being added...
@@ -232,11 +236,15 @@ function getAudioTracks(media: any) {
232236 }
233237
234238 addAudioTrack ( media , event . track as AudioTrack ) ;
235- } ) ;
239+ } ;
236240
237- nativeTracks . addEventListener ( 'removetrack' , ( event : TrackEvent ) => {
241+ const onRemoveTrack = ( event : TrackEvent ) => {
238242 removeAudioTrack ( event . track as AudioTrack ) ;
239- } ) ;
243+ } ;
244+
245+ nativeTracks . addEventListener ( 'change' , onChange ) ;
246+ nativeTracks . addEventListener ( 'addtrack' , onAddTrack ) ;
247+ nativeTracks . addEventListener ( 'removetrack' , onRemoveTrack ) ;
240248 }
241249 }
242250 return tracks ;
0 commit comments