[SCM] WebKit Debian packaging branch, debian/experimental, updated. debian/1.3.8-1-142-g786665c

yutak at chromium.org yutak at chromium.org
Mon Dec 27 16:26:24 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit b49e52ac782344bedffeac475633adcbe6024f10
Author: yutak at chromium.org <yutak at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Tue Dec 21 05:44:07 2010 +0000

    2010-12-20  Yuta Kitamura  <yutak at chromium.org>
    
            Reviewed by Alexey Proskuryakov.
    
            WebSocket errors should be logged to console
            https://bugs.webkit.org/show_bug.cgi?id=40945
    
            * http/tests/inspector/console-websocket-error.html: Added.
            * platform/mac/http/tests/inspector/console-websocket-error-expected.txt: Added.
            * platform/win/Skipped: Added console-websocket-error.html
            because HTTPS server is not supported on Windows yet.
    2010-12-20  Yuta Kitamura  <yutak at chromium.org>
    
            Reviewed by Alexey Proskuryakov.
    
            WebSocket errors should be logged to console
            https://bugs.webkit.org/show_bug.cgi?id=40945
    
            Test: http/tests/inspector/console-websocket-error.html
    
            * platform/network/SocketStreamErrorBase.cpp:
            (WebCore::SocketStreamErrorBase::compare):
            * platform/network/SocketStreamErrorBase.h:
            (WebCore::SocketStreamErrorBase::failingURL):
            (WebCore::SocketStreamErrorBase::localizedDescription):
            (WebCore::SocketStreamErrorBase::SocketStreamErrorBase):
            * platform/network/cf/SocketStreamError.h:
            (WebCore::SocketStreamError::SocketStreamError):
            * platform/network/cf/SocketStreamHandle.h:
            * platform/network/cf/SocketStreamHandleCFNet.cpp:
            (WebCore::SocketStreamHandle::readStreamCallback):
            (WebCore::SocketStreamHandle::writeStreamCallback):
            (WebCore::SocketStreamHandle::reportErrorToClient):
            * websockets/WebSocketChannel.cpp:
            (WebCore::WebSocketChannel::didFail):
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@74390 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index fa1e283..09cc803 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,15 @@
+2010-12-20  Yuta Kitamura  <yutak at chromium.org>
+
+        Reviewed by Alexey Proskuryakov.
+
+        WebSocket errors should be logged to console
+        https://bugs.webkit.org/show_bug.cgi?id=40945
+
+        * http/tests/inspector/console-websocket-error.html: Added.
+        * platform/mac/http/tests/inspector/console-websocket-error-expected.txt: Added.
+        * platform/win/Skipped: Added console-websocket-error.html
+        because HTTPS server is not supported on Windows yet.
+
 2010-12-20  Sheriff Bot  <webkit.review.bot at gmail.com>
 
         Unreviewed, rolling out r74349.
diff --git a/LayoutTests/http/tests/inspector/console-websocket-error.html b/LayoutTests/http/tests/inspector/console-websocket-error.html
new file mode 100644
index 0000000..4c0a019
--- /dev/null
+++ b/LayoutTests/http/tests/inspector/console-websocket-error.html
@@ -0,0 +1,68 @@
+<html>
+<head>
+<script src="inspector-test.js"></script>
+<script src="console-tests.js"></script>
+<script>
+var testFunctions = [testDNSLookup, testSSLCertificate];
+var nextTestIndex = 0;
+
+function doit()
+{
+    doNextTest();
+}
+
+function doNextTest()
+{
+    if (nextTestIndex == testFunctions.length) {
+        dumpConsoleMessages(false);
+        return;
+    }
+    var testFunction = testFunctions[nextTestIndex];
+    nextTestIndex++;
+    testFunction();
+}
+
+function testDNSLookup()
+{
+    console.log("testDNSLookup: Test started.");
+    var ws = new WebSocket("ws://nonexistent.domain.invalid/"); // Network error should be logged to console.
+    ws.onopen = function() {
+        console.log("testDNSLookup: onopen is called.");
+    };
+    ws.onerror = function() {
+        console.log("testDNSLookup: onerror is called.");
+    };
+    ws.onclose = function() {
+        console.log("testDNSLookup: onclose is called.");
+        doNextTest();
+    };
+}
+
+function testSSLCertificate()
+{
+    console.log("testSSLCertificate: Test started.");
+    // The following statement should cause "Untrusted root certificate" error.
+    // Note that port 8443 serves HTTPS content rather than secure WebSocket,
+    // but it does not matter because the test does not send or receive any payload.
+    var ws = new WebSocket("wss://127.0.0.1:8443/");
+    ws.onopen = function() {
+        console.log("testSSLCertificate: onopen is called.");
+    };
+    ws.onerror = function() {
+        console.log("testSSLCertificate: onerror is called.");
+    };
+    ws.onclose = function() {
+        console.log("testSSLCertificate: onclose is called.");
+        doNextTest();
+    };
+}
+</script>
+</head>
+
+<body onload="onload()">
+<p>
+WebSocket's network errors should be logged to console.
+</p>
+
+</body>
+</html>
diff --git a/LayoutTests/platform/mac/http/tests/inspector/console-websocket-error-expected.txt b/LayoutTests/platform/mac/http/tests/inspector/console-websocket-error-expected.txt
new file mode 100644
index 0000000..8399386
--- /dev/null
+++ b/LayoutTests/platform/mac/http/tests/inspector/console-websocket-error-expected.txt
@@ -0,0 +1,13 @@
+CONSOLE MESSAGE: line 27: testDNSLookup: Test started.
+CONSOLE MESSAGE: line 36: testDNSLookup: onclose is called.
+CONSOLE MESSAGE: line 43: testSSLCertificate: Test started.
+CONSOLE MESSAGE: line 55: testSSLCertificate: onclose is called.
+WebSocket's network errors should be logged to console.
+
+console-websocket-error.html:27testDNSLookup: Test started.
+ws://nonexistent.domain.invalid:80/WebSocket network error: Operation could not be completed. (kCFErrorDomainCFNetwork error 2.)
+console-websocket-error.html:36testDNSLookup: onclose is called.
+console-websocket-error.html:43testSSLCertificate: Test started.
+wss://127.0.0.1:8443/WebSocket network error: OSStatus Error -9812: valid cert chain, untrusted root 
+console-websocket-error.html:55testSSLCertificate: onclose is called.
+
diff --git a/LayoutTests/platform/win/Skipped b/LayoutTests/platform/win/Skipped
index 8102312..05cf3c8 100644
--- a/LayoutTests/platform/win/Skipped
+++ b/LayoutTests/platform/win/Skipped
@@ -42,6 +42,7 @@ http/tests/navigation/ping-cross-origin-from-https.html
 http/tests/ssl
 http/tests/security/cross-frame-access-protocol-explicit-domain.html
 http/tests/security/cross-frame-access-protocol.html
+http/tests/inspector/console-websocket-error.html
 
 # Fails <rdar://problem/5674289>
 media/video-seek-past-end-paused.html
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index ff11110..9851d67 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,28 @@
+2010-12-20  Yuta Kitamura  <yutak at chromium.org>
+
+        Reviewed by Alexey Proskuryakov.
+
+        WebSocket errors should be logged to console
+        https://bugs.webkit.org/show_bug.cgi?id=40945
+
+        Test: http/tests/inspector/console-websocket-error.html
+
+        * platform/network/SocketStreamErrorBase.cpp:
+        (WebCore::SocketStreamErrorBase::compare):
+        * platform/network/SocketStreamErrorBase.h:
+        (WebCore::SocketStreamErrorBase::failingURL):
+        (WebCore::SocketStreamErrorBase::localizedDescription):
+        (WebCore::SocketStreamErrorBase::SocketStreamErrorBase):
+        * platform/network/cf/SocketStreamError.h:
+        (WebCore::SocketStreamError::SocketStreamError):
+        * platform/network/cf/SocketStreamHandle.h:
+        * platform/network/cf/SocketStreamHandleCFNet.cpp:
+        (WebCore::SocketStreamHandle::readStreamCallback):
+        (WebCore::SocketStreamHandle::writeStreamCallback):
+        (WebCore::SocketStreamHandle::reportErrorToClient):
+        * websockets/WebSocketChannel.cpp:
+        (WebCore::WebSocketChannel::didFail):
+
 2010-12-17  MORITA Hajime  <morrita at google.com>
 
         Reviewed by James Robinson.
diff --git a/WebCore/platform/network/SocketStreamErrorBase.cpp b/WebCore/platform/network/SocketStreamErrorBase.cpp
index 72fb44c..bbb5d55 100644
--- a/WebCore/platform/network/SocketStreamErrorBase.cpp
+++ b/WebCore/platform/network/SocketStreamErrorBase.cpp
@@ -42,7 +42,22 @@ SocketStreamError SocketStreamErrorBase::copy() const
 
 bool SocketStreamErrorBase::compare(const SocketStreamError& a, const SocketStreamError& b)
 {
-    return a.errorCode() == b.errorCode();
+    if (a.isNull() && b.isNull())
+        return true;
+
+    if (a.isNull() || b.isNull())
+        return false;
+
+    if (a.errorCode() != b.errorCode())
+        return false;
+
+    if (a.failingURL() != b.failingURL())
+        return false;
+
+    if (a.localizedDescription() != b.localizedDescription())
+        return false;
+
+    return true;
 }
 
 }  // namespace WebCore
diff --git a/WebCore/platform/network/SocketStreamErrorBase.h b/WebCore/platform/network/SocketStreamErrorBase.h
index b7ca35b..e6cc567 100644
--- a/WebCore/platform/network/SocketStreamErrorBase.h
+++ b/WebCore/platform/network/SocketStreamErrorBase.h
@@ -32,6 +32,8 @@
 #ifndef SocketStreamErrorBase_h
 #define SocketStreamErrorBase_h
 
+#include "PlatformString.h"
+
 namespace WebCore {
 
     class SocketStreamError;
@@ -44,6 +46,8 @@ namespace WebCore {
         bool isNull() const { return m_isNull; }
 
         int errorCode() const { return m_errorCode; }
+        const String& failingURL() const { return m_failingURL; }
+        const String& localizedDescription() const { return m_localizedDescription; }
 
         static bool compare(const SocketStreamError&, const SocketStreamError&);
 
@@ -60,7 +64,17 @@ namespace WebCore {
         {
         }
 
+        SocketStreamErrorBase(int errorCode, const String& failingURL, const String& localizedDescription)
+            : m_errorCode(errorCode)
+            , m_failingURL(failingURL)
+            , m_localizedDescription(localizedDescription)
+            , m_isNull(false)
+        {
+        }
+
         int m_errorCode;
+        String m_failingURL;
+        String m_localizedDescription;
         bool m_isNull;
     };
 
diff --git a/WebCore/platform/network/cf/SocketStreamError.h b/WebCore/platform/network/cf/SocketStreamError.h
index 6a0b441..5a0ca07 100644
--- a/WebCore/platform/network/cf/SocketStreamError.h
+++ b/WebCore/platform/network/cf/SocketStreamError.h
@@ -42,7 +42,10 @@ public:
         : SocketStreamErrorBase(errorCode)
     {
     }
-
+    SocketStreamError(int errorCode, const String& failingURL, const String& localizedDescription)
+        : SocketStreamErrorBase(errorCode, failingURL, localizedDescription)
+    {
+    }
 };
 
 }  // namespace WebCore
diff --git a/WebCore/platform/network/cf/SocketStreamHandle.h b/WebCore/platform/network/cf/SocketStreamHandle.h
index 41d543a..df1d4a3 100644
--- a/WebCore/platform/network/cf/SocketStreamHandle.h
+++ b/WebCore/platform/network/cf/SocketStreamHandle.h
@@ -84,6 +84,10 @@ private:
     void readStreamCallback(CFStreamEventType);
     void writeStreamCallback(CFStreamEventType);
 
+#ifndef BUILDING_ON_TIGER
+    void reportErrorToClient(CFErrorRef);
+#endif
+
     // No authentication for streams per se, but proxy may ask for credentials.
     virtual void receivedCredential(const AuthenticationChallenge&, const Credential&);
     virtual void receivedRequestToContinueWithoutCredential(const AuthenticationChallenge&);
diff --git a/WebCore/platform/network/cf/SocketStreamHandleCFNet.cpp b/WebCore/platform/network/cf/SocketStreamHandleCFNet.cpp
index 24b5835..821b1ca 100644
--- a/WebCore/platform/network/cf/SocketStreamHandleCFNet.cpp
+++ b/WebCore/platform/network/cf/SocketStreamHandleCFNet.cpp
@@ -39,6 +39,7 @@
 #include "SocketStreamError.h"
 #include "SocketStreamHandleClient.h"
 #include <wtf/MainThread.h>
+#include <wtf/text/StringConcatenate.h>
 
 #if defined(BUILDING_ON_TIGER) || defined(BUILDING_ON_LEOPARD)
 #include <SystemConfiguration/SystemConfiguration.h>
@@ -530,8 +531,13 @@ void SocketStreamHandle::readStreamCallback(CFStreamEventType type)
         ASSERT_NOT_REACHED();
         break;
     case kCFStreamEventErrorOccurred: {
+#ifndef BUILDING_ON_TIGER
+        RetainPtr<CFErrorRef> error(AdoptCF, CFReadStreamCopyError(m_readStream.get()));
+        reportErrorToClient(error.get());
+#else
         CFStreamError error = CFReadStreamGetError(m_readStream.get());
         m_client->didFail(this, SocketStreamError(error.error)); // FIXME: Provide a sensible error.
+#endif
         break;
     }
     case kCFStreamEventEndEncountered:
@@ -574,8 +580,13 @@ void SocketStreamHandle::writeStreamCallback(CFStreamEventType type)
         break;
     }
     case kCFStreamEventErrorOccurred: {
+#ifndef BUILDING_ON_TIGER
+        RetainPtr<CFErrorRef> error(AdoptCF, CFWriteStreamCopyError(m_writeStream.get()));
+        reportErrorToClient(error.get());
+#else
         CFStreamError error = CFWriteStreamGetError(m_writeStream.get());
         m_client->didFail(this, SocketStreamError(error.error)); // FIXME: Provide a sensible error.
+#endif
         break;
     }
     case kCFStreamEventEndEncountered:
@@ -584,6 +595,29 @@ void SocketStreamHandle::writeStreamCallback(CFStreamEventType type)
     }
 }
 
+#ifndef BUILDING_ON_TIGER
+void SocketStreamHandle::reportErrorToClient(CFErrorRef error)
+{
+    CFIndex errorCode = CFErrorGetCode(error);
+    String description;
+
+#if PLATFORM(MAC)
+    if (CFEqual(CFErrorGetDomain(error), kCFErrorDomainOSStatus)) {
+        const char* descriptionOSStatus = GetMacOSStatusCommentString(static_cast<OSStatus>(errorCode));
+        if (descriptionOSStatus && descriptionOSStatus[0] != '\0')
+            description = makeString("OSStatus Error ", String::number(errorCode), ": ", descriptionOSStatus);
+    }
+#endif
+
+    if (description.isNull()) {
+        RetainPtr<CFStringRef> descriptionCF(AdoptCF, CFErrorCopyDescription(error));
+        description = String(descriptionCF.get());
+    }
+
+    m_client->didFail(this, SocketStreamError(static_cast<int>(errorCode), m_url.string(), description));
+}
+#endif // BUILDING_ON_TIGER
+
 SocketStreamHandle::~SocketStreamHandle()
 {
     LOG(Network, "SocketStreamHandle %p dtor", this);
diff --git a/WebCore/websockets/WebSocketChannel.cpp b/WebCore/websockets/WebSocketChannel.cpp
index 01c2bef..09fcd6b 100644
--- a/WebCore/websockets/WebSocketChannel.cpp
+++ b/WebCore/websockets/WebSocketChannel.cpp
@@ -206,10 +206,20 @@ void WebSocketChannel::didReceiveData(SocketStreamHandle* handle, const char* da
             break;
 }
 
-void WebSocketChannel::didFail(SocketStreamHandle* handle, const SocketStreamError&)
+void WebSocketChannel::didFail(SocketStreamHandle* handle, const SocketStreamError& error)
 {
     LOG(Network, "WebSocketChannel %p didFail", this);
     ASSERT(handle == m_handle || !m_handle);
+    if (m_context) {
+        String message;
+        if (error.isNull())
+            message = "WebSocket network error";
+        else if (error.localizedDescription().isNull())
+            message = makeString("WebSocket network error: error code ", String::number(error.errorCode()));
+        else
+            message = makeString("WebSocket network error: ", error.localizedDescription());
+        m_context->addMessage(OtherMessageSource, NetworkErrorMessageType, ErrorMessageLevel, message, 0, error.failingURL());
+    }
     m_shouldDiscardReceivedData = true;
     handle->close();
 }

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list