forked from mirrors/gecko-dev
		
	 3794888bc4
			
		
	
	
		3794888bc4
		
	
	
	
	
		
			
			--HG-- rename : dom/base/WebSocket.cpp => dom/websocket/WebSocket.cpp rename : dom/base/WebSocket.h => dom/websocket/WebSocket.h rename : dom/base/test/file_bug1384658.html => dom/websocket/tests/file_bug1384658.html rename : dom/base/test/file_websocket_basic_wsh.py => dom/websocket/tests/file_websocket_basic_wsh.py rename : dom/base/test/file_websocket_bigBlob_wsh.py => dom/websocket/tests/file_websocket_bigBlob_wsh.py rename : dom/base/test/file_websocket_hello_wsh.py => dom/websocket/tests/file_websocket_hello_wsh.py rename : dom/base/test/file_websocket_http_resource.txt => dom/websocket/tests/file_websocket_http_resource.txt rename : dom/base/test/file_websocket_permessage_deflate_disabled_wsh.py => dom/websocket/tests/file_websocket_permessage_deflate_disabled_wsh.py rename : dom/base/test/file_websocket_permessage_deflate_params_wsh.py => dom/websocket/tests/file_websocket_permessage_deflate_params_wsh.py rename : dom/base/test/file_websocket_permessage_deflate_rejected_wsh.py => dom/websocket/tests/file_websocket_permessage_deflate_rejected_wsh.py rename : dom/base/test/file_websocket_permessage_deflate_wsh.py => dom/websocket/tests/file_websocket_permessage_deflate_wsh.py rename : dom/base/test/file_websocket_wsh.py => dom/websocket/tests/file_websocket_wsh.py rename : dom/base/test/frame_bug1384658.html => dom/websocket/tests/frame_bug1384658.html rename : dom/base/test/iframe_webSocket_sandbox.html => dom/websocket/tests/iframe_webSocket_sandbox.html rename : dom/base/test/test_bug1081686.html => dom/websocket/tests/test_bug1081686.html rename : dom/base/test/test_bug1384658.html => dom/websocket/tests/test_bug1384658.html rename : dom/base/test/test_webSocket_sandbox.html => dom/websocket/tests/test_webSocket_sandbox.html rename : dom/workers/test/test_webSocket_sharedWorker.html => dom/websocket/tests/test_webSocket_sharedWorker.html rename : dom/base/test/test_websocket1.html => dom/websocket/tests/test_websocket1.html rename : dom/base/test/test_websocket2.html => dom/websocket/tests/test_websocket2.html rename : dom/base/test/test_websocket3.html => dom/websocket/tests/test_websocket3.html rename : dom/base/test/test_websocket4.html => dom/websocket/tests/test_websocket4.html rename : dom/base/test/test_websocket5.html => dom/websocket/tests/test_websocket5.html rename : dom/base/test/test_websocket_basic.html => dom/websocket/tests/test_websocket_basic.html rename : dom/base/test/test_websocket_bigBlob.html => dom/websocket/tests/test_websocket_bigBlob.html rename : dom/base/test/test_websocket_frame.html => dom/websocket/tests/test_websocket_frame.html rename : dom/base/test/test_websocket_hello.html => dom/websocket/tests/test_websocket_hello.html rename : dom/base/test/test_websocket_permessage_deflate.html => dom/websocket/tests/test_websocket_permessage_deflate.html rename : dom/workers/test/test_websocket1.html => dom/websocket/tests/test_worker_websocket1.html rename : dom/workers/test/test_websocket2.html => dom/websocket/tests/test_worker_websocket2.html rename : dom/workers/test/test_websocket3.html => dom/websocket/tests/test_worker_websocket3.html rename : dom/workers/test/test_websocket4.html => dom/websocket/tests/test_worker_websocket4.html rename : dom/workers/test/test_websocket5.html => dom/websocket/tests/test_worker_websocket5.html rename : dom/workers/test/test_websocket_basic.html => dom/websocket/tests/test_worker_websocket_basic.html rename : dom/workers/test/test_websocket_https.html => dom/websocket/tests/test_worker_websocket_https.html rename : dom/workers/test/test_websocket_loadgroup.html => dom/websocket/tests/test_worker_websocket_loadgroup.html rename : dom/workers/test/webSocket_sharedWorker.js => dom/websocket/tests/webSocket_sharedWorker.js rename : dom/workers/test/websocket_basic_worker.js => dom/websocket/tests/websocket_basic_worker.js rename : dom/base/test/websocket_helpers.js => dom/websocket/tests/websocket_helpers.js rename : dom/workers/test/websocket_https_worker.js => dom/websocket/tests/websocket_https_worker.js rename : dom/base/test/websocket_hybi/file_binary-frames_wsh.py => dom/websocket/tests/websocket_hybi/file_binary-frames_wsh.py rename : dom/base/test/websocket_hybi/file_check-binary-messages_wsh.py => dom/websocket/tests/websocket_hybi/file_check-binary-messages_wsh.py rename : dom/base/test/websocket_hybi/mochitest.ini => dom/websocket/tests/websocket_hybi/mochitest.ini rename : dom/base/test/websocket_hybi/test_receive-arraybuffer.html => dom/websocket/tests/websocket_hybi/test_receive-arraybuffer.html rename : dom/base/test/websocket_hybi/test_receive-blob.html => dom/websocket/tests/websocket_hybi/test_receive-blob.html rename : dom/base/test/websocket_hybi/test_send-arraybuffer.html => dom/websocket/tests/websocket_hybi/test_send-arraybuffer.html rename : dom/base/test/websocket_hybi/test_send-blob.html => dom/websocket/tests/websocket_hybi/test_send-blob.html rename : dom/workers/test/websocket_loadgroup_worker.js => dom/websocket/tests/websocket_loadgroup_worker.js rename : dom/base/test/websocket_tests.js => dom/websocket/tests/websocket_tests.js rename : dom/workers/test/websocket_worker1.js => dom/websocket/tests/websocket_worker1.js rename : dom/workers/test/websocket_worker2.js => dom/websocket/tests/websocket_worker2.js rename : dom/workers/test/websocket_worker3.js => dom/websocket/tests/websocket_worker3.js rename : dom/workers/test/websocket_worker4.js => dom/websocket/tests/websocket_worker4.js rename : dom/workers/test/websocket_worker5.js => dom/websocket/tests/websocket_worker5.js rename : dom/workers/test/websocket_https.html => dom/websocket/tests/websocket_worker_https.html rename : dom/base/test/window_bug1384658.html => dom/websocket/tests/window_bug1384658.html
		
			
				
	
	
		
			289 lines
		
	
	
	
		
			8.9 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			289 lines
		
	
	
	
		
			8.9 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!DOCTYPE HTML>
 | |
| <html>
 | |
| <head>
 | |
|   <title>Basic WebSocket test</title>
 | |
|   <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
 | |
|   <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
 | |
| </head>
 | |
| 
 | |
| <body onload="testWebSocket()">
 | |
| <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=472529">Mozilla Bug 472529</a>
 | |
| <p id="display"></p>
 | |
| <div id="content" style="display: none">
 | |
| </div>
 | |
| <pre id="test">
 | |
| <script class="testbody" type="text/javascript">
 | |
| 
 | |
| const kUrl = "ws://mochi.test:8888/tests/dom/websocket/tests/file_websocket_basic";
 | |
| 
 | |
| var gTestElement;
 | |
| var ws;
 | |
| 
 | |
| function forcegc() {
 | |
|   SpecialPowers.forceGC();
 | |
|   SpecialPowers.gc();
 | |
| }
 | |
| 
 | |
| function testWebSocket() {
 | |
|   gTestElement = document.getElementById("test");
 | |
| 
 | |
|   SimpleTest.executeSoon(testWebSocket1);
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Sends message keywords, then receives their values.
 | |
|  */
 | |
| function testWebSocket1() {
 | |
|   gTestElement.textContent = "Running testWebSocket1()";
 | |
| 
 | |
|   var results = ["test",
 | |
|                  "/tests/dom/websocket/tests/file_websocket_basic",
 | |
|                  "http://mochi.test:8888",
 | |
|                  "end"];
 | |
| 
 | |
|   ws = new WebSocket(kUrl, "test");
 | |
|   is(ws.url, kUrl, "[1] WebSocket.url");
 | |
|   ws.onopen = function(e) {
 | |
|     const params = ["protocol", "resource", "origin", "end"];
 | |
| 
 | |
|     gTestElement.textContent += "\nSending :";
 | |
|     for (var i = 0; i < params.length; ++i) {
 | |
|       gTestElement.textContent += " " + params[i];
 | |
|       ws.send(params[i]);
 | |
|     }
 | |
| 
 | |
|     // Set this before onmessage() is called, so it is displayed once only.
 | |
|     gTestElement.textContent += "\nReceived:";
 | |
|   };
 | |
|   ws.onclose = function(e) {
 | |
|     is(results.length, 0, "[1] Number of unreceived messages");
 | |
|     ok(e.wasClean, "[1] Connection closed cleanly");
 | |
| 
 | |
|     SimpleTest.executeSoon(testWebSocket2);
 | |
|   };
 | |
|   ws.onerror = function(e) {
 | |
|     ok(false, "[1] onerror() should not have been called!");
 | |
|     gTestElement.textContent += "\nonerror() should not have been called!";
 | |
|     SimpleTest.executeSoon(SimpleTest.finish);
 | |
|   };
 | |
|   ws.onmessage = function(e) {
 | |
|     is(e.data, results[0], "[1] Received message");
 | |
|     gTestElement.textContent += " " + e.data;
 | |
|     results.shift();
 | |
|   };
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Sends 1000+1 test messages, then receives them.
 | |
|  */
 | |
| function testWebSocket2() {
 | |
|   gTestElement.textContent = "Running testWebSocket2()";
 | |
| 
 | |
|   const displayInterval = 100;
 | |
|   const testCount = 1000;
 | |
|   const testMessage = "test message 2.";
 | |
| 
 | |
|   var messageCount = 0;
 | |
| 
 | |
|   ws = new WebSocket(kUrl, "test");
 | |
|   ws.onopen = function(e) {
 | |
|     gTestElement.textContent += "\nSending :";
 | |
|     for (var i = 1; i <= testCount; ++i) {
 | |
|       if (i % displayInterval == 1) {
 | |
|         gTestElement.textContent += " " + i;
 | |
|       }
 | |
|       ws.send(testMessage + i);
 | |
|     }
 | |
|     gTestElement.textContent += " end";
 | |
|     ws.send("end");
 | |
| 
 | |
|     // Set this before onmessage() is called, so it is displayed once only.
 | |
|     gTestElement.textContent += "\nReceived:";
 | |
|   };
 | |
|   ws.onclose = function(e) {
 | |
|     is(messageCount, testCount + 1, "[2] Number of received messages");
 | |
|     ok(e.wasClean, "[2] Connection closed cleanly");
 | |
| 
 | |
|     SimpleTest.executeSoon(testWebSocket3);
 | |
|   };
 | |
|   ws.onerror = function(e) {
 | |
|     ok(false, "[2] onerror() should not have been called!");
 | |
|     gTestElement.textContent += "\nonerror() should not have been called!";
 | |
|     SimpleTest.executeSoon(SimpleTest.finish);
 | |
|   };
 | |
|   ws.onmessage = function(e) {
 | |
|     ++messageCount;
 | |
|     if (messageCount > testCount)
 | |
|       is(e.data, "end", "[2] Received message");
 | |
|     else
 | |
|       is(e.data, testMessage + messageCount, "[2] Received message");
 | |
|     if (messageCount % displayInterval == 1) {
 | |
|       gTestElement.textContent += " " + messageCount;
 | |
|     }
 | |
|   };
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Sends testcount+1 test messages, then receives them, calling forcegc() at each step.
 | |
|  */
 | |
| function testWebSocket3() {
 | |
|   gTestElement.textContent = "Running testWebSocket3() [can take a little while]";
 | |
| 
 | |
|   const displayInterval = 10;
 | |
|   const testCount = 10;
 | |
|   const testMessage = "test message 3.";
 | |
| 
 | |
|   var messageCount = 0;
 | |
| 
 | |
|   ws = new WebSocket(kUrl, "test");
 | |
|   // Set this before onopen() is called,
 | |
|   // otherwise its display would be delayed by forcegc() calls...
 | |
|   gTestElement.textContent += "\nSending :";
 | |
|   ws.onopen = function(e) {
 | |
|     for (var i = 1; i <= testCount; ++i) {
 | |
|       forcegc();
 | |
|       if (i % displayInterval == 1) {
 | |
|         // Actual display is delayed by forcegc() calls...
 | |
|         gTestElement.textContent += " " + i;
 | |
|       }
 | |
|       ws.send(testMessage + i);
 | |
|     }
 | |
|     forcegc();
 | |
|     gTestElement.textContent += " end";
 | |
|     ws.send("end");
 | |
| 
 | |
|     // Set this before onmessage() is called, so it is displayed once only.
 | |
|     gTestElement.textContent += "\nReceived:";
 | |
|   };
 | |
|   ws.onclose = function(e) {
 | |
|     is(messageCount, testCount + 1, "[3] Number of received messages");
 | |
|     ok(e.wasClean, "[3] Connection closed cleanly");
 | |
| 
 | |
|     SimpleTest.executeSoon(testWebSocket4);
 | |
|   };
 | |
|   ws.onerror = function(e) {
 | |
|     ok(false, "[3] onerror() should not have been called!");
 | |
|     gTestElement.textContent += "\nonerror() should not have been called!";
 | |
|     SimpleTest.executeSoon(SimpleTest.finish);
 | |
|   };
 | |
|   ws.onmessage = function(e) {
 | |
|     forcegc();
 | |
|     ++messageCount;
 | |
|     if (messageCount > testCount)
 | |
|       is(e.data, "end", "[3] Received message");
 | |
|     else
 | |
|       is(e.data, testMessage + messageCount, "[3] Received message");
 | |
|     if (messageCount % displayInterval == 1) {
 | |
|       // Actual display is delayed by forcegc() call(s)...
 | |
|       gTestElement.textContent += " " + messageCount;
 | |
|     }
 | |
|   };
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Sends a huge test message, then receives it, then closes the WebSocket from client-side.
 | |
|  */
 | |
| function testWebSocket4() {
 | |
|   gTestElement.textContent = "Running testWebSocket4()";
 | |
| 
 | |
|   // String length = 13 + ((10,000 - 1) * 26) + 11 = 259,998 = almost 254 KiB.
 | |
|   const longString = "messageStart " + new Array(10000).join(" -huge WebSocket message- ") + " messageEnd";
 | |
| 
 | |
|   ws = new WebSocket(kUrl, "test");
 | |
|   ws.onopen = function(e) {
 | |
|     is(this, ws, "[4, onopen()] 'this' should point to the WebSocket.");
 | |
|     gTestElement.textContent += "\nSending the huge message";
 | |
|     ws.send(longString);
 | |
|   };
 | |
|   ws.onclose = function(e) {
 | |
|     is(this, ws, "[4, onclose()] 'this' should point to the WebSocket.");
 | |
|     ok(e.wasClean, "[4] Connection closed cleanly");
 | |
| 
 | |
|     SimpleTest.executeSoon(testWebSocket5);
 | |
|   };
 | |
|   ws.onerror = function(e) {
 | |
|     is(this, ws, "[4, onerror()] 'this' should point to the WebSocket.");
 | |
|     ok(false, "[4, onerror()] should not have been called!");
 | |
|     gTestElement.textContent += "\nonerror() should not have been called!";
 | |
|     SimpleTest.executeSoon(SimpleTest.finish);
 | |
|   };
 | |
|   ws.onmessage = function(e) {
 | |
|     is(this, ws, "[4, onmessage()] 'this' should point to the WebSocket.");
 | |
|     // Do not use |is(e.data, longString, "...");| that results in a _very_ long line.
 | |
|     is(e.data.length, longString.length, "[4] Length of received message");
 | |
|     ok(e.data == longString, "[4] Content of received message");
 | |
|     gTestElement.textContent += "\nReceived the huge message";
 | |
|     this.close();
 | |
|   };
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Closes the WebSocket from client-side, then sends a test message that should be buffered.
 | |
|  */
 | |
| function testWebSocket5() {
 | |
|   gTestElement.textContent = "Running testWebSocket5()";
 | |
| 
 | |
|   ws = new WebSocket(kUrl, "test");
 | |
|   ws.onopen = function(e) {
 | |
|     is(this.bufferedAmount, 0, "[5] Length of empty buffer before closing");
 | |
|     this.close();
 | |
|   };
 | |
|   ws.onclose = function(e) {
 | |
|     ok(e.wasClean, "[5] Connection closed cleanly");
 | |
|     is(this.bufferedAmount, 0, "[5] Length of empty buffer after closing");
 | |
| 
 | |
|     var msg = "test message to be buffered";
 | |
|     this.send(msg);
 | |
|     is(this.bufferedAmount, msg.length, "[5] Length of buffered message sent after closing");
 | |
| 
 | |
|     gTestElement.textContent += "\ntestWebSocket5() completed";
 | |
| 
 | |
|     SimpleTest.executeSoon(testWebSocket6);
 | |
|   };
 | |
|   ws.onerror = function(e) {
 | |
|     ok(false, "[5] onerror() should not have been called!");
 | |
|     gTestElement.textContent += "\nonerror() should not have been called!";
 | |
|     SimpleTest.executeSoon(SimpleTest.finish);
 | |
|   };
 | |
| }
 | |
| 
 | |
| function testWebSocket6() {
 | |
|   gTestElement.textContent = "Running testWebSocket6()";
 | |
| 
 | |
|   var msgReceived = false;
 | |
|   ws = new WebSocket(kUrl, "test");
 | |
|   ws.onopen = function(e) {
 | |
|     gTestElement.textContent += "\nSending ©";
 | |
|     ws.send("©");
 | |
|     gTestElement.textContent += " end";
 | |
|     ws.send("end");
 | |
|   };
 | |
|   ws.onclose = function(e) {
 | |
|     ok(msgReceived, "[6] Number of received messages");
 | |
|     ok(e.wasClean, "[6] Connection closed cleanly");
 | |
| 
 | |
|     SimpleTest.executeSoon(SimpleTest.finish);
 | |
|   };
 | |
|   ws.onerror = function(e) {
 | |
|     ok(false, "[6] onerror() should not have been called!");
 | |
|     gTestElement.textContent += "\nonerror() should not have been called!";
 | |
|     SimpleTest.executeSoon(SimpleTest.finish);
 | |
|   };
 | |
| 
 | |
|   ws.onmessage = function(e) {
 | |
|     if (msgReceived) {
 | |
|       is(e.data, "end", "[6] Received message");
 | |
|     } else {
 | |
|       gTestElement.textContent += "\nReceived: " + e.data;
 | |
|       is(e.data, "©", "[6] Received message");
 | |
|       msgReceived = true;
 | |
|     }
 | |
|   };
 | |
| }
 | |
| 
 | |
| SimpleTest.waitForExplicitFinish();
 | |
| 
 | |
| </script>
 | |
| </pre>
 | |
| </body>
 | |
| </html>
 |