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

Unified 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: Simplified one test 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 side-by-side diff with in-line comments
Download patch
Index: LayoutTests/media/encrypted-media/encrypted-media-lifetime-mediakeysession-reference.html
diff --git a/LayoutTests/media/encrypted-media/encrypted-media-lifetime-mediakeysession-reference.html b/LayoutTests/media/encrypted-media/encrypted-media-lifetime-mediakeysession-reference.html
new file mode 100644
index 0000000000000000000000000000000000000000..bf7ae18f86bd1d3ee82e7b9f5833be45d870a075
--- /dev/null
+++ b/LayoutTests/media/encrypted-media/encrypted-media-lifetime-mediakeysession-reference.html
@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>Test MediaKeySession lifetime</title>
+ <script src="../w3c-media-utils.js"></script>
+ <script src="../../resources/testharness.js"></script>
+ <script src="../../resources/testharnessreport.js"></script>
+ <script src="../../resources/gc.js"></script>
+ </head>
+ <body>
+ <div id="log"></div>
+ <script>
+ setup({ timeout: 60000 }); // Timeout for all tests to run.
+
+ // Since MediaKeySession (but not MediaKeys) are ActiveDOMObjects,
+ // we can determine when they are garbage collected.
+ // MediaKeySessions remain as long as:
+ // JavaScript has a reference to it
+ // OR (MediaKeys is around AND the session is not CLOSED)
xhwang 2014/03/26 22:59:09 by not CLOSED, do you mean release() has been call
jrummell 2014/03/26 23:32:09 Done.
+ test(function()
+ {
+ var initData = new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7]);
+ var startingActiveDOMObjectsCreated = window.internals.activeDOMObjectCount(document);
xhwang 2014/03/26 22:59:09 Sorry for my typo. I meant startingActiveDOMObject
jrummell 2014/03/26 23:32:09 Done.
+
+ function numActiveDOMObjectsCreated()
+ {
+ return window.internals.activeDOMObjectCount(document) - startingActiveDOMObjectsCreated;
+ }
+
+ var mediaKeys = new MediaKeys("org.w3.clearkey");
+ assert_equals(mediaKeys.keySystem, 'org.w3.clearkey');
+
+ // Verify MediaKeys are not ActiveDOMObjects.
+ assert_equals(numActiveDOMObjectsCreated(), 0, "MediaKeys created an ActiveDOMObject");
xhwang 2014/03/26 22:59:09 s/created/should not be/ ?
jrummell 2014/03/26 23:32:09 I guess it could not be an ActiveDOMObject but cre
+
+ // Create 3 sessions.
+ var mediaKeySession1 = mediaKeys.createSession("video/webm", initData);
+ assert_equals(numActiveDOMObjectsCreated(), 1);
+ var mediaKeySession2 = mediaKeys.createSession("video/webm", initData);
+ assert_equals(numActiveDOMObjectsCreated(), 2);
+ var mediaKeySession3 = mediaKeys.createSession("video/webm", initData);
+ assert_equals(numActiveDOMObjectsCreated(), 3);
+
+ // Run gc(). All sessions should remain as we have a reference
+ // to each one.
+ gc();
+ assert_equals(numActiveDOMObjectsCreated(), 3);
+
+ // Now drop references to 2 of the sessions. Even though we
+ // don't have a reference, MediaKeys is still around (and the
+ // sessions aren't closed), so the objects won't be collected.
+ mediaKeySession2 = null;
+ mediaKeySession3 = null;
+ gc();
+ assert_equals(numActiveDOMObjectsCreated(), 3);
+
+ // Now drop the reference to MediaKeys. It and the 2
+ // unreferenced sessions should be collected. Since
+ // MediaKeySessions remain alive as long as MediaKeys is around,
+ // it is possible that gc() checks one or both MediaKeySession
+ // objects first, and doesn't collect them since MediaKeys
+ // hasn't been collected yet. Thus run gc() twice, to ensure
+ // that the unreferenced MediaKeySession objects get collected.
xhwang 2014/03/26 22:59:09 Thanks for the detailed explanation. This is much
+ mediaKeys = null;
+ gc();
+ gc();
+ assert_equals(numActiveDOMObjectsCreated(), 1);
+
+ // Drop the reference to the first session. It should get
+ // collected now since MediaKeys is gone.
+ mediaKeySession1 = null;
+ gc();
+ assert_equals(numActiveDOMObjectsCreated(), 0);
+ }, "MediaKeySession lifetime without release()", { timeout: 60000 });
+ </script>
+ </body>
+</html>

Powered by Google App Engine
This is Rietveld 408576698