test_websocket_frame.html (4787B)
1 <!DOCTYPE HTML> 2 <html> 3 <!-- 4 --> 5 <head> 6 <title>Basic websocket frame interception test</title> 7 <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> 8 <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?> 9 </head> 10 <body> 11 <script class="testbody" type="text/javascript"> 12 13 const URI = "ws://mochi.test:8888/tests/dom/websocket/tests/file_websocket_basic"; 14 15 var frameReceivedCounter = 0; 16 var frameSentCounter = 0; 17 var webSocketCreatedCounter = 0; 18 var webSocketOpenedCounter = 0; 19 var webSocketMessageAvailableCounter = 0; 20 var webSocketClosedCounter = 0; 21 22 var tests = [ 23 { payload: "Hello world!" }, 24 { payload: (function() { var buffer = ""; for (var i = 0; i < 120; ++i) buffer += i; return buffer; }()) }, 25 ] 26 27 var innerId = window.windowGlobalChild.innerWindowId; 28 ok(innerId, "We have a valid innerWindowID: " + innerId); 29 30 var service = Cc["@mozilla.org/websocketevent/service;1"] 31 .getService(Ci.nsIWebSocketEventService); 32 ok(!!service, "We have the nsIWebSocketEventService"); 33 34 var listener = { 35 QueryInterface: ChromeUtils.generateQI(["nsIWebSocketEventListener"]), 36 37 webSocketCreated(aWebSocketSerialID, aURI, aProtocols) { 38 info("WebSocketCreated"); 39 40 is(aURI, URI, "URI matches"); 41 is(aProtocols, "frame", "Protocol matches"); 42 43 webSocketCreatedCounter++; 44 }, 45 46 webSocketOpened(aWebSocketSerialID, aEffectiveURI, aProtocols, aExtensions, httpChannelId) { 47 info("WebSocketOpened"); 48 49 is(aEffectiveURI, URI, "EffectiveURI matches"); 50 is(aProtocols, "frame", "Protocol matches"); 51 is(aExtensions, "permessage-deflate", "No extensions"); 52 ok(httpChannelId > 0, "Channel ID received"); 53 54 webSocketOpenedCounter++; 55 }, 56 57 webSocketMessageAvailable(aWebSocketSerialID, aData, aMessageType) { 58 info("WebSocketMessageAvailable"); 59 60 if (tests.length) { 61 is(aData, tests[0].payload, "Message matches!"); 62 is(aMessageType, Ci.nsIWebSocketEventListener.TYPE_STRING, "The type is 'string'"); 63 64 webSocketMessageAvailableCounter++; 65 66 tests.shift(); 67 if (tests.length) { 68 ws.send(tests[0].payload); 69 } else { 70 ws.send("end"); 71 } 72 } 73 }, 74 75 webSocketClosed(aWebSocketSerialID, aWasClean, 76 aCode, aReason) { 77 info("WebSocketClosed"); 78 79 ok(aWasClean, "The socket is closed in a clean state"); 80 is(aCode, 1000, "Exit code 1000"); 81 ok(!aReason.length, "No reason"); 82 83 webSocketClosedCounter++; 84 checkListener(); 85 }, 86 87 frameReceived(aWebSocketSerialID, aFrame) { 88 ok(!!aFrame, "We have received a frame"); 89 90 if (tests.length) { 91 ok(aFrame.timeStamp, "Checking timeStamp: " + aFrame.timeStamp); 92 is(aFrame.finBit, true, "Checking finBit"); 93 is(aFrame.rsvBit1, true, "Checking rsvBit1"); 94 is(aFrame.rsvBit2, false, "Checking rsvBit2"); 95 is(aFrame.rsvBit3, false, "Checking rsvBit3"); 96 is(aFrame.opCode, aFrame.OPCODE_TEXT, "Checking opCode"); 97 is(aFrame.maskBit, false, "Checking maskBit"); 98 is(aFrame.mask, 0, "Checking mask"); 99 is(aFrame.payload, tests[0].payload, "Checking payload: " + aFrame.payload); 100 } 101 102 frameReceivedCounter++; 103 }, 104 105 frameSent(aWebSocketSerialID, aFrame) { 106 ok(!!aFrame, "We have sent a frame"); 107 108 if (tests.length) { 109 ok(aFrame.timeStamp, "Checking timeStamp: " + aFrame.timeStamp); 110 is(aFrame.finBit, true, "Checking finBit"); 111 is(aFrame.rsvBit1, true, "Checking rsvBit1"); 112 is(aFrame.rsvBit2, false, "Checking rsvBit2"); 113 is(aFrame.rsvBit3, false, "Checking rsvBit3"); 114 is(aFrame.opCode, aFrame.OPCODE_TEXT, "Checking opCode"); 115 is(aFrame.maskBit, true, "Checking maskBit"); 116 ok(!!aFrame.mask, "Checking mask: " + aFrame.mask); 117 is(aFrame.payload, tests[0].payload, "Checking payload: " + aFrame.payload); 118 } 119 120 frameSentCounter++; 121 } 122 }; 123 124 service.addListener(innerId, listener); 125 ok(true, "Listener added"); 126 127 function checkListener() { 128 service.removeListener(innerId, listener); 129 130 ok(frameReceivedCounter, "We received some frames!"); 131 ok(frameSentCounter, "We sent some frames!"); 132 ok(webSocketCreatedCounter, "We have a create notification"); 133 ok(webSocketOpenedCounter, "We have a open notification"); 134 ok(webSocketMessageAvailableCounter, "We have a messageAvailable notification"); 135 ok(webSocketClosedCounter, "We have a close notification"); 136 SimpleTest.finish(); 137 } 138 139 var ws = new WebSocket(URI, "frame"); 140 ws.onopen = function() { 141 info("onopen"); 142 143 ws.send(tests[0].payload); 144 } 145 146 ws.onclose = function() { 147 info("onclose"); 148 } 149 150 ws.onmessage = function(e) { 151 info("onmessage"); 152 if (tests.length) { 153 is(e.data, tests[0].payload, "Wrong data"); 154 } 155 } 156 157 SimpleTest.waitForExplicitFinish(); 158 159 </script> 160 </body> 161 </html>