WebSocket: Return type of send() should be void if hybi-10 protocol is chosen
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 23 Apr 2013 15:53:15 +0000 (15:53 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 23 Apr 2013 15:53:15 +0000 (15:53 +0000)
https://bugs.webkit.org/show_bug.cgi?id=65850

Patch by Lamarque V. Souza <Lamarque.Souza@basyskom.com> on 2013-04-23
Reviewed by Alexey Proskuryakov.

Source/WebCore:

WebSocket API draft changed the return type of send() from boolean to void based on Simon
Pieters' post to WHATWG. Firefox 8 and IE 10 already follow the specification, hence it should
make sense for us to do the same when hybi protocol is used.

Original patch by Yuta Kitamura  <yutak@chromium.org>

Tests: http/tests/websocket/tests/hybi/bufferedAmount-after-close.html (updated)
       http/tests/websocket/tests/hybi/send-after-close-on-unload.html (updated)

* Modules/websockets/WebSocket.cpp:
(WebCore::WebSocket::send):
* Modules/websockets/WebSocket.h:
* Modules/websockets/WebSocket.idl:

LayoutTests:

Update tests and test results because WebSocket.send() now returns undefined when
the hybi WebSocket protocol is used.

* http/tests/websocket/tests/hybi/bufferedAmount-after-close-expected.txt:
* http/tests/websocket/tests/hybi/bufferedAmount-after-close-in-busy-expected.txt:
* http/tests/websocket/tests/hybi/bufferedAmount-after-close-in-busy.html:
* http/tests/websocket/tests/hybi/bufferedAmount-after-close.html:
* http/tests/websocket/tests/hybi/send-after-close-on-unload-expected.txt:
* http/tests/websocket/tests/hybi/send-after-close-on-unload.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@148968 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/http/tests/websocket/tests/hybi/bufferedAmount-after-close-expected.txt
LayoutTests/http/tests/websocket/tests/hybi/bufferedAmount-after-close-in-busy-expected.txt
LayoutTests/http/tests/websocket/tests/hybi/bufferedAmount-after-close-in-busy.html
LayoutTests/http/tests/websocket/tests/hybi/bufferedAmount-after-close.html
LayoutTests/http/tests/websocket/tests/hybi/send-after-close-on-unload-expected.txt
LayoutTests/http/tests/websocket/tests/hybi/send-after-close-on-unload.html
Source/WebCore/ChangeLog
Source/WebCore/Modules/websockets/WebSocket.cpp
Source/WebCore/Modules/websockets/WebSocket.h
Source/WebCore/Modules/websockets/WebSocket.idl

index b3cad4d..349f3d8 100644 (file)
@@ -1,3 +1,20 @@
+2013-04-23  Lamarque V. Souza  <Lamarque.Souza@basyskom.com>
+
+        WebSocket: Return type of send() should be void if hybi-10 protocol is chosen
+        https://bugs.webkit.org/show_bug.cgi?id=65850
+
+        Reviewed by Alexey Proskuryakov.
+
+        Update tests and test results because WebSocket.send() now returns undefined when
+        the hybi WebSocket protocol is used.
+
+        * http/tests/websocket/tests/hybi/bufferedAmount-after-close-expected.txt:
+        * http/tests/websocket/tests/hybi/bufferedAmount-after-close-in-busy-expected.txt:
+        * http/tests/websocket/tests/hybi/bufferedAmount-after-close-in-busy.html:
+        * http/tests/websocket/tests/hybi/bufferedAmount-after-close.html:
+        * http/tests/websocket/tests/hybi/send-after-close-on-unload-expected.txt:
+        * http/tests/websocket/tests/hybi/send-after-close-on-unload.html:
+
 2013-04-23  Andreas Kling  <akling@apple.com>
 
         Clear StyleResolver state before returning from styleForElement().
index 044fe0f..af0e877 100644 (file)
@@ -7,45 +7,45 @@ Closed.
 PASS ws.readyState is 3
 PASS ws.bufferedAmount is 0
 Testing send(string)...
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 27
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 6
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 7
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 131
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 134
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 65543
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 65550
 Testing send(ArrayBuffer)...
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 6
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 7
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 131
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 134
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 65543
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 65550
 Testing send(Blob)...
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 6
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 7
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 131
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 134
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 65543
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 65550
 PASS successfullyParsed is true
 
index c54780c..3572777 100644 (file)
@@ -8,45 +8,45 @@ Closed.
 PASS ws.readyState is 3
 PASS ws.bufferedAmount <= bufferedAmountAfterClose is true
 Testing send(string)...
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 27
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 6
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 7
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 131
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 134
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 65543
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 65550
 Testing send(ArrayBuffer)...
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 6
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 7
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 131
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 134
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 65543
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 65550
 Testing send(Blob)...
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 6
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 7
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 131
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 134
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 65543
-PASS ws.send(messageToSend) is false
+PASS ws.send(messageToSend) is undefined.
 PASS bufferedAmountDifference is 65550
 PASS successfullyParsed is true
 
index d5f7622..e11315f 100644 (file)
@@ -96,7 +96,7 @@ function testBufferedAmount(message, expectedBufferedAmountDifference)
     // (the number does not reset to zero once the connection closes).
     messageToSend = message;
     var bufferedAmountBeforeSend = ws.bufferedAmount;
-    shouldBeFalse("ws.send(messageToSend)");
+    shouldBeUndefined("ws.send(messageToSend)");
     var bufferedAmountAfterSend = ws.bufferedAmount;
     bufferedAmountDifference = bufferedAmountAfterSend - bufferedAmountBeforeSend;
     shouldEvaluateTo("bufferedAmountDifference", expectedBufferedAmountDifference);
index e57a4ca..3c88585 100644 (file)
@@ -77,7 +77,7 @@ function testBufferedAmount(message, expectedBufferedAmountDifference)
     // (the number does not reset to zero once the connection closes).
     messageToSend = message;
     var bufferedAmountBeforeSend = ws.bufferedAmount;
-    shouldBeFalse("ws.send(messageToSend)");
+    shouldBeUndefined("ws.send(messageToSend)");
     var bufferedAmountAfterSend = ws.bufferedAmount;
     bufferedAmountDifference = bufferedAmountAfterSend - bufferedAmountBeforeSend;
     shouldEvaluateTo("bufferedAmountDifference", expectedBufferedAmountDifference);
index cff48b1..6235864 100644 (file)
@@ -6,7 +6,7 @@ PASS ws on master document is ready.
 PASS insert a iframe, where open ws called 'socket1'
 PASS document.childWebSocket is non-null.
 PASS 'socket1' is sent to the server. unload the iframe. expect receiving 'socket1' on ws...
-PASS document.childWebSocket.send('send to closed socket') is false
+PASS document.childWebSocket.send('send to closed socket') is undefined.
 PASS closedSocket is "socket1"
 PASS document.childWebSocket.readyState is 3
 PASS successfullyParsed is true
index a7248db..bb36086 100644 (file)
@@ -41,7 +41,7 @@ document.iframeReady = function()
     shouldBeNonNull("document.childWebSocket");
     debug("PASS 'socket1' is sent to the server. unload the iframe. expect receiving 'socket1' on ws...");
     document.body.removeChild(frameDiv);
-    shouldBeFalse("document.childWebSocket.send('send to closed socket')");
+    shouldBeUndefined("document.childWebSocket.send('send to closed socket')");
 };
 
 </script>
index a4bfe93..581299e 100644 (file)
@@ -1,3 +1,24 @@
+2013-04-23  Lamarque V. Souza  <Lamarque.Souza@basyskom.com>
+
+        WebSocket: Return type of send() should be void if hybi-10 protocol is chosen
+        https://bugs.webkit.org/show_bug.cgi?id=65850
+
+        Reviewed by Alexey Proskuryakov.
+
+        WebSocket API draft changed the return type of send() from boolean to void based on Simon
+        Pieters' post to WHATWG. Firefox 8 and IE 10 already follow the specification, hence it should
+        make sense for us to do the same when hybi protocol is used.
+
+        Original patch by Yuta Kitamura  <yutak@chromium.org>
+
+        Tests: http/tests/websocket/tests/hybi/bufferedAmount-after-close.html (updated)
+               http/tests/websocket/tests/hybi/send-after-close-on-unload.html (updated)
+
+        * Modules/websockets/WebSocket.cpp:
+        (WebCore::WebSocket::send):
+        * Modules/websockets/WebSocket.h:
+        * Modules/websockets/WebSocket.idl:
+
 2013-04-23  Carlos Garcia Campos  <cgarcia@igalia.com>
 
         ScrollbarThemeComposite depends on Page/FrameView/ChromeClient
index 3e0e891..412892f 100644 (file)
@@ -291,83 +291,82 @@ void WebSocket::connect(const String& url, const Vector<String>& protocols, Exce
     ActiveDOMObject::setPendingActivity(this);
 }
 
-bool WebSocket::send(const String& message, ExceptionCode& ec)
+void WebSocket::send(const String& message, ExceptionCode& ec)
 {
     LOG(Network, "WebSocket %p send() Sending String '%s'", this, message.utf8().data());
     if (m_state == CONNECTING) {
         ec = INVALID_STATE_ERR;
-        return false;
+        return;
     }
     // No exception is raised if the connection was once established but has subsequently been closed.
     if (m_state == CLOSING || m_state == CLOSED) {
         size_t payloadSize = message.utf8().length();
         m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, payloadSize);
         m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, getFramingOverhead(payloadSize));
-        return false;
+        return;
     }
     ASSERT(m_channel);
     ThreadableWebSocketChannel::SendResult result = m_channel->send(message);
     if (result == ThreadableWebSocketChannel::InvalidMessage) {
         scriptExecutionContext()->addConsoleMessage(JSMessageSource, ErrorMessageLevel, "Websocket message contains invalid character(s).");
         ec = SYNTAX_ERR;
-        return false;
+        return;
     }
-    return result == ThreadableWebSocketChannel::SendSuccess;
 }
 
-bool WebSocket::send(ArrayBuffer* binaryData, ExceptionCode& ec)
+void WebSocket::send(ArrayBuffer* binaryData, ExceptionCode& ec)
 {
     LOG(Network, "WebSocket %p send() Sending ArrayBuffer %p", this, binaryData);
     ASSERT(binaryData);
     if (m_state == CONNECTING) {
         ec = INVALID_STATE_ERR;
-        return false;
+        return;
     }
     if (m_state == CLOSING || m_state == CLOSED) {
         unsigned payloadSize = binaryData->byteLength();
         m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, payloadSize);
         m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, getFramingOverhead(payloadSize));
-        return false;
+        return;
     }
     ASSERT(m_channel);
-    return m_channel->send(*binaryData, 0, binaryData->byteLength()) == ThreadableWebSocketChannel::SendSuccess;
+    m_channel->send(*binaryData, 0, binaryData->byteLength());
 }
 
-bool WebSocket::send(ArrayBufferView* arrayBufferView, ExceptionCode& ec)
+void WebSocket::send(ArrayBufferView* arrayBufferView, ExceptionCode& ec)
 {
     LOG(Network, "WebSocket %p send() Sending ArrayBufferView %p", this, arrayBufferView);
     ASSERT(arrayBufferView);
     if (m_state == CONNECTING) {
         ec = INVALID_STATE_ERR;
-        return false;
+        return;
     }
     if (m_state == CLOSING || m_state == CLOSED) {
         unsigned payloadSize = arrayBufferView->byteLength();
         m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, payloadSize);
         m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, getFramingOverhead(payloadSize));
-        return false;
+        return;
     }
     ASSERT(m_channel);
     RefPtr<ArrayBuffer> arrayBuffer(arrayBufferView->buffer());
-    return m_channel->send(*arrayBuffer, arrayBufferView->byteOffset(), arrayBufferView->byteLength()) == ThreadableWebSocketChannel::SendSuccess;
+    m_channel->send(*arrayBuffer, arrayBufferView->byteOffset(), arrayBufferView->byteLength());
 }
 
-bool WebSocket::send(Blob* binaryData, ExceptionCode& ec)
+void WebSocket::send(Blob* binaryData, ExceptionCode& ec)
 {
     LOG(Network, "WebSocket %p send() Sending Blob '%s'", this, binaryData->url().elidedString().utf8().data());
     ASSERT(binaryData);
     if (m_state == CONNECTING) {
         ec = INVALID_STATE_ERR;
-        return false;
+        return;
     }
     if (m_state == CLOSING || m_state == CLOSED) {
         unsigned long payloadSize = static_cast<unsigned long>(binaryData->size());
         m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, payloadSize);
         m_bufferedAmountAfterClose = saturateAdd(m_bufferedAmountAfterClose, getFramingOverhead(payloadSize));
-        return false;
+        return;
     }
     ASSERT(m_channel);
-    return m_channel->send(*binaryData) == ThreadableWebSocketChannel::SendSuccess;
+    m_channel->send(*binaryData);
 }
 
 void WebSocket::close(int code, const String& reason, ExceptionCode& ec)
index 2bae539..a7aea71 100644 (file)
@@ -72,10 +72,10 @@ public:
     void connect(const String& url, const String& protocol, ExceptionCode&);
     void connect(const String& url, const Vector<String>& protocols, ExceptionCode&);
 
-    bool send(const String& message, ExceptionCode&);
-    bool send(ArrayBuffer*, ExceptionCode&);
-    bool send(ArrayBufferView*, ExceptionCode&);
-    bool send(Blob*, ExceptionCode&);
+    void send(const String& message, ExceptionCode&);
+    void send(ArrayBuffer*, ExceptionCode&);
+    void send(ArrayBufferView*, ExceptionCode&);
+    void send(Blob*, ExceptionCode&);
 
     void close(int code, const String& reason, ExceptionCode&);
     void close(ExceptionCode& ec) { close(WebSocketChannel::CloseEventCodeNotSpecified, String(), ec); }
index 41fe22b..4910ca2 100644 (file)
 
     attribute DOMString binaryType;
 
-    boolean send(in ArrayBuffer data)
+    void send(in ArrayBuffer data)
         raises(DOMException);
-    boolean send(in ArrayBufferView data)
+    void send(in ArrayBufferView data)
         raises(DOMException);
-    boolean send(in Blob data)
+    void send(in Blob data)
         raises(DOMException);
-    boolean send(in DOMString data)
+    void send(in DOMString data)
         raises(DOMException);
 
     void close(in [Clamp, Optional] unsigned short code, in [Optional] DOMString reason) raises(DOMException);