Title: [94161] trunk
Revision
94161
Author
[email protected]
Date
2011-08-31 01:33:38 -0700 (Wed, 31 Aug 2011)

Log Message

WebSocket: Receive binary message as ArrayBuffer
https://bugs.webkit.org/show_bug.cgi?id=67180

Reviewed by Kent Tamura.

Source/WebCore:

Tests: http/tests/websocket/tests/hybi/receive-arraybuffer.html
       http/tests/websocket/tests/hybi/workers/receive-arraybuffer.html

* bindings/js/JSMessageEventCustom.cpp:
(WebCore::JSMessageEvent::data): Convert ArrayBuffer to JSValue.
* bindings/v8/custom/V8MessageEventCustom.cpp:
(WebCore::V8MessageEvent::dataAccessorGetter): Convert ArrayBuffer to v8::Value.
* dom/MessageEvent.cpp:
(WebCore::MessageEvent::MessageEvent):
* dom/MessageEvent.h:
Added DataTypeArrayBuffer and ArrayBuffer-related functions.
(WebCore::MessageEvent::create):
(WebCore::MessageEvent::dataAsArrayBuffer):
* websockets/WebSocket.cpp:
(WebCore::WebSocket::didReceiveBinaryData):
Construct an ArrayBuffer from binaryData and raise MessageEvent.

LayoutTests:

* http/tests/websocket/tests/hybi/receive-arraybuffer-expected.txt: Added.
* http/tests/websocket/tests/hybi/receive-arraybuffer.html:
Added. Connect to binary-frames_wsh.py (which is also used from receive-blob.html) and
check the content of MessageEvent's data attribute.
* http/tests/websocket/tests/hybi/receive-blob.html:
Update function names to match ones in receive-arraybuffer.html.
* http/tests/websocket/tests/hybi/workers/receive-arraybuffer-expected.txt: Added.
* http/tests/websocket/tests/hybi/workers/receive-arraybuffer.html: Added.
* http/tests/websocket/tests/hybi/workers/resources/receive-arraybuffer.js: Added.
* http/tests/websocket/tests/hybi/workers/resources/receive-blob.js:
Same as receive-blob.html above.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (94160 => 94161)


--- trunk/LayoutTests/ChangeLog	2011-08-31 08:18:58 UTC (rev 94160)
+++ trunk/LayoutTests/ChangeLog	2011-08-31 08:33:38 UTC (rev 94161)
@@ -1,3 +1,22 @@
+2011-08-31  Yuta Kitamura  <[email protected]>
+
+        WebSocket: Receive binary message as ArrayBuffer
+        https://bugs.webkit.org/show_bug.cgi?id=67180
+
+        Reviewed by Kent Tamura.
+
+        * http/tests/websocket/tests/hybi/receive-arraybuffer-expected.txt: Added.
+        * http/tests/websocket/tests/hybi/receive-arraybuffer.html:
+        Added. Connect to binary-frames_wsh.py (which is also used from receive-blob.html) and
+        check the content of MessageEvent's data attribute.
+        * http/tests/websocket/tests/hybi/receive-blob.html:
+        Update function names to match ones in receive-arraybuffer.html.
+        * http/tests/websocket/tests/hybi/workers/receive-arraybuffer-expected.txt: Added.
+        * http/tests/websocket/tests/hybi/workers/receive-arraybuffer.html: Added.
+        * http/tests/websocket/tests/hybi/workers/resources/receive-arraybuffer.js: Added.
+        * http/tests/websocket/tests/hybi/workers/resources/receive-blob.js:
+        Same as receive-blob.html above.
+
 2011-08-31  Philippe Normand  <[email protected]>
 
         Unreviewed, GTK rebaseline after r94109 and r93909.

Added: trunk/LayoutTests/http/tests/websocket/tests/hybi/receive-arraybuffer-expected.txt (0 => 94161)


--- trunk/LayoutTests/http/tests/websocket/tests/hybi/receive-arraybuffer-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/http/tests/websocket/tests/hybi/receive-arraybuffer-expected.txt	2011-08-31 08:33:38 UTC (rev 94161)
@@ -0,0 +1,22 @@
+WebSocket: Receive ArrayBuffers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS ws.binaryType is "arraybuffer"
+PASS receivedMessages.length is 3
+Checking message #0.
+PASS responseType is "[object ArrayBuffer]"
+PASS actualArray.length is 13
+PASS Passed: Message #0.
+Checking message #1.
+PASS responseType is "[object ArrayBuffer]"
+PASS actualArray.length is 0
+PASS Passed: Message #1.
+Checking message #2.
+PASS responseType is "[object ArrayBuffer]"
+PASS actualArray.length is 256
+PASS Passed: Message #2.
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Copied: trunk/LayoutTests/http/tests/websocket/tests/hybi/receive-arraybuffer.html (from rev 94160, trunk/LayoutTests/http/tests/websocket/tests/hybi/receive-blob.html) (0 => 94161)


--- trunk/LayoutTests/http/tests/websocket/tests/hybi/receive-arraybuffer.html	                        (rev 0)
+++ trunk/LayoutTests/http/tests/websocket/tests/hybi/receive-arraybuffer.html	2011-08-31 08:33:38 UTC (rev 94161)
@@ -0,0 +1,94 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="stylesheet" href=""
+<script src=""
+</head>
+<body>
+<div id="description"></div>
+<div id="console"></div>
+<script>
+description("WebSocket: Receive ArrayBuffers.");
+
+window.jsTestIsAsync = true;
+if (window.layoutTestController)
+    layoutTestController.overridePreference("WebKitHixie76WebSocketProtocolEnabled", 0);
+
+function createArrayBufferContainingHelloWorld()
+{
+    var hello = "Hello, world!";
+    var array = new Uint8Array(hello.length);
+    for (var i = 0; i < hello.length; ++i)
+        array[i] = hello.charCodeAt(i);
+    return array.buffer;
+}
+
+function createEmptyArrayBuffer()
+{
+    return new ArrayBuffer(0);
+}
+
+function createArrayBufferContainingAllDistinctBytes()
+{
+    var array = new Uint8Array(256);
+    for (var i = 0; i < 256; ++i)
+        array[i] = i;
+    return array.buffer;
+}
+
+var ws = new WebSocket("ws://127.0.0.1:8880/websocket/tests/hybi/binary-frames");
+ws.binaryType = "arraybuffer";
+shouldBeEqualToString("ws.binaryType", "arraybuffer");
+
+var closeEvent;
+var receivedMessages = [];
+var expectedValues = [createArrayBufferContainingHelloWorld(), createEmptyArrayBuffer(), createArrayBufferContainingAllDistinctBytes()];
+
+ws._onmessage_ = function(event)
+{
+    receivedMessages.push(event.data);
+};
+
+ws._onclose_ = function(event)
+{
+    closeEvent = event;
+
+    shouldEvaluateTo("receivedMessages.length", expectedValues.length);
+    for (var i = 0; i < expectedValues.length; ++i)
+        check(i);
+    finishJSTest();
+};
+
+var responseType;
+
+function check(index)
+{
+    debug("Checking message #" + index + ".");
+    responseType = '' + receivedMessages[index];
+    shouldBeEqualToString("responseType", "[object ArrayBuffer]");
+    checkArrayBuffer(index, receivedMessages[index], expectedValues[index]);
+}
+
+var actualArray;
+var expectedArray;
+
+function checkArrayBuffer(testIndex, actual, expected)
+{
+    actualArray = new Uint8Array(actual);
+    expectedArray = new Uint8Array(expected);
+    shouldEvaluateTo("actualArray.length", expectedArray.length);
+    // Print only the first mismatched byte in order not to flood console.
+    for (var i = 0; i < expectedArray.length; ++i) {
+        if (actualArray[i] != expectedArray[i]) {
+            testFailed("Value mismatch: actualArray[" + i + "] = " + actualArray[i] + ", expectedArray[" + i + "] = " + expectedArray[i]);
+            return;
+        }
+    }
+    testPassed("Passed: Message #" + testIndex + ".");
+}
+
+var successfullyParsed = true;
+</script>
+<script src=""
+</body>
+</html>

Modified: trunk/LayoutTests/http/tests/websocket/tests/hybi/receive-blob.html (94160 => 94161)


--- trunk/LayoutTests/http/tests/websocket/tests/hybi/receive-blob.html	2011-08-31 08:18:58 UTC (rev 94160)
+++ trunk/LayoutTests/http/tests/websocket/tests/hybi/receive-blob.html	2011-08-31 08:33:38 UTC (rev 94161)
@@ -14,7 +14,7 @@
 if (window.layoutTestController)
     layoutTestController.overridePreference("WebKitHixie76WebSocketProtocolEnabled", 0);
 
-function createHelloWorldValue()
+function createArrayBufferContainingHelloWorld()
 {
     var hello = "Hello, world!";
     var array = new Uint8Array(hello.length);
@@ -23,13 +23,12 @@
     return array.buffer;
 }
 
-function createEmptyValue()
+function createEmptyArrayBuffer()
 {
     return new ArrayBuffer(0);
 }
 
-// Create an ArrayBuffer containing all distinct bytes ("\x00" to "\xFF").
-function createAllBytesValue()
+function createArrayBufferContainingAllDistinctBytes()
 {
     var array = new Uint8Array(256);
     for (var i = 0; i < 256; ++i)
@@ -42,7 +41,7 @@
 
 var closeEvent;
 var receivedMessages = [];
-var expectedValues = [createHelloWorldValue(), createEmptyValue(), createAllBytesValue()];
+var expectedValues = [createArrayBufferContainingHelloWorld(), createEmptyArrayBuffer(), createArrayBufferContainingAllDistinctBytes()];
 
 ws._onmessage_ = function(event)
 {

Added: trunk/LayoutTests/http/tests/websocket/tests/hybi/workers/receive-arraybuffer-expected.txt (0 => 94161)


--- trunk/LayoutTests/http/tests/websocket/tests/hybi/workers/receive-arraybuffer-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/http/tests/websocket/tests/hybi/workers/receive-arraybuffer-expected.txt	2011-08-31 08:33:38 UTC (rev 94161)
@@ -0,0 +1,23 @@
+WebSocket: Receive ArrayBuffers in Web Workers.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS PASS: ws.binaryType is "arraybuffer"
+PASS PASS: receivedMessages.length is 3
+INFO: Checking message #0.
+PASS PASS: responseType is "[object ArrayBuffer]"
+PASS PASS: actualArray.length is 13
+PASS PASS: Passed: Message #0.
+INFO: Checking message #1.
+PASS PASS: responseType is "[object ArrayBuffer]"
+PASS PASS: actualArray.length is 0
+PASS PASS: Passed: Message #1.
+INFO: Checking message #2.
+PASS PASS: responseType is "[object ArrayBuffer]"
+PASS PASS: actualArray.length is 256
+PASS PASS: Passed: Message #2.
+DONE
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/http/tests/websocket/tests/hybi/workers/receive-arraybuffer.html (0 => 94161)


--- trunk/LayoutTests/http/tests/websocket/tests/hybi/workers/receive-arraybuffer.html	                        (rev 0)
+++ trunk/LayoutTests/http/tests/websocket/tests/hybi/workers/receive-arraybuffer.html	2011-08-31 08:33:38 UTC (rev 94161)
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html>
+<head>
+<link rel="stylesheet" href=""
+<script src=""
+</head>
+<body>
+<div id="description"></div>
+<div id="console"></div>
+<script type="text/_javascript_">
+description("WebSocket: Receive ArrayBuffers in Web Workers.");
+
+window.jsTestIsAsync = true;
+if (window.layoutTestController)
+    layoutTestController.overridePreference("WebKitHixie76WebSocketProtocolEnabled", 0);
+
+function startsWith(str, prefix)
+{
+    return str.indexOf(prefix) == 0;
+}
+
+var worker = new Worker("resources/receive-arraybuffer.js");
+worker._onmessage_ = function (event)
+{
+    var message = event.data;
+    if (startsWith(message, "PASS"))
+        testPassed(message);
+    else if (startsWith(message, "FAIL"))
+        testFailed(message)
+    else
+        debug(message);
+    if (message === "DONE")
+        finishJSTest();
+};
+
+var successfullyParsed = true;
+</script>
+<script src=""
+</body>
+</html>

Copied: trunk/LayoutTests/http/tests/websocket/tests/hybi/workers/resources/receive-arraybuffer.js (from rev 94160, trunk/LayoutTests/http/tests/websocket/tests/hybi/workers/resources/receive-blob.js) (0 => 94161)


--- trunk/LayoutTests/http/tests/websocket/tests/hybi/workers/resources/receive-arraybuffer.js	                        (rev 0)
+++ trunk/LayoutTests/http/tests/websocket/tests/hybi/workers/resources/receive-arraybuffer.js	2011-08-31 08:33:38 UTC (rev 94161)
@@ -0,0 +1,76 @@
+function createArrayBufferContainingHelloWorld()
+{
+    var hello = "Hello, world!";
+    var array = new Uint8Array(hello.length);
+    for (var i = 0; i < hello.length; ++i)
+        array[i] = hello.charCodeAt(i);
+    return array.buffer;
+}
+
+function createEmptyArrayBuffer()
+{
+    return new ArrayBuffer(0);
+}
+
+function createArrayBufferContainingAllDistinctBytes()
+{
+    var array = new Uint8Array(256);
+    for (var i = 0; i < 256; ++i)
+        array[i] = i;
+    return array.buffer;
+}
+
+var ws = new WebSocket("ws://127.0.0.1:8880/websocket/tests/hybi/workers/resources/binary-frames");
+ws.binaryType = "arraybuffer";
+if (ws.binaryType === "arraybuffer")
+    postMessage("PASS: ws.binaryType is \"arraybuffer\"");
+else
+    postMessage("FAIL: ws.binaryType should be \"arraybuffer\" but was \"" + ws.binaryType + "\"");
+
+var receivedMessages = [];
+var expectedValues = [createArrayBufferContainingHelloWorld(), createEmptyArrayBuffer(), createArrayBufferContainingAllDistinctBytes()];
+
+ws._onmessage_ = function(event)
+{
+    receivedMessages.push(event.data);
+};
+
+ws._onclose_ = function(closeEvent)
+{
+    if (receivedMessages.length === expectedValues.length)
+        postMessage("PASS: receivedMessages.length is " + expectedValues.length);
+    else
+        postMessage("FAIL: receivedMessages.length should be " + expectedValues.length + " but was " + receivedMessages.length);
+    for (var i = 0; i < expectedValues.length; ++i)
+        check(i);
+    postMessage("DONE");
+};
+
+function check(index)
+{
+    postMessage("INFO: Checking message #" + index + ".");
+    var responseType = '' + receivedMessages[index];
+    if (responseType === "[object ArrayBuffer]")
+        postMessage("PASS: responseType is \"[object ArrayBuffer]\"");
+    else
+        postMessage("FAIL: responseType should be \"[object ArrayBuffer]\" but was \"" + responseType + "\"");
+    checkArrayBuffer(index, receivedMessages[index], expectedValues[index]);
+}
+
+function checkArrayBuffer(testIndex, actual, expected)
+{
+    var actualArray = new Uint8Array(actual);
+    var expectedArray = new Uint8Array(expected);
+    if (actualArray.length === expectedArray.length)
+        postMessage("PASS: actualArray.length is " + expectedArray.length);
+    else
+        postMessage("FAIL: actualArray.length should be " + expectedArray.length + " but was " + actualArray.length);
+    // Print only the first mismatched byte in order not to flood console.
+    for (var i = 0; i < expectedArray.length; ++i) {
+        if (actualArray[i] != expectedArray[i]) {
+            postMessage("FAIL: Value mismatch: actualArray[" + i + "] = " + actualArray[i] + ", expectedArray[" + i + "] = " + expectedArray[i]);
+            return;
+        }
+    }
+    postMessage("PASS: Passed: Message #" + testIndex + ".");
+}

Modified: trunk/LayoutTests/http/tests/websocket/tests/hybi/workers/resources/receive-blob.js (94160 => 94161)


--- trunk/LayoutTests/http/tests/websocket/tests/hybi/workers/resources/receive-blob.js	2011-08-31 08:18:58 UTC (rev 94160)
+++ trunk/LayoutTests/http/tests/websocket/tests/hybi/workers/resources/receive-blob.js	2011-08-31 08:33:38 UTC (rev 94161)
@@ -1,4 +1,4 @@
-function createHelloWorldValue()
+function createArrayBufferContainingHelloWorld()
 {
     var hello = "Hello, world!";
     var array = new Uint8Array(hello.length);
@@ -7,13 +7,12 @@
     return array.buffer;
 }
 
-function createEmptyValue()
+function createEmptyArrayBuffer()
 {
     return new ArrayBuffer(0);
 }
 
-// Create an ArrayBuffer containing all distinct bytes ("\x00" to "\xFF").
-function createAllBytesValue()
+function createArrayBufferContainingAllDistinctBytes()
 {
     var array = new Uint8Array(256);
     for (var i = 0; i < 256; ++i)
@@ -28,7 +27,7 @@
     postMessage("FAIL: ws.binaryType should be \"blob\" but was \"" + ws.binaryType + "\"");
 
 var receivedMessages = [];
-var expectedValues = [createHelloWorldValue(), createEmptyValue(), createAllBytesValue()];
+var expectedValues = [createArrayBufferContainingHelloWorld(), createEmptyArrayBuffer(), createArrayBufferContainingAllDistinctBytes()];
 
 ws._onmessage_ = function(event)
 {

Modified: trunk/Source/WebCore/ChangeLog (94160 => 94161)


--- trunk/Source/WebCore/ChangeLog	2011-08-31 08:18:58 UTC (rev 94160)
+++ trunk/Source/WebCore/ChangeLog	2011-08-31 08:33:38 UTC (rev 94161)
@@ -1,3 +1,27 @@
+2011-08-31  Yuta Kitamura  <[email protected]>
+
+        WebSocket: Receive binary message as ArrayBuffer
+        https://bugs.webkit.org/show_bug.cgi?id=67180
+
+        Reviewed by Kent Tamura.
+
+        Tests: http/tests/websocket/tests/hybi/receive-arraybuffer.html
+               http/tests/websocket/tests/hybi/workers/receive-arraybuffer.html
+
+        * bindings/js/JSMessageEventCustom.cpp:
+        (WebCore::JSMessageEvent::data): Convert ArrayBuffer to JSValue.
+        * bindings/v8/custom/V8MessageEventCustom.cpp:
+        (WebCore::V8MessageEvent::dataAccessorGetter): Convert ArrayBuffer to v8::Value.
+        * dom/MessageEvent.cpp:
+        (WebCore::MessageEvent::MessageEvent):
+        * dom/MessageEvent.h:
+        Added DataTypeArrayBuffer and ArrayBuffer-related functions.
+        (WebCore::MessageEvent::create):
+        (WebCore::MessageEvent::dataAsArrayBuffer):
+        * websockets/WebSocket.cpp:
+        (WebCore::WebSocket::didReceiveBinaryData):
+        Construct an ArrayBuffer from binaryData and raise MessageEvent.
+
 2011-08-31  Keishi Hattori  <[email protected]>
 
         input color: onchange event is not fired when changing color from color chooser

Modified: trunk/Source/WebCore/bindings/js/JSMessageEventCustom.cpp (94160 => 94161)


--- trunk/Source/WebCore/bindings/js/JSMessageEventCustom.cpp	2011-08-31 08:18:58 UTC (rev 94160)
+++ trunk/Source/WebCore/bindings/js/JSMessageEventCustom.cpp	2011-08-31 08:33:38 UTC (rev 94161)
@@ -31,6 +31,7 @@
 #include "config.h"
 #include "JSMessageEvent.h"
 
+#include "JSArrayBuffer.h"
 #include "JSBlob.h"
 #include "JSDOMBinding.h"
 #include "JSDOMWindow.h"
@@ -65,6 +66,10 @@
     case MessageEvent::DataTypeBlob:
         result = toJS(exec, globalObject(), event->dataAsBlob());
         break;
+
+    case MessageEvent::DataTypeArrayBuffer:
+        result = toJS(exec, globalObject(), event->dataAsArrayBuffer());
+        break;
     }
 
     // Save the result so we don't have to deserialize the value again.

Modified: trunk/Source/WebCore/bindings/v8/custom/V8MessageEventCustom.cpp (94160 => 94161)


--- trunk/Source/WebCore/bindings/v8/custom/V8MessageEventCustom.cpp	2011-08-31 08:18:58 UTC (rev 94160)
+++ trunk/Source/WebCore/bindings/v8/custom/V8MessageEventCustom.cpp	2011-08-31 08:33:38 UTC (rev 94161)
@@ -34,6 +34,7 @@
 #include "MessageEvent.h"
 #include "SerializedScriptValue.h"
 
+#include "V8ArrayBuffer.h"
 #include "V8Binding.h"
 #include "V8Blob.h"
 #include "V8DOMWindow.h"
@@ -66,6 +67,10 @@
     case MessageEvent::DataTypeBlob:
         result = toV8(event->dataAsBlob());
         break;
+
+    case MessageEvent::DataTypeArrayBuffer:
+        result = toV8(event->dataAsArrayBuffer());
+        break;
     }
 
     // Overwrite the data attribute so it returns the cached result in future invocations.

Modified: trunk/Source/WebCore/dom/MessageEvent.cpp (94160 => 94161)


--- trunk/Source/WebCore/dom/MessageEvent.cpp	2011-08-31 08:18:58 UTC (rev 94160)
+++ trunk/Source/WebCore/dom/MessageEvent.cpp	2011-08-31 08:33:38 UTC (rev 94161)
@@ -68,6 +68,15 @@
 {
 }
 
+MessageEvent::MessageEvent(PassRefPtr<ArrayBuffer> data)
+    : Event(eventNames().messageEvent, false, false)
+    , m_dataType(DataTypeArrayBuffer)
+    , m_dataAsArrayBuffer(data)
+    , m_origin("")
+    , m_lastEventId("")
+{
+}
+
 MessageEvent::~MessageEvent()
 {
 }

Modified: trunk/Source/WebCore/dom/MessageEvent.h (94160 => 94161)


--- trunk/Source/WebCore/dom/MessageEvent.h	2011-08-31 08:18:58 UTC (rev 94160)
+++ trunk/Source/WebCore/dom/MessageEvent.h	2011-08-31 08:33:38 UTC (rev 94161)
@@ -28,6 +28,7 @@
 #ifndef MessageEvent_h
 #define MessageEvent_h
 
+#include "ArrayBuffer.h"
 #include "Blob.h"
 #include "DOMWindow.h"
 #include "Event.h"
@@ -56,6 +57,10 @@
         {
             return adoptRef(new MessageEvent(data));
         }
+        static PassRefPtr<MessageEvent> create(PassRefPtr<ArrayBuffer> data)
+        {
+            return adoptRef(new MessageEvent(data));
+        }
         virtual ~MessageEvent();
 
         void initMessageEvent(const AtomicString& type, bool canBubble, bool cancelable, PassRefPtr<SerializedScriptValue> data, const String& origin, const String& lastEventId, DOMWindow* source, PassOwnPtr<MessagePortArray>);
@@ -78,23 +83,27 @@
         enum DataType {
             DataTypeSerializedScriptValue,
             DataTypeString,
-            DataTypeBlob
+            DataTypeBlob,
+            DataTypeArrayBuffer
         };
         DataType dataType() const { return m_dataType; }
         SerializedScriptValue* dataAsSerializedScriptValue() const { return m_dataAsSerializedScriptValue.get(); }
         String dataAsString() const { return m_dataAsString; }
         Blob* dataAsBlob() const { return m_dataAsBlob.get(); }
+        ArrayBuffer* dataAsArrayBuffer() const { return m_dataAsArrayBuffer.get(); }
 
     private:
         MessageEvent();
         MessageEvent(PassRefPtr<SerializedScriptValue> data, const String& origin, const String& lastEventId, PassRefPtr<DOMWindow> source, PassOwnPtr<MessagePortArray>);
         explicit MessageEvent(const String& data);
         explicit MessageEvent(PassRefPtr<Blob> data);
+        explicit MessageEvent(PassRefPtr<ArrayBuffer> data);
 
         DataType m_dataType;
         RefPtr<SerializedScriptValue> m_dataAsSerializedScriptValue;
         String m_dataAsString;
         RefPtr<Blob> m_dataAsBlob;
+        RefPtr<ArrayBuffer> m_dataAsArrayBuffer;
         String m_origin;
         String m_lastEventId;
         RefPtr<DOMWindow> m_source;

Modified: trunk/Source/WebCore/websockets/WebSocket.cpp (94160 => 94161)


--- trunk/Source/WebCore/websockets/WebSocket.cpp	2011-08-31 08:18:58 UTC (rev 94160)
+++ trunk/Source/WebCore/websockets/WebSocket.cpp	2011-08-31 08:33:38 UTC (rev 94161)
@@ -415,7 +415,7 @@
     }
 
     case BinaryTypeArrayBuffer:
-        m_channel->fail("Cannot receive WebSocket binary data as ArrayBuffer yet.");
+        dispatchEvent(MessageEvent::create(ArrayBuffer::create(binaryData->data(), binaryData->size())));
         break;
     }
 }
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to