| <head> |
| <script src="../resources/js-test-pre.js"></script> |
| </head> |
| |
| <script> |
| function noop(x) { |
| } |
| |
| function doGC() { |
| // GC twice to make sure everything is cleaned up. |
| for (var i = 0; i < 2; i++) { |
| gc(); |
| } |
| } |
| |
| var countOrig; |
| var countAfterCreate; |
| var countAfterGC; |
| var testObj; |
| var refOrig; |
| var refAfterGet; |
| var refAfterGetGC; |
| var refBeforePass; |
| var refAfterPass; |
| var refAfterPassAndGC; |
| |
| function runtest() { |
| if (window.testRunner) |
| testRunner.dumpAsText(); |
| |
| // Test that objects are deleted after their JS references are released. |
| countOrig = plug.testObjectCount; |
| let x; |
| for (let i = 0; i < 50; ++i) |
| x = plug.testCreateTestObject(); |
| countAfterCreate = plug.testObjectCount; |
| x = null; |
| doGC(); |
| countAfterGC = plug.testObjectCount; |
| shouldBe('countAfterCreate === countOrig + 50', 'true'); |
| shouldBe('countAfterGC < countAfterCreate', 'true'); |
| |
| // Test that the object refcount returns to normal after JS references |
| // are released. |
| testObj = plug.testObject; |
| refOrig = testObj.refCount; |
| for (let i = 0; i < 50; ++i) |
| plug.testObject; |
| refAfterGet = testObj.refCount; |
| doGC(); |
| refAfterGetGC = testObj.refCount; |
| shouldBe('refAfterGet === refOrig + 50', 'true'); |
| shouldBe('refAfterGetGC < refAfterGet', 'true'); |
| |
| // Test that calling NPN_Invoke with our object as a parameter returns |
| // our refcount to normal (may require a GC). |
| refBeforePass = testObj.refCount; |
| for (let i = 0; i < 50; ++i) |
| plug.testPassTestObject("noop", testObj); |
| refAfterPass = testObj.refCount; |
| doGC(); |
| refAfterPassAndGC = testObj.refCount; |
| shouldBe('refAfterPass === refBeforePass + 50', 'true'); |
| shouldBe('refAfterPassAndGC < refAfterPass', 'true'); |
| } |
| </script> |
| |
| <body onload="runtest()"> |
| |
| Test that we can get an NPObject returned through a method on |
| an NPAPI Object.<P> |
| |
| <embed name="plug" type="application/x-webkit-test-netscape"> |
| </body> |