Diff
Modified: trunk/Source/WebCore/ChangeLog (109941 => 109942)
--- trunk/Source/WebCore/ChangeLog 2012-03-06 19:50:48 UTC (rev 109941)
+++ trunk/Source/WebCore/ChangeLog 2012-03-06 19:55:53 UTC (rev 109942)
@@ -1,5 +1,39 @@
2012-03-06 Stephen White <[email protected]>
+ Unreviewed, rolling out r109832.
+ http://trac.webkit.org/changeset/109832
+ https://bugs.webkit.org/show_bug.cgi?id=80356
+
+ Broke WebSocket tests on Chrome Mac and Linux
+
+ * Modules/websockets/ThreadableWebSocketChannel.h:
+ (ThreadableWebSocketChannel):
+ * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
+ (WebCore::ThreadableWebSocketChannelClientWrapper::ThreadableWebSocketChannelClientWrapper):
+ (WebCore::ThreadableWebSocketChannelClientWrapper::sendRequestResult):
+ (WebCore::ThreadableWebSocketChannelClientWrapper::setSendRequestResult):
+ * Modules/websockets/ThreadableWebSocketChannelClientWrapper.h:
+ (ThreadableWebSocketChannelClientWrapper):
+ * Modules/websockets/WebSocket.cpp:
+ (WebCore::WebSocket::send):
+ * Modules/websockets/WebSocketChannel.cpp:
+ (WebCore::WebSocketChannel::send):
+ (WebCore::WebSocketChannel::enqueueTextFrame):
+ (WebCore::WebSocketChannel::processOutgoingFrameQueue):
+ * Modules/websockets/WebSocketChannel.h:
+ (WebSocketChannel):
+ (QueuedFrame):
+ * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
+ (WebCore::WorkerThreadableWebSocketChannel::send):
+ (WebCore::workerContextDidSend):
+ (WebCore::WorkerThreadableWebSocketChannel::Peer::send):
+ (WebCore::WorkerThreadableWebSocketChannel::Bridge::send):
+ * Modules/websockets/WorkerThreadableWebSocketChannel.h:
+ (WorkerThreadableWebSocketChannel):
+ (Bridge):
+
+2012-03-06 Stephen White <[email protected]>
+
Unreviewed, rolling out r109840.
http://trac.webkit.org/changeset/109840
https://bugs.webkit.org/show_bug.cgi?id=80103
Modified: trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannel.h (109941 => 109942)
--- trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannel.h 2012-03-06 19:50:48 UTC (rev 109941)
+++ trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannel.h 2012-03-06 19:55:53 UTC (rev 109942)
@@ -50,19 +50,13 @@
ThreadableWebSocketChannel() { }
static PassRefPtr<ThreadableWebSocketChannel> create(ScriptExecutionContext*, WebSocketChannelClient*);
- enum SendResult {
- SendSuccess,
- SendFail,
- InvalidMessage
- };
-
virtual bool useHixie76Protocol() = 0;
virtual void connect(const KURL&, const String& protocol) = 0;
virtual String subprotocol() = 0; // Will be available after didConnect() callback is invoked.
virtual String extensions() = 0; // Will be available after didConnect() callback is invoked.
- virtual SendResult send(const String& message) = 0;
- virtual SendResult send(const ArrayBuffer&) = 0;
- virtual SendResult send(const Blob&) = 0;
+ virtual bool send(const String& message) = 0;
+ virtual bool send(const ArrayBuffer&) = 0;
+ virtual bool send(const Blob&) = 0;
virtual unsigned long bufferedAmount() const = 0;
virtual void close(int code, const String& reason) = 0;
// Log the reason text and close the connection. Will call didClose().
Modified: trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp (109941 => 109942)
--- trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp 2012-03-06 19:50:48 UTC (rev 109941)
+++ trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp 2012-03-06 19:55:53 UTC (rev 109942)
@@ -46,7 +46,7 @@
, m_client(client)
, m_syncMethodDone(true)
, m_useHixie76Protocol(true)
- , m_sendRequestResult(ThreadableWebSocketChannel::SendFail)
+ , m_sendRequestResult(false)
, m_bufferedAmount(0)
, m_suspended(false)
{
@@ -112,12 +112,12 @@
memcpy(m_extensions.data(), extensions.characters(), sizeof(UChar) * length);
}
-ThreadableWebSocketChannel::SendResult ThreadableWebSocketChannelClientWrapper::sendRequestResult() const
+bool ThreadableWebSocketChannelClientWrapper::sendRequestResult() const
{
return m_sendRequestResult;
}
-void ThreadableWebSocketChannelClientWrapper::setSendRequestResult(ThreadableWebSocketChannel::SendResult sendRequestResult)
+void ThreadableWebSocketChannelClientWrapper::setSendRequestResult(bool sendRequestResult)
{
m_sendRequestResult = sendRequestResult;
m_syncMethodDone = true;
Modified: trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannelClientWrapper.h (109941 => 109942)
--- trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannelClientWrapper.h 2012-03-06 19:50:48 UTC (rev 109941)
+++ trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannelClientWrapper.h 2012-03-06 19:55:53 UTC (rev 109942)
@@ -35,7 +35,6 @@
#include "PlatformString.h"
#include "ScriptExecutionContext.h"
-#include "ThreadableWebSocketChannel.h"
#include "WebSocketChannelClient.h"
#include <wtf/Forward.h>
#include <wtf/OwnPtr.h>
@@ -67,8 +66,8 @@
String extensions() const;
void setExtensions(const String&);
- ThreadableWebSocketChannel::SendResult sendRequestResult() const;
- void setSendRequestResult(ThreadableWebSocketChannel::SendResult);
+ bool sendRequestResult() const;
+ void setSendRequestResult(bool);
unsigned long bufferedAmount() const;
void setBufferedAmount(unsigned long);
@@ -105,7 +104,7 @@
// ThreadSafeRefCounted must not have String member variables.
Vector<UChar> m_subprotocol;
Vector<UChar> m_extensions;
- ThreadableWebSocketChannel::SendResult m_sendRequestResult;
+ bool m_sendRequestResult;
unsigned long m_bufferedAmount;
bool m_suspended;
Vector<OwnPtr<ScriptExecutionContext::Task> > m_pendingTasks;
Modified: trunk/Source/WebCore/Modules/websockets/WebSocket.cpp (109941 => 109942)
--- trunk/Source/WebCore/Modules/websockets/WebSocket.cpp 2012-03-06 19:50:48 UTC (rev 109941)
+++ trunk/Source/WebCore/Modules/websockets/WebSocket.cpp 2012-03-06 19:55:53 UTC (rev 109942)
@@ -290,7 +290,7 @@
}
// FIXME: check message is valid utf8.
ASSERT(m_channel);
- return m_channel->send(message) == ThreadableWebSocketChannel::SendSuccess;
+ return m_channel->send(message);
}
bool WebSocket::send(ArrayBuffer* binaryData, ExceptionCode& ec)
@@ -310,7 +310,7 @@
return false;
}
ASSERT(m_channel);
- return m_channel->send(*binaryData) == ThreadableWebSocketChannel::SendSuccess;
+ return m_channel->send(*binaryData);
}
bool WebSocket::send(Blob* binaryData, ExceptionCode& ec)
@@ -330,7 +330,7 @@
return false;
}
ASSERT(m_channel);
- return m_channel->send(*binaryData) == ThreadableWebSocketChannel::SendSuccess;
+ return m_channel->send(*binaryData);
}
void WebSocket::close(int code, const String& reason, ExceptionCode& ec)
Modified: trunk/Source/WebCore/Modules/websockets/WebSocketChannel.cpp (109941 => 109942)
--- trunk/Source/WebCore/Modules/websockets/WebSocketChannel.cpp 2012-03-06 19:50:48 UTC (rev 109941)
+++ trunk/Source/WebCore/Modules/websockets/WebSocketChannel.cpp 2012-03-06 19:55:53 UTC (rev 109942)
@@ -157,37 +157,37 @@
return extensions;
}
-ThreadableWebSocketChannel::SendResult WebSocketChannel::send(const String& message)
+bool WebSocketChannel::send(const String& message)
{
LOG(Network, "WebSocketChannel %p send %s", this, message.utf8().data());
- CString utf8 = message.utf8();
if (m_useHixie76Protocol) {
- return sendFrameHixie76(utf8.data(), utf8.length()) ? ThreadableWebSocketChannel::SendSuccess : ThreadableWebSocketChannel::SendFail;
+ CString utf8 = message.utf8();
+ return sendFrameHixie76(utf8.data(), utf8.length());
}
- enqueueTextFrame(utf8);
+ enqueueTextFrame(message);
// According to WebSocket API specification, WebSocket.send() should return void instead
// of boolean. However, our implementation still returns boolean due to compatibility
// concern (see bug 65850).
// m_channel->send() may happen later, thus it's not always possible to know whether
// the message has been sent to the socket successfully. In this case, we have no choice
// but to return true.
- return ThreadableWebSocketChannel::SendSuccess;
+ return true;
}
-ThreadableWebSocketChannel::SendResult WebSocketChannel::send(const ArrayBuffer& binaryData)
+bool WebSocketChannel::send(const ArrayBuffer& binaryData)
{
LOG(Network, "WebSocketChannel %p send arraybuffer %p", this, &binaryData);
ASSERT(!m_useHixie76Protocol);
enqueueRawFrame(WebSocketFrame::OpCodeBinary, static_cast<const char*>(binaryData.data()), binaryData.byteLength());
- return ThreadableWebSocketChannel::SendSuccess;
+ return true;
}
-ThreadableWebSocketChannel::SendResult WebSocketChannel::send(const Blob& binaryData)
+bool WebSocketChannel::send(const Blob& binaryData)
{
LOG(Network, "WebSocketChannel %p send blob %s", this, binaryData.url().string().utf8().data());
ASSERT(!m_useHixie76Protocol);
enqueueBlobFrame(WebSocketFrame::OpCodeBinary, binaryData);
- return ThreadableWebSocketChannel::SendSuccess;
+ return true;
}
bool WebSocketChannel::send(const char* data, int length)
@@ -856,7 +856,7 @@
return false;
}
-void WebSocketChannel::enqueueTextFrame(const CString& string)
+void WebSocketChannel::enqueueTextFrame(const String& string)
{
ASSERT(!m_useHixie76Protocol);
ASSERT(m_outgoingFrameQueueStatus == OutgoingFrameQueueOpen);
@@ -904,7 +904,8 @@
OwnPtr<QueuedFrame> frame = m_outgoingFrameQueue.takeFirst();
switch (frame->frameType) {
case QueuedFrameTypeString: {
- if (!sendFrame(frame->opCode, frame->stringData.data(), frame->stringData.length()))
+ CString utf8 = frame->stringData.utf8();
+ if (!sendFrame(frame->opCode, utf8.data(), utf8.length()))
fail("Failed to send WebSocket frame.");
break;
}
Modified: trunk/Source/WebCore/Modules/websockets/WebSocketChannel.h (109941 => 109942)
--- trunk/Source/WebCore/Modules/websockets/WebSocketChannel.h 2012-03-06 19:50:48 UTC (rev 109941)
+++ trunk/Source/WebCore/Modules/websockets/WebSocketChannel.h 2012-03-06 19:55:53 UTC (rev 109942)
@@ -44,7 +44,6 @@
#include <wtf/Forward.h>
#include <wtf/RefCounted.h>
#include <wtf/Vector.h>
-#include <wtf/text/CString.h>
namespace WebCore {
@@ -72,9 +71,9 @@
virtual void connect(const KURL&, const String& protocol) OVERRIDE;
virtual String subprotocol() OVERRIDE;
virtual String extensions() OVERRIDE;
- virtual ThreadableWebSocketChannel::SendResult send(const String& message) OVERRIDE;
- virtual ThreadableWebSocketChannel::SendResult send(const ArrayBuffer&) OVERRIDE;
- virtual ThreadableWebSocketChannel::SendResult send(const Blob&) OVERRIDE;
+ virtual bool send(const String& message) OVERRIDE;
+ virtual bool send(const ArrayBuffer&) OVERRIDE;
+ virtual bool send(const Blob&) OVERRIDE;
virtual unsigned long bufferedAmount() const OVERRIDE;
virtual void close(int code, const String& reason) OVERRIDE; // Start closing handshake.
virtual void fail(const String& reason) OVERRIDE;
@@ -161,11 +160,11 @@
WebSocketFrame::OpCode opCode;
QueuedFrameType frameType;
// Only one of the following items is used, according to the value of frameType.
- CString stringData;
+ String stringData;
Vector<char> vectorData;
RefPtr<Blob> blobData;
};
- void enqueueTextFrame(const CString&);
+ void enqueueTextFrame(const String&);
void enqueueRawFrame(WebSocketFrame::OpCode, const char* data, size_t dataLength);
void enqueueBlobFrame(WebSocketFrame::OpCode, const Blob&);
Modified: trunk/Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.cpp (109941 => 109942)
--- trunk/Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.cpp 2012-03-06 19:50:48 UTC (rev 109941)
+++ trunk/Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.cpp 2012-03-06 19:55:53 UTC (rev 109942)
@@ -89,24 +89,24 @@
return m_workerClientWrapper->extensions();
}
-ThreadableWebSocketChannel::SendResult WorkerThreadableWebSocketChannel::send(const String& message)
+bool WorkerThreadableWebSocketChannel::send(const String& message)
{
if (!m_bridge)
- return ThreadableWebSocketChannel::SendFail;
+ return false;
return m_bridge->send(message);
}
-ThreadableWebSocketChannel::SendResult WorkerThreadableWebSocketChannel::send(const ArrayBuffer& binaryData)
+bool WorkerThreadableWebSocketChannel::send(const ArrayBuffer& binaryData)
{
if (!m_bridge)
- return ThreadableWebSocketChannel::SendFail;
+ return false;
return m_bridge->send(binaryData);
}
-ThreadableWebSocketChannel::SendResult WorkerThreadableWebSocketChannel::send(const Blob& binaryData)
+bool WorkerThreadableWebSocketChannel::send(const Blob& binaryData)
{
if (!m_bridge)
- return ThreadableWebSocketChannel::SendFail;
+ return false;
return m_bridge->send(binaryData);
}
@@ -180,7 +180,7 @@
m_mainWebSocketChannel->connect(url, protocol);
}
-static void workerContextDidSend(ScriptExecutionContext* context, PassRefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, ThreadableWebSocketChannel::SendResult sendRequestResult)
+static void workerContextDidSend(ScriptExecutionContext* context, PassRefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, bool sendRequestResult)
{
ASSERT_UNUSED(context, context->isWorkerContext());
workerClientWrapper->setSendRequestResult(sendRequestResult);
@@ -191,7 +191,7 @@
ASSERT(isMainThread());
if (!m_mainWebSocketChannel || !m_workerClientWrapper)
return;
- ThreadableWebSocketChannel::SendResult sendRequestResult = m_mainWebSocketChannel->send(message);
+ bool sendRequestResult = m_mainWebSocketChannel->send(message);
m_loaderProxy.postTaskForModeToWorkerContext(createCallbackTask(&workerContextDidSend, m_workerClientWrapper, sendRequestResult), m_taskMode);
}
@@ -200,7 +200,7 @@
ASSERT(isMainThread());
if (!m_mainWebSocketChannel || !m_workerClientWrapper)
return;
- ThreadableWebSocketChannel::SendResult sendRequestResult = m_mainWebSocketChannel->send(binaryData);
+ bool sendRequestResult = m_mainWebSocketChannel->send(binaryData);
m_loaderProxy.postTaskForModeToWorkerContext(createCallbackTask(&workerContextDidSend, m_workerClientWrapper, sendRequestResult), m_taskMode);
}
@@ -209,7 +209,7 @@
ASSERT(isMainThread());
if (!m_mainWebSocketChannel || !m_workerClientWrapper)
return;
- ThreadableWebSocketChannel::SendResult sendRequestResult = m_mainWebSocketChannel->send(binaryData);
+ bool sendRequestResult = m_mainWebSocketChannel->send(binaryData);
m_loaderProxy.postTaskForModeToWorkerContext(createCallbackTask(&workerContextDidSend, m_workerClientWrapper, sendRequestResult), m_taskMode);
}
@@ -432,25 +432,23 @@
peer->send(*blob);
}
-ThreadableWebSocketChannel::SendResult WorkerThreadableWebSocketChannel::Bridge::send(const String& message)
+bool WorkerThreadableWebSocketChannel::Bridge::send(const String& message)
{
if (!m_workerClientWrapper)
- return ThreadableWebSocketChannel::SendFail;
+ return false;
ASSERT(m_peer);
setMethodNotCompleted();
m_loaderProxy.postTaskToLoader(createCallbackTask(&WorkerThreadableWebSocketChannel::mainThreadSend, AllowCrossThreadAccess(m_peer), message));
RefPtr<Bridge> protect(this);
waitForMethodCompletion();
ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapper.get();
- if (!clientWrapper)
- return ThreadableWebSocketChannel::SendFail;
- return clientWrapper->sendRequestResult();
+ return clientWrapper && clientWrapper->sendRequestResult();
}
-ThreadableWebSocketChannel::SendResult WorkerThreadableWebSocketChannel::Bridge::send(const ArrayBuffer& binaryData)
+bool WorkerThreadableWebSocketChannel::Bridge::send(const ArrayBuffer& binaryData)
{
if (!m_workerClientWrapper)
- return ThreadableWebSocketChannel::SendFail;
+ return false;
ASSERT(m_peer);
// ArrayBuffer isn't thread-safe, hence the content of ArrayBuffer is copied into Vector<char>.
OwnPtr<Vector<char> > data = "" Vector<char>(binaryData.byteLength()));
@@ -461,24 +459,20 @@
RefPtr<Bridge> protect(this);
waitForMethodCompletion();
ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapper.get();
- if (!clientWrapper)
- return ThreadableWebSocketChannel::SendFail;
- return clientWrapper->sendRequestResult();
+ return clientWrapper && clientWrapper->sendRequestResult();
}
-ThreadableWebSocketChannel::SendResult WorkerThreadableWebSocketChannel::Bridge::send(const Blob& binaryData)
+bool WorkerThreadableWebSocketChannel::Bridge::send(const Blob& binaryData)
{
if (!m_workerClientWrapper)
- return ThreadableWebSocketChannel::SendFail;
+ return false;
ASSERT(m_peer);
setMethodNotCompleted();
m_loaderProxy.postTaskToLoader(createCallbackTask(&WorkerThreadableWebSocketChannel::mainThreadSendBlob, AllowCrossThreadAccess(m_peer), binaryData.url(), binaryData.type(), binaryData.size()));
RefPtr<Bridge> protect(this);
waitForMethodCompletion();
ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapper.get();
- if (!clientWrapper)
- return ThreadableWebSocketChannel::SendFail;
- return clientWrapper->sendRequestResult();
+ return clientWrapper && clientWrapper->sendRequestResult();
}
void WorkerThreadableWebSocketChannel::mainThreadBufferedAmount(ScriptExecutionContext* context, Peer* peer)
Modified: trunk/Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.h (109941 => 109942)
--- trunk/Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.h 2012-03-06 19:50:48 UTC (rev 109941)
+++ trunk/Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.h 2012-03-06 19:55:53 UTC (rev 109942)
@@ -65,9 +65,9 @@
virtual void connect(const KURL&, const String& protocol) OVERRIDE;
virtual String subprotocol() OVERRIDE;
virtual String extensions() OVERRIDE;
- virtual ThreadableWebSocketChannel::SendResult send(const String& message) OVERRIDE;
- virtual ThreadableWebSocketChannel::SendResult send(const ArrayBuffer&) OVERRIDE;
- virtual ThreadableWebSocketChannel::SendResult send(const Blob&) OVERRIDE;
+ virtual bool send(const String& message) OVERRIDE;
+ virtual bool send(const ArrayBuffer&) OVERRIDE;
+ virtual bool send(const Blob&) OVERRIDE;
virtual unsigned long bufferedAmount() const OVERRIDE;
virtual void close(int code, const String& reason) OVERRIDE;
virtual void fail(const String& reason) OVERRIDE;
@@ -132,9 +132,9 @@
}
~Bridge();
void connect(const KURL&, const String& protocol);
- ThreadableWebSocketChannel::SendResult send(const String& message);
- ThreadableWebSocketChannel::SendResult send(const ArrayBuffer&);
- ThreadableWebSocketChannel::SendResult send(const Blob&);
+ bool send(const String& message);
+ bool send(const ArrayBuffer&);
+ bool send(const Blob&);
unsigned long bufferedAmount();
void close(int code, const String& reason);
void fail(const String& reason);