| OLD | NEW |
| (Empty) |
| 1 <!DOCTYPE html> | |
| 2 <html> | |
| 3 <head> | |
| 4 <script src="../../resources/js-test.js"></script> | |
| 5 </head> | |
| 6 <body> | |
| 7 <script> | |
| 8 description("Tests the RTCPeerConnection lifetime."); | |
| 9 | |
| 10 var dc = null; | |
| 11 | |
| 12 function dataChannelMessage(m) | |
| 13 { | |
| 14 testPassed("dataChannelMessage"); | |
| 15 finishJSTest(); | |
| 16 } | |
| 17 | |
| 18 function dataChannelOpen() | |
| 19 { | |
| 20 testPassed("dataChannelOpen"); | |
| 21 dc.onmessage = dataChannelMessage; | |
| 22 shouldNotThrow("dc.send('xyzzy');"); | |
| 23 } | |
| 24 | |
| 25 function createPeerConnectionAndDataChannel() | |
| 26 { | |
| 27 // The Peer Connection object is leaked | |
| 28 var pc = new webkitRTCPeerConnection({iceServers:[]}, null); | |
| 29 dc = pc.createDataChannel("label"); | |
| 30 dc.onopen = dataChannelOpen; | |
| 31 } | |
| 32 | |
| 33 var pcB = null; | |
| 34 var observationB = null; | |
| 35 | |
| 36 // Test that the PeerConnection object is gc'd if close is called. | |
| 37 var pcA = new webkitRTCPeerConnection(null, null); | |
| 38 // Do not pass the object directly to observeGC function. This may | |
| 39 // remain live on this function's stack preventing GC from collecting | |
| 40 // it. Accessing the object inside an inner function will prevent any | |
| 41 // unneeded references on this function's stack. | |
| 42 var observationA = internals.observeGC((() => {return pcA;})()); | |
| 43 pcA.close(); | |
| 44 pcA = null; | |
| 45 asyncGC(function() { | |
| 46 shouldBeTrue('observationA.wasCollected'); | |
| 47 observationA = null; | |
| 48 | |
| 49 // Test that the PeerConnection object is not gc'd if close is not called. | |
| 50 pcB = new webkitRTCPeerConnection(null, null); | |
| 51 // Do not pass the object directly to observeGC function. This may | |
| 52 // remain live on this function's stack preventing GC from collecting | |
| 53 // it. Accessing the object inside an inner function will prevent any | |
| 54 // unneeded references on this function's stack. | |
| 55 observationB = internals.observeGC((() => {return pcB;})()); | |
| 56 pcB = null; | |
| 57 asyncGC(function() { | |
| 58 shouldBeFalse('observationB.wasCollected'); | |
| 59 observationB = null; | |
| 60 | |
| 61 // This test times out if the Peer connection object is garbage collecte
d. | |
| 62 createPeerConnectionAndDataChannel(); | |
| 63 gc(); | |
| 64 }); | |
| 65 }); | |
| 66 | |
| 67 window.jsTestIsAsync = true; | |
| 68 </script> | |
| 69 </body> | |
| 70 </html> | |
| OLD | NEW |