OLD | NEW |
(Empty) | |
| 1 <!doctype html> |
| 2 <html> |
| 3 <head> |
| 4 <meta charset=utf-8> |
| 5 <title>Encrypted Media Extensions: persistent-license, retrieve and destroy,
ClearKey</title> |
| 6 <link rel="help" href="https://w3c.github.io/encrypted-media/"> |
| 7 |
| 8 <!-- Helper scripts for Encrypted Media Extensions tests --> |
| 9 <script src=/encrypted-media/util/utils.js></script> |
| 10 <script src=/encrypted-media/util/fetch.js></script> |
| 11 <script src=/encrypted-media/util/utf8.js></script> |
| 12 <script src=/encrypted-media/util/testmediasource.js></script> |
| 13 |
| 14 <!-- Message handler for Clear Key keysystem --> |
| 15 <script src=/encrypted-media/util/clearkey-messagehandler.js></script> |
| 16 |
| 17 </head> |
| 18 <body> |
| 19 <div id='log'></div> |
| 20 |
| 21 <div id='video'> |
| 22 <video id="videoelement" width="200px"></video> |
| 23 </div> |
| 24 |
| 25 <script> |
| 26 // Wait for a message from the main window with details of our task |
| 27 window.addEventListener( 'message', function( event ) { |
| 28 |
| 29 var config = event.data.config, |
| 30 configuration = { initDataTypes: [ config.initDataType ], |
| 31 audioCapabilities: [ { contentType: config.audio
Type } ], |
| 32 videoCapabilities: [ { contentType: config.video
Type } ], |
| 33 sessionTypes: [ 'persistent-license' ] }, |
| 34 assertions = [ ]; |
| 35 |
| 36 var _mediaKeys, |
| 37 _mediaKeySession; |
| 38 |
| 39 config.video = document.getElementById('videoelement'); |
| 40 config.messagehandler = (new MessageHandler( 'org.w3.clearkey')).mes
sagehandler; |
| 41 |
| 42 function onComplete() { |
| 43 window.opener.postMessage(assertions, '*'); |
| 44 } |
| 45 |
| 46 function onFailure(error) { |
| 47 assertions.push( { actual: false, expected: true, message: error.toS
tring() } ); |
| 48 onComplete(); |
| 49 } |
| 50 |
| 51 function onMessage( messageevent ) |
| 52 { |
| 53 assertions.push( { expected: true, actual: messageevent instanceof w
indow.MediaKeyMessageEvent, message: "event is of correct class" } ); |
| 54 assertions.push( { expected: 'message', actual: messageevent.type, m
essage: "event type is message" } ); |
| 55 assertions.push( { expected: 'license-release', actual: messageevent
.messageType, message: "message type is license-release" } ); |
| 56 |
| 57 config.messagehandler( messageevent.messageType, messageevent.messag
e ) |
| 58 .then( function( response ) { |
| 59 messageevent.target.update( response ).catch(onFailure); |
| 60 }); |
| 61 } |
| 62 |
| 63 function onTimeupdate(event) { |
| 64 if ( config.video.currentTime > ( config.duration || 1 ) ) { |
| 65 config.video.pause(); |
| 66 config.video.removeAttribute('src'); |
| 67 config.video.load(); |
| 68 _mediaKeySession.remove(); |
| 69 } |
| 70 } |
| 71 |
| 72 function onClosed() { |
| 73 // Try and reload and check this fails |
| 74 var mediaKeySession = _mediaKeys.createSession( 'persistent-license'
); |
| 75 mediaKeySession.load( event.data.sessionId ).then( function( success
) { |
| 76 assertions.push( { expected: false, actual: success, message: "L
oad of removed session should fail" } ); |
| 77 onComplete(); |
| 78 }).catch(onFailure); |
| 79 } |
| 80 |
| 81 navigator.requestMediaKeySystemAccess(config.keysystem, [ configuration
] ) |
| 82 .then(function(access) { |
| 83 return access.createMediaKeys(); |
| 84 }).then(function(mediaKeys) { |
| 85 _mediaKeys = mediaKeys; |
| 86 return config.video.setMediaKeys(mediaKeys); |
| 87 }).then(function() { |
| 88 config.video.addEventListener('timeupdate', onTimeupdate, true); |
| 89 _mediaKeySession = _mediaKeys.createSession( 'persistent-license' ); |
| 90 _mediaKeySession.addEventListener( 'message', onMessage ); |
| 91 _mediaKeySession.closed.then(onClosed); |
| 92 return _mediaKeySession.load( event.data.sessionId ); |
| 93 }).then(function( success ) { |
| 94 assertions.push( { actual: success, expected: true, message: "Expect
load session to succeed" } ); |
| 95 if ( !success ) throw new DOMException(); |
| 96 return testmediasource(config); |
| 97 }).then(function(source) { |
| 98 config.video.src = URL.createObjectURL(source); |
| 99 config.video.play(); |
| 100 }) |
| 101 .catch(onFailure); |
| 102 } ); |
| 103 |
| 104 </script> |
| 105 </body> |
| 106 </html> |
OLD | NEW |