<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[201837] trunk/Source/WebCore</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/201837">201837</a></dd>
<dt>Author</dt> <dd>achristensen@apple.com</dd>
<dt>Date</dt> <dd>2016-06-08 15:27:46 -0700 (Wed, 08 Jun 2016)</dd>
</dl>
<h3>Log Message</h3>
<pre>Modernize WebSocket code
https://bugs.webkit.org/show_bug.cgi?id=158539
Reviewed by Brady Eidson.
No new tests, no change in behavior.
* Modules/websockets/ThreadableWebSocketChannel.cpp:
(WebCore::ThreadableWebSocketChannel::create):
* Modules/websockets/ThreadableWebSocketChannel.h:
(WebCore::ThreadableWebSocketChannel::ThreadableWebSocketChannel):
* Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
(WebCore::ThreadableWebSocketChannelClientWrapper::ThreadableWebSocketChannelClientWrapper):
(WebCore::ThreadableWebSocketChannelClientWrapper::create):
(WebCore::ThreadableWebSocketChannelClientWrapper::processPendingTasks):
* Modules/websockets/ThreadableWebSocketChannelClientWrapper.h:
* Modules/websockets/WebSocket.cpp:
(WebCore::WebSocket::connect):
* Modules/websockets/WebSocketChannel.cpp:
(WebCore::WebSocketChannel::WebSocketChannel):
* Modules/websockets/WebSocketChannel.h:
(WebCore::WebSocketChannel::create):
* Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
(WebCore::WorkerThreadableWebSocketChannel::WorkerThreadableWebSocketChannel):
(WebCore::WorkerThreadableWebSocketChannel::subprotocol):
(WebCore::WorkerThreadableWebSocketChannel::extensions):
(WebCore::WorkerThreadableWebSocketChannel::resume):
(WebCore::WorkerThreadableWebSocketChannel::Peer::Peer):
(WebCore::WorkerThreadableWebSocketChannel::Peer::send):
(WebCore::WorkerThreadableWebSocketChannel::Peer::bufferedAmount):
(WebCore::WorkerThreadableWebSocketChannel::Peer::didConnect):
(WebCore::WorkerThreadableWebSocketChannel::Peer::didReceiveMessage):
(WebCore::WorkerThreadableWebSocketChannel::Peer::didReceiveBinaryData):
(WebCore::WorkerThreadableWebSocketChannel::Peer::didUpdateBufferedAmount):
(WebCore::WorkerThreadableWebSocketChannel::Peer::didStartClosingHandshake):
(WebCore::WorkerThreadableWebSocketChannel::Peer::didClose):
(WebCore::WorkerThreadableWebSocketChannel::Peer::didReceiveMessageError):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::Bridge):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::~Bridge):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::mainThreadInitialize):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::initialize):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::connect):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::send):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::bufferedAmount):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::close):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::setMethodNotCompleted):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::waitForMethodCompletion):
* Modules/websockets/WorkerThreadableWebSocketChannel.h:
(WebCore::WorkerThreadableWebSocketChannel::create):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::create):</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModuleswebsocketsThreadableWebSocketChannelcpp">trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannel.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebsocketsThreadableWebSocketChannelh">trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannel.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebsocketsThreadableWebSocketChannelClientWrappercpp">trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebsocketsThreadableWebSocketChannelClientWrapperh">trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannelClientWrapper.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebsocketsWebSocketcpp">trunk/Source/WebCore/Modules/websockets/WebSocket.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebsocketsWebSocketChannelcpp">trunk/Source/WebCore/Modules/websockets/WebSocketChannel.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebsocketsWebSocketChannelh">trunk/Source/WebCore/Modules/websockets/WebSocketChannel.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebsocketsWorkerThreadableWebSocketChannelcpp">trunk/Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebsocketsWorkerThreadableWebSocketChannelh">trunk/Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.h</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (201836 => 201837)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-06-08 22:22:49 UTC (rev 201836)
+++ trunk/Source/WebCore/ChangeLog        2016-06-08 22:27:46 UTC (rev 201837)
</span><span class="lines">@@ -1,3 +1,56 @@
</span><ins>+2016-06-08 Alex Christensen <achristensen@webkit.org>
+
+ Modernize WebSocket code
+ https://bugs.webkit.org/show_bug.cgi?id=158539
+
+ Reviewed by Brady Eidson.
+
+ No new tests, no change in behavior.
+
+ * Modules/websockets/ThreadableWebSocketChannel.cpp:
+ (WebCore::ThreadableWebSocketChannel::create):
+ * Modules/websockets/ThreadableWebSocketChannel.h:
+ (WebCore::ThreadableWebSocketChannel::ThreadableWebSocketChannel):
+ * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
+ (WebCore::ThreadableWebSocketChannelClientWrapper::ThreadableWebSocketChannelClientWrapper):
+ (WebCore::ThreadableWebSocketChannelClientWrapper::create):
+ (WebCore::ThreadableWebSocketChannelClientWrapper::processPendingTasks):
+ * Modules/websockets/ThreadableWebSocketChannelClientWrapper.h:
+ * Modules/websockets/WebSocket.cpp:
+ (WebCore::WebSocket::connect):
+ * Modules/websockets/WebSocketChannel.cpp:
+ (WebCore::WebSocketChannel::WebSocketChannel):
+ * Modules/websockets/WebSocketChannel.h:
+ (WebCore::WebSocketChannel::create):
+ * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
+ (WebCore::WorkerThreadableWebSocketChannel::WorkerThreadableWebSocketChannel):
+ (WebCore::WorkerThreadableWebSocketChannel::subprotocol):
+ (WebCore::WorkerThreadableWebSocketChannel::extensions):
+ (WebCore::WorkerThreadableWebSocketChannel::resume):
+ (WebCore::WorkerThreadableWebSocketChannel::Peer::Peer):
+ (WebCore::WorkerThreadableWebSocketChannel::Peer::send):
+ (WebCore::WorkerThreadableWebSocketChannel::Peer::bufferedAmount):
+ (WebCore::WorkerThreadableWebSocketChannel::Peer::didConnect):
+ (WebCore::WorkerThreadableWebSocketChannel::Peer::didReceiveMessage):
+ (WebCore::WorkerThreadableWebSocketChannel::Peer::didReceiveBinaryData):
+ (WebCore::WorkerThreadableWebSocketChannel::Peer::didUpdateBufferedAmount):
+ (WebCore::WorkerThreadableWebSocketChannel::Peer::didStartClosingHandshake):
+ (WebCore::WorkerThreadableWebSocketChannel::Peer::didClose):
+ (WebCore::WorkerThreadableWebSocketChannel::Peer::didReceiveMessageError):
+ (WebCore::WorkerThreadableWebSocketChannel::Bridge::Bridge):
+ (WebCore::WorkerThreadableWebSocketChannel::Bridge::~Bridge):
+ (WebCore::WorkerThreadableWebSocketChannel::Bridge::mainThreadInitialize):
+ (WebCore::WorkerThreadableWebSocketChannel::Bridge::initialize):
+ (WebCore::WorkerThreadableWebSocketChannel::Bridge::connect):
+ (WebCore::WorkerThreadableWebSocketChannel::Bridge::send):
+ (WebCore::WorkerThreadableWebSocketChannel::Bridge::bufferedAmount):
+ (WebCore::WorkerThreadableWebSocketChannel::Bridge::close):
+ (WebCore::WorkerThreadableWebSocketChannel::Bridge::setMethodNotCompleted):
+ (WebCore::WorkerThreadableWebSocketChannel::Bridge::waitForMethodCompletion):
+ * Modules/websockets/WorkerThreadableWebSocketChannel.h:
+ (WebCore::WorkerThreadableWebSocketChannel::create):
+ (WebCore::WorkerThreadableWebSocketChannel::Bridge::create):
+
</ins><span class="cx"> 2016-06-08 Chris Dumez <cdumez@apple.com>
</span><span class="cx">
</span><span class="cx"> First parameter to MessagePort / DedicatedWorkerGlobalScope.postMessage() should be mandatory
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebsocketsThreadableWebSocketChannelcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannel.cpp (201836 => 201837)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannel.cpp        2016-06-08 22:22:49 UTC (rev 201836)
+++ trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannel.cpp        2016-06-08 22:27:46 UTC (rev 201837)
</span><span class="lines">@@ -43,25 +43,21 @@
</span><span class="cx"> #include "WorkerRunLoop.h"
</span><span class="cx"> #include "WorkerThread.h"
</span><span class="cx"> #include "WorkerThreadableWebSocketChannel.h"
</span><del>-#include <wtf/PassRefPtr.h>
</del><span class="cx"> #include <wtf/text/StringBuilder.h>
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><span class="cx"> static const char webSocketChannelMode[] = "webSocketChannelMode";
</span><span class="cx">
</span><del>-PassRefPtr<ThreadableWebSocketChannel> ThreadableWebSocketChannel::create(ScriptExecutionContext* context, WebSocketChannelClient* client)
</del><ins>+Ref<ThreadableWebSocketChannel> ThreadableWebSocketChannel::create(ScriptExecutionContext& context, WebSocketChannelClient& client)
</ins><span class="cx"> {
</span><del>- ASSERT(context);
- ASSERT(client);
-
- if (is<WorkerGlobalScope>(*context)) {
- WorkerGlobalScope& workerGlobalScope = downcast<WorkerGlobalScope>(*context);
</del><ins>+ if (is<WorkerGlobalScope>(context)) {
+ WorkerGlobalScope& workerGlobalScope = downcast<WorkerGlobalScope>(context);
</ins><span class="cx"> WorkerRunLoop& runLoop = workerGlobalScope.thread().runLoop();
</span><span class="cx"> StringBuilder mode;
</span><span class="cx"> mode.appendLiteral(webSocketChannelMode);
</span><span class="cx"> mode.appendNumber(runLoop.createUniqueId());
</span><del>- return WorkerThreadableWebSocketChannel::create(&workerGlobalScope, client, mode.toString());
</del><ins>+ return WorkerThreadableWebSocketChannel::create(workerGlobalScope, client, mode.toString());
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> return WebSocketChannel::create(downcast<Document>(context), client);
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebsocketsThreadableWebSocketChannelh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannel.h (201836 => 201837)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannel.h        2016-06-08 22:22:49 UTC (rev 201836)
+++ trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannel.h        2016-06-08 22:27:46 UTC (rev 201837)
</span><span class="lines">@@ -28,14 +28,12 @@
</span><span class="cx"> * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx"> */
</span><span class="cx">
</span><del>-#ifndef ThreadableWebSocketChannel_h
-#define ThreadableWebSocketChannel_h
</del><ins>+#pragma once
</ins><span class="cx">
</span><span class="cx"> #if ENABLE(WEB_SOCKETS)
</span><span class="cx">
</span><span class="cx"> #include <wtf/Forward.h>
</span><span class="cx"> #include <wtf/Noncopyable.h>
</span><del>-#include <wtf/PassRefPtr.h>
</del><span class="cx">
</span><span class="cx"> namespace JSC {
</span><span class="cx"> class ArrayBuffer;
</span><span class="lines">@@ -53,7 +51,7 @@
</span><span class="cx"> WTF_MAKE_NONCOPYABLE(ThreadableWebSocketChannel);
</span><span class="cx"> public:
</span><span class="cx"> ThreadableWebSocketChannel() { }
</span><del>- static PassRefPtr<ThreadableWebSocketChannel> create(ScriptExecutionContext*, WebSocketChannelClient*);
</del><ins>+ static Ref<ThreadableWebSocketChannel> create(ScriptExecutionContext&, WebSocketChannelClient&);
</ins><span class="cx">
</span><span class="cx"> enum SendResult {
</span><span class="cx"> SendSuccess,
</span><span class="lines">@@ -88,5 +86,3 @@
</span><span class="cx"> } // namespace WebCore
</span><span class="cx">
</span><span class="cx"> #endif // ENABLE(WEB_SOCKETS)
</span><del>-
-#endif // ThreadableWebSocketChannel_h
</del></span></pre></div>
<a id="trunkSourceWebCoreModuleswebsocketsThreadableWebSocketChannelClientWrappercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp (201836 => 201837)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp        2016-06-08 22:22:49 UTC (rev 201836)
+++ trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp        2016-06-08 22:27:46 UTC (rev 201837)
</span><span class="lines">@@ -34,15 +34,14 @@
</span><span class="cx">
</span><span class="cx"> #include "ScriptExecutionContext.h"
</span><span class="cx"> #include "WebSocketChannelClient.h"
</span><del>-#include <wtf/PassRefPtr.h>
</del><span class="cx"> #include <wtf/RefPtr.h>
</span><span class="cx"> #include <wtf/text/StringView.h>
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><del>-ThreadableWebSocketChannelClientWrapper::ThreadableWebSocketChannelClientWrapper(ScriptExecutionContext* context, WebSocketChannelClient* client)
</del><ins>+ThreadableWebSocketChannelClientWrapper::ThreadableWebSocketChannelClientWrapper(ScriptExecutionContext& context, WebSocketChannelClient& client)
</ins><span class="cx"> : m_context(context)
</span><del>- , m_client(client)
</del><ins>+ , m_client(&client)
</ins><span class="cx"> , m_peer(nullptr)
</span><span class="cx"> , m_failedWebSocketChannelCreation(false)
</span><span class="cx"> , m_syncMethodDone(true)
</span><span class="lines">@@ -52,7 +51,7 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><del>-Ref<ThreadableWebSocketChannelClientWrapper> ThreadableWebSocketChannelClientWrapper::create(ScriptExecutionContext* context, WebSocketChannelClient* client)
</del><ins>+Ref<ThreadableWebSocketChannelClientWrapper> ThreadableWebSocketChannelClientWrapper::create(ScriptExecutionContext& context, WebSocketChannelClient& client)
</ins><span class="cx"> {
</span><span class="cx"> return adoptRef(*new ThreadableWebSocketChannelClientWrapper(context, client));
</span><span class="cx"> }
</span><span class="lines">@@ -248,7 +247,7 @@
</span><span class="cx"> if (!m_syncMethodDone) {
</span><span class="cx"> // When a synchronous operation is in progress (i.e. the execution stack contains
</span><span class="cx"> // WorkerThreadableWebSocketChannel::waitForMethodCompletion()), we cannot invoke callbacks in this run loop.
</span><del>- m_context->postTask([this, protectedThis = Ref<ThreadableWebSocketChannelClientWrapper>(*this)] (ScriptExecutionContext& context) {
</del><ins>+ m_context.postTask([this, protectedThis = Ref<ThreadableWebSocketChannelClientWrapper>(*this)] (ScriptExecutionContext& context) {
</ins><span class="cx"> ASSERT_UNUSED(context, context.isWorkerGlobalScope());
</span><span class="cx"> processPendingTasks();
</span><span class="cx"> });
</span><span class="lines">@@ -257,7 +256,7 @@
</span><span class="cx">
</span><span class="cx"> Vector<std::unique_ptr<ScriptExecutionContext::Task>> pendingTasks = WTFMove(m_pendingTasks);
</span><span class="cx"> for (auto& task : pendingTasks)
</span><del>- task->performTask(*m_context);
</del><ins>+ task->performTask(m_context);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebsocketsThreadableWebSocketChannelClientWrapperh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannelClientWrapper.h (201836 => 201837)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannelClientWrapper.h        2016-06-08 22:22:49 UTC (rev 201836)
+++ trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannelClientWrapper.h        2016-06-08 22:27:46 UTC (rev 201837)
</span><span class="lines">@@ -28,8 +28,7 @@
</span><span class="cx"> * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx"> */
</span><span class="cx">
</span><del>-#ifndef ThreadableWebSocketChannelClientWrapper_h
-#define ThreadableWebSocketChannelClientWrapper_h
</del><ins>+#pragma once
</ins><span class="cx">
</span><span class="cx"> #if ENABLE(WEB_SOCKETS)
</span><span class="cx">
</span><span class="lines">@@ -50,7 +49,7 @@
</span><span class="cx">
</span><span class="cx"> class ThreadableWebSocketChannelClientWrapper : public ThreadSafeRefCounted<ThreadableWebSocketChannelClientWrapper> {
</span><span class="cx"> public:
</span><del>- static Ref<ThreadableWebSocketChannelClientWrapper> create(ScriptExecutionContext*, WebSocketChannelClient*);
</del><ins>+ static Ref<ThreadableWebSocketChannelClientWrapper> create(ScriptExecutionContext&, WebSocketChannelClient&);
</ins><span class="cx">
</span><span class="cx"> void clearSyncMethodDone();
</span><span class="cx"> void setSyncMethodDone();
</span><span class="lines">@@ -89,11 +88,11 @@
</span><span class="cx"> void resume();
</span><span class="cx">
</span><span class="cx"> private:
</span><del>- ThreadableWebSocketChannelClientWrapper(ScriptExecutionContext*, WebSocketChannelClient*);
</del><ins>+ ThreadableWebSocketChannelClientWrapper(ScriptExecutionContext&, WebSocketChannelClient&);
</ins><span class="cx">
</span><span class="cx"> void processPendingTasks();
</span><span class="cx">
</span><del>- ScriptExecutionContext* m_context;
</del><ins>+ ScriptExecutionContext& m_context;
</ins><span class="cx"> WebSocketChannelClient* m_client;
</span><span class="cx"> WorkerThreadableWebSocketChannel::Peer* m_peer;
</span><span class="cx"> bool m_failedWebSocketChannelCreation;
</span><span class="lines">@@ -110,5 +109,3 @@
</span><span class="cx"> } // namespace WebCore
</span><span class="cx">
</span><span class="cx"> #endif // ENABLE(WEB_SOCKETS)
</span><del>-
-#endif // ThreadableWebSocketChannelClientWrapper_h
</del></span></pre></div>
<a id="trunkSourceWebCoreModuleswebsocketsWebSocketcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/websockets/WebSocket.cpp (201836 => 201837)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/websockets/WebSocket.cpp        2016-06-08 22:22:49 UTC (rev 201836)
+++ trunk/Source/WebCore/Modules/websockets/WebSocket.cpp        2016-06-08 22:27:46 UTC (rev 201837)
</span><span class="lines">@@ -250,7 +250,7 @@
</span><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- m_channel = ThreadableWebSocketChannel::create(scriptExecutionContext(), this);
</del><ins>+ m_channel = ThreadableWebSocketChannel::create(*scriptExecutionContext(), *this);
</ins><span class="cx">
</span><span class="cx"> // FIXME: There is a disagreement about restriction of subprotocols between WebSocket API and hybi-10 protocol
</span><span class="cx"> // draft. The former simply says "only characters in the range U+0021 to U+007E are allowed," while the latter
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebsocketsWebSocketChannelcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/websockets/WebSocketChannel.cpp (201836 => 201837)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/websockets/WebSocketChannel.cpp        2016-06-08 22:22:49 UTC (rev 201836)
+++ trunk/Source/WebCore/Modules/websockets/WebSocketChannel.cpp        2016-06-08 22:27:46 UTC (rev 201837)
</span><span class="lines">@@ -64,9 +64,9 @@
</span><span class="cx">
</span><span class="cx"> const double TCPMaximumSegmentLifetime = 2 * 60.0;
</span><span class="cx">
</span><del>-WebSocketChannel::WebSocketChannel(Document* document, WebSocketChannelClient* client)
- : m_document(document)
- , m_client(client)
</del><ins>+WebSocketChannel::WebSocketChannel(Document& document, WebSocketChannelClient& client)
+ : m_document(&document)
+ , m_client(&client)
</ins><span class="cx"> , m_resumeTimer(*this, &WebSocketChannel::resumeTimerFired)
</span><span class="cx"> , m_suspended(false)
</span><span class="cx"> , m_closing(false)
</span><span class="lines">@@ -81,9 +81,7 @@
</span><span class="cx"> , m_outgoingFrameQueueStatus(OutgoingFrameQueueOpen)
</span><span class="cx"> , m_blobLoaderStatus(BlobLoaderNotStarted)
</span><span class="cx"> {
</span><del>- ASSERT(m_document);
-
- if (Page* page = m_document->page())
</del><ins>+ if (Page* page = document.page())
</ins><span class="cx"> m_identifier = page->progress().createUniqueIdentifier();
</span><span class="cx">
</span><span class="cx"> LOG(Network, "WebSocketChannel %p ctor, identifier %lu", this, m_identifier);
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebsocketsWebSocketChannelh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/websockets/WebSocketChannel.h (201836 => 201837)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/websockets/WebSocketChannel.h        2016-06-08 22:22:49 UTC (rev 201836)
+++ trunk/Source/WebCore/Modules/websockets/WebSocketChannel.h        2016-06-08 22:27:46 UTC (rev 201837)
</span><span class="lines">@@ -59,7 +59,7 @@
</span><span class="cx"> {
</span><span class="cx"> WTF_MAKE_FAST_ALLOCATED;
</span><span class="cx"> public:
</span><del>- static Ref<WebSocketChannel> create(Document* document, WebSocketChannelClient* client) { return adoptRef(*new WebSocketChannel(document, client)); }
</del><ins>+ static Ref<WebSocketChannel> create(Document& document, WebSocketChannelClient& client) { return adoptRef(*new WebSocketChannel(document, client)); }
</ins><span class="cx"> virtual ~WebSocketChannel();
</span><span class="cx">
</span><span class="cx"> bool send(const char* data, int length);
</span><span class="lines">@@ -122,7 +122,7 @@
</span><span class="cx"> void derefThreadableWebSocketChannel() override { deref(); }
</span><span class="cx">
</span><span class="cx"> private:
</span><del>- WebSocketChannel(Document*, WebSocketChannelClient*);
</del><ins>+ WebSocketChannel(Document&, WebSocketChannelClient&);
</ins><span class="cx">
</span><span class="cx"> bool appendToBuffer(const char* data, size_t len);
</span><span class="cx"> void skipBuffer(size_t len);
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebsocketsWorkerThreadableWebSocketChannelcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.cpp (201836 => 201837)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.cpp        2016-06-08 22:22:49 UTC (rev 201836)
+++ trunk/Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.cpp        2016-06-08 22:27:46 UTC (rev 201837)
</span><span class="lines">@@ -46,15 +46,14 @@
</span><span class="cx"> #include "WorkerThread.h"
</span><span class="cx"> #include <runtime/ArrayBuffer.h>
</span><span class="cx"> #include <wtf/MainThread.h>
</span><del>-#include <wtf/PassRefPtr.h>
</del><span class="cx"> #include <wtf/text/WTFString.h>
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><del>-WorkerThreadableWebSocketChannel::WorkerThreadableWebSocketChannel(WorkerGlobalScope* context, WebSocketChannelClient* client, const String& taskMode)
</del><ins>+WorkerThreadableWebSocketChannel::WorkerThreadableWebSocketChannel(WorkerGlobalScope& context, WebSocketChannelClient& client, const String& taskMode)
</ins><span class="cx"> : m_workerGlobalScope(context)
</span><span class="cx"> , m_workerClientWrapper(ThreadableWebSocketChannelClientWrapper::create(context, client))
</span><del>- , m_bridge(Bridge::create(m_workerClientWrapper, m_workerGlobalScope, taskMode))
</del><ins>+ , m_bridge(Bridge::create(m_workerClientWrapper.copyRef(), m_workerGlobalScope.copyRef(), taskMode))
</ins><span class="cx"> {
</span><span class="cx"> m_bridge->initialize();
</span><span class="cx"> }
</span><span class="lines">@@ -73,13 +72,11 @@
</span><span class="cx">
</span><span class="cx"> String WorkerThreadableWebSocketChannel::subprotocol()
</span><span class="cx"> {
</span><del>- ASSERT(m_workerClientWrapper);
</del><span class="cx"> return m_workerClientWrapper->subprotocol();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> String WorkerThreadableWebSocketChannel::extensions()
</span><span class="cx"> {
</span><del>- ASSERT(m_workerClientWrapper);
</del><span class="cx"> return m_workerClientWrapper->extensions();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -143,10 +140,10 @@
</span><span class="cx"> m_bridge->resume();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-WorkerThreadableWebSocketChannel::Peer::Peer(RefPtr<ThreadableWebSocketChannelClientWrapper>&& clientWrapper, WorkerLoaderProxy& loaderProxy, ScriptExecutionContext* context, const String& taskMode)
</del><ins>+WorkerThreadableWebSocketChannel::Peer::Peer(Ref<ThreadableWebSocketChannelClientWrapper>&& clientWrapper, WorkerLoaderProxy& loaderProxy, ScriptExecutionContext& context, const String& taskMode)
</ins><span class="cx"> : m_workerClientWrapper(WTFMove(clientWrapper))
</span><span class="cx"> , m_loaderProxy(loaderProxy)
</span><del>- , m_mainWebSocketChannel(WebSocketChannel::create(downcast<Document>(context), this))
</del><ins>+ , m_mainWebSocketChannel(WebSocketChannel::create(downcast<Document>(context), *this))
</ins><span class="cx"> , m_taskMode(taskMode)
</span><span class="cx"> {
</span><span class="cx"> ASSERT(isMainThread());
</span><span class="lines">@@ -170,12 +167,11 @@
</span><span class="cx"> void WorkerThreadableWebSocketChannel::Peer::send(const String& message)
</span><span class="cx"> {
</span><span class="cx"> ASSERT(isMainThread());
</span><del>- if (!m_mainWebSocketChannel || !m_workerClientWrapper)
</del><ins>+ if (!m_mainWebSocketChannel)
</ins><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> ThreadableWebSocketChannel::SendResult sendRequestResult = m_mainWebSocketChannel->send(message);
</span><del>- RefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper = m_workerClientWrapper;
- m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper = WTFMove(workerClientWrapper), sendRequestResult] (ScriptExecutionContext&) {
</del><ins>+ m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper = m_workerClientWrapper.copyRef(), sendRequestResult](ScriptExecutionContext&) mutable {
</ins><span class="cx"> workerClientWrapper->setSendRequestResult(sendRequestResult);
</span><span class="cx"> }, m_taskMode);
</span><span class="cx"> }
</span><span class="lines">@@ -183,12 +179,11 @@
</span><span class="cx"> void WorkerThreadableWebSocketChannel::Peer::send(const ArrayBuffer& binaryData)
</span><span class="cx"> {
</span><span class="cx"> ASSERT(isMainThread());
</span><del>- if (!m_mainWebSocketChannel || !m_workerClientWrapper)
</del><ins>+ if (!m_mainWebSocketChannel)
</ins><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> ThreadableWebSocketChannel::SendResult sendRequestResult = m_mainWebSocketChannel->send(binaryData, 0, binaryData.byteLength());
</span><del>- RefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper = m_workerClientWrapper;
- m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper = WTFMove(workerClientWrapper), sendRequestResult] (ScriptExecutionContext&) {
</del><ins>+ m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper = m_workerClientWrapper.copyRef(), sendRequestResult](ScriptExecutionContext&) mutable {
</ins><span class="cx"> workerClientWrapper->setSendRequestResult(sendRequestResult);
</span><span class="cx"> }, m_taskMode);
</span><span class="cx"> }
</span><span class="lines">@@ -196,12 +191,11 @@
</span><span class="cx"> void WorkerThreadableWebSocketChannel::Peer::send(Blob& binaryData)
</span><span class="cx"> {
</span><span class="cx"> ASSERT(isMainThread());
</span><del>- if (!m_mainWebSocketChannel || !m_workerClientWrapper)
</del><ins>+ if (!m_mainWebSocketChannel)
</ins><span class="cx"> return;
</span><span class="cx">
</span><span class="cx"> ThreadableWebSocketChannel::SendResult sendRequestResult = m_mainWebSocketChannel->send(binaryData);
</span><del>- RefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper = m_workerClientWrapper;
- m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper = WTFMove(workerClientWrapper), sendRequestResult] (ScriptExecutionContext&) {
</del><ins>+ m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper = m_workerClientWrapper.copyRef(), sendRequestResult](ScriptExecutionContext&) mutable {
</ins><span class="cx"> workerClientWrapper->setSendRequestResult(sendRequestResult);
</span><span class="cx"> }, m_taskMode);
</span><span class="cx"> }
</span><span class="lines">@@ -209,12 +203,11 @@
</span><span class="cx"> void WorkerThreadableWebSocketChannel::Peer::bufferedAmount()
</span><span class="cx"> {
</span><span class="cx"> ASSERT(isMainThread());
</span><del>- if (!m_mainWebSocketChannel || !m_workerClientWrapper)
</del><ins>+ if (!m_mainWebSocketChannel)
</ins><span class="cx"> return;
</span><span class="cx">
</span><del>- RefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper = m_workerClientWrapper;
</del><span class="cx"> unsigned long bufferedAmount = m_mainWebSocketChannel->bufferedAmount();
</span><del>- m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper = WTFMove(workerClientWrapper), bufferedAmount] (ScriptExecutionContext& context) {
</del><ins>+ m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper = m_workerClientWrapper.copyRef(), bufferedAmount](ScriptExecutionContext& context) mutable {
</ins><span class="cx"> ASSERT_UNUSED(context, context.isWorkerGlobalScope());
</span><span class="cx"> workerClientWrapper->setBufferedAmount(bufferedAmount);
</span><span class="cx"> }, m_taskMode);
</span><span class="lines">@@ -265,10 +258,9 @@
</span><span class="cx"> {
</span><span class="cx"> ASSERT(isMainThread());
</span><span class="cx">
</span><del>- RefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper = m_workerClientWrapper;
</del><span class="cx"> String subprotocol = m_mainWebSocketChannel->subprotocol();
</span><span class="cx"> String extensions = m_mainWebSocketChannel->extensions();
</span><del>- m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper = WTFMove(workerClientWrapper), subprotocol = subprotocol.isolatedCopy(), extensions = extensions.isolatedCopy()] (ScriptExecutionContext& context) {
</del><ins>+ m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper = m_workerClientWrapper.copyRef(), subprotocol = subprotocol.isolatedCopy(), extensions = extensions.isolatedCopy()](ScriptExecutionContext& context) mutable {
</ins><span class="cx"> ASSERT_UNUSED(context, context.isWorkerGlobalScope());
</span><span class="cx"> workerClientWrapper->setSubprotocol(subprotocol);
</span><span class="cx"> workerClientWrapper->setExtensions(extensions);
</span><span class="lines">@@ -280,8 +272,7 @@
</span><span class="cx"> {
</span><span class="cx"> ASSERT(isMainThread());
</span><span class="cx">
</span><del>- RefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper = m_workerClientWrapper;
- m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper = WTFMove(workerClientWrapper), message = message.isolatedCopy()] (ScriptExecutionContext& context) {
</del><ins>+ m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper = m_workerClientWrapper.copyRef(), message = message.isolatedCopy()](ScriptExecutionContext& context) mutable {
</ins><span class="cx"> ASSERT_UNUSED(context, context.isWorkerGlobalScope());
</span><span class="cx"> workerClientWrapper->didReceiveMessage(message);
</span><span class="cx"> }, m_taskMode);
</span><span class="lines">@@ -291,8 +282,7 @@
</span><span class="cx"> {
</span><span class="cx"> ASSERT(isMainThread());
</span><span class="cx">
</span><del>- RefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper = m_workerClientWrapper;
- m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper = WTFMove(workerClientWrapper), binaryData = WTFMove(binaryData)] (ScriptExecutionContext& context) mutable {
</del><ins>+ m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper = m_workerClientWrapper.copyRef(), binaryData = WTFMove(binaryData)](ScriptExecutionContext& context) mutable {
</ins><span class="cx"> ASSERT_UNUSED(context, context.isWorkerGlobalScope());
</span><span class="cx"> workerClientWrapper->didReceiveBinaryData(WTFMove(binaryData));
</span><span class="cx"> }, m_taskMode);
</span><span class="lines">@@ -302,8 +292,7 @@
</span><span class="cx"> {
</span><span class="cx"> ASSERT(isMainThread());
</span><span class="cx">
</span><del>- RefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper = m_workerClientWrapper;
- m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper = WTFMove(workerClientWrapper), bufferedAmount] (ScriptExecutionContext& context) {
</del><ins>+ m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper = m_workerClientWrapper.copyRef(), bufferedAmount](ScriptExecutionContext& context) mutable {
</ins><span class="cx"> ASSERT_UNUSED(context, context.isWorkerGlobalScope());
</span><span class="cx"> workerClientWrapper->didUpdateBufferedAmount(bufferedAmount);
</span><span class="cx"> }, m_taskMode);
</span><span class="lines">@@ -313,8 +302,7 @@
</span><span class="cx"> {
</span><span class="cx"> ASSERT(isMainThread());
</span><span class="cx">
</span><del>- RefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper = m_workerClientWrapper;
- m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper = WTFMove(workerClientWrapper)] (ScriptExecutionContext& context) {
</del><ins>+ m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper = m_workerClientWrapper.copyRef()](ScriptExecutionContext& context) mutable {
</ins><span class="cx"> ASSERT_UNUSED(context, context.isWorkerGlobalScope());
</span><span class="cx"> workerClientWrapper->didStartClosingHandshake();
</span><span class="cx"> }, m_taskMode);
</span><span class="lines">@@ -325,8 +313,7 @@
</span><span class="cx"> ASSERT(isMainThread());
</span><span class="cx"> m_mainWebSocketChannel = nullptr;
</span><span class="cx">
</span><del>- RefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper = m_workerClientWrapper;
- m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper = WTFMove(workerClientWrapper), unhandledBufferedAmount, closingHandshakeCompletion, code, reason = reason.isolatedCopy()] (ScriptExecutionContext& context) {
</del><ins>+ m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper = m_workerClientWrapper.copyRef(), unhandledBufferedAmount, closingHandshakeCompletion, code, reason = reason.isolatedCopy()](ScriptExecutionContext& context) mutable {
</ins><span class="cx"> ASSERT_UNUSED(context, context.isWorkerGlobalScope());
</span><span class="cx"> workerClientWrapper->didClose(unhandledBufferedAmount, closingHandshakeCompletion, code, reason);
</span><span class="cx"> }, m_taskMode);
</span><span class="lines">@@ -336,21 +323,19 @@
</span><span class="cx"> {
</span><span class="cx"> ASSERT(isMainThread());
</span><span class="cx">
</span><del>- RefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper = m_workerClientWrapper;
- m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper = WTFMove(workerClientWrapper)] (ScriptExecutionContext& context) {
</del><ins>+ m_loaderProxy.postTaskForModeToWorkerGlobalScope([workerClientWrapper = m_workerClientWrapper.copyRef()](ScriptExecutionContext& context) mutable {
</ins><span class="cx"> ASSERT_UNUSED(context, context.isWorkerGlobalScope());
</span><span class="cx"> workerClientWrapper->didReceiveMessageError();
</span><span class="cx"> }, m_taskMode);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-WorkerThreadableWebSocketChannel::Bridge::Bridge(PassRefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, PassRefPtr<WorkerGlobalScope> workerGlobalScope, const String& taskMode)
- : m_workerClientWrapper(workerClientWrapper)
- , m_workerGlobalScope(workerGlobalScope)
</del><ins>+WorkerThreadableWebSocketChannel::Bridge::Bridge(Ref<ThreadableWebSocketChannelClientWrapper>&& workerClientWrapper, Ref<WorkerGlobalScope>&& workerGlobalScope, const String& taskMode)
+ : m_workerClientWrapper(WTFMove(workerClientWrapper))
+ , m_workerGlobalScope(WTFMove(workerGlobalScope))
</ins><span class="cx"> , m_loaderProxy(m_workerGlobalScope->thread().workerLoaderProxy())
</span><span class="cx"> , m_taskMode(taskMode)
</span><span class="cx"> , m_peer(nullptr)
</span><span class="cx"> {
</span><del>- ASSERT(m_workerClientWrapper.get());
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> WorkerThreadableWebSocketChannel::Bridge::~Bridge()
</span><span class="lines">@@ -358,21 +343,18 @@
</span><span class="cx"> disconnect();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void WorkerThreadableWebSocketChannel::Bridge::mainThreadInitialize(ScriptExecutionContext& context, WorkerLoaderProxy* loaderProxy, RefPtr<ThreadableWebSocketChannelClientWrapper>&& passedClientWrapper, const String& taskMode)
</del><ins>+void WorkerThreadableWebSocketChannel::Bridge::mainThreadInitialize(ScriptExecutionContext& context, WorkerLoaderProxy& loaderProxy, Ref<ThreadableWebSocketChannelClientWrapper>&& clientWrapper, const String& taskMode)
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(isMainThread());
</span><del>- ASSERT_UNUSED(context, context.isDocument());
</del><ins>+ ASSERT(context.isDocument());
</ins><span class="cx">
</span><del>- RefPtr<ThreadableWebSocketChannelClientWrapper> clientWrapper = WTFMove(passedClientWrapper);
-
- auto peer = std::make_unique<Peer>(clientWrapper.copyRef(), *loaderProxy, &context, taskMode);
- bool sent = loaderProxy->postTaskForModeToWorkerGlobalScope({
</del><ins>+ bool sent = loaderProxy.postTaskForModeToWorkerGlobalScope({
</ins><span class="cx"> ScriptExecutionContext::Task::CleanupTask,
</span><del>- [clientWrapper, loaderProxy, peer = WTFMove(peer)] (ScriptExecutionContext& context) mutable {
</del><ins>+ [clientWrapper = clientWrapper.copyRef(), &loaderProxy, peer = std::make_unique<Peer>(clientWrapper.copyRef(), loaderProxy, context, taskMode)](ScriptExecutionContext& context) mutable {
</ins><span class="cx"> ASSERT_UNUSED(context, context.isWorkerGlobalScope());
</span><span class="cx"> if (clientWrapper->failedWebSocketChannelCreation()) {
</span><span class="cx"> // If Bridge::initialize() quitted earlier, we need to kick mainThreadDestroy() to delete the peer.
</span><del>- loaderProxy->postTaskToLoader([peer = WTFMove(peer)] (ScriptExecutionContext& context) {
</del><ins>+ loaderProxy.postTaskToLoader([peer = WTFMove(peer)](ScriptExecutionContext& context) {
</ins><span class="cx"> ASSERT(isMainThread());
</span><span class="cx"> ASSERT_UNUSED(context, context.isDocument());
</span><span class="cx"> });
</span><span class="lines">@@ -391,8 +373,7 @@
</span><span class="cx"> setMethodNotCompleted();
</span><span class="cx"> Ref<Bridge> protectedThis(*this);
</span><span class="cx">
</span><del>- RefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper = m_workerClientWrapper;
- m_loaderProxy.postTaskToLoader([loaderProxy = &m_loaderProxy, workerClientWrapper = WTFMove(workerClientWrapper), taskMode = m_taskMode.isolatedCopy()] (ScriptExecutionContext& context) mutable {
</del><ins>+ m_loaderProxy.postTaskToLoader([&loaderProxy = m_loaderProxy, workerClientWrapper = m_workerClientWrapper.copyRef(), taskMode = m_taskMode.isolatedCopy()](ScriptExecutionContext& context) mutable {
</ins><span class="cx"> mainThreadInitialize(context, loaderProxy, WTFMove(workerClientWrapper), taskMode);
</span><span class="cx"> });
</span><span class="cx"> waitForMethodCompletion();
</span><span class="lines">@@ -405,11 +386,10 @@
</span><span class="cx">
</span><span class="cx"> void WorkerThreadableWebSocketChannel::Bridge::connect(const URL& url, const String& protocol)
</span><span class="cx"> {
</span><del>- ASSERT(m_workerClientWrapper);
</del><span class="cx"> if (!m_peer)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- m_loaderProxy.postTaskToLoader([peer = m_peer, url = url.isolatedCopy(), protocol = protocol.isolatedCopy()] (ScriptExecutionContext& context) {
</del><ins>+ m_loaderProxy.postTaskToLoader([peer = m_peer, url = url.isolatedCopy(), protocol = protocol.isolatedCopy()](ScriptExecutionContext& context) {
</ins><span class="cx"> ASSERT(isMainThread());
</span><span class="cx"> ASSERT_UNUSED(context, context.isDocument());
</span><span class="cx"> ASSERT(peer);
</span><span class="lines">@@ -420,11 +400,11 @@
</span><span class="cx">
</span><span class="cx"> ThreadableWebSocketChannel::SendResult WorkerThreadableWebSocketChannel::Bridge::send(const String& message)
</span><span class="cx"> {
</span><del>- if (!m_workerClientWrapper || !m_peer)
</del><ins>+ if (!m_peer)
</ins><span class="cx"> return ThreadableWebSocketChannel::SendFail;
</span><span class="cx"> setMethodNotCompleted();
</span><span class="cx">
</span><del>- m_loaderProxy.postTaskToLoader([peer = m_peer, message = message.isolatedCopy()] (ScriptExecutionContext& context) {
</del><ins>+ m_loaderProxy.postTaskToLoader([peer = m_peer, message = message.isolatedCopy()](ScriptExecutionContext& context) {
</ins><span class="cx"> ASSERT(isMainThread());
</span><span class="cx"> ASSERT_UNUSED(context, context.isDocument());
</span><span class="cx"> ASSERT(peer);
</span><span class="lines">@@ -434,15 +414,12 @@
</span><span class="cx">
</span><span class="cx"> Ref<Bridge> protectedThis(*this);
</span><span class="cx"> waitForMethodCompletion();
</span><del>- ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapper.get();
- if (!clientWrapper)
- return ThreadableWebSocketChannel::SendFail;
- return clientWrapper->sendRequestResult();
</del><ins>+ return m_workerClientWrapper->sendRequestResult();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> ThreadableWebSocketChannel::SendResult WorkerThreadableWebSocketChannel::Bridge::send(const ArrayBuffer& binaryData, unsigned byteOffset, unsigned byteLength)
</span><span class="cx"> {
</span><del>- if (!m_workerClientWrapper || !m_peer)
</del><ins>+ if (!m_peer)
</ins><span class="cx"> return ThreadableWebSocketChannel::SendFail;
</span><span class="cx">
</span><span class="cx"> // ArrayBuffer isn't thread-safe, hence the content of ArrayBuffer is copied into Vector<char>.
</span><span class="lines">@@ -451,7 +428,7 @@
</span><span class="cx"> memcpy(data.data(), static_cast<const char*>(binaryData.data()) + byteOffset, byteLength);
</span><span class="cx"> setMethodNotCompleted();
</span><span class="cx">
</span><del>- m_loaderProxy.postTaskToLoader([peer = m_peer, data = WTFMove(data)] (ScriptExecutionContext& context) {
</del><ins>+ m_loaderProxy.postTaskToLoader([peer = m_peer, data = WTFMove(data)](ScriptExecutionContext& context) {
</ins><span class="cx"> ASSERT(isMainThread());
</span><span class="cx"> ASSERT_UNUSED(context, context.isDocument());
</span><span class="cx"> ASSERT(peer);
</span><span class="lines">@@ -462,19 +439,16 @@
</span><span class="cx">
</span><span class="cx"> Ref<Bridge> protectedThis(*this);
</span><span class="cx"> waitForMethodCompletion();
</span><del>- ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapper.get();
- if (!clientWrapper)
- return ThreadableWebSocketChannel::SendFail;
- return clientWrapper->sendRequestResult();
</del><ins>+ return m_workerClientWrapper->sendRequestResult();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> ThreadableWebSocketChannel::SendResult WorkerThreadableWebSocketChannel::Bridge::send(Blob& binaryData)
</span><span class="cx"> {
</span><del>- if (!m_workerClientWrapper || !m_peer)
</del><ins>+ if (!m_peer)
</ins><span class="cx"> return ThreadableWebSocketChannel::SendFail;
</span><span class="cx"> setMethodNotCompleted();
</span><span class="cx">
</span><del>- m_loaderProxy.postTaskToLoader([peer = m_peer, url = binaryData.url().isolatedCopy(), type = binaryData.type().isolatedCopy(), size = binaryData.size()] (ScriptExecutionContext& context) {
</del><ins>+ m_loaderProxy.postTaskToLoader([peer = m_peer, url = binaryData.url().isolatedCopy(), type = binaryData.type().isolatedCopy(), size = binaryData.size()](ScriptExecutionContext& context) {
</ins><span class="cx"> ASSERT(isMainThread());
</span><span class="cx"> ASSERT_UNUSED(context, context.isDocument());
</span><span class="cx"> ASSERT(peer);
</span><span class="lines">@@ -484,19 +458,16 @@
</span><span class="cx">
</span><span class="cx"> Ref<Bridge> protectedThis(*this);
</span><span class="cx"> waitForMethodCompletion();
</span><del>- ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapper.get();
- if (!clientWrapper)
- return ThreadableWebSocketChannel::SendFail;
- return clientWrapper->sendRequestResult();
</del><ins>+ return m_workerClientWrapper->sendRequestResult();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> unsigned long WorkerThreadableWebSocketChannel::Bridge::bufferedAmount()
</span><span class="cx"> {
</span><del>- if (!m_workerClientWrapper || !m_peer)
</del><ins>+ if (!m_peer)
</ins><span class="cx"> return 0;
</span><span class="cx"> setMethodNotCompleted();
</span><span class="cx">
</span><del>- m_loaderProxy.postTaskToLoader([peer = m_peer] (ScriptExecutionContext& context) {
</del><ins>+ m_loaderProxy.postTaskToLoader([peer = m_peer](ScriptExecutionContext& context) {
</ins><span class="cx"> ASSERT(isMainThread());
</span><span class="cx"> ASSERT_UNUSED(context, context.isDocument());
</span><span class="cx"> ASSERT(peer);
</span><span class="lines">@@ -506,10 +477,7 @@
</span><span class="cx">
</span><span class="cx"> Ref<Bridge> protectedThis(*this);
</span><span class="cx"> waitForMethodCompletion();
</span><del>- ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapper.get();
- if (clientWrapper)
- return clientWrapper->bufferedAmount();
- return 0;
</del><ins>+ return m_workerClientWrapper->bufferedAmount();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void WorkerThreadableWebSocketChannel::Bridge::close(int code, const String& reason)
</span><span class="lines">@@ -517,7 +485,7 @@
</span><span class="cx"> if (!m_peer)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- m_loaderProxy.postTaskToLoader([peer = m_peer, code, reason = reason.isolatedCopy()] (ScriptExecutionContext& context) {
</del><ins>+ m_loaderProxy.postTaskToLoader([peer = m_peer, code, reason = reason.isolatedCopy()](ScriptExecutionContext& context) {
</ins><span class="cx"> ASSERT(isMainThread());
</span><span class="cx"> ASSERT_UNUSED(context, context.isDocument());
</span><span class="cx"> ASSERT(peer);
</span><span class="lines">@@ -531,7 +499,7 @@
</span><span class="cx"> if (!m_peer)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- m_loaderProxy.postTaskToLoader([peer = m_peer, reason = reason.isolatedCopy()] (ScriptExecutionContext& context) {
</del><ins>+ m_loaderProxy.postTaskToLoader([peer = m_peer, reason = reason.isolatedCopy()](ScriptExecutionContext& context) {
</ins><span class="cx"> ASSERT(isMainThread());
</span><span class="cx"> ASSERT_UNUSED(context, context.isDocument());
</span><span class="cx"> ASSERT(peer);
</span><span class="lines">@@ -544,7 +512,7 @@
</span><span class="cx"> {
</span><span class="cx"> clearClientWrapper();
</span><span class="cx"> if (m_peer) {
</span><del>- m_loaderProxy.postTaskToLoader([peer = std::unique_ptr<Peer>(m_peer)] (ScriptExecutionContext& context) {
</del><ins>+ m_loaderProxy.postTaskToLoader([peer = std::unique_ptr<Peer>(m_peer)](ScriptExecutionContext& context) {
</ins><span class="cx"> ASSERT(isMainThread());
</span><span class="cx"> ASSERT_UNUSED(context, context.isDocument());
</span><span class="cx"> });
</span><span class="lines">@@ -558,7 +526,7 @@
</span><span class="cx"> if (!m_peer)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- m_loaderProxy.postTaskToLoader([peer = m_peer] (ScriptExecutionContext& context) {
</del><ins>+ m_loaderProxy.postTaskToLoader([peer = m_peer](ScriptExecutionContext& context) {
</ins><span class="cx"> ASSERT(isMainThread());
</span><span class="cx"> ASSERT_UNUSED(context, context.isDocument());
</span><span class="cx"> ASSERT(peer);
</span><span class="lines">@@ -572,7 +540,7 @@
</span><span class="cx"> if (!m_peer)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- m_loaderProxy.postTaskToLoader([peer = m_peer] (ScriptExecutionContext& context) {
</del><ins>+ m_loaderProxy.postTaskToLoader([peer = m_peer](ScriptExecutionContext& context) {
</ins><span class="cx"> ASSERT(isMainThread());
</span><span class="cx"> ASSERT_UNUSED(context, context.isDocument());
</span><span class="cx"> ASSERT(peer);
</span><span class="lines">@@ -588,7 +556,6 @@
</span><span class="cx">
</span><span class="cx"> void WorkerThreadableWebSocketChannel::Bridge::setMethodNotCompleted()
</span><span class="cx"> {
</span><del>- ASSERT(m_workerClientWrapper);
</del><span class="cx"> m_workerClientWrapper->clearSyncMethodDone();
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -600,10 +567,10 @@
</span><span class="cx"> return;
</span><span class="cx"> WorkerRunLoop& runLoop = m_workerGlobalScope->thread().runLoop();
</span><span class="cx"> MessageQueueWaitResult result = MessageQueueMessageReceived;
</span><del>- ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapper.get();
</del><ins>+ ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapper.ptr();
</ins><span class="cx"> while (m_workerGlobalScope && clientWrapper && !clientWrapper->syncMethodDone() && result != MessageQueueTerminated) {
</span><span class="cx"> result = runLoop.runInMode(m_workerGlobalScope.get(), m_taskMode); // May cause this bridge to get disconnected, which makes m_workerGlobalScope become null.
</span><del>- clientWrapper = m_workerClientWrapper.get();
</del><ins>+ clientWrapper = m_workerClientWrapper.ptr();
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebsocketsWorkerThreadableWebSocketChannelh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.h (201836 => 201837)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.h        2016-06-08 22:22:49 UTC (rev 201836)
+++ trunk/Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.h        2016-06-08 22:27:46 UTC (rev 201837)
</span><span class="lines">@@ -28,8 +28,7 @@
</span><span class="cx"> * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx"> */
</span><span class="cx">
</span><del>-#ifndef WorkerThreadableWebSocketChannel_h
-#define WorkerThreadableWebSocketChannel_h
</del><ins>+#pragma once
</ins><span class="cx">
</span><span class="cx"> #if ENABLE(WEB_SOCKETS)
</span><span class="cx">
</span><span class="lines">@@ -37,7 +36,6 @@
</span><span class="cx"> #include "WebSocketChannelClient.h"
</span><span class="cx"> #include "WorkerGlobalScope.h"
</span><span class="cx">
</span><del>-#include <wtf/PassRefPtr.h>
</del><span class="cx"> #include <wtf/RefCounted.h>
</span><span class="cx"> #include <wtf/RefPtr.h>
</span><span class="cx"> #include <wtf/Threading.h>
</span><span class="lines">@@ -55,7 +53,7 @@
</span><span class="cx"> class WorkerThreadableWebSocketChannel : public RefCounted<WorkerThreadableWebSocketChannel>, public ThreadableWebSocketChannel {
</span><span class="cx"> WTF_MAKE_FAST_ALLOCATED;
</span><span class="cx"> public:
</span><del>- static Ref<ThreadableWebSocketChannel> create(WorkerGlobalScope* workerGlobalScope, WebSocketChannelClient* client, const String& taskMode)
</del><ins>+ static Ref<ThreadableWebSocketChannel> create(WorkerGlobalScope& workerGlobalScope, WebSocketChannelClient& client, const String& taskMode)
</ins><span class="cx"> {
</span><span class="cx"> return adoptRef(*new WorkerThreadableWebSocketChannel(workerGlobalScope, client, taskMode));
</span><span class="cx"> }
</span><span class="lines">@@ -80,7 +78,7 @@
</span><span class="cx"> class Peer : public WebSocketChannelClient {
</span><span class="cx"> WTF_MAKE_NONCOPYABLE(Peer); WTF_MAKE_FAST_ALLOCATED;
</span><span class="cx"> public:
</span><del>- Peer(RefPtr<ThreadableWebSocketChannelClientWrapper>&&, WorkerLoaderProxy&, ScriptExecutionContext*, const String& taskMode);
</del><ins>+ Peer(Ref<ThreadableWebSocketChannelClientWrapper>&&, WorkerLoaderProxy&, ScriptExecutionContext&, const String& taskMode);
</ins><span class="cx"> ~Peer();
</span><span class="cx">
</span><span class="cx"> void connect(const URL&, const String& protocol);
</span><span class="lines">@@ -104,7 +102,7 @@
</span><span class="cx"> void didReceiveMessageError() override;
</span><span class="cx">
</span><span class="cx"> private:
</span><del>- RefPtr<ThreadableWebSocketChannelClientWrapper> m_workerClientWrapper;
</del><ins>+ Ref<ThreadableWebSocketChannelClientWrapper> m_workerClientWrapper;
</ins><span class="cx"> WorkerLoaderProxy& m_loaderProxy;
</span><span class="cx"> RefPtr<ThreadableWebSocketChannel> m_mainWebSocketChannel;
</span><span class="cx"> String m_taskMode;
</span><span class="lines">@@ -121,9 +119,9 @@
</span><span class="cx"> // Bridge for Peer. Running on the worker thread.
</span><span class="cx"> class Bridge : public RefCounted<Bridge> {
</span><span class="cx"> public:
</span><del>- static Ref<Bridge> create(PassRefPtr<ThreadableWebSocketChannelClientWrapper> workerClientWrapper, PassRefPtr<WorkerGlobalScope> workerGlobalScope, const String& taskMode)
</del><ins>+ static Ref<Bridge> create(Ref<ThreadableWebSocketChannelClientWrapper>&& workerClientWrapper, Ref<WorkerGlobalScope>&& workerGlobalScope, const String& taskMode)
</ins><span class="cx"> {
</span><del>- return adoptRef(*new Bridge(workerClientWrapper, workerGlobalScope, taskMode));
</del><ins>+ return adoptRef(*new Bridge(WTFMove(workerClientWrapper), WTFMove(workerGlobalScope), taskMode));
</ins><span class="cx"> }
</span><span class="cx"> ~Bridge();
</span><span class="cx"> void initialize();
</span><span class="lines">@@ -142,12 +140,12 @@
</span><span class="cx"> using RefCounted<Bridge>::deref;
</span><span class="cx">
</span><span class="cx"> private:
</span><del>- Bridge(PassRefPtr<ThreadableWebSocketChannelClientWrapper>, PassRefPtr<WorkerGlobalScope>, const String& taskMode);
</del><ins>+ Bridge(Ref<ThreadableWebSocketChannelClientWrapper>&&, Ref<WorkerGlobalScope>&&, const String& taskMode);
</ins><span class="cx">
</span><del>- static void setWebSocketChannel(ScriptExecutionContext*, Bridge* thisPtr, Peer*, PassRefPtr<ThreadableWebSocketChannelClientWrapper>);
</del><ins>+ static void setWebSocketChannel(ScriptExecutionContext*, Bridge* thisPtr, Peer*, Ref<ThreadableWebSocketChannelClientWrapper>&&);
</ins><span class="cx">
</span><span class="cx"> // Executed on the main thread to create a Peer for this bridge.
</span><del>- static void mainThreadInitialize(ScriptExecutionContext&, WorkerLoaderProxy*, RefPtr<ThreadableWebSocketChannelClientWrapper>&&, const String& taskMode);
</del><ins>+ static void mainThreadInitialize(ScriptExecutionContext&, WorkerLoaderProxy&, Ref<ThreadableWebSocketChannelClientWrapper>&&, const String& taskMode);
</ins><span class="cx">
</span><span class="cx"> // Executed on the worker context's thread.
</span><span class="cx"> void clearClientWrapper();
</span><span class="lines">@@ -155,24 +153,22 @@
</span><span class="cx"> void setMethodNotCompleted();
</span><span class="cx"> void waitForMethodCompletion();
</span><span class="cx">
</span><del>- RefPtr<ThreadableWebSocketChannelClientWrapper> m_workerClientWrapper;
</del><ins>+ Ref<ThreadableWebSocketChannelClientWrapper> m_workerClientWrapper;
</ins><span class="cx"> RefPtr<WorkerGlobalScope> m_workerGlobalScope;
</span><span class="cx"> WorkerLoaderProxy& m_loaderProxy;
</span><span class="cx"> String m_taskMode;
</span><span class="cx"> Peer* m_peer;
</span><span class="cx"> };
</span><span class="cx">
</span><del>- WorkerThreadableWebSocketChannel(WorkerGlobalScope*, WebSocketChannelClient*, const String& taskMode);
</del><ins>+ WorkerThreadableWebSocketChannel(WorkerGlobalScope&, WebSocketChannelClient&, const String& taskMode);
</ins><span class="cx">
</span><span class="cx"> class WorkerGlobalScopeDidInitializeTask;
</span><span class="cx">
</span><del>- RefPtr<WorkerGlobalScope> m_workerGlobalScope;
- RefPtr<ThreadableWebSocketChannelClientWrapper> m_workerClientWrapper;
</del><ins>+ Ref<WorkerGlobalScope> m_workerGlobalScope;
+ Ref<ThreadableWebSocketChannelClientWrapper> m_workerClientWrapper;
</ins><span class="cx"> RefPtr<Bridge> m_bridge;
</span><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> } // namespace WebCore
</span><span class="cx">
</span><span class="cx"> #endif // ENABLE(WEB_SOCKETS)
</span><del>-
-#endif // WorkerThreadableWebSocketChannel_h
</del></span></pre>
</div>
</div>
</body>
</html>