| 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 <div id="log"></div> | 10 <div id="log"></div> |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 return mediaKeySession.generateRequest(initDataType, ini
tData).then(function() { | 52 return mediaKeySession.generateRequest(initDataType, ini
tData).then(function() { |
| 53 return mediaKeySession; | 53 return mediaKeySession; |
| 54 }); | 54 }); |
| 55 }); | 55 }); |
| 56 } | 56 } |
| 57 | 57 |
| 58 // Create a few MediaKeys + MediaKeySession objects. Only keep | 58 // Create a few MediaKeys + MediaKeySession objects. Only keep |
| 59 // a reference to the last one created. | 59 // a reference to the last one created. |
| 60 createMediaKeyWithMediaKeySession().then(function(mediaKeySessio
n) { | 60 createMediaKeyWithMediaKeySession().then(function(mediaKeySessio
n) { |
| 61 // Should be 1 MediaKeySession. | 61 // Should be 1 MediaKeySession. |
| 62 assert_equals(numActiveDOMObjectsCreated(), 1); | 62 // Since ScriptPromiseResolver is an ActiveDOMObject, |
| 63 // MediaKeysInitializer, MediaKeySystemAccessInitializer, an
d |
| 64 // ScriptPromiseResolver owned by ContentDecryptionModuleRes
ultPromise are |
| 65 // also counted. So numActiveDOMObjectsCreated() is 4 when e
nabling oilpan. |
| 66 assert_less_than_equal(numActiveDOMObjectsCreated(), 4); |
| 63 return createMediaKeyWithMediaKeySession(); | 67 return createMediaKeyWithMediaKeySession(); |
| 64 }).then(function(mediaKeySession) { | 68 }).then(function(mediaKeySession) { |
| 65 // Should be 2 MediaKeySessions. | 69 // Should be 2 MediaKeySessions. |
| 66 assert_equals(numActiveDOMObjectsCreated(), 2); | 70 assert_less_than_equal(numActiveDOMObjectsCreated(), 8); |
| 67 return createMediaKeyWithMediaKeySession(); | 71 return createMediaKeyWithMediaKeySession(); |
| 68 }).then(function(mediaKeySession) { | 72 }).then(function(mediaKeySession) { |
| 69 // Should be 3 MediaKeySessions. | 73 // Should be 3 MediaKeySessions. |
| 70 assert_equals(numActiveDOMObjectsCreated(), 3); | 74 assert_less_than_equal(numActiveDOMObjectsCreated(), 12); |
| 71 return createMediaKeyWithMediaKeySession(); | 75 return createMediaKeyWithMediaKeySession(); |
| 72 }).then(function(mediaKeySession) { | 76 }).then(function(mediaKeySession) { |
| 73 // Should be 4 MediaKeySessions. | 77 // Should be 4 MediaKeySessions. |
| 74 assert_equals(numActiveDOMObjectsCreated(), 4); | 78 assert_less_than_equal(numActiveDOMObjectsCreated(), 16); |
| 75 return createMediaKeyWithMediaKeySession(); | 79 return createMediaKeyWithMediaKeySession(); |
| 76 }).then(function(mediaKeySession) { | 80 }).then(function(mediaKeySession) { |
| 77 // Should be 5 MediaKeySessions. | 81 // Should be 5 MediaKeySessions. |
| 78 assert_equals(numActiveDOMObjectsCreated(), 5); | 82 assert_less_than_equal(numActiveDOMObjectsCreated(), 20); |
| 79 | 83 |
| 80 // |mediaKeys| refers to the most recently created MediaKeys | 84 // |mediaKeys| refers to the most recently created MediaKeys |
| 81 // object. | 85 // object. |
| 82 // | 86 // |
| 83 // In order for the MediaKeySession objects to have no | 87 // In order for the MediaKeySession objects to have no |
| 84 // outstanding activity so that they can be garbage | 88 // outstanding activity so that they can be garbage |
| 85 // collected, it needs time to process any pending events. | 89 // collected, it needs time to process any pending events. |
| 86 // As a "message" event is generated when a new session is | 90 // As a "message" event is generated when a new session is |
| 87 // created, we need to allow the event to run (we're not | 91 // created, we need to allow the event to run (we're not |
| 88 // doing anything with the event in this test). | 92 // doing anything with the event in this test). |
| 89 return delayToAllowEventProcessingPromise(); | 93 return delayToAllowEventProcessingPromise(); |
| 90 }).then(function(result) { | 94 }).then(function(result) { |
| 91 // In non-Oilpan, numActiveDOMObjectsCreated() is 5 | 95 // In non-Oilpan, numActiveDOMObjectsCreated() is 5 |
| 92 // (5 MediaKeySession objects). | 96 // (5 MediaKeySession objects). |
| 93 // In Oilpan, numActiveDOMObjectsCreated() is 6 | 97 // In Oilpan, numActiveDOMObjectsCreated() is 21 |
| 94 // (5 MediaKeySession objects + 1 DOMTimer created in the | 98 // (5 MediaKeySession objects + 15 ScriptPromiseResolvers |
| 99 // + 1 DOMTimer created in the |
| 95 // above delayToAllowEventProcessingPromise()). | 100 // above delayToAllowEventProcessingPromise()). |
| 96 assert_true(numActiveDOMObjectsCreated() >= 5); | 101 assert_true(numActiveDOMObjectsCreated() >= 5); |
| 97 | 102 |
| 98 // As we only have a reference (|mediaKeys|) to the last | 103 // As we only have a reference (|mediaKeys|) to the last |
| 99 // created MediaKeys object, the other 4 MediaKeys objects | 104 // created MediaKeys object, the other 4 MediaKeys objects |
| 100 // are available to be garbage collected. | 105 // are available to be garbage collected. |
| 101 // | 106 // |
| 102 // Since MediaKeySessions remain alive as long as MediaKeys | 107 // Since MediaKeySessions remain alive as long as MediaKeys |
| 103 // is around, it is possible that gc() checks the | 108 // is around, it is possible that gc() checks the |
| 104 // MediaKeySession object first, and doesn't collect it | 109 // MediaKeySession object first, and doesn't collect it |
| (...skipping 21 matching lines...) Expand all Loading... |
| 126 }).then(function(result) { | 131 }).then(function(result) { |
| 127 assert_equals(numActiveDOMObjectsCreated(), 0); | 132 assert_equals(numActiveDOMObjectsCreated(), 0); |
| 128 test.done(); | 133 test.done(); |
| 129 }).catch(function(error) { | 134 }).catch(function(error) { |
| 130 forceTestFailureFromPromise(test, error); | 135 forceTestFailureFromPromise(test, error); |
| 131 }); | 136 }); |
| 132 }, 'Multiple MediaKeys lifetime'); | 137 }, 'Multiple MediaKeys lifetime'); |
| 133 </script> | 138 </script> |
| 134 </body> | 139 </body> |
| 135 </html> | 140 </html> |
| OLD | NEW |