[SCM] WebKit Debian packaging branch, webkit-1.1, updated. upstream/1.1.19-706-ge5415e9

eric at webkit.org eric at webkit.org
Thu Feb 4 21:29:47 UTC 2010


The following commit has been merged in the webkit-1.1 branch:
commit ba58b4ef6fc65d5eef768c30af504f49106f241f
Author: eric at webkit.org <eric at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Wed Jan 27 20:16:52 2010 +0000

    2010-01-27  Yael Aharon  <yael.aharon at nokia.com>
    
            Reviewed by Laszlo Gombos.
    
            [Qt] Enable websockets support in QtWebKit
            https://bugs.webkit.org/show_bug.cgi?id=34180
    
            Remove websockets tests from skiplist.
    
            * platform/qt/Skipped:
    2010-01-27  Yael Aharon  <yael.aharon at nokia.com>
    
            Reviewed by Laszlo Gombos.
    
            [Qt] Enable websockets support in QtWebKit
            https://bugs.webkit.org/show_bug.cgi?id=34180
    
            Connected between SocketStreamHandle and QTcpSocket/QSslSocket
            to enable support for websockets.
            Proxy authentication is not yet supported.
            SSL certificate errors are ignored while this is under development.
    
            * WebCore.pro:
            * platform/network/qt/SocketStreamHandle.h:
            * platform/network/qt/SocketStreamHandlePrivate.h: Added.
            * platform/network/qt/SocketStreamHandleQt.cpp:
            (WebCore::SocketStreamHandlePrivate::SocketStreamHandlePrivate):
            (WebCore::SocketStreamHandlePrivate::~SocketStreamHandlePrivate):
            (WebCore::SocketStreamHandlePrivate::socketConnected):
            (WebCore::SocketStreamHandlePrivate::socketReadyRead):
            (WebCore::SocketStreamHandlePrivate::send):
            (WebCore::SocketStreamHandlePrivate::close):
            (WebCore::SocketStreamHandlePrivate::socketSentdata):
            (WebCore::SocketStreamHandlePrivate::socketClosed):
            (WebCore::SocketStreamHandlePrivate::socketError):
            (WebCore::SocketStreamHandlePrivate::socketClosedCallback):
            (WebCore::SocketStreamHandlePrivate::socketErrorCallback):
            (WebCore::SocketStreamHandlePrivate::socketSslErrors):
            (WebCore::SocketStreamHandle::SocketStreamHandle):
            (WebCore::SocketStreamHandle::~SocketStreamHandle):
            (WebCore::SocketStreamHandle::platformSend):
            (WebCore::SocketStreamHandle::platformClose):
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@53947 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index d0940da..e76f127 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,14 @@
+2010-01-27  Yael Aharon  <yael.aharon at nokia.com>
+
+        Reviewed by Laszlo Gombos.
+
+        [Qt] Enable websockets support in QtWebKit
+        https://bugs.webkit.org/show_bug.cgi?id=34180
+
+        Remove websockets tests from skiplist.
+
+        * platform/qt/Skipped:
+
 2010-01-27  Mads Ager  <ager at chromium.org>
 
         Reviewed by Dimitri Glazkov.
diff --git a/LayoutTests/platform/qt/Skipped b/LayoutTests/platform/qt/Skipped
index 09a0edc..f50650c 100644
--- a/LayoutTests/platform/qt/Skipped
+++ b/LayoutTests/platform/qt/Skipped
@@ -4963,9 +4963,6 @@ http/tests/xmlhttprequest/workers/methods-async.html
 http/tests/xmlhttprequest/workers/methods.html
 http/tests/xmlhttprequest/workers/shared-worker-methods-async.html
 
-# Missing SocketStreamHandle implementation
-websocket/tests
-
 # Need rebaseline: https://bugs.webkit.org/show_bug.cgi?id=26830
 fast/multicol/single-line.html
 
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 769f8f9..573a1ab 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,36 @@
+2010-01-27  Yael Aharon  <yael.aharon at nokia.com>
+
+        Reviewed by Laszlo Gombos.
+
+        [Qt] Enable websockets support in QtWebKit
+        https://bugs.webkit.org/show_bug.cgi?id=34180
+
+        Connected between SocketStreamHandle and QTcpSocket/QSslSocket
+        to enable support for websockets.
+        Proxy authentication is not yet supported.
+        SSL certificate errors are ignored while this is under development.
+
+        * WebCore.pro:
+        * platform/network/qt/SocketStreamHandle.h:
+        * platform/network/qt/SocketStreamHandlePrivate.h: Added.
+        * platform/network/qt/SocketStreamHandleQt.cpp:
+        (WebCore::SocketStreamHandlePrivate::SocketStreamHandlePrivate):
+        (WebCore::SocketStreamHandlePrivate::~SocketStreamHandlePrivate):
+        (WebCore::SocketStreamHandlePrivate::socketConnected):
+        (WebCore::SocketStreamHandlePrivate::socketReadyRead):
+        (WebCore::SocketStreamHandlePrivate::send):
+        (WebCore::SocketStreamHandlePrivate::close):
+        (WebCore::SocketStreamHandlePrivate::socketSentdata):
+        (WebCore::SocketStreamHandlePrivate::socketClosed):
+        (WebCore::SocketStreamHandlePrivate::socketError):
+        (WebCore::SocketStreamHandlePrivate::socketClosedCallback):
+        (WebCore::SocketStreamHandlePrivate::socketErrorCallback):
+        (WebCore::SocketStreamHandlePrivate::socketSslErrors):
+        (WebCore::SocketStreamHandle::SocketStreamHandle):
+        (WebCore::SocketStreamHandle::~SocketStreamHandle):
+        (WebCore::SocketStreamHandle::platformSend):
+        (WebCore::SocketStreamHandle::platformClose):
+
 2010-01-27  Mads Ager  <ager at chromium.org>
 
         Reviewed by Dimitri Glazkov.
diff --git a/WebCore/WebCore.pro b/WebCore/WebCore.pro
index 58640db..7f630ed 100644
--- a/WebCore/WebCore.pro
+++ b/WebCore/WebCore.pro
@@ -1526,6 +1526,7 @@ HEADERS += \
     platform/network/NetworkStateNotifier.h \
     platform/network/ProtectionSpace.h \
     platform/network/qt/QNetworkReplyHandler.h \
+    platform/network/qt/SocketStreamHandlePrivate.h \
     platform/network/ResourceErrorBase.h \
     platform/network/ResourceHandle.h \
     platform/network/ResourceRequestBase.h \
diff --git a/WebCore/platform/network/qt/SocketStreamHandle.h b/WebCore/platform/network/qt/SocketStreamHandle.h
index 64139e5..5c55749 100644
--- a/WebCore/platform/network/qt/SocketStreamHandle.h
+++ b/WebCore/platform/network/qt/SocketStreamHandle.h
@@ -1,4 +1,5 @@
 /*
+ * Copyright (C) 2010 Nokia Inc. All rights reserved.
  * Copyright (C) 2009 Apple Inc. All rights reserved.
  * Copyright (C) 2009 Google Inc.  All rights reserved.
  *
@@ -42,6 +43,7 @@ namespace WebCore {
     class AuthenticationChallenge;
     class Credential;
     class SocketStreamHandleClient;
+    class SocketStreamHandlePrivate;
 
     class SocketStreamHandle : public RefCounted<SocketStreamHandle>, public SocketStreamHandleBase {
     public:
@@ -61,6 +63,8 @@ namespace WebCore {
         void receivedCredential(const AuthenticationChallenge&, const Credential&);
         void receivedRequestToContinueWithoutCredential(const AuthenticationChallenge&);
         void receivedCancellation(const AuthenticationChallenge&);
+        SocketStreamHandlePrivate* m_p;
+        friend class SocketStreamHandlePrivate;
     };
 
 }  // namespace WebCore
diff --git a/WebCore/platform/network/qt/SocketStreamHandlePrivate.h b/WebCore/platform/network/qt/SocketStreamHandlePrivate.h
new file mode 100644
index 0000000..9433d3f
--- /dev/null
+++ b/WebCore/platform/network/qt/SocketStreamHandlePrivate.h
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2010 Nokia 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 SocketStreamHandlePrivate_h
+#define SocketStreamHandlePrivate_h
+
+#include "SocketStreamHandleBase.h"
+
+#include <QSslSocket>
+#include <QTcpSocket>
+
+namespace WebCore {
+
+class AuthenticationChallenge;
+class Credential;
+class SocketStreamHandleClient;
+class SocketStreamHandlePrivate;
+
+class SocketStreamHandlePrivate : public QObject {
+    Q_OBJECT
+public:
+    SocketStreamHandlePrivate(SocketStreamHandle*, const KURL&);
+    ~SocketStreamHandlePrivate();
+
+public slots:
+    void socketConnected();
+    void socketReadyRead();
+    int send(const char* data, int len);
+    void close();
+    void socketSentdata();
+    void socketClosed();
+    void socketError(QAbstractSocket::SocketError);
+    void socketClosedCallback();
+    void socketErrorCallback(int);
+    void socketSslErrors(const QList<QSslError>&);
+public:
+    QTcpSocket* m_socket;
+    SocketStreamHandle* m_streamHandle;
+};
+
+}
+
+#endif
diff --git a/WebCore/platform/network/qt/SocketStreamHandleQt.cpp b/WebCore/platform/network/qt/SocketStreamHandleQt.cpp
index 3ef821c..d61d901 100644
--- a/WebCore/platform/network/qt/SocketStreamHandleQt.cpp
+++ b/WebCore/platform/network/qt/SocketStreamHandleQt.cpp
@@ -1,4 +1,5 @@
 /*
+ * Copyright (C) 2010 Nokia Inc. All rights reserved.
  * Copyright (C) 2009 Google Inc.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -35,34 +36,139 @@
 #include "Logging.h"
 #include "NotImplemented.h"
 #include "SocketStreamHandleClient.h"
+#include "SocketStreamHandlePrivate.h"
 
 namespace WebCore {
 
+SocketStreamHandlePrivate::SocketStreamHandlePrivate(SocketStreamHandle* streamHandle, const KURL& url) : QObject()
+{
+    m_streamHandle = streamHandle;
+    m_socket = 0;
+    bool isSecure = url.protocolIs("wss");
+    if (isSecure)
+        m_socket = new QSslSocket(this);
+    else
+        m_socket = new QTcpSocket(this);
+    connect(m_socket, SIGNAL(connected()), this, SLOT(socketConnected()));
+    connect(m_socket, SIGNAL(readyRead()), this, SLOT(socketReadyRead()));
+    connect(m_socket, SIGNAL(disconnected()), this, SLOT(socketClosed()));
+    connect(m_socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(socketError(QAbstractSocket::SocketError)));
+    if (isSecure)
+        connect(m_socket, SIGNAL(sslErrors(const QList<QSslError>&)), this, SLOT(socketSslErrors(const QList<QSslError>&)));
+
+    unsigned int port = url.hasPort() ? url.port() : (isSecure ? 443 : 80);
+
+    QString host = url.host();
+    if (isSecure)
+        static_cast<QSslSocket*>(m_socket)->connectToHostEncrypted(host, port);
+    else
+        m_socket->connectToHost(host, port);
+}
+
+SocketStreamHandlePrivate::~SocketStreamHandlePrivate()
+{
+    Q_ASSERT(!(m_socket && m_socket->state() == QAbstractSocket::ConnectedState));
+}
+
+void SocketStreamHandlePrivate::socketConnected()
+{
+    if (m_streamHandle && m_streamHandle->client()) {
+        m_streamHandle->m_state = SocketStreamHandleBase::Open;
+        m_streamHandle->client()->didOpen(m_streamHandle);
+    }
+}
+
+void SocketStreamHandlePrivate::socketReadyRead()
+{
+    if (m_streamHandle && m_streamHandle->client()) {
+        QByteArray data = m_socket->read(m_socket->bytesAvailable());
+        m_streamHandle->client()->didReceiveData(m_streamHandle, data.constData(), data.size());
+    }
+}
+
+int SocketStreamHandlePrivate::send(const char* data, int len)
+{
+    if (m_socket->state() != QAbstractSocket::ConnectedState)
+        return 0;
+    quint64 sentSize = m_socket->write(data, len);
+    QMetaObject::invokeMethod(this, "socketSentData", Qt::QueuedConnection);
+    return sentSize;
+}
+
+void SocketStreamHandlePrivate::close()
+{
+    if (m_socket && m_socket->state() == QAbstractSocket::ConnectedState)
+        m_socket->close();
+}
+
+void SocketStreamHandlePrivate::socketSentdata()
+{
+    if (m_streamHandle)
+        m_streamHandle->sendPendingData();
+}
+
+void SocketStreamHandlePrivate::socketClosed()
+{
+    QMetaObject::invokeMethod(this, "socketClosedCallback", Qt::QueuedConnection);
+}
+
+void SocketStreamHandlePrivate::socketError(QAbstractSocket::SocketError error)
+{
+    QMetaObject::invokeMethod(this, "socketErrorCallback", Qt::QueuedConnection, Q_ARG(int, error));
+}
+
+void SocketStreamHandlePrivate::socketClosedCallback()
+{
+    if (m_streamHandle && m_streamHandle->client()) {
+        SocketStreamHandle* streamHandle = m_streamHandle;
+        m_streamHandle = 0;
+        // This following call deletes _this_. Nothing should be after it.
+        streamHandle->client()->didClose(streamHandle);
+    }
+}
+
+void SocketStreamHandlePrivate::socketErrorCallback(int error)
+{
+    // FIXME - in the future, we might not want to treat all errors as fatal.
+    if (m_streamHandle && m_streamHandle->client()) {
+        SocketStreamHandle* streamHandle = m_streamHandle;
+        m_streamHandle = 0;
+        // This following call deletes _this_. Nothing should be after it.
+        streamHandle->client()->didClose(streamHandle);
+    }
+}
+
+void SocketStreamHandlePrivate::socketSslErrors(const QList<QSslError>&)
+{
+    // FIXME: based on http://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-68#page-15
+    // we should abort on certificate errors.
+    // We don't abort while this is still work in progress.
+    static_cast<QSslSocket*>(m_socket)->ignoreSslErrors();
+}
 SocketStreamHandle::SocketStreamHandle(const KURL& url, SocketStreamHandleClient* client)
     : SocketStreamHandleBase(url, client)
 {
     LOG(Network, "SocketStreamHandle %p new client %p", this, m_client);
-    notImplemented();
+    m_p = new SocketStreamHandlePrivate(this, url);
 }
 
 SocketStreamHandle::~SocketStreamHandle()
 {
     LOG(Network, "SocketStreamHandle %p delete", this);
     setClient(0);
-    notImplemented();
+    delete m_p;
 }
 
-int SocketStreamHandle::platformSend(const char*, int)
+int SocketStreamHandle::platformSend(const char* data, int len)
 {
     LOG(Network, "SocketStreamHandle %p platformSend", this);
-    notImplemented();
-    return 0;
+    return m_p->send(data, len);
 }
 
 void SocketStreamHandle::platformClose()
 {
     LOG(Network, "SocketStreamHandle %p platformClose", this);
-    notImplemented();
+    m_p->close();
 }
 
 void SocketStreamHandle::didReceiveAuthenticationChallenge(const AuthenticationChallenge&)
@@ -86,3 +192,5 @@ void SocketStreamHandle::receivedCancellation(const AuthenticationChallenge&)
 }
 
 } // namespace WebCore
+
+#include "moc_SocketStreamHandlePrivate.cpp"

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list