- 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