Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(48)

Side by Side Diff: LayoutTests/media/encrypted-media/encrypted-media-playback-multiple-sessions.html

Issue 203323006: Add layout test for EME WD using multiple sessions (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>Clear Key Playback with Multiple Sessions</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 with mult iple sessions.</p>
14 <script>
15 async_test(function(test)
16 {
17 var video = document.getElementById("testVideo");
18 var mediaKeys = new MediaKeys("org.w3.clearkey");
19 var mediaKeyAudioSession = null;
20 var mediaKeyVideoSession = null;
xhwang 2014/03/19 01:22:00 nit: audioMediaKeySession/videoMediaKeySession ?
jrummell 2014/03/20 22:55:33 Done.
21 var audioSessionReadyReceived = false;
22 var videoSessionReadyReceived = false;
23
24 // The 2 streams use different key ids, but the keys are the
25 // same.
26 var audioKeyId = "0123456789";
27 var audioKey = new Uint8Array([0x7D, 0xE2, 0x6B, 0xE4, 0xD2, 0xC 2, 0x2F, 0xD7,
28 0xD7, 0x7A, 0x1F, 0x4C, 0xA5, 0xA 9, 0x97, 0x0F]);
29 var videoKeyId = "0123456789012345";
30 var videoKey = audioKey;
31
32 function onNeedKey(event)
33 {
34 assert_equals(event.target, video);
35 assert_true(event instanceof window.MediaKeyNeededEvent);
36 assert_equals(event.type, "needkey");
37
38 // Ideally we could just look at event.contentType, but it
39 // is used to specify the encoding format, not the stream
40 // (and both streams are webm).
41 var keyId = String.fromCharCode.apply(null, event.initData);
42 if (keyId == videoKeyId) {
43 assert_equals(mediaKeyVideoSession, null);
44 mediaKeyVideoSession = mediaKeys.createSession(event.con tentType, event.initData);
45 waitForEventAndRunStep("message", mediaKeyVideoSession, onVideoMessage, test);
46 } else {
47 assert_equals(keyId, audioKeyId);
48 assert_equals(mediaKeyAudioSession, null);
49 mediaKeyAudioSession = mediaKeys.createSession(event.con tentType, event.initData);
50 waitForEventAndRunStep("message", mediaKeyAudioSession, onAudioMessage, test);
51 }
52 }
53
54 function onAudioMessage(event)
55 {
56 assert_true(event instanceof window.MediaKeyMessageEvent);
57 assert_equals(event.target, mediaKeyAudioSession);
58 assert_equals(event.type, "message");
59
60 var keyId = event.message;
61 assert_equals(String.fromCharCode.apply(null, keyId), audioK eyId);
62 var jwkSet = stringToUint8Array(createJWKSet(createJWK(keyId , audioKey)));
63 mediaKeyAudioSession.update(jwkSet);
64 waitForEventAndRunStep("ready", mediaKeyAudioSession, onAudi oReady, test);
65 }
66
67 function onVideoMessage(event)
68 {
69 assert_true(event instanceof window.MediaKeyMessageEvent);
70 assert_equals(event.target, mediaKeyVideoSession);
71 assert_equals(event.type, "message");
72
73 var keyId = event.message;
74 assert_equals(String.fromCharCode.apply(null, keyId), videoK eyId);
75 var jwkSet = stringToUint8Array(createJWKSet(createJWK(keyId , videoKey)));
76 mediaKeyVideoSession.update(jwkSet);
77 waitForEventAndRunStep("ready", mediaKeyVideoSession, onVide oReady, test);
78 }
xhwang 2014/03/19 01:22:00 It seems we can combine onAudioMessage and onVideo
jrummell 2014/03/20 22:55:33 It doesn't really save that much duplication (most
79
80 function onAudioReady(event)
81 {
82 assert_true(event instanceof window.Event);
83 assert_equals(event.target, mediaKeyAudioSession);
84 assert_equals(event.type, "ready");
85 audioSessionReadyReceived = true;
86 }
87
88 function onVideoReady(event)
89 {
90 assert_true(event instanceof window.Event);
91 assert_equals(event.target, mediaKeyVideoSession);
92 assert_equals(event.type, "ready");
93 videoSessionReadyReceived = true;
94 }
xhwang 2014/03/19 01:22:00 ditto for combining methods to reduce duplicate co
jrummell 2014/03/20 22:55:33 Done.
95
96 function onPlaying(event)
97 {
98 // Not using waitForEventAndRunStep() to avoid too many EVEN T(onTimeUpdate) logs.
99 video.addEventListener("timeupdate", onTimeUpdate, true);
100 }
101
102 function onTimeUpdate(event)
103 {
104 if (!audioSessionReadyReceived || !videoSessionReadyReceived )
105 return;
106 if (event.target.currentTime < 0.2)
107 return;
xhwang 2014/03/19 01:22:00 If audio key is provided but video key is not prov
jrummell 2014/03/20 22:55:33 If I change onVideoMessage() to do nothing, the Pl
108
109 test.done();
110 }
111
112 waitForEventAndRunStep("needkey", video, onNeedKey, test);
113 waitForEventAndRunStep("playing", video, onPlaying, test);
114
115 video.src = "../content/test-encrypted-2-keys.webm";
xhwang 2014/03/19 01:22:00 This file is a bit confusing. It's called 2-keys b
jrummell 2014/03/20 22:55:33 Done.
116 video.setMediaKeys(mediaKeys);
117 video.play();
118 }, "Playback using Clear Key key system with multiple sessions.");
119 </script>
120 </body>
121 </html>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698