<!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>[168640] 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/168640">168640</a></dd>
<dt>Author</dt> <dd>zandobersek@gmail.com</dd>
<dt>Date</dt> <dd>2014-05-12 13:16:43 -0700 (Mon, 12 May 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Clean up CrossThreadTask
https://bugs.webkit.org/show_bug.cgi?id=132800

Reviewed by Darin Adler.

Remove the createCallbackTask overloads and the related CrossThreadTask helper classes.

Instead, have one simple CrossThreadTask class that derives from ScriptExecutionContext::Task.
Its templated constructor takes in the method and the variadic pack of parameters. The cross-thread
copies of the parameters are then bound to that method and the resulting bind expression is used to
initialize the base class. The bind expression is constructed with a placeholder for the
ScriptExecutionContext* parameter that's provided through ScriptExecutionContext::Task::performTask().

* Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
(WebCore::ThreadableWebSocketChannelClientWrapper::didConnect):
(WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessage):
(WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveBinaryData):
(WebCore::ThreadableWebSocketChannelClientWrapper::didUpdateBufferedAmount):
(WebCore::ThreadableWebSocketChannelClientWrapper::didStartClosingHandshake):
(WebCore::ThreadableWebSocketChannelClientWrapper::didClose):
(WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessageError):
(WebCore::ThreadableWebSocketChannelClientWrapper::processPendingTasks):
* Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
(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::mainThreadInitialize):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::initialize):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::connect):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::send):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::bufferedAmount):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::close):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::fail):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::disconnect):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::suspend):
(WebCore::WorkerThreadableWebSocketChannel::Bridge::resume):
* dom/CrossThreadTask.h:
(WebCore::CrossThreadTask::CrossThreadTask):
(WebCore::CrossThreadTask1::CrossThreadTask1): Deleted.
(WebCore::CrossThreadTask1::performTask): Deleted.
(WebCore::CrossThreadTask2::CrossThreadTask2): Deleted.
(WebCore::CrossThreadTask2::performTask): Deleted.
(WebCore::CrossThreadTask3::CrossThreadTask3): Deleted.
(WebCore::CrossThreadTask3::performTask): Deleted.
(WebCore::CrossThreadTask4::CrossThreadTask4): Deleted.
(WebCore::CrossThreadTask4::performTask): Deleted.
(WebCore::CrossThreadTask5::CrossThreadTask5): Deleted.
(WebCore::CrossThreadTask5::performTask): Deleted.
(WebCore::CrossThreadTask6::CrossThreadTask6): Deleted.
(WebCore::CrossThreadTask6::performTask): Deleted.
(WebCore::CrossThreadTask7::CrossThreadTask7): Deleted.
(WebCore::CrossThreadTask7::performTask): Deleted.
(WebCore::CrossThreadTask8::CrossThreadTask8): Deleted.
(WebCore::CrossThreadTask8::performTask): Deleted.
(WebCore::createCallbackTask): Deleted.
* fileapi/FileReader.cpp:
(WebCore::FileReader::abort):
* loader/WorkerThreadableLoader.cpp:
(WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
(WebCore::WorkerThreadableLoader::MainThreadBridge::destroy):
(WebCore::WorkerThreadableLoader::MainThreadBridge::cancel):
(WebCore::WorkerThreadableLoader::MainThreadBridge::didSendData):
(WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveResponse):
(WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveData):
(WebCore::WorkerThreadableLoader::MainThreadBridge::didFinishLoading):
(WebCore::WorkerThreadableLoader::MainThreadBridge::didFail):
(WebCore::WorkerThreadableLoader::MainThreadBridge::didFailAccessControlCheck):
(WebCore::WorkerThreadableLoader::MainThreadBridge::didFailRedirectCheck):
* loader/WorkerThreadableLoader.h:
* loader/cache/MemoryCache.cpp:
(WebCore::MemoryCache::removeRequestFromCache):
(WebCore::MemoryCache::removeRequestFromSessionCaches):
* workers/DefaultSharedWorkerRepository.cpp:
(WebCore::SharedWorkerProxy::postExceptionToWorkerObject):
(WebCore::SharedWorkerProxy::postConsoleMessageToWorkerObject):
* workers/WorkerMessagingProxy.cpp:
(WebCore::WorkerMessagingProxy::postConsoleMessageToWorkerObject):
(WebCore::WorkerMessagingProxy::workerObjectDestroyed):
(WebCore::WorkerMessagingProxy::connectToInspector):
(WebCore::WorkerMessagingProxy::disconnectFromInspector):
(WebCore::WorkerMessagingProxy::sendMessageToInspector):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModuleswebsocketsThreadableWebSocketChannelClientWrappercpp">trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebsocketsWorkerThreadableWebSocketChannelcpp">trunk/Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.cpp</a></li>
<li><a href="#trunkSourceWebCoredomCrossThreadTaskh">trunk/Source/WebCore/dom/CrossThreadTask.h</a></li>
<li><a href="#trunkSourceWebCorefileapiFileReadercpp">trunk/Source/WebCore/fileapi/FileReader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderWorkerThreadableLoadercpp">trunk/Source/WebCore/loader/WorkerThreadableLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderWorkerThreadableLoaderh">trunk/Source/WebCore/loader/WorkerThreadableLoader.h</a></li>
<li><a href="#trunkSourceWebCoreloadercacheMemoryCachecpp">trunk/Source/WebCore/loader/cache/MemoryCache.cpp</a></li>
<li><a href="#trunkSourceWebCoreworkersDefaultSharedWorkerRepositorycpp">trunk/Source/WebCore/workers/DefaultSharedWorkerRepository.cpp</a></li>
<li><a href="#trunkSourceWebCoreworkersWorkerMessagingProxycpp">trunk/Source/WebCore/workers/WorkerMessagingProxy.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (168639 => 168640)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-05-12 20:13:44 UTC (rev 168639)
+++ trunk/Source/WebCore/ChangeLog        2014-05-12 20:16:43 UTC (rev 168640)
</span><span class="lines">@@ -1,3 +1,93 @@
</span><ins>+2014-05-12  Zan Dobersek  &lt;zdobersek@igalia.com&gt;
+
+        Clean up CrossThreadTask
+        https://bugs.webkit.org/show_bug.cgi?id=132800
+
+        Reviewed by Darin Adler.
+
+        Remove the createCallbackTask overloads and the related CrossThreadTask helper classes.
+
+        Instead, have one simple CrossThreadTask class that derives from ScriptExecutionContext::Task.
+        Its templated constructor takes in the method and the variadic pack of parameters. The cross-thread
+        copies of the parameters are then bound to that method and the resulting bind expression is used to
+        initialize the base class. The bind expression is constructed with a placeholder for the
+        ScriptExecutionContext* parameter that's provided through ScriptExecutionContext::Task::performTask().
+
+        * Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp:
+        (WebCore::ThreadableWebSocketChannelClientWrapper::didConnect):
+        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessage):
+        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveBinaryData):
+        (WebCore::ThreadableWebSocketChannelClientWrapper::didUpdateBufferedAmount):
+        (WebCore::ThreadableWebSocketChannelClientWrapper::didStartClosingHandshake):
+        (WebCore::ThreadableWebSocketChannelClientWrapper::didClose):
+        (WebCore::ThreadableWebSocketChannelClientWrapper::didReceiveMessageError):
+        (WebCore::ThreadableWebSocketChannelClientWrapper::processPendingTasks):
+        * Modules/websockets/WorkerThreadableWebSocketChannel.cpp:
+        (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::mainThreadInitialize):
+        (WebCore::WorkerThreadableWebSocketChannel::Bridge::initialize):
+        (WebCore::WorkerThreadableWebSocketChannel::Bridge::connect):
+        (WebCore::WorkerThreadableWebSocketChannel::Bridge::send):
+        (WebCore::WorkerThreadableWebSocketChannel::Bridge::bufferedAmount):
+        (WebCore::WorkerThreadableWebSocketChannel::Bridge::close):
+        (WebCore::WorkerThreadableWebSocketChannel::Bridge::fail):
+        (WebCore::WorkerThreadableWebSocketChannel::Bridge::disconnect):
+        (WebCore::WorkerThreadableWebSocketChannel::Bridge::suspend):
+        (WebCore::WorkerThreadableWebSocketChannel::Bridge::resume):
+        * dom/CrossThreadTask.h:
+        (WebCore::CrossThreadTask::CrossThreadTask):
+        (WebCore::CrossThreadTask1::CrossThreadTask1): Deleted.
+        (WebCore::CrossThreadTask1::performTask): Deleted.
+        (WebCore::CrossThreadTask2::CrossThreadTask2): Deleted.
+        (WebCore::CrossThreadTask2::performTask): Deleted.
+        (WebCore::CrossThreadTask3::CrossThreadTask3): Deleted.
+        (WebCore::CrossThreadTask3::performTask): Deleted.
+        (WebCore::CrossThreadTask4::CrossThreadTask4): Deleted.
+        (WebCore::CrossThreadTask4::performTask): Deleted.
+        (WebCore::CrossThreadTask5::CrossThreadTask5): Deleted.
+        (WebCore::CrossThreadTask5::performTask): Deleted.
+        (WebCore::CrossThreadTask6::CrossThreadTask6): Deleted.
+        (WebCore::CrossThreadTask6::performTask): Deleted.
+        (WebCore::CrossThreadTask7::CrossThreadTask7): Deleted.
+        (WebCore::CrossThreadTask7::performTask): Deleted.
+        (WebCore::CrossThreadTask8::CrossThreadTask8): Deleted.
+        (WebCore::CrossThreadTask8::performTask): Deleted.
+        (WebCore::createCallbackTask): Deleted.
+        * fileapi/FileReader.cpp:
+        (WebCore::FileReader::abort):
+        * loader/WorkerThreadableLoader.cpp:
+        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge):
+        (WebCore::WorkerThreadableLoader::MainThreadBridge::destroy):
+        (WebCore::WorkerThreadableLoader::MainThreadBridge::cancel):
+        (WebCore::WorkerThreadableLoader::MainThreadBridge::didSendData):
+        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveResponse):
+        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveData):
+        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFinishLoading):
+        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFail):
+        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFailAccessControlCheck):
+        (WebCore::WorkerThreadableLoader::MainThreadBridge::didFailRedirectCheck):
+        * loader/WorkerThreadableLoader.h:
+        * loader/cache/MemoryCache.cpp:
+        (WebCore::MemoryCache::removeRequestFromCache):
+        (WebCore::MemoryCache::removeRequestFromSessionCaches):
+        * workers/DefaultSharedWorkerRepository.cpp:
+        (WebCore::SharedWorkerProxy::postExceptionToWorkerObject):
+        (WebCore::SharedWorkerProxy::postConsoleMessageToWorkerObject):
+        * workers/WorkerMessagingProxy.cpp:
+        (WebCore::WorkerMessagingProxy::postConsoleMessageToWorkerObject):
+        (WebCore::WorkerMessagingProxy::workerObjectDestroyed):
+        (WebCore::WorkerMessagingProxy::connectToInspector):
+        (WebCore::WorkerMessagingProxy::disconnectFromInspector):
+        (WebCore::WorkerMessagingProxy::sendMessageToInspector):
+
</ins><span class="cx"> 2014-05-12  Alex Christensen  &lt;achristensen@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Implement EXT_shader_texture_lod in WebGL.
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebsocketsThreadableWebSocketChannelClientWrappercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp (168639 => 168640)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp        2014-05-12 20:13:44 UTC (rev 168639)
+++ trunk/Source/WebCore/Modules/websockets/ThreadableWebSocketChannelClientWrapper.cpp        2014-05-12 20:16:43 UTC (rev 168640)
</span><span class="lines">@@ -32,7 +32,6 @@
</span><span class="cx"> #if ENABLE(WEB_SOCKETS)
</span><span class="cx"> #include &quot;ThreadableWebSocketChannelClientWrapper.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;CrossThreadCopier.h&quot;
</del><span class="cx"> #include &quot;CrossThreadTask.h&quot;
</span><span class="cx"> #include &quot;ScriptExecutionContext.h&quot;
</span><span class="cx"> #include &quot;WebSocketChannelClient.h&quot;
</span><span class="lines">@@ -157,49 +156,49 @@
</span><span class="cx"> 
</span><span class="cx"> void ThreadableWebSocketChannelClientWrapper::didConnect()
</span><span class="cx"> {
</span><del>-    m_pendingTasks.append(std::make_unique&lt;ScriptExecutionContext::Task&gt;(createCallbackTask(&amp;didConnectCallback, this)));
</del><ins>+    m_pendingTasks.append(std::make_unique&lt;CrossThreadTask&gt;(&amp;didConnectCallback, this));
</ins><span class="cx">     if (!m_suspended)
</span><span class="cx">         processPendingTasks();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ThreadableWebSocketChannelClientWrapper::didReceiveMessage(const String&amp; message)
</span><span class="cx"> {
</span><del>-    m_pendingTasks.append(std::make_unique&lt;ScriptExecutionContext::Task&gt;(createCallbackTask(&amp;didReceiveMessageCallback, this, message)));
</del><ins>+    m_pendingTasks.append(std::make_unique&lt;CrossThreadTask&gt;(&amp;didReceiveMessageCallback, this, message));
</ins><span class="cx">     if (!m_suspended)
</span><span class="cx">         processPendingTasks();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ThreadableWebSocketChannelClientWrapper::didReceiveBinaryData(PassOwnPtr&lt;Vector&lt;char&gt;&gt; binaryData)
</span><span class="cx"> {
</span><del>-    m_pendingTasks.append(std::make_unique&lt;ScriptExecutionContext::Task&gt;(createCallbackTask(&amp;didReceiveBinaryDataCallback, this, binaryData)));
</del><ins>+    m_pendingTasks.append(std::make_unique&lt;CrossThreadTask&gt;(&amp;didReceiveBinaryDataCallback, this, binaryData));
</ins><span class="cx">     if (!m_suspended)
</span><span class="cx">         processPendingTasks();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ThreadableWebSocketChannelClientWrapper::didUpdateBufferedAmount(unsigned long bufferedAmount)
</span><span class="cx"> {
</span><del>-    m_pendingTasks.append(std::make_unique&lt;ScriptExecutionContext::Task&gt;(createCallbackTask(&amp;didUpdateBufferedAmountCallback, this, bufferedAmount)));
</del><ins>+    m_pendingTasks.append(std::make_unique&lt;CrossThreadTask&gt;(&amp;didUpdateBufferedAmountCallback, this, bufferedAmount));
</ins><span class="cx">     if (!m_suspended)
</span><span class="cx">         processPendingTasks();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ThreadableWebSocketChannelClientWrapper::didStartClosingHandshake()
</span><span class="cx"> {
</span><del>-    m_pendingTasks.append(std::make_unique&lt;ScriptExecutionContext::Task&gt;(createCallbackTask(&amp;didStartClosingHandshakeCallback, this)));
</del><ins>+    m_pendingTasks.append(std::make_unique&lt;CrossThreadTask&gt;(&amp;didStartClosingHandshakeCallback, this));
</ins><span class="cx">     if (!m_suspended)
</span><span class="cx">         processPendingTasks();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ThreadableWebSocketChannelClientWrapper::didClose(unsigned long unhandledBufferedAmount, WebSocketChannelClient::ClosingHandshakeCompletionStatus closingHandshakeCompletion, unsigned short code, const String&amp; reason)
</span><span class="cx"> {
</span><del>-    m_pendingTasks.append(std::make_unique&lt;ScriptExecutionContext::Task&gt;(createCallbackTask(&amp;didCloseCallback, this, unhandledBufferedAmount, closingHandshakeCompletion, code, reason)));
</del><ins>+    m_pendingTasks.append(std::make_unique&lt;CrossThreadTask&gt;(&amp;didCloseCallback, this, unhandledBufferedAmount, closingHandshakeCompletion, code, reason));
</ins><span class="cx">     if (!m_suspended)
</span><span class="cx">         processPendingTasks();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ThreadableWebSocketChannelClientWrapper::didReceiveMessageError()
</span><span class="cx"> {
</span><del>-    m_pendingTasks.append(std::make_unique&lt;ScriptExecutionContext::Task&gt;(createCallbackTask(&amp;didReceiveMessageErrorCallback, this)));
</del><ins>+    m_pendingTasks.append(std::make_unique&lt;CrossThreadTask&gt;(&amp;didReceiveMessageErrorCallback, this));
</ins><span class="cx">     if (!m_suspended)
</span><span class="cx">         processPendingTasks();
</span><span class="cx"> }
</span><span class="lines">@@ -228,7 +227,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-&gt;postTask(createCallbackTask(&amp;ThreadableWebSocketChannelClientWrapper::processPendingTasksCallback, this));
</del><ins>+        m_context-&gt;postTask(CrossThreadTask(&amp;ThreadableWebSocketChannelClientWrapper::processPendingTasksCallback, this));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebsocketsWorkerThreadableWebSocketChannelcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.cpp (168639 => 168640)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.cpp        2014-05-12 20:13:44 UTC (rev 168639)
+++ trunk/Source/WebCore/Modules/websockets/WorkerThreadableWebSocketChannel.cpp        2014-05-12 20:16:43 UTC (rev 168640)
</span><span class="lines">@@ -180,7 +180,7 @@
</span><span class="cx">     if (!m_mainWebSocketChannel || !m_workerClientWrapper)
</span><span class="cx">         return;
</span><span class="cx">     ThreadableWebSocketChannel::SendResult sendRequestResult = m_mainWebSocketChannel-&gt;send(message);
</span><del>-    m_loaderProxy.postTaskForModeToWorkerGlobalScope(createCallbackTask(&amp;workerGlobalScopeDidSend, m_workerClientWrapper, sendRequestResult), m_taskMode);
</del><ins>+    m_loaderProxy.postTaskForModeToWorkerGlobalScope(CrossThreadTask(&amp;workerGlobalScopeDidSend, m_workerClientWrapper, sendRequestResult), m_taskMode);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WorkerThreadableWebSocketChannel::Peer::send(const ArrayBuffer&amp; binaryData)
</span><span class="lines">@@ -189,7 +189,7 @@
</span><span class="cx">     if (!m_mainWebSocketChannel || !m_workerClientWrapper)
</span><span class="cx">         return;
</span><span class="cx">     ThreadableWebSocketChannel::SendResult sendRequestResult = m_mainWebSocketChannel-&gt;send(binaryData, 0, binaryData.byteLength());
</span><del>-    m_loaderProxy.postTaskForModeToWorkerGlobalScope(createCallbackTask(&amp;workerGlobalScopeDidSend, m_workerClientWrapper, sendRequestResult), m_taskMode);
</del><ins>+    m_loaderProxy.postTaskForModeToWorkerGlobalScope(CrossThreadTask(&amp;workerGlobalScopeDidSend, m_workerClientWrapper, sendRequestResult), m_taskMode);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WorkerThreadableWebSocketChannel::Peer::send(Blob&amp; binaryData)
</span><span class="lines">@@ -198,7 +198,7 @@
</span><span class="cx">     if (!m_mainWebSocketChannel || !m_workerClientWrapper)
</span><span class="cx">         return;
</span><span class="cx">     ThreadableWebSocketChannel::SendResult sendRequestResult = m_mainWebSocketChannel-&gt;send(binaryData);
</span><del>-    m_loaderProxy.postTaskForModeToWorkerGlobalScope(createCallbackTask(&amp;workerGlobalScopeDidSend, m_workerClientWrapper, sendRequestResult), m_taskMode);
</del><ins>+    m_loaderProxy.postTaskForModeToWorkerGlobalScope(CrossThreadTask(&amp;workerGlobalScopeDidSend, m_workerClientWrapper, sendRequestResult), m_taskMode);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static void workerGlobalScopeDidGetBufferedAmount(ScriptExecutionContext* context, PassRefPtr&lt;ThreadableWebSocketChannelClientWrapper&gt; workerClientWrapper, unsigned long bufferedAmount)
</span><span class="lines">@@ -213,7 +213,7 @@
</span><span class="cx">     if (!m_mainWebSocketChannel || !m_workerClientWrapper)
</span><span class="cx">         return;
</span><span class="cx">     unsigned long bufferedAmount = m_mainWebSocketChannel-&gt;bufferedAmount();
</span><del>-    m_loaderProxy.postTaskForModeToWorkerGlobalScope(createCallbackTask(&amp;workerGlobalScopeDidGetBufferedAmount, m_workerClientWrapper, bufferedAmount), m_taskMode);
</del><ins>+    m_loaderProxy.postTaskForModeToWorkerGlobalScope(CrossThreadTask(&amp;workerGlobalScopeDidGetBufferedAmount, m_workerClientWrapper, bufferedAmount), m_taskMode);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WorkerThreadableWebSocketChannel::Peer::close(int code, const String&amp; reason)
</span><span class="lines">@@ -268,7 +268,7 @@
</span><span class="cx"> void WorkerThreadableWebSocketChannel::Peer::didConnect()
</span><span class="cx"> {
</span><span class="cx">     ASSERT(isMainThread());
</span><del>-    m_loaderProxy.postTaskForModeToWorkerGlobalScope(createCallbackTask(&amp;workerGlobalScopeDidConnect, m_workerClientWrapper, m_mainWebSocketChannel-&gt;subprotocol(), m_mainWebSocketChannel-&gt;extensions()), m_taskMode);
</del><ins>+    m_loaderProxy.postTaskForModeToWorkerGlobalScope(CrossThreadTask(&amp;workerGlobalScopeDidConnect, m_workerClientWrapper, m_mainWebSocketChannel-&gt;subprotocol(), m_mainWebSocketChannel-&gt;extensions()), m_taskMode);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static void workerGlobalScopeDidReceiveMessage(ScriptExecutionContext* context, PassRefPtr&lt;ThreadableWebSocketChannelClientWrapper&gt; workerClientWrapper, const String&amp; message)
</span><span class="lines">@@ -280,7 +280,7 @@
</span><span class="cx"> void WorkerThreadableWebSocketChannel::Peer::didReceiveMessage(const String&amp; message)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(isMainThread());
</span><del>-    m_loaderProxy.postTaskForModeToWorkerGlobalScope(createCallbackTask(&amp;workerGlobalScopeDidReceiveMessage, m_workerClientWrapper, message), m_taskMode);
</del><ins>+    m_loaderProxy.postTaskForModeToWorkerGlobalScope(CrossThreadTask(&amp;workerGlobalScopeDidReceiveMessage, m_workerClientWrapper, message), m_taskMode);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static void workerGlobalScopeDidReceiveBinaryData(ScriptExecutionContext* context, PassRefPtr&lt;ThreadableWebSocketChannelClientWrapper&gt; workerClientWrapper, PassOwnPtr&lt;Vector&lt;char&gt;&gt; binaryData)
</span><span class="lines">@@ -292,7 +292,7 @@
</span><span class="cx"> void WorkerThreadableWebSocketChannel::Peer::didReceiveBinaryData(PassOwnPtr&lt;Vector&lt;char&gt;&gt; binaryData)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(isMainThread());
</span><del>-    m_loaderProxy.postTaskForModeToWorkerGlobalScope(createCallbackTask(&amp;workerGlobalScopeDidReceiveBinaryData, m_workerClientWrapper, binaryData), m_taskMode);
</del><ins>+    m_loaderProxy.postTaskForModeToWorkerGlobalScope(CrossThreadTask(&amp;workerGlobalScopeDidReceiveBinaryData, m_workerClientWrapper, binaryData), m_taskMode);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static void workerGlobalScopeDidUpdateBufferedAmount(ScriptExecutionContext* context, PassRefPtr&lt;ThreadableWebSocketChannelClientWrapper&gt; workerClientWrapper, unsigned long bufferedAmount)
</span><span class="lines">@@ -304,7 +304,7 @@
</span><span class="cx"> void WorkerThreadableWebSocketChannel::Peer::didUpdateBufferedAmount(unsigned long bufferedAmount)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(isMainThread());
</span><del>-    m_loaderProxy.postTaskForModeToWorkerGlobalScope(createCallbackTask(&amp;workerGlobalScopeDidUpdateBufferedAmount, m_workerClientWrapper, bufferedAmount), m_taskMode);
</del><ins>+    m_loaderProxy.postTaskForModeToWorkerGlobalScope(CrossThreadTask(&amp;workerGlobalScopeDidUpdateBufferedAmount, m_workerClientWrapper, bufferedAmount), m_taskMode);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static void workerGlobalScopeDidStartClosingHandshake(ScriptExecutionContext* context, PassRefPtr&lt;ThreadableWebSocketChannelClientWrapper&gt; workerClientWrapper)
</span><span class="lines">@@ -316,7 +316,7 @@
</span><span class="cx"> void WorkerThreadableWebSocketChannel::Peer::didStartClosingHandshake()
</span><span class="cx"> {
</span><span class="cx">     ASSERT(isMainThread());
</span><del>-    m_loaderProxy.postTaskForModeToWorkerGlobalScope(createCallbackTask(&amp;workerGlobalScopeDidStartClosingHandshake, m_workerClientWrapper), m_taskMode);
</del><ins>+    m_loaderProxy.postTaskForModeToWorkerGlobalScope(CrossThreadTask(&amp;workerGlobalScopeDidStartClosingHandshake, m_workerClientWrapper), m_taskMode);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static void workerGlobalScopeDidClose(ScriptExecutionContext* context, PassRefPtr&lt;ThreadableWebSocketChannelClientWrapper&gt; workerClientWrapper, unsigned long unhandledBufferedAmount, WebSocketChannelClient::ClosingHandshakeCompletionStatus closingHandshakeCompletion, unsigned short code, const String&amp; reason)
</span><span class="lines">@@ -329,7 +329,7 @@
</span><span class="cx"> {
</span><span class="cx">     ASSERT(isMainThread());
</span><span class="cx">     m_mainWebSocketChannel = 0;
</span><del>-    m_loaderProxy.postTaskForModeToWorkerGlobalScope(createCallbackTask(&amp;workerGlobalScopeDidClose, m_workerClientWrapper, unhandledBufferedAmount, closingHandshakeCompletion, code, reason), m_taskMode);
</del><ins>+    m_loaderProxy.postTaskForModeToWorkerGlobalScope(CrossThreadTask(&amp;workerGlobalScopeDidClose, m_workerClientWrapper, unhandledBufferedAmount, closingHandshakeCompletion, code, reason), m_taskMode);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static void workerGlobalScopeDidReceiveMessageError(ScriptExecutionContext* context, PassRefPtr&lt;ThreadableWebSocketChannelClientWrapper&gt; workerClientWrapper)
</span><span class="lines">@@ -341,7 +341,7 @@
</span><span class="cx"> void WorkerThreadableWebSocketChannel::Peer::didReceiveMessageError()
</span><span class="cx"> {
</span><span class="cx">     ASSERT(isMainThread());
</span><del>-    m_loaderProxy.postTaskForModeToWorkerGlobalScope(createCallbackTask(&amp;workerGlobalScopeDidReceiveMessageError, m_workerClientWrapper), m_taskMode);
</del><ins>+    m_loaderProxy.postTaskForModeToWorkerGlobalScope(CrossThreadTask(&amp;workerGlobalScopeDidReceiveMessageError, m_workerClientWrapper), m_taskMode);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> WorkerThreadableWebSocketChannel::Bridge::Bridge(PassRefPtr&lt;ThreadableWebSocketChannelClientWrapper&gt; workerClientWrapper, PassRefPtr&lt;WorkerGlobalScope&gt; workerGlobalScope, const String&amp; taskMode)
</span><span class="lines">@@ -371,7 +371,7 @@
</span><span class="cx">         ASSERT_UNUSED(context, context-&gt;isWorkerGlobalScope());
</span><span class="cx">         if (clientWrapper-&gt;failedWebSocketChannelCreation()) {
</span><span class="cx">             // If Bridge::initialize() quitted earlier, we need to kick mainThreadDestroy() to delete the peer.
</span><del>-            loaderProxy-&gt;postTaskToLoader(createCallbackTask(&amp;WorkerThreadableWebSocketChannel::mainThreadDestroy, AllowCrossThreadAccess(peerPtr)));
</del><ins>+            loaderProxy-&gt;postTaskToLoader(CrossThreadTask(&amp;WorkerThreadableWebSocketChannel::mainThreadDestroy, AllowCrossThreadAccess(peerPtr)));
</ins><span class="cx">         } else
</span><span class="cx">             clientWrapper-&gt;didCreateWebSocketChannel(peerPtr);
</span><span class="cx">     } }, taskMode);
</span><span class="lines">@@ -386,9 +386,7 @@
</span><span class="cx">     ASSERT(!m_peer);
</span><span class="cx">     setMethodNotCompleted();
</span><span class="cx">     Ref&lt;Bridge&gt; protect(*this);
</span><del>-    m_loaderProxy.postTaskToLoader(
-        createCallbackTask(&amp;Bridge::mainThreadInitialize,
-                           AllowCrossThreadAccess(&amp;m_loaderProxy), m_workerClientWrapper, m_taskMode));
</del><ins>+    m_loaderProxy.postTaskToLoader(CrossThreadTask(&amp;Bridge::mainThreadInitialize, AllowCrossThreadAccess(&amp;m_loaderProxy), m_workerClientWrapper, m_taskMode));
</ins><span class="cx">     waitForMethodCompletion();
</span><span class="cx">     // m_peer may be null when the nested runloop exited before a peer has created.
</span><span class="cx">     m_peer = m_workerClientWrapper-&gt;peer();
</span><span class="lines">@@ -410,7 +408,7 @@
</span><span class="cx">     ASSERT(m_workerClientWrapper);
</span><span class="cx">     if (!m_peer)
</span><span class="cx">         return;
</span><del>-    m_loaderProxy.postTaskToLoader(createCallbackTask(&amp;WorkerThreadableWebSocketChannel::mainThreadConnect, AllowCrossThreadAccess(m_peer), url, protocol));
</del><ins>+    m_loaderProxy.postTaskToLoader(CrossThreadTask(&amp;WorkerThreadableWebSocketChannel::mainThreadConnect, AllowCrossThreadAccess(m_peer), url, protocol));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WorkerThreadableWebSocketChannel::mainThreadSend(ScriptExecutionContext* context, Peer* peer, const String&amp; message)
</span><span class="lines">@@ -447,7 +445,7 @@
</span><span class="cx">     if (!m_workerClientWrapper || !m_peer)
</span><span class="cx">         return ThreadableWebSocketChannel::SendFail;
</span><span class="cx">     setMethodNotCompleted();
</span><del>-    m_loaderProxy.postTaskToLoader(createCallbackTask(&amp;WorkerThreadableWebSocketChannel::mainThreadSend, AllowCrossThreadAccess(m_peer), message));
</del><ins>+    m_loaderProxy.postTaskToLoader(CrossThreadTask(&amp;WorkerThreadableWebSocketChannel::mainThreadSend, AllowCrossThreadAccess(m_peer), message));
</ins><span class="cx">     Ref&lt;Bridge&gt; protect(*this);
</span><span class="cx">     waitForMethodCompletion();
</span><span class="cx">     ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapper.get();
</span><span class="lines">@@ -465,7 +463,7 @@
</span><span class="cx">     if (binaryData.byteLength())
</span><span class="cx">         memcpy(data-&gt;data(), static_cast&lt;const char*&gt;(binaryData.data()) + byteOffset, byteLength);
</span><span class="cx">     setMethodNotCompleted();
</span><del>-    m_loaderProxy.postTaskToLoader(createCallbackTask(&amp;WorkerThreadableWebSocketChannel::mainThreadSendArrayBuffer, AllowCrossThreadAccess(m_peer), data.release()));
</del><ins>+    m_loaderProxy.postTaskToLoader(CrossThreadTask(&amp;WorkerThreadableWebSocketChannel::mainThreadSendArrayBuffer, AllowCrossThreadAccess(m_peer), data.release()));
</ins><span class="cx">     Ref&lt;Bridge&gt; protect(*this);
</span><span class="cx">     waitForMethodCompletion();
</span><span class="cx">     ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapper.get();
</span><span class="lines">@@ -479,7 +477,7 @@
</span><span class="cx">     if (!m_workerClientWrapper || !m_peer)
</span><span class="cx">         return ThreadableWebSocketChannel::SendFail;
</span><span class="cx">     setMethodNotCompleted();
</span><del>-    m_loaderProxy.postTaskToLoader(createCallbackTask(&amp;WorkerThreadableWebSocketChannel::mainThreadSendBlob, AllowCrossThreadAccess(m_peer), binaryData.url(), binaryData.type(), binaryData.size()));
</del><ins>+    m_loaderProxy.postTaskToLoader(CrossThreadTask(&amp;WorkerThreadableWebSocketChannel::mainThreadSendBlob, AllowCrossThreadAccess(m_peer), binaryData.url(), binaryData.type(), binaryData.size()));
</ins><span class="cx">     Ref&lt;Bridge&gt; protect(*this);
</span><span class="cx">     waitForMethodCompletion();
</span><span class="cx">     ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapper.get();
</span><span class="lines">@@ -502,7 +500,7 @@
</span><span class="cx">     if (!m_workerClientWrapper || !m_peer)
</span><span class="cx">         return 0;
</span><span class="cx">     setMethodNotCompleted();
</span><del>-    m_loaderProxy.postTaskToLoader(createCallbackTask(&amp;WorkerThreadableWebSocketChannel::mainThreadBufferedAmount, AllowCrossThreadAccess(m_peer)));
</del><ins>+    m_loaderProxy.postTaskToLoader(CrossThreadTask(&amp;WorkerThreadableWebSocketChannel::mainThreadBufferedAmount, AllowCrossThreadAccess(m_peer)));
</ins><span class="cx">     Ref&lt;Bridge&gt; protect(*this);
</span><span class="cx">     waitForMethodCompletion();
</span><span class="cx">     ThreadableWebSocketChannelClientWrapper* clientWrapper = m_workerClientWrapper.get();
</span><span class="lines">@@ -524,7 +522,7 @@
</span><span class="cx"> {
</span><span class="cx">     if (!m_peer)
</span><span class="cx">         return;
</span><del>-    m_loaderProxy.postTaskToLoader(createCallbackTask(&amp;WorkerThreadableWebSocketChannel::mainThreadClose, AllowCrossThreadAccess(m_peer), code, reason));
</del><ins>+    m_loaderProxy.postTaskToLoader(CrossThreadTask(&amp;WorkerThreadableWebSocketChannel::mainThreadClose, AllowCrossThreadAccess(m_peer), code, reason));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WorkerThreadableWebSocketChannel::mainThreadFail(ScriptExecutionContext* context, Peer* peer, const String&amp; reason)
</span><span class="lines">@@ -540,7 +538,7 @@
</span><span class="cx"> {
</span><span class="cx">     if (!m_peer)
</span><span class="cx">         return;
</span><del>-    m_loaderProxy.postTaskToLoader(createCallbackTask(&amp;WorkerThreadableWebSocketChannel::mainThreadFail, AllowCrossThreadAccess(m_peer), reason));
</del><ins>+    m_loaderProxy.postTaskToLoader(CrossThreadTask(&amp;WorkerThreadableWebSocketChannel::mainThreadFail, AllowCrossThreadAccess(m_peer), reason));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WorkerThreadableWebSocketChannel::mainThreadDestroy(ScriptExecutionContext* context, Peer* peerPtr)
</span><span class="lines">@@ -554,7 +552,7 @@
</span><span class="cx"> {
</span><span class="cx">     clearClientWrapper();
</span><span class="cx">     if (m_peer) {
</span><del>-        m_loaderProxy.postTaskToLoader(createCallbackTask(&amp;WorkerThreadableWebSocketChannel::mainThreadDestroy, AllowCrossThreadAccess(m_peer)));
</del><ins>+        m_loaderProxy.postTaskToLoader(CrossThreadTask(&amp;WorkerThreadableWebSocketChannel::mainThreadDestroy, AllowCrossThreadAccess(m_peer)));
</ins><span class="cx">         m_peer = nullptr;
</span><span class="cx">     }
</span><span class="cx">     m_workerGlobalScope = nullptr;
</span><span class="lines">@@ -573,7 +571,7 @@
</span><span class="cx"> {
</span><span class="cx">     if (!m_peer)
</span><span class="cx">         return;
</span><del>-    m_loaderProxy.postTaskToLoader(createCallbackTask(&amp;WorkerThreadableWebSocketChannel::mainThreadSuspend, AllowCrossThreadAccess(m_peer)));
</del><ins>+    m_loaderProxy.postTaskToLoader(CrossThreadTask(&amp;WorkerThreadableWebSocketChannel::mainThreadSuspend, AllowCrossThreadAccess(m_peer)));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WorkerThreadableWebSocketChannel::mainThreadResume(ScriptExecutionContext* context, Peer* peer)
</span><span class="lines">@@ -589,7 +587,7 @@
</span><span class="cx"> {
</span><span class="cx">     if (!m_peer)
</span><span class="cx">         return;
</span><del>-    m_loaderProxy.postTaskToLoader(createCallbackTask(&amp;WorkerThreadableWebSocketChannel::mainThreadResume, AllowCrossThreadAccess(m_peer)));
</del><ins>+    m_loaderProxy.postTaskToLoader(CrossThreadTask(&amp;WorkerThreadableWebSocketChannel::mainThreadResume, AllowCrossThreadAccess(m_peer)));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WorkerThreadableWebSocketChannel::Bridge::clearClientWrapper()
</span></span></pre></div>
<a id="trunkSourceWebCoredomCrossThreadTaskh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/CrossThreadTask.h (168639 => 168640)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/CrossThreadTask.h        2014-05-12 20:13:44 UTC (rev 168639)
+++ trunk/Source/WebCore/dom/CrossThreadTask.h        2014-05-12 20:16:43 UTC (rev 168640)
</span><span class="lines">@@ -38,422 +38,15 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-// Traits for the CrossThreadTask.
-template&lt;typename T&gt; struct CrossThreadTaskTraits {
-    typedef const T&amp; ParamType;
-};
-
-template&lt;typename T&gt; struct CrossThreadTaskTraits&lt;T*&gt; {
-    typedef T* ParamType;
-};
-
-template&lt;typename T&gt; struct CrossThreadTaskTraits&lt;PassRefPtr&lt;T&gt;&gt; {
-    typedef PassRefPtr&lt;T&gt; ParamType;
-};
-
-template&lt;typename T&gt; struct CrossThreadTaskTraits&lt;std::unique_ptr&lt;T&gt;&gt; {
-    typedef std::unique_ptr&lt;T&gt; ParamType;
-};
-
-template&lt;typename P1, typename MP1&gt;
-class CrossThreadTask1 {
</del><ins>+class CrossThreadTask : public ScriptExecutionContext::Task {
</ins><span class="cx"> public:
</span><del>-    typedef void (*Method)(ScriptExecutionContext*, MP1);
-    typedef CrossThreadTask1&lt;P1, MP1&gt; CrossThreadTask;
-    typedef typename CrossThreadTaskTraits&lt;P1&gt;::ParamType Param1;
-
-    CrossThreadTask1(Method method, Param1 parameter1)
-        : m_method(method)
-        , m_parameter1(parameter1)
</del><ins>+    template&lt;typename Method, typename... Parameters&gt;
+    CrossThreadTask(Method method, const Parameters&amp;... parameters)
+        : ScriptExecutionContext::Task(std::bind(method, std::placeholders::_1, typename CrossThreadCopier&lt;Parameters&gt;::Type(CrossThreadCopier&lt;Parameters&gt;::copy(parameters))...))
</ins><span class="cx">     {
</span><span class="cx">     }
</span><del>-
-    void performTask(ScriptExecutionContext* context)
-    {
-        (*m_method)(context, m_parameter1);
-    }
-
-private:
-    Method m_method;
-    P1 m_parameter1;
</del><span class="cx"> };
</span><span class="cx"> 
</span><del>-template&lt;typename P1, typename MP1, typename P2, typename MP2&gt;
-class CrossThreadTask2 {
-public:
-    typedef void (*Method)(ScriptExecutionContext*, MP1, MP2);
-    typedef CrossThreadTask2&lt;P1, MP1, P2, MP2&gt; CrossThreadTask;
-    typedef typename CrossThreadTaskTraits&lt;P1&gt;::ParamType Param1;
-    typedef typename CrossThreadTaskTraits&lt;P2&gt;::ParamType Param2;
-
-    CrossThreadTask2(Method method, Param1 parameter1, Param2 parameter2)
-        : m_method(method)
-        , m_parameter1(parameter1)
-        , m_parameter2(parameter2)
-    {
-    }
-
-    void performTask(ScriptExecutionContext* context)
-    {
-        (*m_method)(context, m_parameter1, m_parameter2);
-    }
-
-private:
-    Method m_method;
-    P1 m_parameter1;
-    P2 m_parameter2;
-};
-
-template&lt;typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3&gt;
-class CrossThreadTask3 {
-public:
-    typedef void (*Method)(ScriptExecutionContext*, MP1, MP2, MP3);
-    typedef CrossThreadTask3&lt;P1, MP1, P2, MP2, P3, MP3&gt; CrossThreadTask;
-    typedef typename CrossThreadTaskTraits&lt;P1&gt;::ParamType Param1;
-    typedef typename CrossThreadTaskTraits&lt;P2&gt;::ParamType Param2;
-    typedef typename CrossThreadTaskTraits&lt;P3&gt;::ParamType Param3;
-
-    CrossThreadTask3(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3)
-        : m_method(method)
-        , m_parameter1(parameter1)
-        , m_parameter2(parameter2)
-        , m_parameter3(parameter3)
-    {
-    }
-
-    void performTask(ScriptExecutionContext* context)
-    {
-        (*m_method)(context, m_parameter1, m_parameter2, m_parameter3);
-    }
-
-private:
-    Method m_method;
-    P1 m_parameter1;
-    P2 m_parameter2;
-    P3 m_parameter3;
-};
-
-template&lt;typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4&gt;
-class CrossThreadTask4 {
-public:
-    typedef void (*Method)(ScriptExecutionContext*, MP1, MP2, MP3, MP4);
-    typedef CrossThreadTask4&lt;P1, MP1, P2, MP2, P3, MP3, P4, MP4&gt; CrossThreadTask;
-    typedef typename CrossThreadTaskTraits&lt;P1&gt;::ParamType Param1;
-    typedef typename CrossThreadTaskTraits&lt;P2&gt;::ParamType Param2;
-    typedef typename CrossThreadTaskTraits&lt;P3&gt;::ParamType Param3;
-    typedef typename CrossThreadTaskTraits&lt;P4&gt;::ParamType Param4;
-
-    CrossThreadTask4(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4)
-        : m_method(method)
-        , m_parameter1(parameter1)
-        , m_parameter2(parameter2)
-        , m_parameter3(parameter3)
-        , m_parameter4(parameter4)
-    {
-    }
-
-    void performTask(ScriptExecutionContext* context)
-    {
-        (*m_method)(context, m_parameter1, m_parameter2, m_parameter3, m_parameter4);
-    }
-
-private:
-    Method m_method;
-    P1 m_parameter1;
-    P2 m_parameter2;
-    P3 m_parameter3;
-    P4 m_parameter4;
-};
-
-template&lt;typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5&gt;
-class CrossThreadTask5 {
-public:
-    typedef void (*Method)(ScriptExecutionContext*, MP1, MP2, MP3, MP4, MP5);
-    typedef CrossThreadTask5&lt;P1, MP1, P2, MP2, P3, MP3, P4, MP4, P5, MP5&gt; CrossThreadTask;
-    typedef typename CrossThreadTaskTraits&lt;P1&gt;::ParamType Param1;
-    typedef typename CrossThreadTaskTraits&lt;P2&gt;::ParamType Param2;
-    typedef typename CrossThreadTaskTraits&lt;P3&gt;::ParamType Param3;
-    typedef typename CrossThreadTaskTraits&lt;P4&gt;::ParamType Param4;
-    typedef typename CrossThreadTaskTraits&lt;P5&gt;::ParamType Param5;
-
-    CrossThreadTask5(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5)
-        : m_method(method)
-        , m_parameter1(parameter1)
-        , m_parameter2(parameter2)
-        , m_parameter3(parameter3)
-        , m_parameter4(parameter4)
-        , m_parameter5(parameter5)
-    {
-    }
-
-    void performTask(ScriptExecutionContext* context)
-    {
-        (*m_method)(context, m_parameter1, m_parameter2, m_parameter3, m_parameter4, m_parameter5);
-    }
-
-private:
-    Method m_method;
-    P1 m_parameter1;
-    P2 m_parameter2;
-    P3 m_parameter3;
-    P4 m_parameter4;
-    P5 m_parameter5;
-};
-
-template&lt;typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5, typename P6, typename MP6&gt;
-class CrossThreadTask6 {
-public:
-    typedef void (*Method)(ScriptExecutionContext*, MP1, MP2, MP3, MP4, MP5, MP6);
-    typedef CrossThreadTask6&lt;P1, MP1, P2, MP2, P3, MP3, P4, MP4, P5, MP5, P6, MP6&gt; CrossThreadTask;
-    typedef typename CrossThreadTaskTraits&lt;P1&gt;::ParamType Param1;
-    typedef typename CrossThreadTaskTraits&lt;P2&gt;::ParamType Param2;
-    typedef typename CrossThreadTaskTraits&lt;P3&gt;::ParamType Param3;
-    typedef typename CrossThreadTaskTraits&lt;P4&gt;::ParamType Param4;
-    typedef typename CrossThreadTaskTraits&lt;P5&gt;::ParamType Param5;
-    typedef typename CrossThreadTaskTraits&lt;P6&gt;::ParamType Param6;
-
-    CrossThreadTask6(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5, Param6 parameter6)
-        : m_method(method)
-        , m_parameter1(parameter1)
-        , m_parameter2(parameter2)
-        , m_parameter3(parameter3)
-        , m_parameter4(parameter4)
-        , m_parameter5(parameter5)
-        , m_parameter6(parameter6)
-    {
-    }
-
-    void performTask(ScriptExecutionContext* context)
-    {
-        (*m_method)(context, m_parameter1, m_parameter2, m_parameter3, m_parameter4, m_parameter5, m_parameter6);
-    }
-
-private:
-    Method m_method;
-    P1 m_parameter1;
-    P2 m_parameter2;
-    P3 m_parameter3;
-    P4 m_parameter4;
-    P5 m_parameter5;
-    P6 m_parameter6;
-};
-
-template&lt;typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5, typename P6, typename MP6, typename P7, typename MP7&gt;
-class CrossThreadTask7 {
-public:
-    typedef void (*Method)(ScriptExecutionContext*, MP1, MP2, MP3, MP4, MP5, MP6, MP7);
-    typedef CrossThreadTask7&lt;P1, MP1, P2, MP2, P3, MP3, P4, MP4, P5, MP5, P6, MP6, P7, MP7&gt; CrossThreadTask;
-    typedef typename CrossThreadTaskTraits&lt;P1&gt;::ParamType Param1;
-    typedef typename CrossThreadTaskTraits&lt;P2&gt;::ParamType Param2;
-    typedef typename CrossThreadTaskTraits&lt;P3&gt;::ParamType Param3;
-    typedef typename CrossThreadTaskTraits&lt;P4&gt;::ParamType Param4;
-    typedef typename CrossThreadTaskTraits&lt;P5&gt;::ParamType Param5;
-    typedef typename CrossThreadTaskTraits&lt;P6&gt;::ParamType Param6;
-    typedef typename CrossThreadTaskTraits&lt;P7&gt;::ParamType Param7;
-
-    CrossThreadTask7(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5, Param6 parameter6, Param7 parameter7)
-        : m_method(method)
-        , m_parameter1(parameter1)
-        , m_parameter2(parameter2)
-        , m_parameter3(parameter3)
-        , m_parameter4(parameter4)
-        , m_parameter5(parameter5)
-        , m_parameter6(parameter6)
-        , m_parameter7(parameter7)
-    {
-    }
-
-    void performTask(ScriptExecutionContext* context)
-    {
-        (*m_method)(context, m_parameter1, m_parameter2, m_parameter3, m_parameter4, m_parameter5, m_parameter6, m_parameter7);
-    }
-
-private:
-    Method m_method;
-    P1 m_parameter1;
-    P2 m_parameter2;
-    P3 m_parameter3;
-    P4 m_parameter4;
-    P5 m_parameter5;
-    P6 m_parameter6;
-    P7 m_parameter7;
-};
-
-template&lt;typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5, typename P6, typename MP6, typename P7, typename MP7, typename P8, typename MP8&gt;
-class CrossThreadTask8 {
-public:
-    typedef void (*Method)(ScriptExecutionContext*, MP1, MP2, MP3, MP4, MP5, MP6, MP7, MP8);
-    typedef CrossThreadTask8&lt;P1, MP1, P2, MP2, P3, MP3, P4, MP4, P5, MP5, P6, MP6, P7, MP7, P8, MP8&gt; CrossThreadTask;
-    typedef typename CrossThreadTaskTraits&lt;P1&gt;::ParamType Param1;
-    typedef typename CrossThreadTaskTraits&lt;P2&gt;::ParamType Param2;
-    typedef typename CrossThreadTaskTraits&lt;P3&gt;::ParamType Param3;
-    typedef typename CrossThreadTaskTraits&lt;P4&gt;::ParamType Param4;
-    typedef typename CrossThreadTaskTraits&lt;P5&gt;::ParamType Param5;
-    typedef typename CrossThreadTaskTraits&lt;P6&gt;::ParamType Param6;
-    typedef typename CrossThreadTaskTraits&lt;P7&gt;::ParamType Param7;
-    typedef typename CrossThreadTaskTraits&lt;P8&gt;::ParamType Param8;
-    
-    CrossThreadTask8(Method method, Param1 parameter1, Param2 parameter2, Param3 parameter3, Param4 parameter4, Param5 parameter5, Param6 parameter6, Param7 parameter7, Param8 parameter8)
-    : m_method(method)
-    , m_parameter1(parameter1)
-    , m_parameter2(parameter2)
-    , m_parameter3(parameter3)
-    , m_parameter4(parameter4)
-    , m_parameter5(parameter5)
-    , m_parameter6(parameter6)
-    , m_parameter7(parameter7)
-    , m_parameter8(parameter8)
-    {
-    }
-    
-    void performTask(ScriptExecutionContext* context)
-    {
-        (*m_method)(context, m_parameter1, m_parameter2, m_parameter3, m_parameter4, m_parameter5, m_parameter6, m_parameter7, m_parameter8);
-    }
-    
-private:
-    Method m_method;
-    P1 m_parameter1;
-    P2 m_parameter2;
-    P3 m_parameter3;
-    P4 m_parameter4;
-    P5 m_parameter5;
-    P6 m_parameter6;
-    P7 m_parameter7;
-    P8 m_parameter8;
-};
-
-template&lt;typename P1, typename MP1&gt;
-ScriptExecutionContext::Task createCallbackTask(
-    void (*method)(ScriptExecutionContext*, MP1),
-    const P1&amp; parameter1)
-{
-    auto taskPtr = new CrossThreadTask1&lt;typename CrossThreadCopier&lt;P1&gt;::Type, MP1&gt;(
-        method,
-        CrossThreadCopier&lt;P1&gt;::copy(parameter1));
-    return [=] (ScriptExecutionContext* context) {
-        std::unique_ptr&lt;typename std::remove_pointer&lt;decltype(taskPtr)&gt;::type&gt; task(taskPtr);
-        task-&gt;performTask(context);
-    };
-}
-
-template&lt;typename P1, typename MP1, typename P2, typename MP2&gt;
-ScriptExecutionContext::Task createCallbackTask(
-    void (*method)(ScriptExecutionContext*, MP1, MP2),
-    const P1&amp; parameter1, const P2&amp; parameter2)
-{
-    auto taskPtr = new CrossThreadTask2&lt;typename CrossThreadCopier&lt;P1&gt;::Type, MP1, typename CrossThreadCopier&lt;P2&gt;::Type, MP2&gt;(
-        method,
-        CrossThreadCopier&lt;P1&gt;::copy(parameter1), CrossThreadCopier&lt;P2&gt;::copy(parameter2));
-    return [=] (ScriptExecutionContext* context) {
-        std::unique_ptr&lt;typename std::remove_pointer&lt;decltype(taskPtr)&gt;::type&gt; task(taskPtr);
-        task-&gt;performTask(context);
-    };
-}
-
-template&lt;typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3&gt;
-ScriptExecutionContext::Task createCallbackTask(
-    void (*method)(ScriptExecutionContext*, MP1, MP2, MP3),
-    const P1&amp; parameter1, const P2&amp; parameter2, const P3&amp; parameter3)
-{
-    auto taskPtr = new CrossThreadTask3&lt;typename CrossThreadCopier&lt;P1&gt;::Type, MP1, typename CrossThreadCopier&lt;P2&gt;::Type, MP2, typename CrossThreadCopier&lt;P3&gt;::Type, MP3&gt;(
-        method,
-        CrossThreadCopier&lt;P1&gt;::copy(parameter1), CrossThreadCopier&lt;P2&gt;::copy(parameter2),
-        CrossThreadCopier&lt;P3&gt;::copy(parameter3));
-    return [=] (ScriptExecutionContext* context) {
-        std::unique_ptr&lt;typename std::remove_pointer&lt;decltype(taskPtr)&gt;::type&gt; task(taskPtr);
-        task-&gt;performTask(context);
-    };
-}
-
-template&lt;typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4&gt;
-ScriptExecutionContext::Task createCallbackTask(
-    void (*method)(ScriptExecutionContext*, MP1, MP2, MP3, MP4),
-    const P1&amp; parameter1, const P2&amp; parameter2, const P3&amp; parameter3, const P4&amp; parameter4)
-{
-    auto taskPtr = new CrossThreadTask4&lt;typename CrossThreadCopier&lt;P1&gt;::Type, MP1, typename CrossThreadCopier&lt;P2&gt;::Type, MP2, typename CrossThreadCopier&lt;P3&gt;::Type, MP3,
-        typename CrossThreadCopier&lt;P4&gt;::Type, MP4&gt;(
-            method,
-            CrossThreadCopier&lt;P1&gt;::copy(parameter1), CrossThreadCopier&lt;P2&gt;::copy(parameter2),
-            CrossThreadCopier&lt;P3&gt;::copy(parameter3), CrossThreadCopier&lt;P4&gt;::copy(parameter4));
-    return [=] (ScriptExecutionContext* context) {
-        std::unique_ptr&lt;typename std::remove_pointer&lt;decltype(taskPtr)&gt;::type&gt; task(taskPtr);
-        task-&gt;performTask(context);
-    };
-}
-
-template&lt;typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5&gt;
-ScriptExecutionContext::Task createCallbackTask(
-    void (*method)(ScriptExecutionContext*, MP1, MP2, MP3, MP4, MP5),
-    const P1&amp; parameter1, const P2&amp; parameter2, const P3&amp; parameter3, const P4&amp; parameter4, const P5&amp; parameter5)
-{
-    auto taskPtr = new CrossThreadTask5&lt;typename CrossThreadCopier&lt;P1&gt;::Type, MP1, typename CrossThreadCopier&lt;P2&gt;::Type, MP2, typename CrossThreadCopier&lt;P3&gt;::Type, MP3,
-        typename CrossThreadCopier&lt;P4&gt;::Type, MP4, typename CrossThreadCopier&lt;P5&gt;::Type, MP5&gt;(
-            method,
-            CrossThreadCopier&lt;P1&gt;::copy(parameter1), CrossThreadCopier&lt;P2&gt;::copy(parameter2),
-            CrossThreadCopier&lt;P3&gt;::copy(parameter3), CrossThreadCopier&lt;P4&gt;::copy(parameter4),
-            CrossThreadCopier&lt;P5&gt;::copy(parameter5));
-    return [=] (ScriptExecutionContext* context) {
-        std::unique_ptr&lt;typename std::remove_pointer&lt;decltype(taskPtr)&gt;::type&gt; task(taskPtr);
-        task-&gt;performTask(context);
-    };
-}
-
-template&lt;typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5, typename P6, typename MP6&gt;
-ScriptExecutionContext::Task createCallbackTask(
-    void (*method)(ScriptExecutionContext*, MP1, MP2, MP3, MP4, MP5, MP6),
-    const P1&amp; parameter1, const P2&amp; parameter2, const P3&amp; parameter3, const P4&amp; parameter4, const P5&amp; parameter5, const P6&amp; parameter6)
-{
-    auto taskPtr = new CrossThreadTask6&lt;typename CrossThreadCopier&lt;P1&gt;::Type, MP1, typename CrossThreadCopier&lt;P2&gt;::Type, MP2, typename CrossThreadCopier&lt;P3&gt;::Type, MP3,
-        typename CrossThreadCopier&lt;P4&gt;::Type, MP4, typename CrossThreadCopier&lt;P5&gt;::Type, MP5, typename CrossThreadCopier&lt;P6&gt;::Type, MP6&gt;(
-            method,
-            CrossThreadCopier&lt;P1&gt;::copy(parameter1), CrossThreadCopier&lt;P2&gt;::copy(parameter2),
-            CrossThreadCopier&lt;P3&gt;::copy(parameter3), CrossThreadCopier&lt;P4&gt;::copy(parameter4),
-            CrossThreadCopier&lt;P5&gt;::copy(parameter5), CrossThreadCopier&lt;P6&gt;::copy(parameter6));
-    return [=] (ScriptExecutionContext* context) {
-        std::unique_ptr&lt;typename std::remove_pointer&lt;decltype(taskPtr)&gt;::type&gt; task(taskPtr);
-        task-&gt;performTask(context);
-    };
-}
-
-template&lt;typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5, typename P6, typename MP6, typename P7, typename MP7&gt;
-ScriptExecutionContext::Task createCallbackTask(
-    void (*method)(ScriptExecutionContext*, MP1, MP2, MP3, MP4, MP5, MP6, MP7),
-    const P1&amp; parameter1, const P2&amp; parameter2, const P3&amp; parameter3, const P4&amp; parameter4, const P5&amp; parameter5, const P6&amp; parameter6, const P7&amp; parameter7)
-{
-    auto taskPtr = new CrossThreadTask7&lt;typename CrossThreadCopier&lt;P1&gt;::Type, MP1, typename CrossThreadCopier&lt;P2&gt;::Type, MP2, typename CrossThreadCopier&lt;P3&gt;::Type, MP3,
-        typename CrossThreadCopier&lt;P4&gt;::Type, MP4, typename CrossThreadCopier&lt;P5&gt;::Type, MP5, typename CrossThreadCopier&lt;P6&gt;::Type, MP6,
-        typename CrossThreadCopier&lt;P7&gt;::Type, MP7&gt;(
-            method,
-            CrossThreadCopier&lt;P1&gt;::copy(parameter1), CrossThreadCopier&lt;P2&gt;::copy(parameter2),
-            CrossThreadCopier&lt;P3&gt;::copy(parameter3), CrossThreadCopier&lt;P4&gt;::copy(parameter4),
-            CrossThreadCopier&lt;P5&gt;::copy(parameter5), CrossThreadCopier&lt;P6&gt;::copy(parameter6),
-            CrossThreadCopier&lt;P7&gt;::copy(parameter7));
-    return [=] (ScriptExecutionContext* context) {
-        std::unique_ptr&lt;typename std::remove_pointer&lt;decltype(taskPtr)&gt;::type&gt; task(taskPtr);
-        task-&gt;performTask(context);
-    };
-}
-
-template&lt;typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5, typename P6, typename MP6, typename P7, typename MP7, typename P8, typename MP8&gt;
-ScriptExecutionContext::Task createCallbackTask(
-    void (*method)(ScriptExecutionContext*, MP1, MP2, MP3, MP4, MP5, MP6, MP7, MP8),
-    const P1&amp; parameter1, const P2&amp; parameter2, const P3&amp; parameter3, const P4&amp; parameter4, const P5&amp; parameter5, const P6&amp; parameter6, const P7&amp; parameter7, const P8&amp; parameter8)
-{
-    auto taskPtr = new CrossThreadTask8&lt;typename CrossThreadCopier&lt;P1&gt;::Type, MP1, typename CrossThreadCopier&lt;P2&gt;::Type, MP2, typename CrossThreadCopier&lt;P3&gt;::Type, MP3,
-    typename CrossThreadCopier&lt;P4&gt;::Type, MP4, typename CrossThreadCopier&lt;P5&gt;::Type, MP5, typename CrossThreadCopier&lt;P6&gt;::Type, MP6,
-    typename CrossThreadCopier&lt;P7&gt;::Type, MP7, typename CrossThreadCopier&lt;P8&gt;::Type, MP8&gt;(
-        method,
-        CrossThreadCopier&lt;P1&gt;::copy(parameter1), CrossThreadCopier&lt;P2&gt;::copy(parameter2),
-        CrossThreadCopier&lt;P3&gt;::copy(parameter3), CrossThreadCopier&lt;P4&gt;::copy(parameter4),
-        CrossThreadCopier&lt;P5&gt;::copy(parameter5), CrossThreadCopier&lt;P6&gt;::copy(parameter6),
-        CrossThreadCopier&lt;P7&gt;::copy(parameter7), CrossThreadCopier&lt;P8&gt;::copy(parameter8));
-    return [=] (ScriptExecutionContext* context) {
-        std::unique_ptr&lt;typename std::remove_pointer&lt;decltype(taskPtr)&gt;::type&gt; task(taskPtr);
-        task-&gt;performTask(context);
-    };
-}
-
</del><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // CrossThreadTask_h
</span></span></pre></div>
<a id="trunkSourceWebCorefileapiFileReadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/fileapi/FileReader.cpp (168639 => 168640)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/fileapi/FileReader.cpp        2014-05-12 20:13:44 UTC (rev 168639)
+++ trunk/Source/WebCore/fileapi/FileReader.cpp        2014-05-12 20:16:43 UTC (rev 168640)
</span><span class="lines">@@ -160,8 +160,7 @@
</span><span class="cx">     m_aborting = true;
</span><span class="cx"> 
</span><span class="cx">     // Schedule to have the abort done later since abort() might be called from the event handler and we do not want the resource loading code to be in the stack.
</span><del>-    scriptExecutionContext()-&gt;postTask(
-        createCallbackTask(&amp;delayedAbort, AllowAccessLater(this)));
</del><ins>+    scriptExecutionContext()-&gt;postTask(CrossThreadTask(&amp;delayedAbort, AllowAccessLater(this)));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void FileReader::doAbort()
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderWorkerThreadableLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/WorkerThreadableLoader.cpp (168639 => 168640)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/WorkerThreadableLoader.cpp        2014-05-12 20:13:44 UTC (rev 168639)
+++ trunk/Source/WebCore/loader/WorkerThreadableLoader.cpp        2014-05-12 20:16:43 UTC (rev 168640)
</span><span class="lines">@@ -91,9 +91,7 @@
</span><span class="cx">     , m_taskMode(taskMode.isolatedCopy())
</span><span class="cx"> {
</span><span class="cx">     ASSERT(m_workerClientWrapper.get());
</span><del>-    m_loaderProxy.postTaskToLoader(
-        createCallbackTask(&amp;MainThreadBridge::mainThreadCreateLoader, 
-                           AllowCrossThreadAccess(this), request, options, outgoingReferrer));
</del><ins>+    m_loaderProxy.postTaskToLoader(CrossThreadTask(&amp;MainThreadBridge::mainThreadCreateLoader, AllowCrossThreadAccess(this), request, options, outgoingReferrer));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> WorkerThreadableLoader::MainThreadBridge::~MainThreadBridge()
</span><span class="lines">@@ -127,8 +125,7 @@
</span><span class="cx">     clearClientWrapper();
</span><span class="cx"> 
</span><span class="cx">     // &quot;delete this&quot; and m_mainThreadLoader::deref() on the worker object's thread.
</span><del>-    m_loaderProxy.postTaskToLoader(
-        createCallbackTask(&amp;MainThreadBridge::mainThreadDestroy, AllowCrossThreadAccess(this)));
</del><ins>+    m_loaderProxy.postTaskToLoader(CrossThreadTask(&amp;MainThreadBridge::mainThreadDestroy, AllowCrossThreadAccess(this)));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WorkerThreadableLoader::MainThreadBridge::mainThreadCancel(ScriptExecutionContext* context, MainThreadBridge* thisPtr)
</span><span class="lines">@@ -144,8 +141,7 @@
</span><span class="cx"> 
</span><span class="cx"> void WorkerThreadableLoader::MainThreadBridge::cancel()
</span><span class="cx"> {
</span><del>-    m_loaderProxy.postTaskToLoader(
-        createCallbackTask(&amp;MainThreadBridge::mainThreadCancel, AllowCrossThreadAccess(this)));
</del><ins>+    m_loaderProxy.postTaskToLoader(CrossThreadTask(&amp;MainThreadBridge::mainThreadCancel, AllowCrossThreadAccess(this)));
</ins><span class="cx">     ThreadableLoaderClientWrapper* clientWrapper = m_workerClientWrapper.get();
</span><span class="cx">     if (!clientWrapper-&gt;done()) {
</span><span class="cx">         // If the client hasn't reached a termination state, then transition it by sending a cancellation error.
</span><span class="lines">@@ -170,7 +166,7 @@
</span><span class="cx"> 
</span><span class="cx"> void WorkerThreadableLoader::MainThreadBridge::didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent)
</span><span class="cx"> {
</span><del>-    m_loaderProxy.postTaskForModeToWorkerGlobalScope(createCallbackTask(&amp;workerGlobalScopeDidSendData, m_workerClientWrapper, bytesSent, totalBytesToBeSent), m_taskMode);
</del><ins>+    m_loaderProxy.postTaskForModeToWorkerGlobalScope(CrossThreadTask(&amp;workerGlobalScopeDidSendData, m_workerClientWrapper, bytesSent, totalBytesToBeSent), m_taskMode);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static void workerGlobalScopeDidReceiveResponse(ScriptExecutionContext* context, RefPtr&lt;ThreadableLoaderClientWrapper&gt; workerClientWrapper, unsigned long identifier, PassOwnPtr&lt;CrossThreadResourceResponseData&gt; responseData)
</span><span class="lines">@@ -182,7 +178,7 @@
</span><span class="cx"> 
</span><span class="cx"> void WorkerThreadableLoader::MainThreadBridge::didReceiveResponse(unsigned long identifier, const ResourceResponse&amp; response)
</span><span class="cx"> {
</span><del>-    m_loaderProxy.postTaskForModeToWorkerGlobalScope(createCallbackTask(&amp;workerGlobalScopeDidReceiveResponse, m_workerClientWrapper, identifier, response), m_taskMode);
</del><ins>+    m_loaderProxy.postTaskForModeToWorkerGlobalScope(CrossThreadTask(&amp;workerGlobalScopeDidReceiveResponse, m_workerClientWrapper, identifier, response), m_taskMode);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static void workerGlobalScopeDidReceiveData(ScriptExecutionContext* context, RefPtr&lt;ThreadableLoaderClientWrapper&gt; workerClientWrapper, PassOwnPtr&lt;Vector&lt;char&gt;&gt; vectorData)
</span><span class="lines">@@ -193,9 +189,9 @@
</span><span class="cx"> 
</span><span class="cx"> void WorkerThreadableLoader::MainThreadBridge::didReceiveData(const char* data, int dataLength)
</span><span class="cx"> {
</span><del>-    OwnPtr&lt;Vector&lt;char&gt;&gt; vector = adoptPtr(new Vector&lt;char&gt;(dataLength)); // needs to be an OwnPtr for usage with createCallbackTask.
</del><ins>+    OwnPtr&lt;Vector&lt;char&gt;&gt; vector = adoptPtr(new Vector&lt;char&gt;(dataLength)); // needs to be an OwnPtr for usage with CrossThreadTask.
</ins><span class="cx">     memcpy(vector-&gt;data(), data, dataLength);
</span><del>-    m_loaderProxy.postTaskForModeToWorkerGlobalScope(createCallbackTask(&amp;workerGlobalScopeDidReceiveData, m_workerClientWrapper, vector.release()), m_taskMode);
</del><ins>+    m_loaderProxy.postTaskForModeToWorkerGlobalScope(CrossThreadTask(&amp;workerGlobalScopeDidReceiveData, m_workerClientWrapper, vector.release()), m_taskMode);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static void workerGlobalScopeDidFinishLoading(ScriptExecutionContext* context, RefPtr&lt;ThreadableLoaderClientWrapper&gt; workerClientWrapper, unsigned long identifier, double finishTime)
</span><span class="lines">@@ -206,7 +202,7 @@
</span><span class="cx"> 
</span><span class="cx"> void WorkerThreadableLoader::MainThreadBridge::didFinishLoading(unsigned long identifier, double finishTime)
</span><span class="cx"> {
</span><del>-    m_loaderProxy.postTaskForModeToWorkerGlobalScope(createCallbackTask(&amp;workerGlobalScopeDidFinishLoading, m_workerClientWrapper, identifier, finishTime), m_taskMode);
</del><ins>+    m_loaderProxy.postTaskForModeToWorkerGlobalScope(CrossThreadTask(&amp;workerGlobalScopeDidFinishLoading, m_workerClientWrapper, identifier, finishTime), m_taskMode);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static void workerGlobalScopeDidFail(ScriptExecutionContext* context, RefPtr&lt;ThreadableLoaderClientWrapper&gt; workerClientWrapper, const ResourceError&amp; error)
</span><span class="lines">@@ -217,7 +213,7 @@
</span><span class="cx"> 
</span><span class="cx"> void WorkerThreadableLoader::MainThreadBridge::didFail(const ResourceError&amp; error)
</span><span class="cx"> {
</span><del>-    m_loaderProxy.postTaskForModeToWorkerGlobalScope(createCallbackTask(&amp;workerGlobalScopeDidFail, m_workerClientWrapper, error), m_taskMode);
</del><ins>+    m_loaderProxy.postTaskForModeToWorkerGlobalScope(CrossThreadTask(&amp;workerGlobalScopeDidFail, m_workerClientWrapper, error), m_taskMode);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static void workerGlobalScopeDidFailAccessControlCheck(ScriptExecutionContext* context, PassRefPtr&lt;ThreadableLoaderClientWrapper&gt; workerClientWrapper, const ResourceError&amp; error)
</span><span class="lines">@@ -228,7 +224,7 @@
</span><span class="cx"> 
</span><span class="cx"> void WorkerThreadableLoader::MainThreadBridge::didFailAccessControlCheck(const ResourceError&amp; error)
</span><span class="cx"> {
</span><del>-    m_loaderProxy.postTaskForModeToWorkerGlobalScope(createCallbackTask(&amp;workerGlobalScopeDidFailAccessControlCheck, m_workerClientWrapper, error), m_taskMode);
</del><ins>+    m_loaderProxy.postTaskForModeToWorkerGlobalScope(CrossThreadTask(&amp;workerGlobalScopeDidFailAccessControlCheck, m_workerClientWrapper, error), m_taskMode);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static void workerGlobalScopeDidFailRedirectCheck(ScriptExecutionContext* context, RefPtr&lt;ThreadableLoaderClientWrapper&gt; workerClientWrapper)
</span><span class="lines">@@ -239,7 +235,7 @@
</span><span class="cx"> 
</span><span class="cx"> void WorkerThreadableLoader::MainThreadBridge::didFailRedirectCheck()
</span><span class="cx"> {
</span><del>-    m_loaderProxy.postTaskForModeToWorkerGlobalScope(createCallbackTask(&amp;workerGlobalScopeDidFailRedirectCheck, m_workerClientWrapper), m_taskMode);
</del><ins>+    m_loaderProxy.postTaskForModeToWorkerGlobalScope(CrossThreadTask(&amp;workerGlobalScopeDidFailRedirectCheck, m_workerClientWrapper), m_taskMode);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderWorkerThreadableLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/WorkerThreadableLoader.h (168639 => 168640)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/WorkerThreadableLoader.h        2014-05-12 20:13:44 UTC (rev 168639)
+++ trunk/Source/WebCore/loader/WorkerThreadableLoader.h        2014-05-12 20:16:43 UTC (rev 168640)
</span><span class="lines">@@ -91,7 +91,7 @@
</span><span class="cx">         //    The ThreadableLoaderClientWrapper has the underlying client cleared, so no more calls
</span><span class="cx">         //    go through it.  All tasks posted from the worker object's thread to the worker context's
</span><span class="cx">         //    thread do &quot;ThreadableLoaderClientWrapper::ref&quot; (automatically inside of the cross thread copy
</span><del>-        //    done in createCallbackTask), so the ThreadableLoaderClientWrapper instance is there until all
</del><ins>+        //    done in CrossThreadTask), so the ThreadableLoaderClientWrapper instance is there until all
</ins><span class="cx">         //    tasks are executed.
</span><span class="cx">         class MainThreadBridge : public ThreadableLoaderClient {
</span><span class="cx">         public:
</span></span></pre></div>
<a id="trunkSourceWebCoreloadercacheMemoryCachecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/cache/MemoryCache.cpp (168639 => 168640)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/cache/MemoryCache.cpp        2014-05-12 20:13:44 UTC (rev 168639)
+++ trunk/Source/WebCore/loader/cache/MemoryCache.cpp        2014-05-12 20:16:43 UTC (rev 168640)
</span><span class="lines">@@ -847,7 +847,7 @@
</span><span class="cx"> void MemoryCache::removeRequestFromCache(ScriptExecutionContext* context, const ResourceRequest&amp; request, SessionID sessionID)
</span><span class="cx"> {
</span><span class="cx">     if (context-&gt;isWorkerGlobalScope()) {
</span><del>-        toWorkerGlobalScope(context)-&gt;thread().workerLoaderProxy().postTaskToLoader(createCallbackTask(&amp;crossThreadRemoveRequestFromCache, request, sessionID));
</del><ins>+        toWorkerGlobalScope(context)-&gt;thread().workerLoaderProxy().postTaskToLoader(CrossThreadTask(&amp;crossThreadRemoveRequestFromCache, request, sessionID));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -863,7 +863,7 @@
</span><span class="cx"> void MemoryCache::removeRequestFromSessionCaches(ScriptExecutionContext* context, const ResourceRequest&amp; request)
</span><span class="cx"> {
</span><span class="cx">     if (context-&gt;isWorkerGlobalScope()) {
</span><del>-        toWorkerGlobalScope(context)-&gt;thread().workerLoaderProxy().postTaskToLoader(createCallbackTask(&amp;crossThreadRemoveRequestFromSessionCaches, request));
</del><ins>+        toWorkerGlobalScope(context)-&gt;thread().workerLoaderProxy().postTaskToLoader(CrossThreadTask(&amp;crossThreadRemoveRequestFromSessionCaches, request));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     removeRequestFromSessionCachesImpl(context, request);
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersDefaultSharedWorkerRepositorycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/DefaultSharedWorkerRepository.cpp (168639 => 168640)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/DefaultSharedWorkerRepository.cpp        2014-05-12 20:13:44 UTC (rev 168639)
+++ trunk/Source/WebCore/workers/DefaultSharedWorkerRepository.cpp        2014-05-12 20:16:43 UTC (rev 168640)
</span><span class="lines">@@ -186,8 +186,8 @@
</span><span class="cx"> void SharedWorkerProxy::postExceptionToWorkerObject(const String&amp; errorMessage, int lineNumber, int columnNumber, const String&amp; sourceURL)
</span><span class="cx"> {
</span><span class="cx">     MutexLocker lock(m_workerDocumentsLock);
</span><del>-    for (HashSet&lt;Document*&gt;::iterator iter = m_workerDocuments.begin(); iter != m_workerDocuments.end(); ++iter)
-        (*iter)-&gt;postTask(createCallbackTask(&amp;postExceptionTask, errorMessage, lineNumber, columnNumber, sourceURL));
</del><ins>+    for (auto&amp; document : m_workerDocuments)
+        document-&gt;postTask(CrossThreadTask(&amp;postExceptionTask, errorMessage, lineNumber, columnNumber, sourceURL));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static void postConsoleMessageTask(ScriptExecutionContext* document, MessageSource source, MessageLevel level, const String&amp; message, const String&amp; sourceURL, unsigned lineNumber, unsigned columnNumber)
</span><span class="lines">@@ -198,8 +198,8 @@
</span><span class="cx"> void SharedWorkerProxy::postConsoleMessageToWorkerObject(MessageSource source, MessageLevel level, const String&amp; message, int lineNumber, int columnNumber, const String&amp; sourceURL)
</span><span class="cx"> {
</span><span class="cx">     MutexLocker lock(m_workerDocumentsLock);
</span><del>-    for (HashSet&lt;Document*&gt;::iterator iter = m_workerDocuments.begin(); iter != m_workerDocuments.end(); ++iter)
-        (*iter)-&gt;postTask(createCallbackTask(&amp;postConsoleMessageTask, source, level, message, sourceURL, lineNumber, columnNumber));
</del><ins>+    for (auto&amp; document : m_workerDocuments)
+        document-&gt;postTask(CrossThreadTask(&amp;postConsoleMessageTask, source, level, message, sourceURL, lineNumber, columnNumber));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INSPECTOR)
</span></span></pre></div>
<a id="trunkSourceWebCoreworkersWorkerMessagingProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/workers/WorkerMessagingProxy.cpp (168639 => 168640)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/workers/WorkerMessagingProxy.cpp        2014-05-12 20:13:44 UTC (rev 168639)
+++ trunk/Source/WebCore/workers/WorkerMessagingProxy.cpp        2014-05-12 20:16:43 UTC (rev 168640)
</span><span class="lines">@@ -172,7 +172,7 @@
</span><span class="cx"> 
</span><span class="cx"> void WorkerMessagingProxy::postConsoleMessageToWorkerObject(MessageSource source, MessageLevel level, const String&amp; message, int lineNumber, int columnNumber, const String&amp; sourceURL)
</span><span class="cx"> {
</span><del>-    m_scriptExecutionContext-&gt;postTask(createCallbackTask(&amp;postConsoleMessageTask, AllowCrossThreadAccess(this), source, level, message, lineNumber, columnNumber, sourceURL));
</del><ins>+    m_scriptExecutionContext-&gt;postTask(CrossThreadTask(&amp;postConsoleMessageTask, AllowCrossThreadAccess(this), source, level, message, lineNumber, columnNumber, sourceURL));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WorkerMessagingProxy::workerThreadCreated(PassRefPtr&lt;DedicatedWorkerThread&gt; workerThread)
</span><span class="lines">@@ -196,7 +196,7 @@
</span><span class="cx"> void WorkerMessagingProxy::workerObjectDestroyed()
</span><span class="cx"> {
</span><span class="cx">     m_workerObject = 0;
</span><del>-    m_scriptExecutionContext-&gt;postTask(createCallbackTask(&amp;workerObjectDestroyedInternal, AllowCrossThreadAccess(this)));
</del><ins>+    m_scriptExecutionContext-&gt;postTask(CrossThreadTask(&amp;workerObjectDestroyedInternal, AllowCrossThreadAccess(this)));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WorkerMessagingProxy::notifyNetworkStateChange(bool isOnline)
</span><span class="lines">@@ -234,7 +234,7 @@
</span><span class="cx">         return;
</span><span class="cx">     ASSERT(!m_pageInspector);
</span><span class="cx">     m_pageInspector = pageInspector;
</span><del>-    m_workerThread-&gt;runLoop().postTaskForMode(createCallbackTask(connectToWorkerGlobalScopeInspectorTask, true), WorkerDebuggerAgent::debuggerTaskMode);
</del><ins>+    m_workerThread-&gt;runLoop().postTaskForMode(CrossThreadTask(connectToWorkerGlobalScopeInspectorTask, true), WorkerDebuggerAgent::debuggerTaskMode);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static void disconnectFromWorkerGlobalScopeInspectorTask(ScriptExecutionContext* context, bool)
</span><span class="lines">@@ -247,7 +247,7 @@
</span><span class="cx">     m_pageInspector = 0;
</span><span class="cx">     if (m_askedToTerminate)
</span><span class="cx">         return;
</span><del>-    m_workerThread-&gt;runLoop().postTaskForMode(createCallbackTask(disconnectFromWorkerGlobalScopeInspectorTask, true), WorkerDebuggerAgent::debuggerTaskMode);
</del><ins>+    m_workerThread-&gt;runLoop().postTaskForMode(CrossThreadTask(disconnectFromWorkerGlobalScopeInspectorTask, true), WorkerDebuggerAgent::debuggerTaskMode);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static void dispatchOnInspectorBackendTask(ScriptExecutionContext* context, const String&amp; message)
</span><span class="lines">@@ -259,7 +259,7 @@
</span><span class="cx"> {
</span><span class="cx">     if (m_askedToTerminate)
</span><span class="cx">         return;
</span><del>-    m_workerThread-&gt;runLoop().postTaskForMode(createCallbackTask(dispatchOnInspectorBackendTask, String(message)), WorkerDebuggerAgent::debuggerTaskMode);
</del><ins>+    m_workerThread-&gt;runLoop().postTaskForMode(CrossThreadTask(dispatchOnInspectorBackendTask, String(message)), WorkerDebuggerAgent::debuggerTaskMode);
</ins><span class="cx">     WorkerDebuggerAgent::interruptAndDispatchInspectorCommands(m_workerThread.get());
</span><span class="cx"> }
</span><span class="cx"> #endif
</span></span></pre>
</div>
</div>

</body>
</html>