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

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

Issue 783423003: Make ScriptPromiseResolver RefCountedWillBeRefCountedGarbageCollected. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years 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
OLDNEW
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <html> 2 <html>
3 <head> 3 <head>
4 <title>MediaKeySession lifetime after release()</title> 4 <title>MediaKeySession lifetime after release()</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 18 matching lines...) Expand all
29 return window.internals.activeDOMObjectCount(document) - sta rtingActiveDOMObjectCount; 29 return window.internals.activeDOMObjectCount(document) - sta rtingActiveDOMObjectCount;
30 } 30 }
31 31
32 // Create 2 sessions. 32 // Create 2 sessions.
33 navigator.requestMediaKeySystemAccess('org.w3.clearkey').then(fu nction(access) { 33 navigator.requestMediaKeySystemAccess('org.w3.clearkey').then(fu nction(access) {
34 return access.createMediaKeys(); 34 return access.createMediaKeys();
35 }).then(function(result) { 35 }).then(function(result) {
36 mediaKeys = result; 36 mediaKeys = result;
37 37
38 // Verify MediaKeys are not an ActiveDOMObject. 38 // Verify MediaKeys are not an ActiveDOMObject.
39 assert_equals(numActiveDOMObjectsCreated(), 0, 'MediaKeys.cr eate()'); 39 // MediaKeys are not an ActiveDOMObject, but when creating M ediaKeys,
40 // creating ScriptPromiseResolvers, which are ActiveDOMObjec ts.
41 // so numActiveDOMObjetsCreated() <= 2 (1 is MediaKeysInitia lizer and
42 // the other is MediaKeySystemAccessInitializer).
43 // When enabling oilpan, the ScriptPromiseResolvers are not destroyed
44 // immediately. So numActiveDOMObjectsCreate() <= 2.
45 assert_less_than_equal(numActiveDOMObjectsCreated(), 2, 'Med iaKeys.create()');
40 46
41 mediaKeySession1 = mediaKeys.createSession(); 47 mediaKeySession1 = mediaKeys.createSession();
42 return mediaKeySession1.generateRequest(initDataType, initDa ta); 48 return mediaKeySession1.generateRequest(initDataType, initDa ta);
43 }).then(function() { 49 }).then(function() {
44 // Should be 1 MediaKeySession. 50 // Should be 1 MediaKeySession.
45 assert_equals(numActiveDOMObjectsCreated(), 1, 'mediaKeys.cr eateSession(1)'); 51 // numActiveDOMObjectsCreated() <= 4 (1 is a ScriptPromiseRe solver owned by
52 // ContentDecryptionModuleResultPromise and the other is Med iaKeySession).
53 assert_less_than_equal(numActiveDOMObjectsCreated(), 4, 'Med iaKeys.createSession(1)');
46 mediaKeySession2 = mediaKeys.createSession(); 54 mediaKeySession2 = mediaKeys.createSession();
47 return mediaKeySession2.generateRequest(initDataType, initDa ta); 55 return mediaKeySession2.generateRequest(initDataType, initDa ta);
48 }).then(function() { 56 }).then(function() {
49 // Should be 2 MediaKeySessions. 57 // Should be 2 MediaKeySessions.
50 assert_equals(numActiveDOMObjectsCreated(), 2, 'mediaKeys.cr eateSession(2)'); 58 // numActiveDOMObjectsCreated() <= 6 (ditto)
51 59 assert_less_than_equal(numActiveDOMObjectsCreated(), 6, 'med iaKeys.createSession(2)');
52 // Close the sessions. Once completed, only the JS 60 // Close the sessions. Once completed, only the JS
53 // reference to them keeps them around. 61 // reference to them keeps them around.
54 return mediaKeySession1.close(); 62 return mediaKeySession1.close();
55 }).then(function(result) { 63 }).then(function(result) {
56 return mediaKeySession2.close(); 64 return mediaKeySession2.close();
57 }).then(function(result) { 65 }).then(function(result) {
58 // Since both sessions have been closed, dropping the 66 // Since both sessions have been closed, dropping the
59 // reference to them from JS will result in the session 67 // reference to them from JS will result in the session
60 // being garbage-collected. 68 // being garbage-collected.
61 // Should be 2 MediaKeySessions. 69 // Should be 2 MediaKeySessions.
62 assert_equals(numActiveDOMObjectsCreated(), 2); 70
71 // MediaKeySession::close uses ContentDecryptionModuleResult Promise.
72 // ContentDecryptionModuleResultPromise owns 1 ScriptPromise Resolver, an
73 // ActiveDOMObject. When enabling oilpan,
74 // the ContentDecryptionModuleResultPromise might have not b een collected yet.
75 // So numActiveDOMObjectsCreated() <= 8.
76 assert_less_than_equal(numActiveDOMObjectsCreated(), 8, 'aft er close');
63 77
64 mediaKeySession1 = null; 78 mediaKeySession1 = null;
65 return createGCPromise(); 79 return createGCPromise();
66 }).then(function(result) { 80 }).then(function(result) {
67 // Only mediaKeySession2 should remain. 81 // Only mediaKeySession2 should remain.
68 assert_equals(numActiveDOMObjectsCreated(), 1, 'mediaKeySess ion1 not collected'); 82 assert_equals(numActiveDOMObjectsCreated(), 1, 'mediaKeySess ion1 not collected');
69 83
70 mediaKeySession2 = null; 84 mediaKeySession2 = null;
71 return createGCPromise(); 85 return createGCPromise();
72 }).then(function(result) { 86 }).then(function(result) {
73 assert_equals(numActiveDOMObjectsCreated(), 0, 'mediaKeySess ion2 not collected'); 87 assert_equals(numActiveDOMObjectsCreated(), 0, 'mediaKeySess ion2 not collected');
74 test.done(); 88 test.done();
75 }).catch(function(error) { 89 }).catch(function(error) {
76 forceTestFailureFromPromise(test, error); 90 forceTestFailureFromPromise(test, error);
77 }); 91 });
78 }, 'MediaKeySession lifetime after release()'); 92 }, 'MediaKeySession lifetime after release()');
79 </script> 93 </script>
80 </body> 94 </body>
81 </html> 95 </html>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698