|
| 1 | +<head> |
| 2 | +<script src="../resources/js-test-pre.js"></script> |
| 3 | +</head> |
| 4 | + |
1 | 5 | <script> |
2 | | - function noop(x) { |
3 | | - } |
| 6 | +function noop(x) { |
| 7 | +} |
4 | 8 |
|
5 | | - function doGC() { |
6 | | - if (window.GCController) { |
7 | | - // GC twice to make sure everything is cleaned up. |
8 | | - for (var i = 0; i < 2; i++) { |
9 | | - window.GCController.collect(); |
10 | | - } |
| 9 | +function doGC() { |
| 10 | + // GC twice to make sure everything is cleaned up. |
| 11 | + for (var i = 0; i < 2; i++) { |
| 12 | + gc(); |
11 | 13 | } |
12 | | - } |
13 | | - |
14 | | - function runtest() { |
| 14 | +} |
| 15 | + |
| 16 | +var countOrig; |
| 17 | +var countAfterCreate; |
| 18 | +var countAfterGC; |
| 19 | +var testObj; |
| 20 | +var refOrig; |
| 21 | +var refAfterGet; |
| 22 | +var refAfterGetGC; |
| 23 | +var refBeforePass; |
| 24 | +var refAfterPass; |
| 25 | +var refAfterPassAndGC; |
| 26 | + |
| 27 | +function runtest() { |
15 | 28 | if (window.testRunner) |
16 | | - testRunner.dumpAsText(); |
17 | | - |
18 | | - |
19 | | - var output = document.getElementById("output"); |
20 | | - output.innerHTML = ""; |
| 29 | + testRunner.dumpAsText(); |
21 | 30 |
|
22 | 31 | // Test that objects are deleted after their JS references are released. |
23 | | - var countOrig = plug.testObjectCount; |
24 | | - o1 = plug.testCreateTestObject(); |
25 | | - o2 = plug.testCreateTestObject(); |
26 | | - o3 = plug.testCreateTestObject(); |
27 | | - var countAfterCreate = plug.testObjectCount; |
28 | | - o1 = o2 = o3 = null; |
| 32 | + countOrig = plug.testObjectCount; |
| 33 | + let x; |
| 34 | + for (let i = 0; i < 50; ++i) |
| 35 | + x = plug.testCreateTestObject(); |
| 36 | + countAfterCreate = plug.testObjectCount; |
| 37 | + x = null; |
29 | 38 | doGC(); |
30 | | - var countAfterGC = plug.testObjectCount; |
31 | | - |
32 | | - output.innerHTML += "--- num test objects:<br>"; |
33 | | - output.innerHTML += "countAfterCreate == countOrig + 3? " |
34 | | - + ((countAfterCreate == countOrig + 3) ? "PASS" : "FAIL") |
35 | | - + "<br>"; |
36 | | - output.innerHTML += "countOrig == countAfterGC? " |
37 | | - + ((countOrig == countAfterGC) ? "PASS" : "FAIL") |
38 | | - + "<br>"; |
39 | | - output.innerHTML += "<br>"; |
| 39 | + countAfterGC = plug.testObjectCount; |
| 40 | + shouldBe('countAfterCreate === countOrig + 50', 'true'); |
| 41 | + shouldBe('countAfterGC < countAfterCreate', 'true'); |
40 | 42 |
|
41 | 43 | // Test that the object refcount returns to normal after JS references |
42 | 44 | // are released. |
43 | | - var testObj = plug.testObject; |
44 | | - var refOrig = testObj.refCount; |
45 | | - var o1 = plug.testObject; |
46 | | - var o2 = plug.testObject; |
47 | | - var o3 = plug.testObject; |
48 | | - var refAfterGet = testObj.refCount; |
49 | | - o1 = o2 = o3 = null; |
| 45 | + testObj = plug.testObject; |
| 46 | + refOrig = testObj.refCount; |
| 47 | + for (let i = 0; i < 50; ++i) |
| 48 | + plug.testObject; |
| 49 | + refAfterGet = testObj.refCount; |
50 | 50 | doGC(); |
51 | | - var refAfterGetGC = testObj.refCount; |
| 51 | + refAfterGetGC = testObj.refCount; |
| 52 | + shouldBe('refAfterGet === refOrig + 50', 'true'); |
| 53 | + shouldBe('refAfterGetGC < refAfterGet', 'true'); |
52 | 54 |
|
53 | 55 | // Test that calling NPN_Invoke with our object as a parameter returns |
54 | 56 | // our refcount to normal (may require a GC). |
55 | | - plug.testPassTestObject("noop", testObj); |
56 | | - plug.testPassTestObject("noop", testObj); |
57 | | - plug.testPassTestObject("noop", testObj); |
| 57 | + refBeforePass = testObj.refCount; |
| 58 | + for (let i = 0; i < 50; ++i) |
| 59 | + plug.testPassTestObject("noop", testObj); |
| 60 | + refAfterPass = testObj.refCount; |
58 | 61 | doGC(); |
59 | | - var refAfterPass = testObj.refCount; |
60 | | - |
61 | | - output.innerHTML += "--- refcount on plug.testObject:<br>"; |
62 | | - output.innerHTML += "originally: " + refOrig + "<br>"; |
63 | | - output.innerHTML += "after GC: " + refAfterGetGC + "<br>"; |
64 | | - output.innerHTML += "after passing: " + refAfterPass + "<br>"; |
65 | | - |
66 | | - var success = (countAfterGC == countOrig) && (refAfterPass == refOrig); |
67 | | - output.innerHTML += (success ? "SUCCESS" : "FAILURE"); |
68 | | - } |
| 62 | + refAfterPassAndGC = testObj.refCount; |
| 63 | + shouldBe('refAfterPass === refBeforePass + 50', 'true'); |
| 64 | + shouldBe('refAfterPassAndGC < refAfterPass', 'true'); |
| 65 | +} |
69 | 66 | </script> |
70 | 67 |
|
71 | 68 | <body onload="runtest()"> |
72 | 69 |
|
73 | | -Test that we can get an NPObject returned through a method on |
74 | | -an NPAPI Object.<P> |
75 | | - |
76 | | -Prints "SUCCESS" on success, "FAILURE" on failure. |
77 | | - |
78 | | -<embed name="plug" type="application/x-webkit-test-netscape"> |
79 | | - |
80 | | -<div id=output>FAILURE</div> |
| 70 | + Test that we can get an NPObject returned through a method on |
| 71 | + an NPAPI Object.<P> |
81 | 72 |
|
| 73 | + <embed name="plug" type="application/x-webkit-test-netscape"> |
82 | 74 | </body> |
83 | | - |
0 commit comments