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