tor-browser

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

setmediakeys-again-after-resetting-src.js (3181B)


      1 function runTest(config, qualifier) {
      2    var testname = testnamePrefix(qualifier, config.keysystem)
      3                                     + ', setmediakeys again after resetting src';
      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 playVideoAndWaitForTimeupdate()
     38        {
     39            return new Promise(function(resolve) {
     40                testmediasource(config).then(function(source) {
     41                    _mediaKeySession = _mediaKeys.createSession('temporary');
     42                    _video.src = URL.createObjectURL(source);
     43                });
     44                _video.addEventListener('timeupdate', function listener(event) {
     45                    if (event.target.currentTime < (config.duration || 1))
     46                        return;
     47                    _video.removeEventListener('timeupdate', listener);
     48                    resolve('success');
     49                });
     50            });
     51        }
     52 
     53        waitForEventAndRunStep('encrypted', _video, onEncrypted, test);
     54        navigator.requestMediaKeySystemAccess(config.keysystem, [configuration]).then(function(access) {
     55            _access = access;
     56            return _access.createMediaKeys();
     57        }).then(function(result) {
     58            _mediaKeys = result;
     59            return _video.setMediaKeys(_mediaKeys);
     60        }).then(function() {
     61            return config.servercertificate ? _mediaKeys.setServerCertificate( config.servercertificate ) : true;
     62        }).then(function( success ) {
     63            return playVideoAndWaitForTimeupdate();
     64        }).then(function(results) {
     65            return _access.createMediaKeys();
     66        }).then(function(result) {
     67            _mediaKeys = result;
     68            _video.src = '';
     69            return _video.setMediaKeys(_mediaKeys);
     70        }).then(function() {
     71            return config.servercertificate ? _mediaKeys.setServerCertificate( config.servercertificate ) : true;
     72        }).then(function( success ) {
     73            return playVideoAndWaitForTimeupdate();
     74        }).then(function() {
     75            _video.src = '';
     76            test.done();
     77        }).catch(onFailure);
     78    }, testname);
     79 }