blob: efbe73c9035579cca659fe1cfb2cfc0c9d74f846 [file] [log] [blame]
(async function(testRunner) {
var {page, session, dp} = await testRunner.startBlank(
`Test that DOM node and its JS wrapper appear as a single node.`);
await session.evaluate(`
var retainer = null;
function run() {
function leaking() {
console.log('leaking');
}
var div = document.createElement('div');
div.addEventListener('click', leaking, true);
retainer = div;
}
run();
`);
var Helper = await testRunner.loadScript('resources/heap-snapshot-common.js');
var helper = await Helper(testRunner, session);
var snapshot = await helper.takeHeapSnapshot();
var node;
for (var it = snapshot._allNodes(); it.hasNext(); it.next()) {
if (it.node.type() === 'closure' && it.node.name() === 'leaking') {
node = it.node;
break;
}
}
if (node)
testRunner.log('SUCCESS: found ' + node.name());
else
return testRunner.fail('cannot find leaking node');
var retainers = helper.firstRetainingPath(node).map(
node => (node.name().includes("::"))
? "Detached InternalNode" : node.name());
var actual = retainers.join(', ');
testRunner.log(`SUCCESS: retaining path = [${actual}]`);
testRunner.completeTest();
})