OLD | NEW |
---|---|
(Empty) | |
1 <!DOCTYPE html> | |
2 <html> | |
3 <head> | |
4 <title>Set MediaKeys multiple times in parallel</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="video"></video> | |
11 <div id="log"></div> | |
12 <script> | |
13 // Wait for an 'encrypted' event as a promise. | |
14 function wait_for_encrypted_event(video) | |
15 { | |
16 return new Promise(function(resolve) { | |
17 video.addEventListener('encrypted', function listener(e) { | |
18 video.removeEventListener(listener); | |
19 resolve(); | |
20 }); | |
21 }); | |
22 }; | |
23 | |
24 // Return a promise that calls setMediaKeys() and returns 1 if | |
25 // resolved, 0 if rejected. | |
26 function setMediaKeys_as_count(video, mediaKeys) | |
27 { | |
28 return video.setMediaKeys(mediaKeys).then(function() { | |
29 return 1; | |
30 }, function() { | |
31 return 0; | |
32 }); | |
33 }; | |
34 | |
35 // Return the sum of the results from |promises|. Each promise | |
36 // must return a number. | |
37 function count_promise_results(promises) | |
38 { | |
39 var count = 0; | |
40 var result = Promise.resolve(null); | |
41 | |
42 promises.forEach(function(promise) { | |
43 result = result.then(function() { | |
44 return promise; | |
45 }).then(function(i) { | |
46 count += i; | |
47 }); | |
48 }); | |
49 | |
50 return result.then(function() { return count; }); | |
51 }; | |
52 | |
53 promise_test(function(test) | |
54 { | |
55 var video = document.getElementById('video'); | |
56 var access; | |
57 var mediaKeys1; | |
58 var mediaKeys2; | |
59 var mediaKeys3; | |
60 var mediaKeys4; | |
61 var mediaKeys5; | |
62 | |
63 // Start a video now so that it is waiting for MediaKeys | |
64 // in order to continue. | |
65 video.src = '../content/test-encrypted.webm'; | |
66 video.play(); | |
67 return wait_for_encrypted_event(video).then(function() { | |
68 return navigator.requestMediaKeySystemAccess('org.w3.clearke y', [{}]); | |
69 }).then(function(result) { | |
70 access = result; | |
71 return access.createMediaKeys(); | |
72 }).then(function(result) { | |
73 mediaKeys1 = result; | |
74 return access.createMediaKeys(); | |
75 }).then(function(result) { | |
76 mediaKeys2 = result; | |
77 return access.createMediaKeys(); | |
78 }).then(function(result) { | |
79 mediaKeys3 = result; | |
80 return access.createMediaKeys(); | |
81 }).then(function(result) { | |
82 mediaKeys4 = result; | |
83 return access.createMediaKeys(); | |
84 }).then(function(result) { | |
85 mediaKeys5 = result; | |
86 var p1 = setMediaKeys_as_count(video, mediaKeys1); | |
87 var p2 = setMediaKeys_as_count(video, mediaKeys2); | |
88 var p3 = setMediaKeys_as_count(video, mediaKeys3); | |
89 var p4 = setMediaKeys_as_count(video, mediaKeys4); | |
90 var p5 = setMediaKeys_as_count(video, mediaKeys5); | |
91 return count_promise_results([p1, p2, p3, p4, p5]); | |
92 }).then(function(count) { | |
93 // At least one of the setMediaKeys() calls should have | |
94 // succeeded. | |
xhwang
2015/07/24 20:56:36
can we be a bit more strict that the first call sh
jrummell
2015/07/24 23:11:01
Done.
| |
95 assert_greater_than(count, 0); | |
96 }); | |
97 }, 'Set MediaKeys multiple times in parallel.'); | |
98 </script> | |
99 </body> | |
100 </html> | |
OLD | NEW |