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

Side by Side Diff: LayoutTests/media/encrypted-media/encrypted-media-lifetime-mediakeysession-reference.html

Issue 209103002: Add lifetime tests for MediaKeySession (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Move gc() 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
« no previous file with comments | « no previous file | LayoutTests/media/encrypted-media/encrypted-media-lifetime-mediakeysession-reference-expected.txt » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>Test MediaKeySession lifetime</title>
5 <script src="../w3c-media-utils.js"></script>
6 <script src="../../resources/testharness.js"></script>
7 <script src="../../resources/testharnessreport.js"></script>
8 <script src="../../resources/gc.js"></script>
9 </head>
10 <body>
11 <div id="log"></div>
12 <script>
13 // Since MediaKeySession (but not MediaKeys) are ActiveDOMObjects,
14 // we can determine when they are garbage collected.
15 // MediaKeySessions remain as long as:
16 // JavaScript has a reference to it
17 // OR (MediaKeys is around AND the session has not received a clos e() event)
18 test(function()
19 {
20 var initData = new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7]);
21 var startingActiveDOMObjectCount = window.internals.activeDOMObj ectCount(document);
22
23 function numActiveDOMObjectsCreated()
24 {
25 return window.internals.activeDOMObjectCount(document) - sta rtingActiveDOMObjectCount;
26 }
27
28 var mediaKeys = new MediaKeys("org.w3.clearkey");
29 assert_equals(mediaKeys.keySystem, 'org.w3.clearkey');
30
31 // Verify MediaKeys are not ActiveDOMObjects.
32 assert_equals(numActiveDOMObjectsCreated(), 0, "MediaKeys create d an ActiveDOMObject");
33
34 // Create 3 sessions.
35 var mediaKeySession1 = mediaKeys.createSession("video/webm", ini tData);
36 assert_equals(numActiveDOMObjectsCreated(), 1);
37 var mediaKeySession2 = mediaKeys.createSession("video/webm", ini tData);
38 assert_equals(numActiveDOMObjectsCreated(), 2);
39 var mediaKeySession3 = mediaKeys.createSession("video/webm", ini tData);
40 assert_equals(numActiveDOMObjectsCreated(), 3);
41
42 // Run gc(). All sessions should remain as we have a reference
43 // to each one.
44 gc();
45 assert_equals(numActiveDOMObjectsCreated(), 3);
46
47 // Now drop references to 2 of the sessions. Even though we
48 // don't have a reference, MediaKeys is still around (and the
49 // sessions aren't closed), so the objects won't be collected.
50 mediaKeySession2 = null;
51 mediaKeySession3 = null;
52 gc();
53 assert_equals(numActiveDOMObjectsCreated(), 3);
54
55 // Now drop the reference to MediaKeys. It and the 2
56 // unreferenced sessions should be collected. Since
57 // MediaKeySessions remain alive as long as MediaKeys is around,
58 // it is possible that gc() checks one or both MediaKeySession
59 // objects first, and doesn't collect them since MediaKeys
60 // hasn't been collected yet. Thus run gc() twice, to ensure
61 // that the unreferenced MediaKeySession objects get collected.
62 mediaKeys = null;
63 gc();
64 gc();
65 assert_equals(numActiveDOMObjectsCreated(), 1);
66
67 // Drop the reference to the first session. It should get
68 // collected now since MediaKeys is gone.
69 mediaKeySession1 = null;
70 gc();
71 assert_equals(numActiveDOMObjectsCreated(), 0);
72 }, "MediaKeySession lifetime without release()");
73 </script>
74 </body>
75 </html>
OLDNEW
« no previous file with comments | « no previous file | LayoutTests/media/encrypted-media/encrypted-media-lifetime-mediakeysession-reference-expected.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698