<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[266059] trunk/LayoutTests</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/266059">266059</a></dd>
<dt>Author</dt> <dd>youenn@apple.com</dd>
<dt>Date</dt> <dd>2020-08-24 08:02:59 -0700 (Mon, 24 Aug 2020)</dd>
</dl>

<h3>Log Message</h3>
<pre>http/tests/websocket/tests/hybi/close-on-* tests are not interoperable
https://bugs.webkit.org/show_bug.cgi?id=215692

Reviewed by Darin Adler.

Before the patch, tests were not passing in Chrome, Firefox and NSURLSession WebSocket code path.
This was due to the fact the web socket script is using try/finally and the closure of the connection is not raising an exception
while it is for Chrome, Firefox and NSURLSession WebSocket code path.
Change the WebSocket server script to more reliably send the socket message at closing time of the connection.

* http/tests/websocket/tests/hybi/close-on-navigate-new-location-expected.txt:
* http/tests/websocket/tests/hybi/close-on-navigate-new-location.html:
* http/tests/websocket/tests/hybi/close-on-unload-and-force-gc-expected.txt:
* http/tests/websocket/tests/hybi/close-on-unload-and-force-gc.html:
* http/tests/websocket/tests/hybi/close-on-unload-expected.txt:
* http/tests/websocket/tests/hybi/close-on-unload-reference-in-parent-expected.txt:
* http/tests/websocket/tests/hybi/close-on-unload-reference-in-parent.html:
* http/tests/websocket/tests/hybi/close-on-unload.html:
* http/tests/websocket/tests/hybi/close-on-unload_wsh.py:
(web_socket_transfer_data):
* http/tests/websocket/tests/hybi/send-after-close-on-unload-expected.txt:
* http/tests/websocket/tests/hybi/send-after-close-on-unload.html:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestshttptestswebsockettestshybicloseonnavigatenewlocationexpectedtxt">trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-navigate-new-location-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestswebsockettestshybicloseonnavigatenewlocationhtml">trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-navigate-new-location.html</a></li>
<li><a href="#trunkLayoutTestshttptestswebsockettestshybicloseonunloadandforcegcexpectedtxt">trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload-and-force-gc-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestswebsockettestshybicloseonunloadandforcegchtml">trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload-and-force-gc.html</a></li>
<li><a href="#trunkLayoutTestshttptestswebsockettestshybicloseonunloadexpectedtxt">trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestswebsockettestshybicloseonunloadreferenceinparentexpectedtxt">trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload-reference-in-parent-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestswebsockettestshybicloseonunloadreferenceinparenthtml">trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload-reference-in-parent.html</a></li>
<li><a href="#trunkLayoutTestshttptestswebsockettestshybicloseonunloadhtml">trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload.html</a></li>
<li><a href="#trunkLayoutTestshttptestswebsockettestshybicloseonunload_wshpy">trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload_wsh.py</a></li>
<li><a href="#trunkLayoutTestshttptestswebsockettestshybisendaftercloseonunloadexpectedtxt">trunk/LayoutTests/http/tests/websocket/tests/hybi/send-after-close-on-unload-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestswebsockettestshybisendaftercloseonunloadhtml">trunk/LayoutTests/http/tests/websocket/tests/hybi/send-after-close-on-unload.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (266058 => 266059)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog      2020-08-24 15:02:47 UTC (rev 266058)
+++ trunk/LayoutTests/ChangeLog 2020-08-24 15:02:59 UTC (rev 266059)
</span><span class="lines">@@ -1,3 +1,28 @@
</span><ins>+2020-08-24  Youenn Fablet  <youenn@apple.com>
+
+        http/tests/websocket/tests/hybi/close-on-* tests are not interoperable
+        https://bugs.webkit.org/show_bug.cgi?id=215692
+
+        Reviewed by Darin Adler.
+
+        Before the patch, tests were not passing in Chrome, Firefox and NSURLSession WebSocket code path.
+        This was due to the fact the web socket script is using try/finally and the closure of the connection is not raising an exception
+        while it is for Chrome, Firefox and NSURLSession WebSocket code path.
+        Change the WebSocket server script to more reliably send the socket message at closing time of the connection.
+
+        * http/tests/websocket/tests/hybi/close-on-navigate-new-location-expected.txt:
+        * http/tests/websocket/tests/hybi/close-on-navigate-new-location.html:
+        * http/tests/websocket/tests/hybi/close-on-unload-and-force-gc-expected.txt:
+        * http/tests/websocket/tests/hybi/close-on-unload-and-force-gc.html:
+        * http/tests/websocket/tests/hybi/close-on-unload-expected.txt:
+        * http/tests/websocket/tests/hybi/close-on-unload-reference-in-parent-expected.txt:
+        * http/tests/websocket/tests/hybi/close-on-unload-reference-in-parent.html:
+        * http/tests/websocket/tests/hybi/close-on-unload.html:
+        * http/tests/websocket/tests/hybi/close-on-unload_wsh.py:
+        (web_socket_transfer_data):
+        * http/tests/websocket/tests/hybi/send-after-close-on-unload-expected.txt:
+        * http/tests/websocket/tests/hybi/send-after-close-on-unload.html:
+
</ins><span class="cx"> 2020-08-24  Hector Lopez  <hector_i_lopez@apple.com>
</span><span class="cx">         [ macOS wk1 Debug ] inspector/animation/nameChanged.html is a flaky crash
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=215767
</span></span></pre></div>
<a id="trunkLayoutTestshttptestswebsockettestshybicloseonnavigatenewlocationexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-navigate-new-location-expected.txt (266058 => 266059)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-navigate-new-location-expected.txt    2020-08-24 15:02:47 UTC (rev 266058)
+++ trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-navigate-new-location-expected.txt       2020-08-24 15:02:59 UTC (rev 266059)
</span><span class="lines">@@ -5,7 +5,7 @@
</span><span class="cx"> PASS ws on master document is ready.
</span><span class="cx"> PASS insert a iframe, where open ws called 'socket1'
</span><span class="cx"> PASS 'socket1' is sent to the server. navigate to new location. expect receiving 'socket1' on ws...
</span><del>-PASS closedSocket is "socket1"
</del><ins>+PASS closedSocket is "socket1: receive next message"
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkLayoutTestshttptestswebsockettestshybicloseonnavigatenewlocationhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-navigate-new-location.html (266058 => 266059)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-navigate-new-location.html    2020-08-24 15:02:47 UTC (rev 266058)
+++ trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-navigate-new-location.html       2020-08-24 15:02:59 UTC (rev 266059)
</span><span class="lines">@@ -30,7 +30,7 @@
</span><span class="cx"> };
</span><span class="cx"> ws.onclose = function()
</span><span class="cx"> {
</span><del>-    shouldBe("closedSocket", '"socket1"');
</del><ins>+    shouldBe("closedSocket", '"socket1: receive next message"');
</ins><span class="cx">     finishJSTest();
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestshttptestswebsockettestshybicloseonunloadandforcegcexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload-and-force-gc-expected.txt (266058 => 266059)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload-and-force-gc-expected.txt      2020-08-24 15:02:47 UTC (rev 266058)
+++ trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload-and-force-gc-expected.txt 2020-08-24 15:02:59 UTC (rev 266059)
</span><span class="lines">@@ -5,7 +5,7 @@
</span><span class="cx"> PASS ws on master document is ready.
</span><span class="cx"> PASS insert a iframe, where open ws called 'socket1'
</span><span class="cx"> PASS 'socket1' is sent to the server. unload the iframe and force garbage collection. expect receiving 'socket1' on ws and no crash...
</span><del>-PASS closedSocket is "socket1"
</del><ins>+PASS closedSocket is "socket1: receive next message"
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkLayoutTestshttptestswebsockettestshybicloseonunloadandforcegchtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload-and-force-gc.html (266058 => 266059)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload-and-force-gc.html      2020-08-24 15:02:47 UTC (rev 266058)
+++ trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload-and-force-gc.html 2020-08-24 15:02:59 UTC (rev 266059)
</span><span class="lines">@@ -30,7 +30,7 @@
</span><span class="cx"> };
</span><span class="cx"> ws.onclose = function()
</span><span class="cx"> {
</span><del>-    shouldBe("closedSocket", '"socket1"');
</del><ins>+    shouldBe("closedSocket", '"socket1: receive next message"');
</ins><span class="cx">     finishJSTest();
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestshttptestswebsockettestshybicloseonunloadexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload-expected.txt (266058 => 266059)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload-expected.txt   2020-08-24 15:02:47 UTC (rev 266058)
+++ trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload-expected.txt      2020-08-24 15:02:59 UTC (rev 266059)
</span><span class="lines">@@ -5,7 +5,7 @@
</span><span class="cx"> PASS ws on master document is ready.
</span><span class="cx"> PASS insert a iframe, where open ws called 'socket1'
</span><span class="cx"> PASS 'socket1' is sent to the server. unload the iframe. expect receiving 'socket1' on ws...
</span><del>-PASS closedSocket is "socket1"
</del><ins>+PASS closedSocket is "socket1: receive next message"
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkLayoutTestshttptestswebsockettestshybicloseonunloadreferenceinparentexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload-reference-in-parent-expected.txt (266058 => 266059)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload-reference-in-parent-expected.txt       2020-08-24 15:02:47 UTC (rev 266058)
+++ trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload-reference-in-parent-expected.txt  2020-08-24 15:02:59 UTC (rev 266059)
</span><span class="lines">@@ -6,7 +6,7 @@
</span><span class="cx"> PASS insert a iframe, where open ws called 'socket1'
</span><span class="cx"> PASS document.childWebSocket is non-null.
</span><span class="cx"> PASS 'socket1' is sent to the server. unload the iframe. expect receiving 'socket1' on ws...
</span><del>-PASS closedSocket is "socket1"
</del><ins>+PASS closedSocket is "socket1: receive next message"
</ins><span class="cx"> PASS document.childWebSocket.readyState is 3
</span><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestshttptestswebsockettestshybicloseonunloadreferenceinparenthtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload-reference-in-parent.html (266058 => 266059)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload-reference-in-parent.html       2020-08-24 15:02:47 UTC (rev 266058)
+++ trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload-reference-in-parent.html  2020-08-24 15:02:59 UTC (rev 266059)
</span><span class="lines">@@ -31,7 +31,7 @@
</span><span class="cx"> };
</span><span class="cx"> ws.onclose = function()
</span><span class="cx"> {
</span><del>-    shouldBe("closedSocket", '"socket1"');
</del><ins>+    shouldBe("closedSocket", '"socket1: receive next message"');
</ins><span class="cx">     shouldBe("document.childWebSocket.readyState", "3");
</span><span class="cx">     finishJSTest();
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkLayoutTestshttptestswebsockettestshybicloseonunloadhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload.html (266058 => 266059)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload.html   2020-08-24 15:02:47 UTC (rev 266058)
+++ trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload.html      2020-08-24 15:02:59 UTC (rev 266059)
</span><span class="lines">@@ -30,7 +30,7 @@
</span><span class="cx"> };
</span><span class="cx"> ws.onclose = function()
</span><span class="cx"> {
</span><del>-    shouldBe("closedSocket", '"socket1"');
</del><ins>+    shouldBe("closedSocket", '"socket1: receive next message"');
</ins><span class="cx">     finishJSTest();
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestshttptestswebsockettestshybicloseonunload_wshpy"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload_wsh.py (266058 => 266059)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload_wsh.py 2020-08-24 15:02:47 UTC (rev 266058)
+++ trunk/LayoutTests/http/tests/websocket/tests/hybi/close-on-unload_wsh.py    2020-08-24 15:02:59 UTC (rev 266059)
</span><span class="lines">@@ -48,9 +48,8 @@
</span><span class="cx">         # notify to client that socketName is received by server.
</span><span class="cx">         msgutil.send_message(request, socketName)
</span><span class="cx">         msgutil.receive_message(request)  # wait, and exception by close.
</span><del>-        socketName = socketName + ': receive next message'
</del><span class="cx">     finally:
</span><span class="cx">         # request is closed. notify this socketName to other web sockets.
</span><span class="cx">         del connections[request]
</span><span class="cx">         for ws in connections.keys():
</span><del>-            msgutil.send_message(ws, socketName)
</del><ins>+            msgutil.send_message(ws, socketName + ': receive next message')
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestswebsockettestshybisendaftercloseonunloadexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/websocket/tests/hybi/send-after-close-on-unload-expected.txt (266058 => 266059)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/websocket/tests/hybi/send-after-close-on-unload-expected.txt        2020-08-24 15:02:47 UTC (rev 266058)
+++ trunk/LayoutTests/http/tests/websocket/tests/hybi/send-after-close-on-unload-expected.txt   2020-08-24 15:02:59 UTC (rev 266059)
</span><span class="lines">@@ -7,7 +7,7 @@
</span><span class="cx"> PASS document.childWebSocket is non-null.
</span><span class="cx"> PASS 'socket1' is sent to the server. unload the iframe. expect receiving 'socket1' on ws...
</span><span class="cx"> PASS document.childWebSocket.send('send to closed socket') is undefined.
</span><del>-PASS closedSocket is "socket1"
</del><ins>+PASS closedSocket is "socket1: receive next message"
</ins><span class="cx"> PASS document.childWebSocket.readyState is 3
</span><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestshttptestswebsockettestshybisendaftercloseonunloadhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/websocket/tests/hybi/send-after-close-on-unload.html (266058 => 266059)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/websocket/tests/hybi/send-after-close-on-unload.html        2020-08-24 15:02:47 UTC (rev 266058)
+++ trunk/LayoutTests/http/tests/websocket/tests/hybi/send-after-close-on-unload.html   2020-08-24 15:02:59 UTC (rev 266059)
</span><span class="lines">@@ -31,7 +31,7 @@
</span><span class="cx"> };
</span><span class="cx"> ws.onclose = function()
</span><span class="cx"> {
</span><del>-    shouldBe("closedSocket", '"socket1"');
</del><ins>+    shouldBe("closedSocket", '"socket1: receive next message"');
</ins><span class="cx">     shouldBe("document.childWebSocket.readyState", "3");
</span><span class="cx">     finishJSTest();
</span><span class="cx"> };
</span></span></pre>
</div>
</div>

</body>
</html>