| OLD | NEW |
| 1 | 1 |
| 2 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> | 2 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
| 3 <html> | 3 <html> |
| 4 <head> | 4 <head> |
| 5 <script src="../../resources/js-test.js"></script> | 5 <script src="../../resources/js-test.js"></script> |
| 6 </head> | 6 </head> |
| 7 <body> | 7 <body> |
| 8 <script> | 8 <script> |
| 9 description("Tests the RTCPeerConnection stats interface."); | 9 description("Tests the RTCPeerConnection stats interface."); |
| 10 | 10 |
| 11 var pc = null; | 11 var pc = null; |
| 12 var result; | 12 var result; |
| 13 var timestamp; | 13 var timestamp; |
| 14 var local; | 14 var local; |
| 15 | 15 |
| 16 function getUserMedia(dictionary, callback) { | 16 function getUserMedia(dictionary, callback) { |
| 17 try { | 17 try { |
| 18 navigator.webkitGetUserMedia(dictionary, callback, error); | 18 navigator.webkitGetUserMedia(dictionary, callback, error); |
| 19 } catch (e) { | 19 } catch (e) { |
| 20 testFailed('webkitGetUserMedia threw exception :' + e); | 20 testFailed('webkitGetUserMedia threw exception :' + e); |
| 21 finishJSTest(); | 21 finishJSTest(); |
| 22 } | 22 } |
| 23 } | 23 } |
| 24 | 24 |
| 25 function error() { | 25 function error() { |
| 26 testFailed('Stream generation failed.'); | 26 testFailed('Stream generation failed.'); |
| 27 finishJSTest(); | 27 finishJSTest(); |
| 28 } | 28 } |
| 29 | 29 |
| 30 function statsHandler1(status) | 30 function verifyStats(status) |
| 31 { | 31 { |
| 32 testPassed("statsHandler1 was called"); | |
| 33 shouldBeNonNull('status'); | |
| 34 result = status.result(); | |
| 35 shouldBe('result.length', '0'); | |
| 36 shouldNotThrow('getUserMedia({audio:true, video:true}, gotStream)'); | |
| 37 } | |
| 38 | |
| 39 function gotStream(s) { | |
| 40 testPassed('Got a stream.'); | |
| 41 stream = s; | |
| 42 | |
| 43 pc.addStream(stream); | |
| 44 shouldNotThrow('pc.getStats(statsHandler2)'); | |
| 45 } | |
| 46 | |
| 47 function statsHandler2(status) | |
| 48 { | |
| 49 testPassed("statsHandler2 was called"); | |
| 50 // Status must be a global variable to be used in test statements. | 32 // Status must be a global variable to be used in test statements. |
| 51 status_g = status; | 33 status_g = status; |
| 52 result = status.result(); | 34 result = status.result(); |
| 53 shouldBeGreaterThanOrEqual('result.length', '2'); | 35 shouldBeGreaterThanOrEqual('result.length', '2'); |
| 54 // The "local" interface is deprecated. Keep test until interface deleted. | 36 // The "local" interface is deprecated. Keep test until interface deleted. |
| 55 local = result[0].local; | 37 local = result[0].local; |
| 56 timestamp = local.timestamp; | 38 timestamp = local.timestamp; |
| 57 // Windows XP sometimes gives time that appears to go backwards. | 39 // Windows XP sometimes gives time that appears to go backwards. |
| 58 // This hack will make the tests non-flaky if it never goes backwards | 40 // This hack will make the tests non-flaky if it never goes backwards |
| 59 // by more than 20 milliseconds. | 41 // by more than 20 milliseconds. |
| 60 // Up to 10 milliseconds has been observed on XP, 2 milliseconds on Win7. | 42 // Up to 10 milliseconds has been observed on XP, 2 milliseconds on Win7. |
| 61 fudgeForXP = 20; | 43 fudgeForXP = 20; |
| 62 timediff = timestamp - startTime + fudgeForXP; | 44 timediff = timestamp - startTime + fudgeForXP; |
| 63 shouldBeGreaterThanOrEqual('timediff', '0'); | 45 shouldBeGreaterThanOrEqual('timediff', '0'); |
| 64 shouldBeGreaterThanOrEqual('local.names().length', '1'); | 46 shouldBeGreaterThanOrEqual('local.names().length', '1'); |
| 65 shouldBeGreaterThanOrEqual('local.names().indexOf("type")', '0'); | 47 shouldBeGreaterThanOrEqual('local.names().indexOf("type")', '0'); |
| 66 shouldBe('local.stat("type")', '"audio"'); | 48 shouldBe('local.stat("type")', '"audio"'); |
| 67 // Newer interface. | 49 // Newer interface. |
| 68 res = result[0]; | 50 res = result[0]; |
| 69 timediff = timestamp - startTime + fudgeForXP; | 51 timediff = timestamp - startTime + fudgeForXP; |
| 70 shouldBeGreaterThanOrEqual('timediff', '0'); | 52 shouldBeGreaterThanOrEqual('timediff', '0'); |
| 71 shouldBeNonNull('res.id'); | 53 shouldBeNonNull('res.id'); |
| 72 shouldBeNonNull('res.type'); | 54 shouldBeNonNull('res.type'); |
| 73 shouldBeGreaterThanOrEqual('res.names().length', '1'); | 55 shouldBeGreaterThanOrEqual('res.names().length', '1'); |
| 74 shouldBeGreaterThanOrEqual('res.names().indexOf("type")', '0'); | 56 shouldBeGreaterThanOrEqual('res.names().indexOf("type")', '0'); |
| 75 shouldBe('res.stat("type")', '"audio"'); | 57 shouldBe('res.stat("type")', '"audio"'); |
| 76 // Named getter: Can access results by their ID values. | 58 // Named getter: Can access results by their ID values. |
| 77 shouldBeNonNull('status_g.namedItem(res.id)'); | 59 shouldBeNonNull('status_g.namedItem(res.id)'); |
| 78 shouldBeNonNull('status_g[res.id]'); | 60 shouldBeNonNull('status_g[res.id]'); |
| 61 } |
| 62 |
| 63 function statsHandler1(status) |
| 64 { |
| 65 testPassed("statsHandler1 was called"); |
| 66 shouldBeNonNull('status'); |
| 67 result = status.result(); |
| 68 shouldBe('result.length', '0'); |
| 69 shouldNotThrow('getUserMedia({audio:true, video:true}, gotStream)'); |
| 70 } |
| 71 |
| 72 function gotStream(s) { |
| 73 testPassed('Got a stream.'); |
| 74 stream = s; |
| 75 |
| 76 pc.addStream(stream); |
| 77 shouldNotThrow('pc.getStats(statsHandler2)'); |
| 78 } |
| 79 |
| 80 function statsHandler2(status) |
| 81 { |
| 82 testPassed("statsHandler2 was called"); |
| 83 verifyStats(status); |
| 84 shouldNotThrow('pc.close()'); |
| 85 shouldNotThrow('pc.getStats(statsHandler3)'); |
| 86 } |
| 87 |
| 88 function statsHandler3(status) |
| 89 { |
| 90 testPassed("statsHandler3 was called"); |
| 91 verifyStats(status); |
| 79 finishJSTest(); | 92 finishJSTest(); |
| 80 } | 93 } |
| 81 | 94 |
| 82 var startTime = new Date().getTime(); | 95 var startTime = new Date().getTime(); |
| 83 shouldNotThrow('pc = new webkitRTCPeerConnection(null)'); | 96 shouldNotThrow('pc = new webkitRTCPeerConnection(null)'); |
| 84 shouldNotThrow('pc.getStats(statsHandler1)'); | 97 shouldNotThrow('pc.getStats(statsHandler1)'); |
| 85 | 98 |
| 86 window.jsTestIsAsync = true; | 99 window.jsTestIsAsync = true; |
| 87 window.successfullyParsed = true; | 100 window.successfullyParsed = true; |
| 88 </script> | 101 </script> |
| 89 </body> | 102 </body> |
| 90 </html> | 103 </html> |
| OLD | NEW |