Right now, WebSocket uses WebSocketChannel and SocketStreamHandle directly, but this might not work well if the WebSocket is running on another thread (i.e. worker threads). <div>SocketStreamHandleCFNet is expected to run on loader process/main thread, so attachment 44393 in bug 32214 won&#39;t work well on Mac.</div>

<div>Also, we&#39;ll want to share global data to maintain current opening channel to limit the number of opening channel to each destination in WebSocketChannel class.</div><div><br></div><div>So, I propose to set thread boundary on the WebSocketChannel interface.</div>

<div>I introduce ThreadableWebSocketChannel, which is abstract interface for WebSocketChannel, and ThreadableWebSocketChannelClientWrapper, which is ThreadSafeShared class to wrap WebSocketChannelClient.</div><div><br></div>

<div>ThreadableWebSocketChannel::create() will create WebSocketChannel on the main thread, or create WorkerThreadableWebSocketChannel on the worker thread.</div><div><br></div><div>WorkerThreadableWebSocketChannel has a bridge between the worker thread and the main thread.  It uses WorkerLoaderProxy to communicate between the threads.</div>

<div><br></div><div>WebSocketChannel and SocketStreamHandle always runs on the main thread.</div><div><br></div><div><a href="http://docs.google.com/View?id=dfm7gfvg_13drnxm3fn">http://docs.google.com/View?id=dfm7gfvg_13drnxm3fn</a></div>

<div><br></div><div>Is there anything else I should be careful about?</div><div>Any comments are welcome.</div><div><br></div><div>Thanks!</div><div>ukai</div><div><br></div>