OLD | NEW |
| (Empty) |
1 <!doctype html> | |
2 <html lang="en"> | |
3 <head> | |
4 </head> | |
5 <body> | |
6 <video></video> | |
7 <p>Test all the key-related events.</p> | |
8 | |
9 <script src="../encrypted-media-utils.js"></script> | |
10 <script src=../../media-file.js></script> | |
11 <script src=../../video-test.js></script> | |
12 <script> | |
13 // First, try explicitly creating those events with specific IDL. | |
14 var keyNeededEvent = document.createEvent("MediaKeyEvent"); | |
15 testExpected("keyNeededEvent", null, "!="); | |
16 testExpected("keyNeededEvent instanceof window.MediaKeyEvent", true)
; | |
17 | |
18 // Next, The test runs twice, once using on* and then using addEvent
Listener(). | |
19 var isFirstRun = true; | |
20 | |
21 // The Initialization Data in test-encrypted.webm. | |
22 var expectedInitData = stringToUint8Array('0123456789012345'); | |
23 // A 128-bit key. It is not the actual key for test-encrypted.webm. | |
24 var key = new Uint8Array([0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
0x68, | |
25 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
0x70]); | |
26 // This key will cause an asynchronous error because it is too short
. | |
27 var invalidKey = new Uint8Array([0x61]); | |
28 | |
29 // After the first keyMessage event, the sessionId should always be
the same. | |
30 // Initialize it to an invalid value until then. | |
31 var keyMessageSessionId = -1; | |
32 // Remember the first ID to make sure the second one is different. | |
33 var firstRunKeyMessageSessionId = -1; | |
34 | |
35 function keyAdded(event) | |
36 { | |
37 consoleWrite("keyadded event occurred"); | |
38 | |
39 testExpected("event.target", video); | |
40 testExpected("event instanceof window.MediaKeyEvent", true); | |
41 | |
42 testExpected("event.keySystem", "webkit-org.w3.clearkey"); | |
43 testExpected("event.sessionId == keyMessageSessionId", true); | |
44 // The other attributes are not used for this event. | |
45 testExpected("event.initData", null, "==="); | |
46 testExpected("event.message", null, "==="); | |
47 testExpected("event.defaultURL", ""); | |
48 testExpected("event.errorCode", null, "==="); | |
49 testExpected("event.systemCode", 0); | |
50 | |
51 consoleWrite(""); | |
52 // Cause a keyerror by passing an invalid key. | |
53 run("video.webkitAddKey('webkit-org.w3.clearkey', invalidKey, nu
ll, event.sessionId)"); | |
54 } | |
55 | |
56 function keyError(event) | |
57 { | |
58 consoleWrite("keyerror event occurred"); | |
59 | |
60 testExpected("event.target", video); | |
61 testExpected("event instanceof window.MediaKeyEvent", true); | |
62 | |
63 testExpected("event.keySystem", "webkit-org.w3.clearkey"); | |
64 testExpected("event.sessionId == keyMessageSessionId", true); | |
65 // The next three attributes are not used for this event. | |
66 testExpected("event.initData", null, "==="); | |
67 testExpected("event.message", null, "==="); | |
68 testExpected("event.defaultURL", ""); | |
69 testExpected("event.errorCode.code", MediaKeyError.MEDIA_KEYERR_
UNKNOWN); | |
70 // systemCode is not supported by the Clear Key key system. | |
71 testExpected("event.systemCode", 0); | |
72 | |
73 if (isFirstRun) { | |
74 isFirstRun = false; | |
75 runTest(); | |
76 } else { | |
77 consoleWrite(""); | |
78 consoleWrite("Attributes are read-only."); | |
79 run("event.keySystem = 'blah'"); | |
80 run("event.sessionId = 'blah'"); | |
81 run("event.initData = new Uint8Array([0x12])"); | |
82 run("event.message = new Uint8Array([0x12])"); | |
83 run("event.defaultURL = 'example.com'"); | |
84 run("event.errorCode.code = MediaKeyError.MEDIA_KEYERR_CLIEN
T"); | |
85 run("event.systemCode = 123"); | |
86 | |
87 testExpected("event.keySystem", "webkit-org.w3.clearkey"); | |
88 testExpected("event.sessionId == keyMessageSessionId", true)
; | |
89 testExpected("event.initData", null, "==="); | |
90 testExpected("event.message", null, "==="); | |
91 testExpected("event.defaultURL", ""); | |
92 testExpected("event.errorCode.code", MediaKeyError.MEDIA_KEY
ERR_UNKNOWN); | |
93 testExpected("event.systemCode", 0); | |
94 | |
95 endTest(); | |
96 } | |
97 } | |
98 | |
99 function keyMessage(event) | |
100 { | |
101 consoleWrite("keymessage event occurred"); | |
102 | |
103 testExpected("event.target", video); | |
104 testExpected("event instanceof window.MediaKeyEvent", true); | |
105 | |
106 testExpected("event.keySystem", "webkit-org.w3.clearkey"); | |
107 | |
108 consoleWrite("The sessionId should be a non-empty string contain
ing an integer."); | |
109 testExpected("event.sessionId", "", "!="); | |
110 testExpected("event.sessionId", null, "!="); | |
111 testExpected("event.sessionId", undefined, "!="); | |
112 testExpected("isNaN(event.sessionId)", false); | |
113 // Make sure the number is not a float. | |
114 testExpected("String(event.sessionId) == String(parseInt(event.s
essionId))", true); | |
115 consoleWrite("Implementations should avoid sessionIds of 0."); | |
116 testExpected("event.sessionId", 0, ">"); | |
117 // All other events should have this same sessionId. | |
118 keyMessageSessionId = event.sessionId; | |
119 if (isFirstRun) | |
120 firstRunKeyMessageSessionId = keyMessageSessionId; | |
121 else { | |
122 consoleWrite("The sessionsId should be different from the fi
rst run."); | |
123 testExpected("event.sessionId != firstRunKeyMessageSessionId
", true); | |
124 } | |
125 | |
126 // initData is not used for this event. | |
127 testExpected("event.initData", null, "==="); | |
128 // At least for now, the Clear Key message is the initData. | |
129 testArraysEqual("event.message", expectedInitData); | |
130 // Not supported by the test file. | |
131 testExpected("event.defaultURL", ""); | |
132 // The error attributes are not used for this event. | |
133 testExpected("event.errorCode", null, "==="); | |
134 testExpected("event.systemCode", 0); | |
135 | |
136 consoleWrite(""); | |
137 run("video.webkitAddKey('webkit-org.w3.clearkey', key, event.ini
tData, event.sessionId)"); | |
138 } | |
139 | |
140 function needKey(event) | |
141 { | |
142 consoleWrite("needkey event occurred"); | |
143 // Clear the handler (for the first case) to prevent the second
needkey event | |
144 // (there will be one each for audio and video) from being handl
ed. | |
145 video.onwebkitneedkey=null; | |
146 | |
147 testExpected("event.target", video); | |
148 testExpected("event instanceof window.MediaKeyEvent", true); | |
149 | |
150 testExpected("event.keySystem", ""); | |
151 testExpected("event.sessionId", ""); | |
152 testArraysEqual("event.initData", expectedInitData); | |
153 // The other attributes are not used for this event. | |
154 testExpected("event.message", null, "==="); | |
155 testExpected("event.defaultURL", ""); | |
156 testExpected("event.errorCode", null, "==="); | |
157 testExpected("event.systemCode", 0); | |
158 | |
159 consoleWrite(""); | |
160 run("video.webkitGenerateKeyRequest('webkit-org.w3.clearkey', ev
ent.initData)"); | |
161 } | |
162 | |
163 function runTest() | |
164 { | |
165 consoleWrite(""); | |
166 if (isFirstRun) { | |
167 consoleWrite("*** Test events using on* attributes. ***"); | |
168 video.onwebkitkeyadded=keyAdded; | |
169 video.onwebkitkeyerror=keyError; | |
170 video.onwebkitkeymessage=keyMessage; | |
171 video.onwebkitneedkey=needKey; | |
172 } else { | |
173 consoleWrite("*** Test events using addEventListener(). ***"
); | |
174 | |
175 // Clear the on* handlers. | |
176 video.onwebkitkeyadded=null; | |
177 video.onwebkitkeyerror=null; | |
178 video.onwebkitkeymessage=null; | |
179 video.onwebkitneedkey=null; | |
180 | |
181 waitForEvent('webkitkeyadded', keyAdded); | |
182 waitForEvent('webkitkeyerror', keyError); | |
183 waitForEvent('webkitkeymessage', keyMessage); | |
184 waitForEventOnce('webkitneedkey', needKey); | |
185 } | |
186 | |
187 video.src = "../../content/test-encrypted.webm"; | |
188 } | |
189 | |
190 consoleWrite(""); | |
191 consoleWrite("*** Verify the presence of on* attributes. These would
return undefined if they are not present. ***"); | |
192 testExpected("video.onwebkitkeyadded", null, "==="); | |
193 testExpected("video.onwebkitkeyerror", null, "==="); | |
194 testExpected("video.onwebkitkeymessage", null, "==="); | |
195 testExpected("video.onwebkitneedkey", null, "==="); | |
196 | |
197 runTest(); | |
198 | |
199 </script> | |
200 </body> | |
201 </html> | |
OLD | NEW |