4 <title>Clear Key Playback</title>
5 <script src="encrypted-media-utils.js"></script>
6 <script src="../w3c-media-utils.js"></script>
7 <script src="../../resources/testharness.js"></script>
8 <script src="../../resources/testharnessreport.js"></script>
11 <video id="testVideo"></video>
13 <p>Test playback of encrypted media using Clear Key key system.</p>
15 // Timeout for all tests to run.
16 setup({ timeout: 60000 });
18 async_test(function(test)
20 var video = document.getElementById("testVideo");
21 var mediaKeys = new MediaKeys("org.w3.clearkey");
22 var mediaKeySession = null;
23 var sessionReadyReceived = false;
25 var rawKey = new Uint8Array([0xeb, 0xdd, 0x62, 0xf1, 0x68, 0x14, 0xd2, 0x7b,
26 0x68, 0xef, 0x12, 0x2a, 0xfc, 0xe4, 0xae, 0x3c]);
28 function onNeedKey(event)
30 assert_equals(event.target, video);
31 assert_true(event instanceof window.MediaKeyNeededEvent);
32 assert_equals(event.type, "needkey");
34 // The same decryption key is shared by all streams so only create a shared session once.
35 if (mediaKeySession != null)
38 mediaKeySession = mediaKeys.createSession(event.contentType, event.initData);
39 waitForEventAndRunStep("message", mediaKeySession, onMessage, test);
42 function onMessage(event)
44 assert_true(event instanceof window.MediaKeyMessageEvent);
45 assert_equals(event.target, mediaKeySession);
46 assert_equals(event.type, "message");
48 var keyId = event.message;
49 var jwkSet = stringToUint8Array(createJWKSet(createJWK(keyId, rawKey)));
50 mediaKeySession.update(jwkSet);
51 waitForEventAndRunStep("ready", mediaKeySession, onReady, test);
54 function onReady(event)
56 assert_true(event instanceof window.Event);
57 assert_equals(event.target, mediaKeySession);
58 assert_equals(event.type, "ready");
59 sessionReadyReceived = true;
62 function onPlaying(event)
64 // Not using waitForEventAndRunStep() to avoid too many EVENT(onTimeUpdate) logs.
65 video.addEventListener("timeupdate", onTimeUpdate, true);
68 function onTimeUpdate(event)
70 if (event.target.currentTime < 0.2 || !sessionReadyReceived)
76 waitForEventAndRunStep("needkey", video, onNeedKey, test);
77 waitForEventAndRunStep("playing", video, onPlaying, test);
79 video.setMediaKeys(mediaKeys);
80 video.src = "../content/test-encrypted.webm";
82 }, "Playback using Clear Key key system, calling setMediaKeys() before setting src attribute.",