Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / media / encrypted-media / encrypted-media-waiting-for-a-key.html
1 <!DOCTYPE html>
2 <html>
3     <head>
4         <title>Waiting for a key.</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         <script>
14             async_test(function(test)
15             {
16                 var video = document.getElementById("testVideo");
17                 var mediaKeys = new MediaKeys("org.w3.clearkey");
18                 var mediaKeySession = null;
19                 var sessionReadyReceived = false;
20
21                 var keyId = null;
22                 var rawKey = new Uint8Array([0xeb, 0xdd, 0x62, 0xf1, 0x68, 0x14, 0xd2, 0x7b,
23                                              0x68, 0xef, 0x12, 0x2a, 0xfc, 0xe4, 0xae, 0x3c]);
24
25                 function onNeedKey(event)
26                 {
27                     assert_equals(event.target, video);
28                     assert_true(event instanceof window.MediaKeyNeededEvent);
29                     assert_equals(event.type, "needkey");
30
31                     // The same decryption key is shared by all streams so only create a shared session once.
32                     if (mediaKeySession != null)
33                         return;
34
35                     mediaKeySession = mediaKeys.createSession(event.contentType, event.initData);
36                     waitForEventAndRunStep("message", mediaKeySession, onMessage, test);
37                 }
38
39                 function onMessage(event)
40                 {
41                     assert_true(event instanceof window.MediaKeyMessageEvent);
42                     assert_equals(event.target, mediaKeySession);
43                     assert_equals(event.type, "message");
44
45                     keyId = event.message;
46                     setTimeout(verifyWaitingForKey, 250);
47                 }
48
49                 function verifyWaitingForKey()
50                 {
51                     // Make sure the video is NOT paused and not progressing before the session is updated.
52                     // TODO(xhwang): Check "waiting" event after it's implemented. See http://crbug.com/337975
53                     assert_false(video.paused);
54                     assert_equals(video.currentTime, 0);
55
56                     updateSession();
57                 }
58
59                 function updateSession()
60                 {
61                     assert_not_equals(keyId, null);
62                     var jwkSet = stringToUint8Array(createJWKSet(createJWK(keyId, rawKey)));
63                     mediaKeySession.update(jwkSet);
64                     waitForEventAndRunStep("ready", mediaKeySession, onReady, test);
65                 }
66
67                 function onReady(event)
68                 {
69                     assert_true(event instanceof window.Event);
70                     assert_equals(event.target, mediaKeySession);
71                     assert_equals(event.type, "ready");
72                     sessionReadyReceived = true;
73                 }
74
75                 function onPlaying(event)
76                 {
77                     // Not using waitForEventAndRunStep() to avoid too many EVENT(onTimeUpdate) logs.
78                     video.addEventListener("timeupdate", onTimeUpdate, true);
79                 }
80
81                 function onTimeUpdate(event)
82                 {
83                     if (event.target.currentTime < 0.5 || !sessionReadyReceived)
84                         return;
85
86                     test.done();
87                 }
88
89                 waitForEventAndRunStep("needkey", video, onNeedKey, test);
90                 waitForEventAndRunStep("playing", video, onPlaying, test);
91
92                 video.src = "../content/test-encrypted.webm";
93                 video.setMediaKeys(mediaKeys);
94                 video.play();
95             }, "Waiting for a key.");
96         </script>
97     </body>
98 </html>