Upstream version 6.35.121.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / media / encrypted-media / encrypted-media-playback-setmediakeys-before-src.html
1 <!DOCTYPE html>
2 <html>
3     <head>
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>
9     </head>
10     <body>
11         <video id="testVideo"></video>
12         <div id="log"></div>
13         <p>Test playback of encrypted media using Clear Key key system.</p>
14         <script>
15             // Timeout for all tests to run.
16             setup({ timeout: 60000 });
17
18             async_test(function(test)
19             {
20                 var video = document.getElementById("testVideo");
21                 var mediaKeys = new MediaKeys("org.w3.clearkey");
22                 var mediaKeySession = null;
23                 var sessionReadyReceived = false;
24
25                 var rawKey = new Uint8Array([0xeb, 0xdd, 0x62, 0xf1, 0x68, 0x14, 0xd2, 0x7b,
26                                              0x68, 0xef, 0x12, 0x2a, 0xfc, 0xe4, 0xae, 0x3c]);
27
28                 function onNeedKey(event)
29                 {
30                     assert_equals(event.target, video);
31                     assert_true(event instanceof window.MediaKeyNeededEvent);
32                     assert_equals(event.type, "needkey");
33
34                     // The same decryption key is shared by all streams so only create a shared session once.
35                     if (mediaKeySession != null)
36                         return;
37
38                     mediaKeySession = mediaKeys.createSession(event.contentType, event.initData);
39                     waitForEventAndRunStep("message", mediaKeySession, onMessage, test);
40                 }
41
42                 function onMessage(event)
43                 {
44                     assert_true(event instanceof window.MediaKeyMessageEvent);
45                     assert_equals(event.target, mediaKeySession);
46                     assert_equals(event.type, "message");
47
48                     var keyId = event.message;
49                     var jwkSet = stringToUint8Array(createJWKSet(createJWK(keyId, rawKey)));
50                     mediaKeySession.update(jwkSet);
51                     waitForEventAndRunStep("ready", mediaKeySession, onReady, test);
52                 }
53
54                 function onReady(event)
55                 {
56                     assert_true(event instanceof window.Event);
57                     assert_equals(event.target, mediaKeySession);
58                     assert_equals(event.type, "ready");
59                     sessionReadyReceived = true;
60                 }
61
62                 function onPlaying(event)
63                 {
64                     // Not using waitForEventAndRunStep() to avoid too many EVENT(onTimeUpdate) logs.
65                     video.addEventListener("timeupdate", onTimeUpdate, true);
66                 }
67
68                 function onTimeUpdate(event)
69                 {
70                     if (event.target.currentTime < 0.2 || !sessionReadyReceived)
71                         return;
72
73                     test.done();
74                 }
75
76                 waitForEventAndRunStep("needkey", video, onNeedKey, test);
77                 waitForEventAndRunStep("playing", video, onPlaying, test);
78
79                 video.setMediaKeys(mediaKeys);
80                 video.src = "../content/test-encrypted.webm";
81                 video.play();
82             }, "Playback using Clear Key key system, calling setMediaKeys() before setting src attribute.",
83             { timeout: 60000 });
84         </script>
85     </body>
86 </html>