| OLD | NEW |
| 1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
| 2 <html> | 2 <html> |
| 3 <head> | 3 <head> |
| 4 <title>Test multiple MediaKeys lifetimes</title> | 4 <title>Test multiple MediaKeys lifetimes</title> |
| 5 <script src="encrypted-media-utils.js"></script> | 5 <script src="encrypted-media-utils.js"></script> |
| 6 <script src="../../resources/testharness.js"></script> | 6 <script src="../../resources/testharness.js"></script> |
| 7 <script src="../../resources/testharnessreport.js"></script> | 7 <script src="../../resources/testharnessreport.js"></script> |
| 8 </head> | 8 </head> |
| 9 <body> | 9 <body> |
| 10 <script> | 10 <script> |
| 11 // For this test, create several MediaKeys and verify lifetime. | 11 // For this test, create several MediaKeys and verify lifetime. |
| 12 async_test(function(test) | 12 async_test(function(test) |
| 13 { | 13 { |
| 14 var mediaKeys; | 14 var mediaKeys; |
| 15 var startingActiveDOMObjectCount = window.internals.activeDOMObj
ectCount(document); | 15 var startingSuspendableObjectCount = window.internals.suspendabl
eObjectCount(document); |
| 16 | 16 |
| 17 function numActiveDOMObjectsCreated() | 17 function numSuspendableObjectsCreated() |
| 18 { | 18 { |
| 19 return window.internals.activeDOMObjectCount(document) - sta
rtingActiveDOMObjectCount; | 19 return window.internals.suspendableObjectCount(document) - s
tartingSuspendableObjectCount; |
| 20 } | 20 } |
| 21 | 21 |
| 22 // Create a MediaKeys object. Returns a promise that resolves | 22 // Create a MediaKeys object. Returns a promise that resolves |
| 23 // with the new MediaKeys object. | 23 // with the new MediaKeys object. |
| 24 function createMediaKeys() | 24 function createMediaKeys() |
| 25 { | 25 { |
| 26 return navigator.requestMediaKeySystemAccess('org.w3.clearke
y', getSimpleConfiguration()).then(function(access) { | 26 return navigator.requestMediaKeySystemAccess('org.w3.clearke
y', getSimpleConfiguration()).then(function(access) { |
| 27 return access.createMediaKeys(); | 27 return access.createMediaKeys(); |
| 28 }).then(function(mediaKeys) { | 28 }).then(function(mediaKeys) { |
| 29 return mediaKeys; | 29 return mediaKeys; |
| 30 }); | 30 }); |
| 31 } | 31 } |
| 32 | 32 |
| 33 // Create a few MediaKeys objects. Only keep a reference to the | 33 // Create a few MediaKeys objects. Only keep a reference to the |
| 34 // last one created. | 34 // last one created. |
| 35 createMediaKeys().then(function(result) { | 35 createMediaKeys().then(function(result) { |
| 36 // Should be 1 MediaKeys. | 36 // Should be 1 MediaKeys. |
| 37 // In non-Oilpan, numActiveDOMObjectsCreate() == 1. | 37 // In non-Oilpan, numSuspendableObjectsCreate() == 1. |
| 38 // In Oilpan, numActiveDOMObjectsCreated() <= 4. | 38 // In Oilpan, numSuspendableObjectsCreated() <= 4. |
| 39 // (1 MediaKeysInitializer, | 39 // (1 MediaKeysInitializer, |
| 40 // 1 MediaKeySystemAccessInitializer (navigator.requestMedi
aKeySystemAccess() use above), | 40 // 1 MediaKeySystemAccessInitializer (navigator.requestMedi
aKeySystemAccess() use above), |
| 41 // 1 MediaKeySystemAccessInitializer (isInitDataSupported()
(via getSupportedInitDataType())) and | 41 // 1 MediaKeySystemAccessInitializer (isInitDataSupported()
(via getSupportedInitDataType())) and |
| 42 // 1 ContentDecryptionModuleResultPromise). | 42 // 1 ContentDecryptionModuleResultPromise). |
| 43 assert_between_inclusive(numActiveDOMObjectsCreated(), 1, 4)
; | 43 assert_between_inclusive(numSuspendableObjectsCreated(), 1,
4); |
| 44 | 44 |
| 45 return createMediaKeys(); | 45 return createMediaKeys(); |
| 46 }).then(function(result) { | 46 }).then(function(result) { |
| 47 // Should be 2 MediaKeys. | 47 // Should be 2 MediaKeys. |
| 48 // In non-Oilpan, numActiveDOMObjectsCreate() == 2. | 48 // In non-Oilpan, numSuspendableObjectsCreate() == 2. |
| 49 // In Oilpan, numActiveDOMObjectsCreate() <= 8. | 49 // In Oilpan, numSuspendableObjectsCreate() <= 8. |
| 50 // (2 MediaKeysInitializer, | 50 // (2 MediaKeysInitializer, |
| 51 // 4 MediaKeySystemAccessInitializer and | 51 // 4 MediaKeySystemAccessInitializer and |
| 52 // 2 ContentDecryptionModuleResultPromise). | 52 // 2 ContentDecryptionModuleResultPromise). |
| 53 assert_between_inclusive(numActiveDOMObjectsCreated(), 2, 8)
; | 53 assert_between_inclusive(numSuspendableObjectsCreated(), 2,
8); |
| 54 | 54 |
| 55 return createMediaKeys(); | 55 return createMediaKeys(); |
| 56 }).then(function(result) { | 56 }).then(function(result) { |
| 57 // Should be 3 MediaKeys. | 57 // Should be 3 MediaKeys. |
| 58 // In non-Oilpan, numActiveDOMObjectsCreate() == 3. | 58 // In non-Oilpan, numSuspendableObjectsCreate() == 3. |
| 59 // In Oilpan, numActiveDOMObjectsCreate() <= 12. | 59 // In Oilpan, numSuspendableObjectsCreate() <= 12. |
| 60 // (3 MediaKeysInitializer, | 60 // (3 MediaKeysInitializer, |
| 61 // 6 MediaKeySystemAccessInitializer and | 61 // 6 MediaKeySystemAccessInitializer and |
| 62 // 3 ContentDecryptionModuleResultPromise). | 62 // 3 ContentDecryptionModuleResultPromise). |
| 63 assert_between_inclusive(numActiveDOMObjectsCreated(), 3, 12
); | 63 assert_between_inclusive(numSuspendableObjectsCreated(), 3,
12); |
| 64 | 64 |
| 65 return createMediaKeys(); | 65 return createMediaKeys(); |
| 66 }).then(function(result) { | 66 }).then(function(result) { |
| 67 // Should be 4 MediaKeys. | 67 // Should be 4 MediaKeys. |
| 68 // In non-Oilpan, numActiveDOMObjectsCreate() == 4. | 68 // In non-Oilpan, numSuspendableObjectsCreate() == 4. |
| 69 // In Oilpan, numActiveDOMObjectsCreate() <= 16. | 69 // In Oilpan, numSuspendableObjectsCreate() <= 16. |
| 70 // (4 MediaKeysInitializer, | 70 // (4 MediaKeysInitializer, |
| 71 // 8 MediaKeySystemAccessInitializer and | 71 // 8 MediaKeySystemAccessInitializer and |
| 72 // 4 ContentDecryptionModuleResultPromise). | 72 // 4 ContentDecryptionModuleResultPromise). |
| 73 assert_between_inclusive(numActiveDOMObjectsCreated(), 4, 16
); | 73 assert_between_inclusive(numSuspendableObjectsCreated(), 4,
16); |
| 74 | 74 |
| 75 return createMediaKeys(); | 75 return createMediaKeys(); |
| 76 }).then(function(result) { | 76 }).then(function(result) { |
| 77 // Should be 5 MediaKeys. | 77 // Should be 5 MediaKeys. |
| 78 // In non-Oilpan, numActiveDOMObjectsCreate() == 5. | 78 // In non-Oilpan, numSuspendableObjectsCreate() == 5. |
| 79 // In Oilpan, numActiveDOMObjectsCreate() <= 20. | 79 // In Oilpan, numSuspendableObjectsCreate() <= 20. |
| 80 // (5 MediaKeysInitializer, | 80 // (5 MediaKeysInitializer, |
| 81 // 10 MediaKeySystemAccessInitializer and | 81 // 10 MediaKeySystemAccessInitializer and |
| 82 // 5 ContentDecryptionModuleResultPromise). | 82 // 5 ContentDecryptionModuleResultPromise). |
| 83 assert_between_inclusive(numActiveDOMObjectsCreated(), 5, 20
); | 83 assert_between_inclusive(numSuspendableObjectsCreated(), 5,
20); |
| 84 | 84 |
| 85 // |mediaKeys| refers to the most recently created MediaKeys | 85 // |mediaKeys| refers to the most recently created MediaKeys |
| 86 // object. | 86 // object. |
| 87 mediaKeys = result; | 87 mediaKeys = result; |
| 88 | 88 |
| 89 // In order for the MediaKey objects to be garbage | 89 // In order for the MediaKey objects to be garbage |
| 90 // collected, it needs time to process any pending events. | 90 // collected, it needs time to process any pending events. |
| 91 return delayToAllowEventProcessingPromise(); | 91 return delayToAllowEventProcessingPromise(); |
| 92 }).then(function(result) { | 92 }).then(function(result) { |
| 93 // In non-Oilpan, numActiveDOMObjectsCreated() == 5 | 93 // In non-Oilpan, numSuspendableObjectsCreated() == 5 |
| 94 // (5 MediaKeySession objects). | 94 // (5 MediaKeySession objects). |
| 95 // In Oilpan, numActiveDOMObjectsCreated() <= 23 | 95 // In Oilpan, numSuspendableObjectsCreated() <= 23 |
| 96 // (5 MediaKeysInitializer, | 96 // (5 MediaKeysInitializer, |
| 97 // 12 MediaKeySystemAccessInitializer, | 97 // 12 MediaKeySystemAccessInitializer, |
| 98 // 5 ContentDecryptionModuleResultPromise and | 98 // 5 ContentDecryptionModuleResultPromise and |
| 99 // 1 DOMTimer (in delayToAllowEventProcessingPromise)) | 99 // 1 DOMTimer (in delayToAllowEventProcessingPromise)) |
| 100 assert_between_inclusive(numActiveDOMObjectsCreated(), 5, 23
); | 100 assert_between_inclusive(numSuspendableObjectsCreated(), 5,
23); |
| 101 | 101 |
| 102 // As we only have a reference (|mediaKeys|) to the last | 102 // As we only have a reference (|mediaKeys|) to the last |
| 103 // created MediaKeys object, the other 4 MediaKeys objects | 103 // created MediaKeys object, the other 4 MediaKeys objects |
| 104 // are available to be garbage collected. | 104 // are available to be garbage collected. |
| 105 return createGCPromise(); | 105 return createGCPromise(); |
| 106 }).then(function(result) { | 106 }).then(function(result) { |
| 107 // Should be 1 MediaKeys and DOMTimer. | 107 // Should be 1 MediaKeys and DOMTimer. |
| 108 assert_less_than_equal(numActiveDOMObjectsCreated(), 2); | 108 assert_less_than_equal(numSuspendableObjectsCreated(), 2); |
| 109 assert_equals(typeof mediaKeys.createSession, 'function'); | 109 assert_equals(typeof mediaKeys.createSession, 'function'); |
| 110 | 110 |
| 111 // Release the last MediaKeys object created. | 111 // Release the last MediaKeys object created. |
| 112 mediaKeys = null; | 112 mediaKeys = null; |
| 113 | 113 |
| 114 // Run gc() again to reclaim the remaining MediaKeys object. | 114 // Run gc() again to reclaim the remaining MediaKeys object. |
| 115 return createGCPromise(); | 115 return createGCPromise(); |
| 116 }).then(function(result) { | 116 }).then(function(result) { |
| 117 // Should be just a DOMTimer. | 117 // Should be just a DOMTimer. |
| 118 assert_less_than_equal(numActiveDOMObjectsCreated(), 1); | 118 assert_less_than_equal(numSuspendableObjectsCreated(), 1); |
| 119 test.done(); | 119 test.done(); |
| 120 }).catch(function(error) { | 120 }).catch(function(error) { |
| 121 forceTestFailureFromPromise(test, error); | 121 forceTestFailureFromPromise(test, error); |
| 122 }); | 122 }); |
| 123 }, 'Multiple MediaKeys lifetime'); | 123 }, 'Multiple MediaKeys lifetime'); |
| 124 </script> | 124 </script> |
| 125 </body> | 125 </body> |
| 126 </html> | 126 </html> |
| OLD | NEW |