https://bugs.webkit.org/show_bug.cgi?id=72016
Source/WebCore:
Patch by Takashi Toyoshima <toyoshim@chromium.org> on 2011-11-18
Reviewed by Darin Fisher.
Add a interface to send raw binary data.
This interface is used by WebWebSocketChannel implementation
in WebKit API.
No new tests because just export a interface.
* websockets/WebSocketChannel.cpp:
(WebCore::WebSocketChannel::send):
* websockets/WebSocketChannel.h:
Source/WebKit/chromium:
Add WebSocket and WebSocketClient to WebKit API.
Currently, only WebSocketStreamHandle class is exported to WebKit API.
WebSocketStreamHandle implements bi-directional communication ports.
If plugins handles the WebSocket protocol, WebSocketChannel and
WebSocketChannelClient must be exported as WebSocket because they are
the classes which implement the WebSocket protocol stack.
Normally, we use WebWebSocketChannel and WebWebSocketChannelClient as
their class names. But here we use just WebSocket and WebSocketClient
because of avoiding WebWeb prefix and class name confliction on
header include.
Patch by Takashi Toyoshima <toyoshim@chromium.org> on 2011-11-18
Reviewed by Darin Fisher.
* WebKit.gyp:
* public/WebSocket.h: Added.
(WebKit::WebSocket::~WebSocket):
* public/WebSocketClient.h: Added.
(WebKit::WebSocketClient::~WebSocketClient):
* src/WebRuntimeFeatures.cpp: Insert websockets directory to include path in order to avoid filename confliction.
(WebKit::WebRuntimeFeatures::enableSockets): Use WebCore namespace explicitly.
* src/WebSocket.cpp: Added.
(WebKit::WebSocket::create):
* src/WebSocketImpl.cpp: Added.
(WebKit::WebSocketImpl::WebSocketImpl):
(WebKit::WebSocketImpl::~WebSocketImpl):
(WebKit::WebSocketImpl::connect):
(WebKit::WebSocketImpl::subprotocol):
(WebKit::WebSocketImpl::sendText):
(WebKit::WebSocketImpl::sendBinary):
(WebKit::WebSocketImpl::bufferedAmount):
(WebKit::WebSocketImpl::close):
(WebKit::WebSocketImpl::fail):
(WebKit::WebSocketImpl::disconnect):
(WebKit::WebSocketImpl::didConnect):
(WebKit::WebSocketImpl::didReceiveMessage):
(WebKit::WebSocketImpl::didReceiveBinaryData):
(WebKit::WebSocketImpl::didReceiveMessageError):
(WebKit::WebSocketImpl::didStartClosingHandshake):
(WebKit::WebSocketImpl::didClose):
* src/WebSocketImpl.h: Added.
(WebKit::WebSocketImpl::isNull):
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@100849
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2011-11-18 Takashi Toyoshima <toyoshim@chromium.org>
+
+ [Chromium] [WebSocket] export WebSocketChannel interface for plugins
+ https://bugs.webkit.org/show_bug.cgi?id=72016
+
+ Reviewed by Darin Fisher.
+
+ Add a interface to send raw binary data.
+ This interface is used by WebWebSocketChannel implementation
+ in WebKit API.
+
+ No new tests because just export a interface.
+
+ * websockets/WebSocketChannel.cpp:
+ (WebCore::WebSocketChannel::send):
+ * websockets/WebSocketChannel.h:
+
2011-11-18 Vineet Chaudhary <vineet.chaudhary@motorola.com>
https://bugs.webkit.org/show_bug.cgi?id=72591
return true;
}
+bool WebSocketChannel::send(const char* data, int length)
+{
+ LOG(Network, "WebSocketChannel %p send binary %p (%dB)", this, data, length);
+ ASSERT(!m_useHixie76Protocol);
+ enqueueRawFrame(OpCodeBinary, data, length);
+ return true;
+}
+
unsigned long WebSocketChannel::bufferedAmount() const
{
LOG(Network, "WebSocketChannel %p bufferedAmount", this);
virtual bool send(const String& message);
virtual bool send(const ArrayBuffer&);
virtual bool send(const Blob&);
+ virtual bool send(const char* data, int length);
virtual unsigned long bufferedAmount() const;
virtual void close(int code, const String& reason); // Start closing handshake.
virtual void fail(const String& reason);
+2011-11-18 Takashi Toyoshima <toyoshim@chromium.org>
+
+ [Chromium] [WebSocket] export WebSocketChannel interface for plugins
+ https://bugs.webkit.org/show_bug.cgi?id=72016
+
+ Add WebSocket and WebSocketClient to WebKit API.
+
+ Currently, only WebSocketStreamHandle class is exported to WebKit API.
+ WebSocketStreamHandle implements bi-directional communication ports.
+ If plugins handles the WebSocket protocol, WebSocketChannel and
+ WebSocketChannelClient must be exported as WebSocket because they are
+ the classes which implement the WebSocket protocol stack.
+
+ Normally, we use WebWebSocketChannel and WebWebSocketChannelClient as
+ their class names. But here we use just WebSocket and WebSocketClient
+ because of avoiding WebWeb prefix and class name confliction on
+ header include.
+
+ Reviewed by Darin Fisher.
+
+ * WebKit.gyp:
+ * public/WebSocket.h: Added.
+ (WebKit::WebSocket::~WebSocket):
+ * public/WebSocketClient.h: Added.
+ (WebKit::WebSocketClient::~WebSocketClient):
+ * src/WebRuntimeFeatures.cpp: Insert websockets directory to include path in order to avoid filename confliction.
+ (WebKit::WebRuntimeFeatures::enableSockets): Use WebCore namespace explicitly.
+ * src/WebSocket.cpp: Added.
+ (WebKit::WebSocket::create):
+ * src/WebSocketImpl.cpp: Added.
+ (WebKit::WebSocketImpl::WebSocketImpl):
+ (WebKit::WebSocketImpl::~WebSocketImpl):
+ (WebKit::WebSocketImpl::connect):
+ (WebKit::WebSocketImpl::subprotocol):
+ (WebKit::WebSocketImpl::sendText):
+ (WebKit::WebSocketImpl::sendBinary):
+ (WebKit::WebSocketImpl::bufferedAmount):
+ (WebKit::WebSocketImpl::close):
+ (WebKit::WebSocketImpl::fail):
+ (WebKit::WebSocketImpl::disconnect):
+ (WebKit::WebSocketImpl::didConnect):
+ (WebKit::WebSocketImpl::didReceiveMessage):
+ (WebKit::WebSocketImpl::didReceiveBinaryData):
+ (WebKit::WebSocketImpl::didReceiveMessageError):
+ (WebKit::WebSocketImpl::didStartClosingHandshake):
+ (WebKit::WebSocketImpl::didClose):
+ * src/WebSocketImpl.h: Added.
+ (WebKit::WebSocketImpl::isNull):
+
2011-11-18 Alpha Lam <hclam@chromium.org>
[chromium] composited layers are blurry with a zoom-in page scale factor
'public/WebSharedWorker.h',
'public/WebSharedWorkerRepository.h',
'public/WebSize.h',
+ 'public/WebSocket.h',
+ 'public/WebSocketClient.h',
'public/WebSocketStreamError.h',
'public/WebSocketStreamHandle.h',
'public/WebSocketStreamHandleClient.h',
'src/WebSettingsImpl.h',
'src/WebSharedWorkerImpl.cpp',
'src/WebSharedWorkerImpl.h',
+ 'src/WebSocket.cpp',
+ 'src/WebSocketImpl.cpp',
+ 'src/WebSocketImpl.h',
'src/WebSpeechInputControllerMockImpl.cpp',
'src/WebSpeechInputControllerMockImpl.h',
'src/WebSpeechInputResult.cpp',
--- /dev/null
+/*
+ * Copyright (C) 2011 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
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WebSocket_h
+#define WebSocket_h
+
+#include "WebCommon.h"
+#include "WebPrivatePtr.h"
+
+namespace WebCore { class WebSocketChannel; }
+
+namespace WebKit {
+
+class WebData;
+class WebDocument;
+class WebString;
+class WebURL;
+class WebSocketClient;
+
+class WebSocket {
+public:
+ enum CloseEventCode {
+ CloseEventCodeNotSpecified = -1,
+ CloseEventCodeNormalClosure = 1000,
+ CloseEventCodeGoingAway = 1001,
+ CloseEventCodeProtocolError = 1002,
+ CloseEventCodeUnsupportedData = 1003,
+ CloseEventCodeFrameTooLarge = 1004,
+ CloseEventCodeNoStatusRcvd = 1005,
+ CloseEventCodeAbnormalClosure = 1006,
+ CloseEventCodeInvalidUTF8 = 1007,
+ CloseEventCodeMinimumUserDefined = 3000,
+ CloseEventCodeMaximumUserDefined = 4999
+ };
+
+ WEBKIT_EXPORT static WebSocket* create(const WebDocument&, WebSocketClient*);
+ virtual ~WebSocket() { }
+
+ 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 unsigned long bufferedAmount() const = 0;
+ virtual void close(int code, const WebString& reason) = 0;
+ virtual void fail(const WebString& reason) = 0;
+ virtual void disconnect() = 0;
+};
+
+} // namespace WebKit
+
+#endif // WebSocket_h
--- /dev/null
+/*
+ * Copyright (C) 2011 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
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WebSocketClient_h
+#define WebSocketClient_h
+
+#include "WebCommon.h"
+#include "WebData.h"
+
+namespace WebKit {
+
+class WebString;
+
+class WebSocketClient {
+public:
+ enum ClosingHandshakeCompletionStatus {
+ ClosingHandshakeIncomplete,
+ ClosingHandshakeComplete
+ };
+
+ virtual ~WebSocketClient() { }
+ virtual void didConnect() = 0;
+ virtual void didReceiveMessage(const WebString& message) = 0;
+ virtual void didReceiveBinaryData(const WebData& binaryData) = 0;
+ virtual void didReceiveMessageError() = 0;
+ virtual void didStartClosingHandshake() = 0;
+ virtual void didClose(unsigned long bufferedAmount, ClosingHandshakeCompletionStatus, unsigned short code, const WebString& reason) = 0;
+};
+
+} // namespace WebKit
+
+#endif // WebSocketClient_h
#include "AbstractDatabase.h"
#include "RuntimeEnabledFeatures.h"
#include "WebMediaPlayerClientImpl.h"
-#include "WebSocket.h"
+#include "websockets/WebSocket.h"
#include <wtf/UnusedParam.h>
void WebRuntimeFeatures::enableSockets(bool enable)
{
#if ENABLE(WEB_SOCKETS)
- WebSocket::setIsAvailable(enable);
+ WebCore::WebSocket::setIsAvailable(enable);
#endif
}
--- /dev/null
+/*
+ * Copyright (C) 2011 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
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "WebSocket.h"
+
+#include "WebSocketImpl.h"
+
+namespace WebKit {
+
+WebSocket* WebSocket::create(const WebDocument& document, WebSocketClient* client)
+{
+ if (!client)
+ return 0;
+
+ OwnPtr<WebSocketImpl> websocket = adoptPtr(new WebSocketImpl(document, client));
+ if (websocket && websocket->isNull())
+ return 0;
+ return websocket.leakPtr();
+}
+
+} // namespace WebKit
--- /dev/null
+/*
+ * Copyright (C) 2011 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
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "WebSocketImpl.h"
+
+#include "Document.h"
+#include "KURL.h"
+#if ENABLE(WEB_SOCKETS)
+#include "WebSocketChannel.h"
+#include "WebSocketChannelClient.h"
+#else
+namespace WebCore {
+class WebSocketChannel {
+};
+} // namespace WebCore
+#endif
+
+#include "WebData.h"
+#include "WebDocument.h"
+#include "WebSocketClient.h"
+#include "WebString.h"
+#include "WebURL.h"
+
+using namespace WebCore;
+
+namespace WebKit {
+
+WebSocketImpl::WebSocketImpl(const WebDocument& document, WebSocketClient* client)
+ : m_client(client)
+{
+#if ENABLE(WEB_SOCKETS)
+ m_private = WebSocketChannel::create(PassRefPtr<Document>(document).get(), this);
+#else
+ ASSERT_NOT_REACHED();
+#endif
+}
+
+WebSocketImpl::~WebSocketImpl()
+{
+#if ENABLE(WEB_SOCKETS)
+ m_private->disconnect();
+#else
+ ASSERT_NOT_REACHED();
+#endif
+}
+
+void WebSocketImpl::connect(const WebURL& url, const WebString& protocol)
+{
+#if ENABLE(WEB_SOCKETS)
+ m_private->connect(url, protocol);
+#else
+ ASSERT_NOT_REACHED();
+#endif
+}
+
+WebString WebSocketImpl::subprotocol()
+{
+#if ENABLE(WEB_SOCKETS)
+ return m_private->subprotocol();
+#else
+ ASSERT_NOT_REACHED();
+#endif
+}
+
+bool WebSocketImpl::sendText(const WebString& message)
+{
+#if ENABLE(WEB_SOCKETS)
+ return m_private->send(message);
+#else
+ ASSERT_NOT_REACHED();
+#endif
+}
+
+bool WebSocketImpl::sendBinary(const WebData& binaryData)
+{
+#if ENABLE(WEB_SOCKETS)
+ return m_private->send(binaryData.data(), binaryData.size());
+#else
+ ASSERT_NOT_REACHED();
+#endif
+}
+
+unsigned long WebSocketImpl::bufferedAmount() const
+{
+#if ENABLE(WEB_SOCKETS)
+ return m_private->bufferedAmount();
+#else
+ ASSERT_NOT_REACHED();
+#endif
+}
+
+void WebSocketImpl::close(int code, const WebString& reason)
+{
+#if ENABLE(WEB_SOCKETS)
+ m_private->close(code, reason);
+#else
+ ASSERT_NOT_REACHED();
+#endif
+}
+
+void WebSocketImpl::fail(const WebString& reason)
+{
+#if ENABLE(WEB_SOCKETS)
+ m_private->fail(reason);
+#else
+ ASSERT_NOT_REACHED();
+#endif
+}
+
+void WebSocketImpl::disconnect()
+{
+#if ENABLE(WEB_SOCKETS)
+ m_private->disconnect();
+ m_client = 0;
+#else
+ ASSERT_NOT_REACHED();
+#endif
+}
+
+void WebSocketImpl::didConnect()
+{
+#if ENABLE(WEB_SOCKETS)
+ m_client->didConnect();
+#else
+ ASSERT_NOT_REACHED();
+#endif
+}
+
+void WebSocketImpl::didReceiveMessage(const String& message)
+{
+#if ENABLE(WEB_SOCKETS)
+ m_client->didReceiveMessage(WebString(message));
+#else
+ ASSERT_NOT_REACHED();
+#endif
+}
+
+void WebSocketImpl::didReceiveBinaryData(PassOwnPtr<Vector<char> > binaryData)
+{
+#if ENABLE(WEB_SOCKETS)
+ m_client->didReceiveBinaryData(WebData(binaryData->data(), binaryData->size()));
+#else
+ ASSERT_NOT_REACHED();
+#endif
+}
+
+void WebSocketImpl::didReceiveMessageError()
+{
+#if ENABLE(WEB_SOCKETS)
+ m_client->didReceiveMessageError();
+#else
+ ASSERT_NOT_REACHED();
+#endif
+}
+
+void WebSocketImpl::didStartClosingHandshake()
+{
+#if ENABLE(WEB_SOCKETS)
+ m_client->didStartClosingHandshake();
+#else
+ ASSERT_NOT_REACHED();
+#endif
+}
+
+void WebSocketImpl::didClose(unsigned long bufferedAmount, ClosingHandshakeCompletionStatus status, unsigned short code, const String& reason)
+{
+#if ENABLE(WEB_SOCKETS)
+ m_client->didClose(bufferedAmount, static_cast<WebSocketClient::ClosingHandshakeCompletionStatus>(status), code, WebString(reason));
+#else
+ ASSERT_NOT_REACHED();
+#endif
+}
+
+} // namespace WebKit
--- /dev/null
+/*
+ * Copyright (C) 2011 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
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WebSocketImpl_h
+#define WebSocketImpl_h
+
+#include "WebCommon.h"
+#include "WebSocket.h"
+#include "WebSocketChannelClient.h"
+#include "WebSocketClient.h"
+#include <wtf/OwnPtr.h>
+#include <wtf/RefPtr.h>
+
+namespace WebCore { class WebSocketChannel; }
+
+namespace WebKit {
+
+class WebData;
+class WebDocument;
+class WebString;
+class WebURL;
+
+class WebSocketImpl : public WebSocket, public WebCore::WebSocketChannelClient {
+public:
+ WebSocketImpl(const WebDocument&, WebSocketClient*);
+ virtual ~WebSocketImpl();
+
+ bool isNull() const { return !m_private; }
+
+ virtual void connect(const WebURL&, const WebString& protocol);
+ virtual WebString subprotocol();
+ virtual bool sendText(const WebString& message);
+ virtual bool sendBinary(const WebData& binaryData);
+ virtual unsigned long bufferedAmount() const;
+ virtual void close(int code, const WebString& reason);
+ virtual void fail(const WebString& reason);
+ virtual void disconnect();
+
+ // WebSocketChannelClient
+ virtual void didConnect();
+ virtual void didReceiveMessage(const String& message);
+ virtual void didReceiveBinaryData(PassOwnPtr<Vector<char> > binaryData);
+ virtual void didReceiveMessageError();
+ virtual void didStartClosingHandshake();
+ virtual void didClose(unsigned long bufferedAmount, ClosingHandshakeCompletionStatus, unsigned short code, const String& reason);
+
+private:
+ RefPtr<WebCore::WebSocketChannel> m_private;
+ WebSocketClient* m_client;
+};
+
+} // namespace WebKit
+
+#endif // WebWebSocketChannelImpl_h