[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