1c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)/* 2c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * Copyright (C) 2013 Google Inc. All rights reserved. 3c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * 4c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * Redistribution and use in source and binary forms, with or without 5c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * modification, are permitted provided that the following conditions are 6c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * met: 7c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * 8c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * * Redistributions of source code must retain the above copyright 9c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * notice, this list of conditions and the following disclaimer. 10c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * * Redistributions in binary form must reproduce the above 11c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 12c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * in the documentation and/or other materials provided with the 13c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * distribution. 14c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 15c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * contributors may be used to endorse or promote products derived from 16c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * this software without specific prior written permission. 17c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * 18c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) */ 30c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 31c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#ifndef NewWebSocketChannelImpl_h 32c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#define NewWebSocketChannelImpl_h 33c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 348abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#include "core/dom/ContextLifecycleObserver.h" 35c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "core/fileapi/Blob.h" 369bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)#include "core/fileapi/FileError.h" 371e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/frame/ConsoleTypes.h" 38c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "modules/websockets/WebSocketChannel.h" 3951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/weborigin/KURL.h" 40c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "public/platform/WebSocketHandle.h" 41c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "public/platform/WebSocketHandleClient.h" 42c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "wtf/ArrayBuffer.h" 43c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "wtf/Deque.h" 44c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "wtf/FastAllocBase.h" 45c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "wtf/OwnPtr.h" 46d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)#include "wtf/PassOwnPtr.h" 47c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "wtf/PassRefPtr.h" 48c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "wtf/RefPtr.h" 49c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "wtf/Vector.h" 50c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "wtf/text/CString.h" 51c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#include "wtf/text/WTFString.h" 52c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 5351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)namespace blink { 5451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 55f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)class Document; 56d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class WebSocketHandshakeRequest; 57e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)class WebSocketHandshakeRequestInfo; 58e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)class WebSocketHandshakeResponseInfo; 59f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) 60c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)// This class may replace MainThreadWebSocketChannel. 61e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)class NewWebSocketChannelImpl FINAL : public WebSocketChannel, public WebSocketHandleClient, public ContextLifecycleObserver { 62c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)public: 63c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) // You can specify the source file and the line number information 64c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) // explicitly by passing the last parameter. 65c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) // In the usual case, they are set automatically and you don't have to 66c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) // pass it. 67c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) // Specify handle explicitly only in tests. 68e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) static NewWebSocketChannelImpl* create(ExecutionContext* context, WebSocketChannelClient* client, const String& sourceURL = String(), unsigned lineNumber = 0, WebSocketHandle *handle = 0) 69c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) { 70c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return adoptRefCountedGarbageCollected(new NewWebSocketChannelImpl(context, client, sourceURL, lineNumber, handle)); 71c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) } 729bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) virtual ~NewWebSocketChannelImpl(); 73c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 74c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) // WebSocketChannel functions. 75f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu virtual bool connect(const KURL&, const String& protocol) OVERRIDE; 76c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) virtual void send(const String& message) OVERRIDE; 77c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) virtual void send(const ArrayBuffer&, unsigned byteOffset, unsigned byteLength) OVERRIDE; 78c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) virtual void send(PassRefPtr<BlobDataHandle>) OVERRIDE; 79c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) virtual void send(PassOwnPtr<Vector<char> > data) OVERRIDE; 80c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) // Start closing handshake. Use the CloseEventCodeNotSpecified for the code 81c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) // argument to omit payload. 82c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void close(int code, const String& reason) OVERRIDE; 83c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void fail(const String& reason, MessageLevel, const String&, unsigned lineNumber) OVERRIDE; 84c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void disconnect() OVERRIDE; 85c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 86c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void suspend() OVERRIDE; 87c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void resume() OVERRIDE; 88c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 89323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) virtual void trace(Visitor*) OVERRIDE; 90323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 91c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)private: 92c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) enum MessageType { 93c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) MessageTypeText, 94c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) MessageTypeBlob, 95c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) MessageTypeArrayBuffer, 96d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) MessageTypeVector, 97197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch MessageTypeClose, 98c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) }; 999bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) 100c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) struct Message { 101c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) explicit Message(const String&); 1021e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) explicit Message(PassRefPtr<BlobDataHandle>); 103c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) explicit Message(PassRefPtr<ArrayBuffer>); 104d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) explicit Message(PassOwnPtr<Vector<char> >); 105197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch Message(unsigned short code, const String& reason); 106d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 107c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) MessageType type; 108d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 109c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) CString text; 1101e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) RefPtr<BlobDataHandle> blobDataHandle; 111c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) RefPtr<ArrayBuffer> arrayBuffer; 112d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) OwnPtr<Vector<char> > vectorData; 113197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch unsigned short code; 114197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch String reason; 115c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) }; 116c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 117c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) struct ReceivedMessage { 118c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) bool isMessageText; 119c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) Vector<char> data; 120c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) }; 121c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 1229bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) class BlobLoader; 1239bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) 124e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) NewWebSocketChannelImpl(ExecutionContext*, WebSocketChannelClient*, const String&, unsigned, WebSocketHandle*); 125c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) void sendInternal(); 126c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) void flowControlIfNecessary(); 127a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) void failAsError(const String& reason) { fail(reason, ErrorMessageLevel, m_sourceURLAtConstruction, m_lineNumberAtConstruction); } 1289bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) void abortAsyncOperations(); 12951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) void handleDidClose(bool wasClean, unsigned short code, const String& reason); 130f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) Document* document(); // can be called only when m_identifier > 0. 131c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 132c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) // WebSocketHandleClient functions. 133e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) virtual void didConnect(WebSocketHandle*, bool fail, const WebString& selectedProtocol, const WebString& extensions) OVERRIDE; 134e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) virtual void didStartOpeningHandshake(WebSocketHandle*, const WebSocketHandshakeRequestInfo&) OVERRIDE; 135e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) virtual void didFinishOpeningHandshake(WebSocketHandle*, const WebSocketHandshakeResponseInfo&) OVERRIDE; 136e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) virtual void didFail(WebSocketHandle*, const WebString& message) OVERRIDE; 137e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) virtual void didReceiveData(WebSocketHandle*, bool fin, WebSocketHandle::MessageType, const char* data, size_t /* size */) OVERRIDE; 138e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) virtual void didClose(WebSocketHandle*, bool wasClean, unsigned short code, const WebString& reason) OVERRIDE; 139e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) virtual void didReceiveFlowControl(WebSocketHandle*, int64_t quota) OVERRIDE; 140e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) virtual void didStartClosingHandshake(WebSocketHandle*) OVERRIDE; 141c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 1429bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) // Methods for BlobLoader. 1439bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) void didFinishLoadingBlob(PassRefPtr<ArrayBuffer>); 1449bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) void didFailLoadingBlob(FileError::ErrorCode); 145c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 1468abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) // LifecycleObserver functions. 147197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch virtual void contextDestroyed() OVERRIDE 148197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 149197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // In oilpan we cannot assume this channel's finalizer has been called 150197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // before the document it is observing is dead and finalized since there 151197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // is no eager finalization. Instead the finalization happens at the 152197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // next GC which could be long enough after the Peer::destroy call for 153197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // the context (ie. Document) to be dead too. If the context's finalizer 154197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // is run first this method gets called. Instead we assert the channel 155197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // has been disconnected which happens in Peer::destroy. 156197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch ASSERT(!m_handle); 157197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch ASSERT(!m_client); 158197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch ASSERT(!m_identifier); 159c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) ContextLifecycleObserver::contextDestroyed(); 160197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 1618abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 162c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) // m_handle is a handle of the connection. 163c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) // m_handle == 0 means this channel is closed. 164e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) OwnPtr<WebSocketHandle> m_handle; 165c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 166c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) // m_client can be deleted while this channel is alive, but this class 167c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) // expects that disconnect() is called before the deletion. 168c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) Member<WebSocketChannelClient> m_client; 169c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) KURL m_url; 170f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) // m_identifier > 0 means calling scriptContextExecution() returns a Document. 171f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) unsigned long m_identifier; 172c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) Member<BlobLoader> m_blobLoader; 173d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) Deque<OwnPtr<Message> > m_messages; 174c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) Vector<char> m_receivingMessageData; 175c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 176c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) bool m_receivingMessageTypeIsText; 177c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) int64_t m_sendingQuota; 178c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) int64_t m_receivedDataSizeForFlowControl; 179c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) size_t m_sentSizeOfTopMessage; 180c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 181a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) String m_sourceURLAtConstruction; 182a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) unsigned m_lineNumberAtConstruction; 183d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) RefPtr<WebSocketHandshakeRequest> m_handshakeRequest; 184f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) 185c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) static const int64_t receivedDataSizeForFlowControlHighWaterMark = 1 << 15; 186c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)}; 187c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 188c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 189c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 190c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)#endif // NewWebSocketChannelImpl_h 191