Title: [104791] trunk/Source/WebKit/chromium
Revision
104791
Author
[email protected]
Date
2012-01-11 22:47:47 -0800 (Wed, 11 Jan 2012)

Log Message

Add WebArrayBuffer support in WebSocket to WebKit API.
https://bugs.webkit.org/show_bug.cgi?id=75080

Patch by Takashi Toyoshima <[email protected]> on 2012-01-11
Reviewed by Darin Fisher.

* public/WebSocket.h: Add interface to send WebArrayBuffer, and set and get receiving binary object type.
* public/WebSocketClient.h: Add interface to receive WebArrayBuffer.
(WebKit::WebSocketClient::didReceiveArrayBuffer):
* src/WebSocketImpl.cpp: Add various binary types handling.
(WebKit::WebSocketImpl::WebSocketImpl):
(WebKit::WebSocketImpl::binaryType):
(WebKit::WebSocketImpl::setBinaryType):
(WebKit::WebSocketImpl::sendArrayBuffer):
(WebKit::WebSocketImpl::didReceiveBinaryData):
* src/WebSocketImpl.h: Add methods to handle various binary types.

Modified Paths

Diff

Modified: trunk/Source/WebKit/chromium/ChangeLog (104790 => 104791)


--- trunk/Source/WebKit/chromium/ChangeLog	2012-01-12 06:38:32 UTC (rev 104790)
+++ trunk/Source/WebKit/chromium/ChangeLog	2012-01-12 06:47:47 UTC (rev 104791)
@@ -1,3 +1,21 @@
+2012-01-11  Takashi Toyoshima  <[email protected]>
+
+        Add WebArrayBuffer support in WebSocket to WebKit API.
+        https://bugs.webkit.org/show_bug.cgi?id=75080
+
+        Reviewed by Darin Fisher.
+
+        * public/WebSocket.h: Add interface to send WebArrayBuffer, and set and get receiving binary object type.
+        * public/WebSocketClient.h: Add interface to receive WebArrayBuffer.
+        (WebKit::WebSocketClient::didReceiveArrayBuffer):
+        * src/WebSocketImpl.cpp: Add various binary types handling.
+        (WebKit::WebSocketImpl::WebSocketImpl):
+        (WebKit::WebSocketImpl::binaryType):
+        (WebKit::WebSocketImpl::setBinaryType):
+        (WebKit::WebSocketImpl::sendArrayBuffer):
+        (WebKit::WebSocketImpl::didReceiveBinaryData):
+        * src/WebSocketImpl.h: Add methods to handle various binary types.
+
 2012-01-11  Scott Violet  <[email protected]>
 
         [chromium] TiledLayerChromium drops invalidates that occur during

Modified: trunk/Source/WebKit/chromium/public/WebSocket.h (104790 => 104791)


--- trunk/Source/WebKit/chromium/public/WebSocket.h	2012-01-12 06:38:32 UTC (rev 104790)
+++ trunk/Source/WebKit/chromium/public/WebSocket.h	2012-01-12 06:47:47 UTC (rev 104791)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011 Google Inc.  All rights reserved.
+ * Copyright (C) 2011, 2012 Google Inc.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
@@ -38,6 +38,7 @@
 
 namespace WebKit {
 
+class WebArrayBuffer;
 class WebData;
 class WebDocument;
 class WebString;
@@ -60,13 +61,31 @@
         CloseEventCodeMaximumUserDefined = 4999
     };
 
+    // FIXME: Remove BinaryTypeData after a switchover to other types.
+    enum BinaryType {
+        BinaryTypeBlob = 0,
+        BinaryTypeArrayBuffer = 1,
+        BinaryTypeData = 2 // Don't use it
+    };
+
     WEBKIT_EXPORT static WebSocket* create(const WebDocument&, WebSocketClient*);
     virtual ~WebSocket() { }
 
+    // These functions come from binaryType attribute of the WebSocket API
+    // specification. It specifies binary object type for receiving binary
+    // frames representation. Receiving text frames are always mapped to
+    // WebString type regardless of this attribute.
+    // Default type must be BinaryTypeBlob, but currently is BinaryTypeData
+    // for a switchover from WebData to WebArrayBuffer.
+    // See also, The WebSocket API - http://www.w3.org/TR/websockets/ .
+    virtual BinaryType binaryType() const = 0;
+    virtual bool setBinaryType(BinaryType) = 0;
+
     virtual void connect(const WebURL&, const WebString& protocol) = 0;
     virtual WebString subprotocol() = 0;
-    virtual bool sendText(const WebString& message) = 0;
-    virtual bool sendBinary(const WebData& binaryData) = 0;
+    virtual bool sendText(const WebString&) = 0;
+    virtual bool sendBinary(const WebData&) = 0;
+    virtual bool sendArrayBuffer(const WebArrayBuffer&) = 0;
     virtual unsigned long bufferedAmount() const = 0;
     virtual void close(int code, const WebString& reason) = 0;
     virtual void fail(const WebString& reason) = 0;

Modified: trunk/Source/WebKit/chromium/public/WebSocketClient.h (104790 => 104791)


--- trunk/Source/WebKit/chromium/public/WebSocketClient.h	2012-01-12 06:38:32 UTC (rev 104790)
+++ trunk/Source/WebKit/chromium/public/WebSocketClient.h	2012-01-12 06:47:47 UTC (rev 104791)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011 Google Inc.  All rights reserved.
+ * Copyright (C) 2011, 2012 Google Inc.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
@@ -36,6 +36,7 @@
 
 namespace WebKit {
 
+class WebArrayBuffer;
 class WebString;
 
 class WebSocketClient {
@@ -49,6 +50,7 @@
     virtual void didConnect() { }
     virtual void didReceiveMessage(const WebString& message) { }
     virtual void didReceiveBinaryData(const WebData& binaryData) { }
+    virtual void didReceiveArrayBuffer(const WebArrayBuffer& arrayBuffer) { }
     virtual void didReceiveMessageError() { }
     virtual void didUpdateBufferedAmount(unsigned long bufferedAmount) { }
     virtual void didStartClosingHandshake() { }

Modified: trunk/Source/WebKit/chromium/src/WebSocketImpl.cpp (104790 => 104791)


--- trunk/Source/WebKit/chromium/src/WebSocketImpl.cpp	2012-01-12 06:38:32 UTC (rev 104790)
+++ trunk/Source/WebKit/chromium/src/WebSocketImpl.cpp	2012-01-12 06:47:47 UTC (rev 104791)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011 Google Inc. All rights reserved.
+ * Copyright (C) 2011, 2012 Google Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
@@ -31,6 +31,7 @@
 #include "config.h"
 #include "WebSocketImpl.h"
 
+#include "ArrayBuffer.h"
 #include "Document.h"
 #include "KURL.h"
 #if ENABLE(WEB_SOCKETS)
@@ -43,9 +44,10 @@
 } // namespace WebCore
 #endif
 
-#include "platform/WebData.h"
+#include "WebArrayBuffer.h"
 #include "WebDocument.h"
 #include "WebSocketClient.h"
+#include "platform/WebData.h"
 #include "platform/WebString.h"
 #include "platform/WebURL.h"
 
@@ -53,8 +55,10 @@
 
 namespace WebKit {
 
+// FIXME: Default m_binaryType must be Blob after supporting WebBlob.
 WebSocketImpl::WebSocketImpl(const WebDocument& document, WebSocketClient* client)
     : m_client(client)
+    , m_binaryType(BinaryTypeData)
 {
 #if ENABLE(WEB_SOCKETS)
     m_private = WebSocketChannel::create(PassRefPtr<Document>(document).get(), this);
@@ -72,6 +76,19 @@
 #endif
 }
 
+WebSocket::BinaryType WebSocketImpl::binaryType() const
+{
+    return m_binaryType;
+}
+
+bool WebSocketImpl::setBinaryType(BinaryType binaryType)
+{
+    if (binaryType > BinaryTypeArrayBuffer)
+        return false;
+    m_binaryType = binaryType;
+    return true;
+}
+
 void WebSocketImpl::connect(const WebURL& url, const WebString& protocol)
 {
 #if ENABLE(WEB_SOCKETS)
@@ -108,6 +125,15 @@
 #endif
 }
 
+bool WebSocketImpl::sendArrayBuffer(const WebArrayBuffer& webArrayBuffer)
+{
+#if ENABLE(WEB_SOCKETS)
+    return m_private->send(*PassRefPtr<ArrayBuffer>(webArrayBuffer));
+#else
+    ASSERT_NOT_REACHED();
+#endif
+}
+
 unsigned long WebSocketImpl::bufferedAmount() const
 {
 #if ENABLE(WEB_SOCKETS)
@@ -166,7 +192,15 @@
 void WebSocketImpl::didReceiveBinaryData(PassOwnPtr<Vector<char> > binaryData)
 {
 #if ENABLE(WEB_SOCKETS)
-    m_client->didReceiveBinaryData(WebData(binaryData->data(), binaryData->size()));
+    switch (m_binaryType) {
+    case BinaryTypeData:
+    case BinaryTypeBlob: // FIXME: Handle Blob after supporting WebBlob.
+        m_client->didReceiveBinaryData(WebData(binaryData->data(), binaryData->size()));
+        break;
+    case BinaryTypeArrayBuffer:
+        m_client->didReceiveArrayBuffer(WebArrayBuffer(ArrayBuffer::create(binaryData->data(), binaryData->size())));
+        break;
+    }
 #else
     ASSERT_NOT_REACHED();
 #endif

Modified: trunk/Source/WebKit/chromium/src/WebSocketImpl.h (104790 => 104791)


--- trunk/Source/WebKit/chromium/src/WebSocketImpl.h	2012-01-12 06:38:32 UTC (rev 104790)
+++ trunk/Source/WebKit/chromium/src/WebSocketImpl.h	2012-01-12 06:47:47 UTC (rev 104791)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011 Google Inc.  All rights reserved.
+ * Copyright (C) 2011, 2012 Google Inc.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
@@ -54,10 +54,14 @@
 
     bool isNull() const { return !m_private; }
 
+    BinaryType binaryType() const;
+    virtual bool setBinaryType(BinaryType);
     virtual void connect(const WebURL&, const WebString& protocol);
     virtual WebString subprotocol();
-    virtual bool sendText(const WebString& message);
-    virtual bool sendBinary(const WebData& binaryData);
+    virtual bool sendText(const WebString&);
+    // FIXME: Remove sendBinary() after a switchover to other types.
+    virtual bool sendBinary(const WebData&);
+    virtual bool sendArrayBuffer(const WebArrayBuffer&);
     virtual unsigned long bufferedAmount() const;
     virtual void close(int code, const WebString& reason);
     virtual void fail(const WebString& reason);
@@ -75,6 +79,7 @@
 private:
     RefPtr<WebCore::WebSocketChannel> m_private;
     WebSocketClient* m_client;
+    BinaryType m_binaryType;
 };
 
 } // namespace WebKit
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to