diff options
Diffstat (limited to 'testing/web-platform/tests/encrypted-media/Google/chromium_specific_disabled/encrypted-media-lifetime-multiple-mediakeys.html')
-rw-r--r-- | testing/web-platform/tests/encrypted-media/Google/chromium_specific_disabled/encrypted-media-lifetime-multiple-mediakeys.html | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/testing/web-platform/tests/encrypted-media/Google/chromium_specific_disabled/encrypted-media-lifetime-multiple-mediakeys.html b/testing/web-platform/tests/encrypted-media/Google/chromium_specific_disabled/encrypted-media-lifetime-multiple-mediakeys.html new file mode 100644 index 000000000..42638a069 --- /dev/null +++ b/testing/web-platform/tests/encrypted-media/Google/chromium_specific_disabled/encrypted-media-lifetime-multiple-mediakeys.html @@ -0,0 +1,131 @@ +<!DOCTYPE html> +<!-- Copyright © 2016 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). --> +<html> + <head> + <title>Test multiple MediaKeys lifetimes</title> + <script src="encrypted-media-utils.js"></script> +<!-- + Test requires Chromium specific content and is being disabled. + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> +--> + </head> + <body> + <div id="log"></div> + <script> + // For this test, create several MediaKeys and verify lifetime. + async_test(function(test) + { + var mediaKeys; + var startingActiveDOMObjectCount = window.internals.activeDOMObjectCount(document); + + function numActiveDOMObjectsCreated() + { + return window.internals.activeDOMObjectCount(document) - startingActiveDOMObjectCount; + } + + // Create a MediaKeys object. Returns a promise that resolves + // with the new MediaKeys object. + function createMediaKeys() + { + return navigator.requestMediaKeySystemAccess('org.w3.clearkey', getSimpleConfiguration()).then(function(access) { + return access.createMediaKeys(); + }).then(function(mediaKeys) { + return mediaKeys; + }); + } + + // Create a few MediaKeys objects. Only keep a reference to the + // last one created. + createMediaKeys().then(function(result) { + // Should be 1 MediaKeys. + // In non-Oilpan, numActiveDOMObjectsCreate() == 1. + // In Oilpan, numActiveDOMObjectsCreated() <= 4. + // (1 MediaKeysInitializer, + // 1 MediaKeySystemAccessInitializer (navigator.requestMediaKeySystemAccess() use above), + // 1 MediaKeySystemAccessInitializer (isInitDataSupported() (via getSupportedInitDataType())) and + // 1 ContentDecryptionModuleResultPromise). + assert_between_inclusive(numActiveDOMObjectsCreated(), 1, 4); + + return createMediaKeys(); + }).then(function(result) { + // Should be 2 MediaKeys. + // In non-Oilpan, numActiveDOMObjectsCreate() == 2. + // In Oilpan, numActiveDOMObjectsCreate() <= 8. + // (2 MediaKeysInitializer, + // 4 MediaKeySystemAccessInitializer and + // 2 ContentDecryptionModuleResultPromise). + assert_between_inclusive(numActiveDOMObjectsCreated(), 2, 8); + + return createMediaKeys(); + }).then(function(result) { + // Should be 3 MediaKeys. + // In non-Oilpan, numActiveDOMObjectsCreate() == 3. + // In Oilpan, numActiveDOMObjectsCreate() <= 12. + // (3 MediaKeysInitializer, + // 6 MediaKeySystemAccessInitializer and + // 3 ContentDecryptionModuleResultPromise). + assert_between_inclusive(numActiveDOMObjectsCreated(), 3, 12); + + return createMediaKeys(); + }).then(function(result) { + // Should be 4 MediaKeys. + // In non-Oilpan, numActiveDOMObjectsCreate() == 4. + // In Oilpan, numActiveDOMObjectsCreate() <= 16. + // (4 MediaKeysInitializer, + // 8 MediaKeySystemAccessInitializer and + // 4 ContentDecryptionModuleResultPromise). + assert_between_inclusive(numActiveDOMObjectsCreated(), 4, 16); + + return createMediaKeys(); + }).then(function(result) { + // Should be 5 MediaKeys. + // In non-Oilpan, numActiveDOMObjectsCreate() == 5. + // In Oilpan, numActiveDOMObjectsCreate() <= 20. + // (5 MediaKeysInitializer, + // 10 MediaKeySystemAccessInitializer and + // 5 ContentDecryptionModuleResultPromise). + assert_between_inclusive(numActiveDOMObjectsCreated(), 5, 20); + + // |mediaKeys| refers to the most recently created MediaKeys + // object. + mediaKeys = result; + + // In order for the MediaKey objects to be garbage + // collected, it needs time to process any pending events. + return delayToAllowEventProcessingPromise(); + }).then(function(result) { + // In non-Oilpan, numActiveDOMObjectsCreated() == 5 + // (5 MediaKeySession objects). + // In Oilpan, numActiveDOMObjectsCreated() <= 23 + // (5 MediaKeysInitializer, + // 12 MediaKeySystemAccessInitializer, + // 5 ContentDecryptionModuleResultPromise and + // 1 DOMTimer (in delayToAllowEventProcessingPromise)) + assert_between_inclusive(numActiveDOMObjectsCreated(), 5, 23); + + // As we only have a reference (|mediaKeys|) to the last + // created MediaKeys object, the other 4 MediaKeys objects + // are available to be garbage collected. + return createGCPromise(); + }).then(function(result) { + // Should be 1 MediaKeys and DOMTimer. + assert_less_than_equal(numActiveDOMObjectsCreated(), 2); + assert_equals(typeof mediaKeys.createSession, 'function'); + + // Release the last MediaKeys object created. + mediaKeys = null; + + // Run gc() again to reclaim the remaining MediaKeys object. + return createGCPromise(); + }).then(function(result) { + // Should be just a DOMTimer. + assert_less_than_equal(numActiveDOMObjectsCreated(), 1); + test.done(); + }).catch(function(error) { + forceTestFailureFromPromise(test, error); + }); + }, 'Multiple MediaKeys lifetime'); + </script> + </body> +</html> |