diff options
Diffstat (limited to 'dom/plugins/test/mochitest/test_GCrace.html')
-rw-r--r-- | dom/plugins/test/mochitest/test_GCrace.html | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/dom/plugins/test/mochitest/test_GCrace.html b/dom/plugins/test/mochitest/test_GCrace.html new file mode 100644 index 000000000..50b598ef1 --- /dev/null +++ b/dom/plugins/test/mochitest/test_GCrace.html @@ -0,0 +1,62 @@ +<head> + <title>GC race with actors on the parent</title> + + <script type="text/javascript" + src="/tests/SimpleTest/SimpleTest.js"></script> + <script type="text/javascript" src="plugin-utils.js"></script> + <link rel="stylesheet" type="text/css" + href="/tests/SimpleTest/test.css" /> +<body onload="start()"> + <p id="display"></p> + + <script class="testbody" type="application/javascript"> + SimpleTest.waitForExplicitFinish(); + SimpleTest.requestFlakyTimeout("untriaged"); + setTestPluginEnabledState(SpecialPowers.Ci.nsIPluginTag.STATE_ENABLED); + + function start() { + setTimeout(checkGCRace, 1000); + } + + var nested = false; + + function cb(f) { + ok(!nested, "Callback shouldn't occur in a nested stack frame"); + try { + f(35); + ok(true, "Callback was called, no crash"); + } + catch (e) { + ok(false, "Exception calling callback object: " + e); + } + SimpleTest.executeSoon(removePlugin); + } + + function removePlugin() { + var p = document.getElementById('p'); + p.parentNode.removeChild(p); + p = null; + SpecialPowers.Cu.forceGC(); + SimpleTest.finish(); + } + + function checkGCRace() { + nested = true; + + // The plugin will hand back a function and immediately sleep. + // We will lose our only reference to the function and force GC, followed + // by calling us with that function object again. We should be able to + // call the function and not crash. + var p = document.getElementById('p'); + var f = p.checkGCRace(cb); + f = null; // 'f' should be collected next GC + + nested = false; + + setTimeout(function() { + SpecialPowers.Cu.forceGC(); + }, 2000); + } + </script> + + <embed id="p" type="application/x-test" wmode="window"></embed> |