@@ -3121,6 +3121,45 @@ QUnit.test(
31213121 }
31223122) ;
31233123
3124+ QUnit . test ( 'uses source elements when overriding native HLS in Safari/iOS' , function ( assert ) {
3125+ const origIsAnySafari = videojs . browser . IS_ANY_SAFARI ;
3126+ const addSourceElementCalls = [ ] ;
3127+ let srcCalls = 0 ;
3128+
3129+ videojs . browser . IS_ANY_SAFARI = true ;
3130+
3131+ const player = createPlayer ( { html5 : { vhs : { overrideNative : true } } } ) ;
3132+
3133+ player . tech_ . addSourceElement = function ( url ) {
3134+ addSourceElementCalls . push ( url ) ;
3135+ } ;
3136+
3137+ player . tech_ . src = function ( ) {
3138+ srcCalls ++ ;
3139+ } ;
3140+
3141+ player . src ( {
3142+ src : 'http://example.com/manifest/main.m3u8' ,
3143+ type : 'application/x-mpegURL'
3144+ } ) ;
3145+
3146+ this . clock . tick ( 1 ) ;
3147+
3148+ assert . equal ( addSourceElementCalls . length , 2 , '2 source elements added' ) ;
3149+ assert . equal ( srcCalls , 0 , 'tech.src() not called' ) ;
3150+
3151+ const blobUrl = addSourceElementCalls [ 0 ] ;
3152+ const manifestUrl = addSourceElementCalls [ 1 ] ;
3153+
3154+ assert . ok ( blobUrl . startsWith ( 'blob:' ) , 'First source element is a blob URL' ) ;
3155+ assert . equal ( manifestUrl , 'http://example.com/manifest/main.m3u8' , 'Second source element is the manifest URL' ) ;
3156+
3157+ // Clean up and restore original flags
3158+ player . dispose ( ) ;
3159+
3160+ videojs . browser . IS_ANY_SAFARI = origIsAnySafari ;
3161+ } ) ;
3162+
31243163QUnit . test ( 're-emits mediachange events' , function ( assert ) {
31253164 let mediaChanges = 0 ;
31263165
0 commit comments