| Index: third_party/WebKit/Source/modules/websockets/DocumentWebSocketChannel.cpp
|
| diff --git a/third_party/WebKit/Source/modules/websockets/DocumentWebSocketChannel.cpp b/third_party/WebKit/Source/modules/websockets/DocumentWebSocketChannel.cpp
|
| index d833cf38afc67928b282e188d9f1a499bbda6e5f..25a282a876770d37c1db07e879c9b56e9f92bc47 100644
|
| --- a/third_party/WebKit/Source/modules/websockets/DocumentWebSocketChannel.cpp
|
| +++ b/third_party/WebKit/Source/modules/websockets/DocumentWebSocketChannel.cpp
|
| @@ -83,6 +83,31 @@ private:
|
| FileReaderLoader m_loader;
|
| };
|
|
|
| +class DocumentWebSocketChannel::Message : public GarbageCollectedFinalized<DocumentWebSocketChannel::Message> {
|
| +public:
|
| + explicit Message(const CString&);
|
| + explicit Message(PassRefPtr<BlobDataHandle>);
|
| + explicit Message(DOMArrayBuffer*);
|
| + // For WorkerWebSocketChannel
|
| + explicit Message(PassOwnPtr<Vector<char>>, MessageType);
|
| + // Close message
|
| + Message(unsigned short code, const String& reason);
|
| +
|
| + DEFINE_INLINE_TRACE()
|
| + {
|
| + visitor->trace(arrayBuffer);
|
| + }
|
| +
|
| + MessageType type;
|
| +
|
| + CString text;
|
| + RefPtr<BlobDataHandle> blobDataHandle;
|
| + Member<DOMArrayBuffer> arrayBuffer;
|
| + OwnPtr<Vector<char>> vectorData;
|
| + unsigned short code;
|
| + String reason;
|
| +};
|
| +
|
| DocumentWebSocketChannel::BlobLoader::BlobLoader(PassRefPtr<BlobDataHandle> blobDataHandle, DocumentWebSocketChannel* channel)
|
| : m_channel(channel)
|
| , m_loader(FileReaderLoader::ReadAsArrayBuffer, this)
|
| @@ -172,7 +197,7 @@ void DocumentWebSocketChannel::send(const CString& message)
|
| // FIXME: Change the inspector API to show the entire message instead
|
| // of individual frames.
|
| InspectorInstrumentation::didSendWebSocketFrame(document(), m_identifier, WebSocketFrame::OpCodeText, true, message.data(), message.length());
|
| - m_messages.append(adoptPtr(new Message(message)));
|
| + m_messages.append(new Message(message));
|
| processSendQueue();
|
| }
|
|
|
| @@ -185,7 +210,7 @@ void DocumentWebSocketChannel::send(PassRefPtr<BlobDataHandle> blobDataHandle)
|
| // Since Binary data are not displayed in Inspector, this does not
|
| // affect actual behavior.
|
| InspectorInstrumentation::didSendWebSocketFrame(document(), m_identifier, WebSocketFrame::OpCodeBinary, true, "", 0);
|
| - m_messages.append(adoptPtr(new Message(blobDataHandle)));
|
| + m_messages.append(new Message(blobDataHandle));
|
| processSendQueue();
|
| }
|
|
|
| @@ -198,7 +223,7 @@ void DocumentWebSocketChannel::send(const DOMArrayBuffer& buffer, unsigned byteO
|
| // buffer.slice copies its contents.
|
| // FIXME: Reduce copy by sending the data immediately when we don't need to
|
| // queue the data.
|
| - m_messages.append(adoptPtr(new Message(buffer.slice(byteOffset, byteOffset + byteLength))));
|
| + m_messages.append(new Message(buffer.slice(byteOffset, byteOffset + byteLength)));
|
| processSendQueue();
|
| }
|
|
|
| @@ -208,7 +233,7 @@ void DocumentWebSocketChannel::sendTextAsCharVector(PassOwnPtr<Vector<char>> dat
|
| // FIXME: Change the inspector API to show the entire message instead
|
| // of individual frames.
|
| InspectorInstrumentation::didSendWebSocketFrame(document(), m_identifier, WebSocketFrame::OpCodeText, true, data->data(), data->size());
|
| - m_messages.append(adoptPtr(new Message(data, MessageTypeTextAsCharVector)));
|
| + m_messages.append(new Message(data, MessageTypeTextAsCharVector));
|
| processSendQueue();
|
| }
|
|
|
| @@ -218,7 +243,7 @@ void DocumentWebSocketChannel::sendBinaryAsCharVector(PassOwnPtr<Vector<char>> d
|
| // FIXME: Change the inspector API to show the entire message instead
|
| // of individual frames.
|
| InspectorInstrumentation::didSendWebSocketFrame(document(), m_identifier, WebSocketFrame::OpCodeBinary, true, data->data(), data->size());
|
| - m_messages.append(adoptPtr(new Message(data, MessageTypeBinaryAsCharVector)));
|
| + m_messages.append(new Message(data, MessageTypeBinaryAsCharVector));
|
| processSendQueue();
|
| }
|
|
|
| @@ -227,7 +252,7 @@ void DocumentWebSocketChannel::close(int code, const String& reason)
|
| WTF_LOG(Network, "DocumentWebSocketChannel %p close(%d, %s)", this, code, reason.utf8().data());
|
| ASSERT(m_handle);
|
| unsigned short codeToSend = static_cast<unsigned short>(code == CloseEventCodeNotSpecified ? CloseEventCodeNoStatusRcvd : code);
|
| - m_messages.append(adoptPtr(new Message(codeToSend, reason)));
|
| + m_messages.append(new Message(codeToSend, reason));
|
| processSendQueue();
|
| }
|
|
|
| @@ -269,7 +294,7 @@ DocumentWebSocketChannel::Message::Message(PassRefPtr<BlobDataHandle> blobDataHa
|
| : type(MessageTypeBlob)
|
| , blobDataHandle(blobDataHandle) { }
|
|
|
| -DocumentWebSocketChannel::Message::Message(PassRefPtr<DOMArrayBuffer> arrayBuffer)
|
| +DocumentWebSocketChannel::Message::Message(DOMArrayBuffer* arrayBuffer)
|
| : type(MessageTypeArrayBuffer)
|
| , arrayBuffer(arrayBuffer) { }
|
|
|
| @@ -529,14 +554,14 @@ void DocumentWebSocketChannel::didStartClosingHandshake(WebSocketHandle* handle)
|
| m_client->didStartClosingHandshake();
|
| }
|
|
|
| -void DocumentWebSocketChannel::didFinishLoadingBlob(PassRefPtr<DOMArrayBuffer> buffer)
|
| +void DocumentWebSocketChannel::didFinishLoadingBlob(DOMArrayBuffer* buffer)
|
| {
|
| m_blobLoader.clear();
|
| ASSERT(m_handle);
|
| // The loaded blob is always placed on m_messages[0].
|
| ASSERT(m_messages.size() > 0 && m_messages.first()->type == MessageTypeBlob);
|
| // We replace it with the loaded blob.
|
| - m_messages.first() = adoptPtr(new Message(buffer));
|
| + m_messages.first() = new Message(buffer);
|
| processSendQueue();
|
| }
|
|
|
| @@ -555,6 +580,7 @@ void DocumentWebSocketChannel::didFailLoadingBlob(FileError::ErrorCode errorCode
|
| DEFINE_TRACE(DocumentWebSocketChannel)
|
| {
|
| visitor->trace(m_blobLoader);
|
| + visitor->trace(m_messages);
|
| visitor->trace(m_client);
|
| WebSocketChannel::trace(visitor);
|
| ContextLifecycleObserver::trace(visitor);
|
|
|