tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

setmediakeys-again-after-playback.js (3048B)


      1 function runTest(config, qualifier) {
      2    var testname = testnamePrefix(qualifier, config.keysystem)
      3                                    + ', setmediakeys again after playback';
      4 
      5    var configuration = getSimpleConfigurationForContent(config.content);
      6 
      7    if (config.initDataType && config.initData) {
      8        configuration.initDataTypes = [config.initDataType];
      9    }
     10 
     11    async_test(function(test) {
     12        var _video = config.video,
     13            _access,
     14            _mediaKeys,
     15            _mediaKeySession,
     16            _mediaSource;
     17 
     18        function onFailure(error) {
     19            forceTestFailureFromPromise(test, error);
     20        }
     21 
     22        function onMessage(event) {
     23            config.messagehandler(event.messageType, event.message).then( function(response) {
     24                _mediaKeySession.update(response).catch(onFailure).then(function() {
     25                    _video.play();
     26                });
     27            });
     28        }
     29 
     30        function onEncrypted(event) {
     31            waitForEventAndRunStep('message', _mediaKeySession, onMessage, test);
     32            _mediaKeySession.generateRequest(   config.initData ? config.initDataType : event.initDataType,
     33                                                config.initData || event.initData )
     34            .catch(onFailure);
     35        }
     36 
     37        function playVideo()
     38        {
     39            return new Promise(function(resolve) {
     40                _mediaKeySession = _mediaKeys.createSession('temporary');
     41                waitForEventAndRunStep('encrypted', _video, onEncrypted, test);
     42                _video.src = URL.createObjectURL(_mediaSource);
     43                resolve('success');
     44            });
     45        }
     46 
     47        navigator.requestMediaKeySystemAccess(config.keysystem, [configuration]).then(function(access) {
     48            _access = access;
     49            return _access.createMediaKeys();
     50        }).then(function(result) {
     51            _mediaKeys = result;
     52            return _video.setMediaKeys(_mediaKeys);
     53        }).then(function() {
     54            return config.servercertificate ? _mediaKeys.setServerCertificate( config.servercertificate ) : true;
     55        }).then(function( success ) {
     56            return testmediasource(config);
     57        }).then(function(source) {
     58            _mediaSource = source;
     59            return playVideo();
     60        }).then(function(results) {
     61            return _access.createMediaKeys();
     62        }).then(function(result) {
     63            _mediaKeys = result;
     64            return waitForEvent('playing', _video);
     65        }).then(test.step_func(function(result) {
     66            assert_false(_video.ended);
     67            return _video.setMediaKeys(_mediaKeys);
     68        })).then(function() {
     69            // Able to change MediaKeys while playing.
     70            // This is not required to fail.
     71            _video.src='';
     72            test.done();
     73        }, test.step_func(function(error) {
     74            assert_in_array(error.name, ['InvalidStateError','NotSupportedError']);
     75            _video.src='';
     76            test.done();
     77        })).catch(onFailure);
     78    }, testname);
     79 }