summaryrefslogtreecommitdiffstats
path: root/Source/WebCore
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore')
-rw-r--r--Source/WebCore/Android.derived.v8bindings.mk4
-rw-r--r--Source/WebCore/Android.mk12
-rw-r--r--Source/WebCore/platform/network/android/SocketStreamError.h47
-rw-r--r--Source/WebCore/platform/network/android/SocketStreamHandle.h79
-rw-r--r--Source/WebCore/platform/network/android/SocketStreamHandleAndroid.cpp126
5 files changed, 268 insertions, 0 deletions
diff --git a/Source/WebCore/Android.derived.v8bindings.mk b/Source/WebCore/Android.derived.v8bindings.mk
index ec04e1a..173941b 100644
--- a/Source/WebCore/Android.derived.v8bindings.mk
+++ b/Source/WebCore/Android.derived.v8bindings.mk
@@ -34,6 +34,10 @@ js_binding_scripts := \
# Add ACCELERATED_COMPOSITING=1 and ENABLE_3D_RENDERING=1 for layers support
FEATURE_DEFINES := ENABLE_ORIENTATION_EVENTS=1 ENABLE_TOUCH_EVENTS=1 ENABLE_DATABASE=1 ENABLE_OFFLINE_WEB_APPLICATIONS=1 ENABLE_DOM_STORAGE=1 ENABLE_VIDEO=1 ENABLE_GEOLOCATION=1 ENABLE_CONNECTION=1 ENABLE_APPLICATION_INSTALLED=1 ENABLE_XPATH=1 ENABLE_XSLT=1 ENABLE_DEVICE_ORIENTATION=1 ENABLE_FILE_READER=1 ENABLE_BLOB=1 ENABLE_WEB_TIMING=1 ENABLE_MEDIA_CAPTURE=1
+
+# Add HTML5 WebSockets support
+FEATURE_DEFINES += ENABLE_WEB_SOCKETS=1
+
# The defines above should be identical to those for JSC.
FEATURE_DEFINES += V8_BINDING
diff --git a/Source/WebCore/Android.mk b/Source/WebCore/Android.mk
index 1f8868e..164499e 100644
--- a/Source/WebCore/Android.mk
+++ b/Source/WebCore/Android.mk
@@ -1095,6 +1095,18 @@ LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
storage/StorageSyncManager.cpp \
storage/StorageTracker.cpp
+LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
+ websockets/WebSocket.cpp \
+ websockets/WebSocketChannel.cpp \
+ websockets/WebSocketHandshake.cpp \
+ websockets/ThreadableWebSocketChannel.cpp \
+ websockets/WorkerThreadableWebSocketChannel.cpp \
+ websockets/WebSocketHandshakeRequest.cpp \
+ websockets/WebSocketHandshakeResponse.cpp \
+ platform/network/SocketStreamHandleBase.cpp \
+ platform/network/SocketStreamErrorBase.cpp \
+ platform/network/android/SocketStreamHandleAndroid.cpp
+
ifeq ($(ENABLE_SVG), true)
LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
svg/ColorDistance.cpp \
diff --git a/Source/WebCore/platform/network/android/SocketStreamError.h b/Source/WebCore/platform/network/android/SocketStreamError.h
new file mode 100644
index 0000000..540496b
--- /dev/null
+++ b/Source/WebCore/platform/network/android/SocketStreamError.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2009 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 SocketStreamError_h
+#define SocketStreamError_h
+
+#include "SocketStreamErrorBase.h"
+
+namespace WebCore {
+
+class SocketStreamError : public SocketStreamErrorBase {
+public:
+ SocketStreamError() { }
+ explicit SocketStreamError(int errorCode)
+ : SocketStreamErrorBase(errorCode) { }
+};
+
+} // namespace WebCore
+
+#endif // SocketStreamError_h
diff --git a/Source/WebCore/platform/network/android/SocketStreamHandle.h b/Source/WebCore/platform/network/android/SocketStreamHandle.h
new file mode 100644
index 0000000..4f1c611
--- /dev/null
+++ b/Source/WebCore/platform/network/android/SocketStreamHandle.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2009 Apple Inc. All rights reserved.
+ * Copyright (C) 2009 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 SocketStreamHandle_h
+#define SocketStreamHandle_h
+
+#include "SocketStreamHandleBase.h"
+#include <wtf/OwnPtr.h>
+#include <wtf/PassOwnPtr.h>
+
+namespace WebCore {
+
+class AuthenticationChallenge;
+class Credential;
+class ScriptExecutionContext;
+class SocketStreamHandleClient;
+class ResourceResponse;
+class WebSocketBridge;
+
+class SocketStreamHandle : public RefCounted<SocketStreamHandle>, public SocketStreamHandleBase {
+public:
+ static PassRefPtr<SocketStreamHandle> create(const KURL& url, SocketStreamHandleClient* client)
+ {
+ return adoptRef(new SocketStreamHandle(url, client));
+ }
+ virtual ~SocketStreamHandle();
+
+ void socketConnectedCallback();
+ void socketClosedCallback();
+ void socketReadyReadCallback(const char*, int);
+ void socketErrorCallback();
+
+protected:
+ virtual int platformSend(const char* data, int length);
+ virtual void platformClose();
+
+private:
+ SocketStreamHandle(const KURL&, SocketStreamHandleClient*);
+
+ // No authentication for streams per se, but proxy may ask for credentials.
+ void didReceiveAuthenticationChallenge(const AuthenticationChallenge&);
+ void receivedCredential(const AuthenticationChallenge&, const Credential&);
+ void receivedRequestToContinueWithoutCredential(const AuthenticationChallenge&);
+ void receivedCancellation(const AuthenticationChallenge&);
+
+ KURL m_url;
+ OwnPtr<WebSocketBridge> m_webSocketBridge;
+};
+} // namespace WebCore
+
+#endif // SocketStreamHandle_h
diff --git a/Source/WebCore/platform/network/android/SocketStreamHandleAndroid.cpp b/Source/WebCore/platform/network/android/SocketStreamHandleAndroid.cpp
new file mode 100644
index 0000000..e5ee6ec
--- /dev/null
+++ b/Source/WebCore/platform/network/android/SocketStreamHandleAndroid.cpp
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2013 Google Inc. All rights reserved.
+ * Copyright (C) 2013 Oleg Smirnov
+ *
+ * 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 "Logging.h"
+#include "NotImplemented.h"
+#include "SocketStreamHandle.h"
+#include "SocketStreamHandleClient.h"
+#include "WebSocketBridge.h"
+
+namespace WebCore {
+
+SocketStreamHandle::SocketStreamHandle(const KURL& url, SocketStreamHandleClient* client)
+ : SocketStreamHandleBase(url, client)
+ , m_url(url)
+{
+ LOG(Network, "SocketStreamHandle::SocketStreamHandle %p", this);
+ bool isSecure = m_url.protocolIs("wss");
+ int port = m_url.hasPort() ? m_url.port() : (isSecure ? 443 : 80);
+
+ String httpProtocol = isSecure ? "https://" : "http://";
+ String uri = httpProtocol + m_url.host() + ":" + String::number(port);
+
+ m_webSocketBridge = adoptPtr(new WebSocketBridge(this, uri));
+}
+
+SocketStreamHandle::~SocketStreamHandle()
+{
+ LOG(Network, "SocketStreamHandle::~SocketStreamHandle %p", this);
+}
+
+void SocketStreamHandle::socketConnectedCallback()
+{
+ LOG(Network, "SocketStreamHandle::socketConnected %p", this);
+ // The client can close the handle, potentially removing the last reference.
+ RefPtr<SocketStreamHandle> protect(this);
+ if (client()) {
+ m_state = SocketStreamHandleBase::Open;
+ client()->didOpen(this);
+ }
+}
+
+void SocketStreamHandle::socketClosedCallback()
+{
+ LOG(Network, "SocketStreamHandle::socketClosedCallback %p", this);
+ if (client()) {
+ m_state = SocketStreamHandleBase::Closed;
+ client()->didClose(this);
+ }
+}
+
+void SocketStreamHandle::socketReadyReadCallback(const char* data, int length)
+{
+ LOG(Network, "SocketStreamHandle::socketReadyRead %p", this);
+ if (client())
+ client()->didReceiveData(this, data, length);
+}
+
+void SocketStreamHandle::socketErrorCallback()
+{
+ LOG(Network, "SocketStreamHandle::socketErrorCallback %p", this);
+ if (client())
+ client()->didClose(this);
+}
+
+int SocketStreamHandle::platformSend(const char* data, int len)
+{
+ LOG(Network, "SocketStreamHandle::platformSend %p", this);
+ return m_webSocketBridge->send(data, len);
+}
+
+void SocketStreamHandle::platformClose()
+{
+ LOG(Network, "SocketStreamHandle %p platformClose", this);
+ m_webSocketBridge->close();
+}
+
+void SocketStreamHandle::didReceiveAuthenticationChallenge(const AuthenticationChallenge&)
+{
+ notImplemented();
+}
+
+void SocketStreamHandle::receivedCredential(const AuthenticationChallenge&, const Credential&)
+{
+ notImplemented();
+}
+
+void SocketStreamHandle::receivedRequestToContinueWithoutCredential(const AuthenticationChallenge&)
+{
+ notImplemented();
+}
+
+void SocketStreamHandle::receivedCancellation(const AuthenticationChallenge&)
+{
+ notImplemented();
+}
+} // namespace WebCore