<!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>[190331] trunk/Source</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/190331">190331</a></dd>
<dt>Author</dt> <dd>beidson@apple.com</dd>
<dt>Date</dt> <dd>2015-09-29 16:28:22 -0700 (Tue, 29 Sep 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Move WebKit2 AsyncTask to WebCore CrossThreadTask.
https://bugs.webkit.org/show_bug.cgi?id=149651

Reviewed by Alex Christensen.

Source/WebCore:

No new tests (No change in behavior).

It will be needed in WebCore to support IndexedDB.

* WebCore.xcodeproj/project.pbxproj:
* platform/CrossThreadTask.h: Renamed from Source/WebKit2/Shared/AsyncTask.h.
(WebKit::CrossThreadTask::CrossThreadTask):
(WebKit::CrossThreadTask::performTask):
(WebKit::createCrossThreadTask):

Source/WebKit2:

* DatabaseProcess/DatabaseProcess.cpp:
(WebKit::DatabaseProcess::ensureIndexedDatabaseRelativePathExists):
(WebKit::DatabaseProcess::postDatabaseTask):
(WebKit::DatabaseProcess::performNextDatabaseTask):
(WebKit::DatabaseProcess::fetchWebsiteData):
(WebKit::DatabaseProcess::deleteWebsiteData):
(WebKit::DatabaseProcess::deleteWebsiteDataForOrigins):
* DatabaseProcess/DatabaseProcess.h:
* DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:
(WebKit::UniqueIDBDatabase::shutdown):
(WebKit::UniqueIDBDatabase::shutdownBackingStore):
(WebKit::UniqueIDBDatabase::getOrEstablishIDBDatabaseMetadata):
(WebKit::UniqueIDBDatabase::openBackingStoreAndReadMetadata):
(WebKit::UniqueIDBDatabase::openTransaction):
(WebKit::UniqueIDBDatabase::beginTransaction):
(WebKit::UniqueIDBDatabase::commitTransaction):
(WebKit::UniqueIDBDatabase::resetTransaction):
(WebKit::UniqueIDBDatabase::rollbackTransaction):
(WebKit::UniqueIDBDatabase::postTransactionOperation):
(WebKit::UniqueIDBDatabase::changeDatabaseVersion):
(WebKit::UniqueIDBDatabase::createObjectStore):
(WebKit::UniqueIDBDatabase::deleteObjectStore):
(WebKit::UniqueIDBDatabase::clearObjectStore):
(WebKit::UniqueIDBDatabase::createIndex):
(WebKit::UniqueIDBDatabase::deleteIndex):
(WebKit::UniqueIDBDatabase::putRecord):
(WebKit::UniqueIDBDatabase::getRecord):
(WebKit::UniqueIDBDatabase::openCursor):
(WebKit::UniqueIDBDatabase::cursorAdvance):
(WebKit::UniqueIDBDatabase::cursorIterate):
(WebKit::UniqueIDBDatabase::count):
(WebKit::UniqueIDBDatabase::deleteRange):
(WebKit::UniqueIDBDatabase::openBackingStoreTransaction):
(WebKit::UniqueIDBDatabase::beginBackingStoreTransaction):
(WebKit::UniqueIDBDatabase::commitBackingStoreTransaction):
(WebKit::UniqueIDBDatabase::resetBackingStoreTransaction):
(WebKit::UniqueIDBDatabase::rollbackBackingStoreTransaction):
(WebKit::UniqueIDBDatabase::changeDatabaseVersionInBackingStore):
(WebKit::UniqueIDBDatabase::createObjectStoreInBackingStore):
(WebKit::UniqueIDBDatabase::deleteObjectStoreInBackingStore):
(WebKit::UniqueIDBDatabase::clearObjectStoreInBackingStore):
(WebKit::UniqueIDBDatabase::createIndexInBackingStore):
(WebKit::UniqueIDBDatabase::deleteIndexInBackingStore):
(WebKit::UniqueIDBDatabase::putRecordInBackingStore):
(WebKit::UniqueIDBDatabase::getRecordFromBackingStore):
(WebKit::UniqueIDBDatabase::openCursorInBackingStore):
(WebKit::UniqueIDBDatabase::advanceCursorInBackingStore):
(WebKit::UniqueIDBDatabase::iterateCursorInBackingStore):
(WebKit::UniqueIDBDatabase::countInBackingStore):
(WebKit::UniqueIDBDatabase::deleteRangeInBackingStore):
(WebKit::UniqueIDBDatabase::postMainThreadTask):
(WebKit::UniqueIDBDatabase::performNextMainThreadTask):
(WebKit::UniqueIDBDatabase::postDatabaseTask):
(WebKit::UniqueIDBDatabase::performNextDatabaseTask):
* DatabaseProcess/IndexedDB/UniqueIDBDatabase.h:
* WebKit2.xcodeproj/project.pbxproj:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2DatabaseProcessDatabaseProcesscpp">trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp</a></li>
<li><a href="#trunkSourceWebKit2DatabaseProcessDatabaseProcessh">trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.h</a></li>
<li><a href="#trunkSourceWebKit2DatabaseProcessIndexedDBUniqueIDBDatabasecpp">trunk/Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp</a></li>
<li><a href="#trunkSourceWebKit2DatabaseProcessIndexedDBUniqueIDBDatabaseh">trunk/Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.h</a></li>
<li><a href="#trunkSourceWebKit2WebKit2xcodeprojprojectpbxproj">trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreplatformCrossThreadTaskh">trunk/Source/WebCore/platform/CrossThreadTask.h</a></li>
</ul>

<h3>Removed Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2SharedAsyncTaskh">trunk/Source/WebKit2/Shared/AsyncTask.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (190330 => 190331)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-09-29 22:56:20 UTC (rev 190330)
+++ trunk/Source/WebCore/ChangeLog        2015-09-29 23:28:22 UTC (rev 190331)
</span><span class="lines">@@ -1,3 +1,20 @@
</span><ins>+2015-09-29  Brady Eidson  &lt;beidson@apple.com&gt;
+
+        Move WebKit2 AsyncTask to WebCore CrossThreadTask.
+        https://bugs.webkit.org/show_bug.cgi?id=149651
+
+        Reviewed by Alex Christensen.
+
+        No new tests (No change in behavior).
+        
+        It will be needed in WebCore to support IndexedDB.
+
+        * WebCore.xcodeproj/project.pbxproj:
+        * platform/CrossThreadTask.h: Renamed from Source/WebKit2/Shared/AsyncTask.h.
+        (WebKit::CrossThreadTask::CrossThreadTask):
+        (WebKit::CrossThreadTask::performTask):
+        (WebKit::createCrossThreadTask):
+
</ins><span class="cx"> 2015-09-29  Wenson Hsieh  &lt;wenson_hsieh@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Snap offsets should update when style is programmatically changed
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (190330 => 190331)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2015-09-29 22:56:20 UTC (rev 190330)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2015-09-29 23:28:22 UTC (rev 190331)
</span><span class="lines">@@ -2156,6 +2156,7 @@
</span><span class="cx">                 51E3F9D60DA05E1D00250911 /* JSStorage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51E3F9D40DA05E1D00250911 /* JSStorage.cpp */; };
</span><span class="cx">                 51E4143416A6596300C633C7 /* ResourceHandleTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 51E4143216A6595100C633C7 /* ResourceHandleTypes.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 51E6821016387302003BBF3C /* LoaderStrategy.h in Headers */ = {isa = PBXBuildFile; fileRef = 51E6820F16387302003BBF3C /* LoaderStrategy.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><ins>+                51E6FA7C1BBB4FC3008700D9 /* CrossThreadTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 51E6FA7B1BBB4FB5008700D9 /* CrossThreadTask.h */; settings = {ATTRIBUTES = (Private, ); }; };
</ins><span class="cx">                 51EC92650CE90DD400F90308 /* JSCustomSQLStatementErrorCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51EC925D0CE90DD400F90308 /* JSCustomSQLStatementErrorCallback.cpp */; };
</span><span class="cx">                 51EE7B381AA50B0500F92B21 /* ResourceLoadInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 51EE7B371AA50B0500F92B21 /* ResourceLoadInfo.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 51EE7B3A1AA5123100F92B21 /* ResourceLoadInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51EE7B391AA5123100F92B21 /* ResourceLoadInfo.cpp */; };
</span><span class="lines">@@ -9515,6 +9516,7 @@
</span><span class="cx">                 51E3F9D50DA05E1D00250911 /* JSStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSStorage.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 51E4143216A6595100C633C7 /* ResourceHandleTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResourceHandleTypes.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 51E6820F16387302003BBF3C /* LoaderStrategy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LoaderStrategy.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                51E6FA7B1BBB4FB5008700D9 /* CrossThreadTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CrossThreadTask.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 51EAC5B018163F4E004F1BA4 /* IDBRecordIdentifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBRecordIdentifier.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 51EC925D0CE90DD400F90308 /* JSCustomSQLStatementErrorCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCustomSQLStatementErrorCallback.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 51EE7B371AA50B0500F92B21 /* ResourceLoadInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ResourceLoadInfo.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -22157,6 +22159,7 @@
</span><span class="cx">                                 862F129D18C1572C005C54AF /* CountedUserActivity.h */,
</span><span class="cx">                                 2E4346560F546A9900B0F1BA /* CrossThreadCopier.cpp */,
</span><span class="cx">                                 2E4346570F546A9900B0F1BA /* CrossThreadCopier.h */,
</span><ins>+                                51E6FA7B1BBB4FB5008700D9 /* CrossThreadTask.h */,
</ins><span class="cx">                                 E11AF15011B9A1A300805103 /* Cursor.cpp */,
</span><span class="cx">                                 F587868402DE3B8601EA4122 /* Cursor.h */,
</span><span class="cx">                                 A5732B08136A161D005C8D7C /* DateComponents.cpp */,
</span><span class="lines">@@ -25510,6 +25513,7 @@
</span><span class="cx">                                 07367DDF172CA67F00D861B9 /* InbandTextTrackPrivateLegacyAVFObjC.h in Headers */,
</span><span class="cx">                                 BE16C59517CFE17200852C04 /* InbandWebVTTTextTrack.h in Headers */,
</span><span class="cx">                                 DB23C2CC0A508D29002489EB /* IndentOutdentCommand.h in Headers */,
</span><ins>+                                51E6FA7C1BBB4FC3008700D9 /* CrossThreadTask.h in Headers */,
</ins><span class="cx">                                 A8CFF5E50A155A05000A4234 /* InlineBox.h in Headers */,
</span><span class="cx">                                 B57CB52E182A3EFC0079A647 /* InlineElementBox.h in Headers */,
</span><span class="cx">                                 A8CFF5E30A155A05000A4234 /* InlineFlowBox.h in Headers */,
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformCrossThreadTaskhfromrev190330trunkSourceWebKit2SharedAsyncTaskh"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/platform/CrossThreadTask.h (from rev 190330, trunk/Source/WebKit2/Shared/AsyncTask.h) (0 => 190331)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/CrossThreadTask.h                                (rev 0)
+++ trunk/Source/WebCore/platform/CrossThreadTask.h        2015-09-29 23:28:22 UTC (rev 190331)
</span><span class="lines">@@ -0,0 +1,228 @@
</span><ins>+/*
+ * Copyright (C) 2013, 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef CrossThreadTask_h
+#define CrossThreadTask_h
+
+#include &quot;CrossThreadCopier.h&quot;
+#include &lt;functional&gt;
+
+namespace WebKit {
+
+class CrossThreadTask {
+    WTF_MAKE_NONCOPYABLE(CrossThreadTask);
+public:
+    CrossThreadTask(const std::function&lt;void ()&gt; taskFunction)
+        : m_taskFunction(taskFunction)
+    {
+        ASSERT(taskFunction);
+    }
+
+    void performTask()
+    {
+        m_taskFunction();
+    }
+
+protected:
+    CrossThreadTask() { }
+
+    std::function&lt;void ()&gt; m_taskFunction;
+};
+
+template &lt;typename T, typename... Arguments&gt;
+class CrossThreadTaskImpl final : public CrossThreadTask {
+public:
+    CrossThreadTaskImpl(T* callee, void (T::*method)(Arguments...), Arguments&amp;&amp;... arguments)
+    {
+        m_taskFunction = [callee, method, arguments...] {
+            (callee-&gt;*method)(arguments...);
+        };
+    }
+};
+
+template&lt;typename T&gt;
+std::unique_ptr&lt;CrossThreadTask&gt; createCrossThreadTask(
+    T&amp; callee,
+    void (T::*method)())
+{
+    return std::make_unique&lt;CrossThreadTaskImpl&lt;T&gt;&gt;(&amp;callee, method);
+}
+
+template&lt;typename T, typename P1, typename MP1&gt;
+std::unique_ptr&lt;CrossThreadTask&gt; createCrossThreadTask(
+    T&amp; callee,
+    void (T::*method)(MP1),
+    const P1&amp; parameter1)
+{
+    return std::make_unique&lt;CrossThreadTaskImpl&lt;T, MP1&gt;&gt;(
+        &amp;callee,
+        method,
+        WebCore::CrossThreadCopier&lt;P1&gt;::copy(parameter1));
+}
+
+template&lt;typename T, typename P1, typename MP1, typename P2, typename MP2&gt;
+std::unique_ptr&lt;CrossThreadTask&gt; createCrossThreadTask(
+    T&amp; callee,
+    void (T::*method)(MP1, MP2),
+    const P1&amp; parameter1,
+    const P2&amp; parameter2)
+{
+    return std::make_unique&lt;CrossThreadTaskImpl&lt;T, MP1, MP2&gt;&gt;(
+        &amp;callee,
+        method,
+        WebCore::CrossThreadCopier&lt;P1&gt;::copy(parameter1),
+        WebCore::CrossThreadCopier&lt;P2&gt;::copy(parameter2));
+
+}
+
+template&lt;typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3&gt;
+std::unique_ptr&lt;CrossThreadTask&gt; createCrossThreadTask(
+    T&amp; callee,
+    void (T::*method)(MP1, MP2, MP3),
+    const P1&amp; parameter1,
+    const P2&amp; parameter2,
+    const P3&amp; parameter3)
+{
+    return std::make_unique&lt;CrossThreadTaskImpl&lt;T, MP1, MP2, MP3&gt;&gt;(
+        &amp;callee,
+        method,
+        WebCore::CrossThreadCopier&lt;P1&gt;::copy(parameter1),
+        WebCore::CrossThreadCopier&lt;P2&gt;::copy(parameter2),
+        WebCore::CrossThreadCopier&lt;P3&gt;::copy(parameter3));
+}
+
+template&lt;typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4&gt;
+std::unique_ptr&lt;CrossThreadTask&gt; createCrossThreadTask(
+    T&amp; callee,
+    void (T::*method)(MP1, MP2, MP3, MP4),
+    const P1&amp; parameter1,
+    const P2&amp; parameter2,
+    const P3&amp; parameter3,
+    const P4&amp; parameter4)
+{
+    return std::make_unique&lt;CrossThreadTaskImpl&lt;T, MP1, MP2, MP3, MP4&gt;&gt;(
+        &amp;callee,
+        method,
+        WebCore::CrossThreadCopier&lt;P1&gt;::copy(parameter1),
+        WebCore::CrossThreadCopier&lt;P2&gt;::copy(parameter2),
+        WebCore::CrossThreadCopier&lt;P3&gt;::copy(parameter3),
+        WebCore::CrossThreadCopier&lt;P4&gt;::copy(parameter4));
+}
+
+template&lt;typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5&gt;
+std::unique_ptr&lt;CrossThreadTask&gt; createCrossThreadTask(
+    T&amp; callee,
+    void (T::*method)(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)
+{
+    return std::make_unique&lt;CrossThreadTaskImpl&lt;T, MP1, MP2, MP3, MP4, MP5&gt;&gt;(
+        &amp;callee,
+        method,
+        WebCore::CrossThreadCopier&lt;P1&gt;::copy(parameter1),
+        WebCore::CrossThreadCopier&lt;P2&gt;::copy(parameter2),
+        WebCore::CrossThreadCopier&lt;P3&gt;::copy(parameter3),
+        WebCore::CrossThreadCopier&lt;P4&gt;::copy(parameter4),
+        WebCore::CrossThreadCopier&lt;P5&gt;::copy(parameter5));
+}
+
+template&lt;typename T, 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;
+std::unique_ptr&lt;CrossThreadTask&gt; createCrossThreadTask(
+    T&amp; callee,
+    void (T::*method)(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)
+{
+    return std::make_unique&lt;CrossThreadTaskImpl&lt;T, MP1, MP2, MP3, MP4, MP5, MP6&gt;&gt;(
+        &amp;callee,
+        method,
+        WebCore::CrossThreadCopier&lt;P1&gt;::copy(parameter1),
+        WebCore::CrossThreadCopier&lt;P2&gt;::copy(parameter2),
+        WebCore::CrossThreadCopier&lt;P3&gt;::copy(parameter3),
+        WebCore::CrossThreadCopier&lt;P4&gt;::copy(parameter4),
+        WebCore::CrossThreadCopier&lt;P5&gt;::copy(parameter5),
+        WebCore::CrossThreadCopier&lt;P6&gt;::copy(parameter6));
+}
+
+template&lt;typename T, 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;
+std::unique_ptr&lt;CrossThreadTask&gt; createCrossThreadTask(
+    T&amp; callee,
+    void (T::*method)(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)
+{
+    return std::make_unique&lt;CrossThreadTaskImpl&lt;T, MP1, MP2, MP3, MP4, MP5, MP6, MP7&gt;&gt;(
+        &amp;callee,
+        method,
+        WebCore::CrossThreadCopier&lt;P1&gt;::copy(parameter1),
+        WebCore::CrossThreadCopier&lt;P2&gt;::copy(parameter2),
+        WebCore::CrossThreadCopier&lt;P3&gt;::copy(parameter3),
+        WebCore::CrossThreadCopier&lt;P4&gt;::copy(parameter4),
+        WebCore::CrossThreadCopier&lt;P5&gt;::copy(parameter5),
+        WebCore::CrossThreadCopier&lt;P6&gt;::copy(parameter6),
+        WebCore::CrossThreadCopier&lt;P7&gt;::copy(parameter7));
+}
+
+template&lt;typename T, 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;
+std::unique_ptr&lt;CrossThreadTask&gt; createCrossThreadTask(
+    T&amp; callee,
+    void (T::*method)(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)
+{
+    return std::make_unique&lt;CrossThreadTaskImpl&lt;T, MP1, MP2, MP3, MP4, MP5, MP6, MP7, MP8&gt;&gt;(
+        &amp;callee,
+        method,
+        WebCore::CrossThreadCopier&lt;P1&gt;::copy(parameter1),
+        WebCore::CrossThreadCopier&lt;P2&gt;::copy(parameter2),
+        WebCore::CrossThreadCopier&lt;P3&gt;::copy(parameter3),
+        WebCore::CrossThreadCopier&lt;P4&gt;::copy(parameter4),
+        WebCore::CrossThreadCopier&lt;P5&gt;::copy(parameter5),
+        WebCore::CrossThreadCopier&lt;P6&gt;::copy(parameter6),
+        WebCore::CrossThreadCopier&lt;P7&gt;::copy(parameter7),
+        WebCore::CrossThreadCopier&lt;P8&gt;::copy(parameter8));
+}
+
+} // namespace WebKit
+
+#endif // CrossThreadTask_h
</ins></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (190330 => 190331)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2015-09-29 22:56:20 UTC (rev 190330)
+++ trunk/Source/WebKit2/ChangeLog        2015-09-29 23:28:22 UTC (rev 190331)
</span><span class="lines">@@ -1,3 +1,67 @@
</span><ins>+2015-09-29  Brady Eidson  &lt;beidson@apple.com&gt;
+
+        Move WebKit2 AsyncTask to WebCore CrossThreadTask.
+        https://bugs.webkit.org/show_bug.cgi?id=149651
+
+        Reviewed by Alex Christensen.
+
+        * DatabaseProcess/DatabaseProcess.cpp:
+        (WebKit::DatabaseProcess::ensureIndexedDatabaseRelativePathExists):
+        (WebKit::DatabaseProcess::postDatabaseTask):
+        (WebKit::DatabaseProcess::performNextDatabaseTask):
+        (WebKit::DatabaseProcess::fetchWebsiteData):
+        (WebKit::DatabaseProcess::deleteWebsiteData):
+        (WebKit::DatabaseProcess::deleteWebsiteDataForOrigins):
+        * DatabaseProcess/DatabaseProcess.h:
+        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp:
+        (WebKit::UniqueIDBDatabase::shutdown):
+        (WebKit::UniqueIDBDatabase::shutdownBackingStore):
+        (WebKit::UniqueIDBDatabase::getOrEstablishIDBDatabaseMetadata):
+        (WebKit::UniqueIDBDatabase::openBackingStoreAndReadMetadata):
+        (WebKit::UniqueIDBDatabase::openTransaction):
+        (WebKit::UniqueIDBDatabase::beginTransaction):
+        (WebKit::UniqueIDBDatabase::commitTransaction):
+        (WebKit::UniqueIDBDatabase::resetTransaction):
+        (WebKit::UniqueIDBDatabase::rollbackTransaction):
+        (WebKit::UniqueIDBDatabase::postTransactionOperation):
+        (WebKit::UniqueIDBDatabase::changeDatabaseVersion):
+        (WebKit::UniqueIDBDatabase::createObjectStore):
+        (WebKit::UniqueIDBDatabase::deleteObjectStore):
+        (WebKit::UniqueIDBDatabase::clearObjectStore):
+        (WebKit::UniqueIDBDatabase::createIndex):
+        (WebKit::UniqueIDBDatabase::deleteIndex):
+        (WebKit::UniqueIDBDatabase::putRecord):
+        (WebKit::UniqueIDBDatabase::getRecord):
+        (WebKit::UniqueIDBDatabase::openCursor):
+        (WebKit::UniqueIDBDatabase::cursorAdvance):
+        (WebKit::UniqueIDBDatabase::cursorIterate):
+        (WebKit::UniqueIDBDatabase::count):
+        (WebKit::UniqueIDBDatabase::deleteRange):
+        (WebKit::UniqueIDBDatabase::openBackingStoreTransaction):
+        (WebKit::UniqueIDBDatabase::beginBackingStoreTransaction):
+        (WebKit::UniqueIDBDatabase::commitBackingStoreTransaction):
+        (WebKit::UniqueIDBDatabase::resetBackingStoreTransaction):
+        (WebKit::UniqueIDBDatabase::rollbackBackingStoreTransaction):
+        (WebKit::UniqueIDBDatabase::changeDatabaseVersionInBackingStore):
+        (WebKit::UniqueIDBDatabase::createObjectStoreInBackingStore):
+        (WebKit::UniqueIDBDatabase::deleteObjectStoreInBackingStore):
+        (WebKit::UniqueIDBDatabase::clearObjectStoreInBackingStore):
+        (WebKit::UniqueIDBDatabase::createIndexInBackingStore):
+        (WebKit::UniqueIDBDatabase::deleteIndexInBackingStore):
+        (WebKit::UniqueIDBDatabase::putRecordInBackingStore):
+        (WebKit::UniqueIDBDatabase::getRecordFromBackingStore):
+        (WebKit::UniqueIDBDatabase::openCursorInBackingStore):
+        (WebKit::UniqueIDBDatabase::advanceCursorInBackingStore):
+        (WebKit::UniqueIDBDatabase::iterateCursorInBackingStore):
+        (WebKit::UniqueIDBDatabase::countInBackingStore):
+        (WebKit::UniqueIDBDatabase::deleteRangeInBackingStore):
+        (WebKit::UniqueIDBDatabase::postMainThreadTask):
+        (WebKit::UniqueIDBDatabase::performNextMainThreadTask):
+        (WebKit::UniqueIDBDatabase::postDatabaseTask):
+        (WebKit::UniqueIDBDatabase::performNextDatabaseTask):
+        * DatabaseProcess/IndexedDB/UniqueIDBDatabase.h:
+        * WebKit2.xcodeproj/project.pbxproj:
+
</ins><span class="cx"> 2015-09-29  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Memory cache revalidations should refresh the network disk cache
</span></span></pre></div>
<a id="trunkSourceWebKit2DatabaseProcessDatabaseProcesscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp (190330 => 190331)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp        2015-09-29 22:56:20 UTC (rev 190330)
+++ trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp        2015-09-29 23:28:22 UTC (rev 190331)
</span><span class="lines">@@ -28,7 +28,6 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(DATABASE_PROCESS)
</span><span class="cx"> 
</span><del>-#include &quot;AsyncTask.h&quot;
</del><span class="cx"> #include &quot;DatabaseProcessCreationParameters.h&quot;
</span><span class="cx"> #include &quot;DatabaseProcessMessages.h&quot;
</span><span class="cx"> #include &quot;DatabaseProcessProxyMessages.h&quot;
</span><span class="lines">@@ -36,6 +35,7 @@
</span><span class="cx"> #include &quot;UniqueIDBDatabase.h&quot;
</span><span class="cx"> #include &quot;WebCrossThreadCopier.h&quot;
</span><span class="cx"> #include &quot;WebsiteData.h&quot;
</span><ins>+#include &lt;WebCore/CrossThreadTask.h&gt;
</ins><span class="cx"> #include &lt;WebCore/FileSystem.h&gt;
</span><span class="cx"> #include &lt;WebCore/NotImplemented.h&gt;
</span><span class="cx"> #include &lt;WebCore/SessionID.h&gt;
</span><span class="lines">@@ -134,7 +134,7 @@
</span><span class="cx"> #if ENABLE(INDEXED_DATABASE)
</span><span class="cx"> void DatabaseProcess::ensureIndexedDatabaseRelativePathExists(const String&amp; relativePath)
</span><span class="cx"> {
</span><del>-    postDatabaseTask(createAsyncTask(*this, &amp;DatabaseProcess::ensurePathExists, absoluteIndexedDatabasePathFromDatabaseRelativePath(relativePath)));
</del><ins>+    postDatabaseTask(createCrossThreadTask(*this, &amp;DatabaseProcess::ensurePathExists, absoluteIndexedDatabasePathFromDatabaseRelativePath(relativePath)));
</ins><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="lines">@@ -155,7 +155,7 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-void DatabaseProcess::postDatabaseTask(std::unique_ptr&lt;AsyncTask&gt; task)
</del><ins>+void DatabaseProcess::postDatabaseTask(std::unique_ptr&lt;CrossThreadTask&gt; task)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(RunLoop::isMain());
</span><span class="cx"> 
</span><span class="lines">@@ -172,7 +172,7 @@
</span><span class="cx"> {
</span><span class="cx">     ASSERT(!RunLoop::isMain());
</span><span class="cx"> 
</span><del>-    std::unique_ptr&lt;AsyncTask&gt; task;
</del><ins>+    std::unique_ptr&lt;CrossThreadTask&gt; task;
</ins><span class="cx">     {
</span><span class="cx">         LockHolder locker(m_databaseTaskMutex);
</span><span class="cx">         ASSERT(!m_databaseTasks.isEmpty());
</span><span class="lines">@@ -235,7 +235,7 @@
</span><span class="cx"> #if ENABLE(INDEXED_DATABASE)
</span><span class="cx">     if (websiteDataTypes &amp; WebsiteDataTypeIndexedDBDatabases) {
</span><span class="cx">         // FIXME: Pick the right database store based on the session ID.
</span><del>-        postDatabaseTask(std::make_unique&lt;AsyncTask&gt;([callbackAggregator, websiteDataTypes, this] {
</del><ins>+        postDatabaseTask(std::make_unique&lt;CrossThreadTask&gt;([callbackAggregator, websiteDataTypes, this] {
</ins><span class="cx"> 
</span><span class="cx">             Vector&lt;RefPtr&lt;SecurityOrigin&gt;&gt; securityOrigins = indexedDatabaseOrigins();
</span><span class="cx"> 
</span><span class="lines">@@ -272,7 +272,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INDEXED_DATABASE)
</span><span class="cx">     if (websiteDataTypes &amp; WebsiteDataTypeIndexedDBDatabases) {
</span><del>-        postDatabaseTask(std::make_unique&lt;AsyncTask&gt;([this, callbackAggregator, modifiedSince] {
</del><ins>+        postDatabaseTask(std::make_unique&lt;CrossThreadTask&gt;([this, callbackAggregator, modifiedSince] {
</ins><span class="cx"> 
</span><span class="cx">             deleteIndexedDatabaseEntriesModifiedSince(modifiedSince);
</span><span class="cx">             RunLoop::main().dispatch([callbackAggregator] { });
</span><span class="lines">@@ -309,7 +309,7 @@
</span><span class="cx">         for (const auto&amp; securityOriginData : securityOriginDatas)
</span><span class="cx">             securityOrigins.append(securityOriginData.securityOrigin());
</span><span class="cx"> 
</span><del>-        postDatabaseTask(std::make_unique&lt;AsyncTask&gt;([this, securityOrigins, callbackAggregator] {
</del><ins>+        postDatabaseTask(std::make_unique&lt;CrossThreadTask&gt;([this, securityOrigins, callbackAggregator] {
</ins><span class="cx">             deleteIndexedDatabaseEntriesForOrigins(securityOrigins);
</span><span class="cx"> 
</span><span class="cx">             RunLoop::main().dispatch([callbackAggregator] { });
</span></span></pre></div>
<a id="trunkSourceWebKit2DatabaseProcessDatabaseProcessh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.h (190330 => 190331)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.h        2015-09-29 22:56:20 UTC (rev 190330)
+++ trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.h        2015-09-29 23:28:22 UTC (rev 190331)
</span><span class="lines">@@ -39,7 +39,7 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebKit {
</span><span class="cx"> 
</span><del>-class AsyncTask;
</del><ins>+class CrossThreadTask;
</ins><span class="cx"> class DatabaseToWebProcessConnection;
</span><span class="cx"> class UniqueIDBDatabase;
</span><span class="cx"> 
</span><span class="lines">@@ -64,7 +64,7 @@
</span><span class="cx"> 
</span><span class="cx">     WorkQueue&amp; queue() { return m_queue.get(); }
</span><span class="cx"> 
</span><del>-    void postDatabaseTask(std::unique_ptr&lt;AsyncTask&gt;);
</del><ins>+    void postDatabaseTask(std::unique_ptr&lt;CrossThreadTask&gt;);
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     DatabaseProcess();
</span><span class="lines">@@ -112,7 +112,7 @@
</span><span class="cx">     HashMap&lt;UniqueIDBDatabaseIdentifier, RefPtr&lt;UniqueIDBDatabase&gt;&gt; m_idbDatabases;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-    Deque&lt;std::unique_ptr&lt;AsyncTask&gt;&gt; m_databaseTasks;
</del><ins>+    Deque&lt;std::unique_ptr&lt;CrossThreadTask&gt;&gt; m_databaseTasks;
</ins><span class="cx">     Lock m_databaseTaskMutex;
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2DatabaseProcessIndexedDBUniqueIDBDatabasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp (190330 => 190331)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp        2015-09-29 22:56:20 UTC (rev 190330)
+++ trunk/Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.cpp        2015-09-29 23:28:22 UTC (rev 190331)
</span><span class="lines">@@ -29,13 +29,13 @@
</span><span class="cx"> #if ENABLE(INDEXED_DATABASE) &amp;&amp; ENABLE(DATABASE_PROCESS)
</span><span class="cx"> 
</span><span class="cx"> #include &quot;AsyncRequest.h&quot;
</span><del>-#include &quot;AsyncTask.h&quot;
</del><span class="cx"> #include &quot;DataReference.h&quot;
</span><span class="cx"> #include &quot;DatabaseProcess.h&quot;
</span><span class="cx"> #include &quot;DatabaseProcessIDBConnection.h&quot;
</span><span class="cx"> #include &quot;Logging.h&quot;
</span><span class="cx"> #include &quot;UniqueIDBDatabaseBackingStoreSQLite.h&quot;
</span><span class="cx"> #include &quot;WebCrossThreadCopier.h&quot;
</span><ins>+#include &lt;WebCore/CrossThreadTask.h&gt;
</ins><span class="cx"> #include &lt;WebCore/FileSystem.h&gt;
</span><span class="cx"> #include &lt;WebCore/IDBDatabaseMetadata.h&gt;
</span><span class="cx"> #include &lt;WebCore/IDBGetResult.h&gt;
</span><span class="lines">@@ -140,7 +140,7 @@
</span><span class="cx">         m_databaseTasks.clear();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    postDatabaseTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::shutdownBackingStore, type, absoluteDatabaseDirectory()), DatabaseTaskType::Shutdown);
</del><ins>+    postDatabaseTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::shutdownBackingStore, type, absoluteDatabaseDirectory()), DatabaseTaskType::Shutdown);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::shutdownBackingStore(UniqueIDBDatabaseShutdownType type, const String&amp; databaseDirectory)
</span><span class="lines">@@ -156,7 +156,7 @@
</span><span class="cx">         deleteEmptyDirectory(databaseDirectory);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didShutdownBackingStore, type), DatabaseTaskType::Shutdown);
</del><ins>+    postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didShutdownBackingStore, type), DatabaseTaskType::Shutdown);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::didShutdownBackingStore(UniqueIDBDatabaseShutdownType type)
</span><span class="lines">@@ -248,7 +248,7 @@
</span><span class="cx">     m_pendingMetadataRequests.append(request.release());
</span><span class="cx"> 
</span><span class="cx">     if (shouldOpenBackingStore)
</span><del>-        postDatabaseTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::openBackingStoreAndReadMetadata, m_identifier, absoluteDatabaseDirectory()));
</del><ins>+        postDatabaseTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::openBackingStoreAndReadMetadata, m_identifier, absoluteDatabaseDirectory()));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::openBackingStoreAndReadMetadata(const UniqueIDBDatabaseIdentifier&amp; identifier, const String&amp; databaseDirectory)
</span><span class="lines">@@ -264,7 +264,7 @@
</span><span class="cx">     m_backingStore = UniqueIDBDatabaseBackingStoreSQLite::create(identifier, databaseDirectory);
</span><span class="cx">     std::unique_ptr&lt;IDBDatabaseMetadata&gt; metadata = m_backingStore-&gt;getOrEstablishMetadata();
</span><span class="cx"> 
</span><del>-    postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didOpenBackingStoreAndReadMetadata, metadata ? *metadata : IDBDatabaseMetadata(), !!metadata));
</del><ins>+    postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didOpenBackingStoreAndReadMetadata, metadata ? *metadata : IDBDatabaseMetadata(), !!metadata));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::didOpenBackingStoreAndReadMetadata(const IDBDatabaseMetadata&amp; metadata, bool success)
</span><span class="lines">@@ -285,30 +285,30 @@
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::openTransaction(const IDBIdentifier&amp; transactionIdentifier, const Vector&lt;int64_t&gt;&amp; objectStoreIDs, IndexedDB::TransactionMode mode, std::function&lt;void (bool)&gt; successCallback)
</span><span class="cx"> {
</span><del>-    postTransactionOperation(transactionIdentifier, createAsyncTask(*this, &amp;UniqueIDBDatabase::openBackingStoreTransaction, transactionIdentifier, objectStoreIDs, mode), successCallback);
</del><ins>+    postTransactionOperation(transactionIdentifier, createCrossThreadTask(*this, &amp;UniqueIDBDatabase::openBackingStoreTransaction, transactionIdentifier, objectStoreIDs, mode), successCallback);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::beginTransaction(const IDBIdentifier&amp; transactionIdentifier, std::function&lt;void (bool)&gt; successCallback)
</span><span class="cx"> {
</span><del>-    postTransactionOperation(transactionIdentifier, createAsyncTask(*this, &amp;UniqueIDBDatabase::beginBackingStoreTransaction, transactionIdentifier), successCallback);
</del><ins>+    postTransactionOperation(transactionIdentifier, createCrossThreadTask(*this, &amp;UniqueIDBDatabase::beginBackingStoreTransaction, transactionIdentifier), successCallback);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::commitTransaction(const IDBIdentifier&amp; transactionIdentifier, std::function&lt;void (bool)&gt; successCallback)
</span><span class="cx"> {
</span><del>-    postTransactionOperation(transactionIdentifier, createAsyncTask(*this, &amp;UniqueIDBDatabase::commitBackingStoreTransaction, transactionIdentifier), successCallback);
</del><ins>+    postTransactionOperation(transactionIdentifier, createCrossThreadTask(*this, &amp;UniqueIDBDatabase::commitBackingStoreTransaction, transactionIdentifier), successCallback);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::resetTransaction(const IDBIdentifier&amp; transactionIdentifier, std::function&lt;void (bool)&gt; successCallback)
</span><span class="cx"> {
</span><del>-    postTransactionOperation(transactionIdentifier, createAsyncTask(*this, &amp;UniqueIDBDatabase::resetBackingStoreTransaction, transactionIdentifier), successCallback);
</del><ins>+    postTransactionOperation(transactionIdentifier, createCrossThreadTask(*this, &amp;UniqueIDBDatabase::resetBackingStoreTransaction, transactionIdentifier), successCallback);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::rollbackTransaction(const IDBIdentifier&amp; transactionIdentifier, std::function&lt;void (bool)&gt; successCallback)
</span><span class="cx"> {
</span><del>-    postTransactionOperation(transactionIdentifier, createAsyncTask(*this, &amp;UniqueIDBDatabase::rollbackBackingStoreTransaction, transactionIdentifier), successCallback);
</del><ins>+    postTransactionOperation(transactionIdentifier, createCrossThreadTask(*this, &amp;UniqueIDBDatabase::rollbackBackingStoreTransaction, transactionIdentifier), successCallback);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void UniqueIDBDatabase::postTransactionOperation(const IDBIdentifier&amp; transactionIdentifier, std::unique_ptr&lt;AsyncTask&gt; task, std::function&lt;void (bool)&gt; successCallback)
</del><ins>+void UniqueIDBDatabase::postTransactionOperation(const IDBIdentifier&amp; transactionIdentifier, std::unique_ptr&lt;CrossThreadTask&gt; task, std::function&lt;void (bool)&gt; successCallback)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(RunLoop::isMain());
</span><span class="cx"> 
</span><span class="lines">@@ -371,7 +371,7 @@
</span><span class="cx">     uint64_t requestID = request-&gt;requestID();
</span><span class="cx">     m_pendingDatabaseTasks.add(requestID, request.release());
</span><span class="cx"> 
</span><del>-    postDatabaseTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::changeDatabaseVersionInBackingStore, requestID, transactionIdentifier, newVersion));
</del><ins>+    postDatabaseTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::changeDatabaseVersionInBackingStore, requestID, transactionIdentifier, newVersion));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::didChangeDatabaseVersion(uint64_t requestID, bool success)
</span><span class="lines">@@ -434,7 +434,7 @@
</span><span class="cx">     uint64_t requestID = request-&gt;requestID();
</span><span class="cx">     m_pendingDatabaseTasks.add(requestID, request.release());
</span><span class="cx"> 
</span><del>-    postDatabaseTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::createObjectStoreInBackingStore, requestID, transactionIdentifier, metadata));
</del><ins>+    postDatabaseTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::createObjectStoreInBackingStore, requestID, transactionIdentifier, metadata));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::deleteObjectStore(const IDBIdentifier&amp; transactionIdentifier, int64_t objectStoreID, std::function&lt;void (bool)&gt; successCallback)
</span><span class="lines">@@ -461,7 +461,7 @@
</span><span class="cx">     uint64_t requestID = request-&gt;requestID();
</span><span class="cx">     m_pendingDatabaseTasks.add(requestID, request.release());
</span><span class="cx"> 
</span><del>-    postDatabaseTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::deleteObjectStoreInBackingStore, requestID, transactionIdentifier, objectStoreID));
</del><ins>+    postDatabaseTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::deleteObjectStoreInBackingStore, requestID, transactionIdentifier, objectStoreID));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::clearObjectStore(const IDBIdentifier&amp; transactionIdentifier, int64_t objectStoreID, std::function&lt;void (bool)&gt; successCallback)
</span><span class="lines">@@ -484,7 +484,7 @@
</span><span class="cx">     uint64_t requestID = request-&gt;requestID();
</span><span class="cx">     m_pendingDatabaseTasks.add(requestID, request.release());
</span><span class="cx"> 
</span><del>-    postDatabaseTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::clearObjectStoreInBackingStore, requestID, transactionIdentifier, objectStoreID));
</del><ins>+    postDatabaseTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::clearObjectStoreInBackingStore, requestID, transactionIdentifier, objectStoreID));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::createIndex(const IDBIdentifier&amp; transactionIdentifier, int64_t objectStoreID, const IDBIndexMetadata&amp; metadata, std::function&lt;void (bool)&gt; successCallback)
</span><span class="lines">@@ -518,7 +518,7 @@
</span><span class="cx">     uint64_t requestID = request-&gt;requestID();
</span><span class="cx">     m_pendingDatabaseTasks.add(requestID, request.release());
</span><span class="cx"> 
</span><del>-    postDatabaseTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::createIndexInBackingStore, requestID, transactionIdentifier, objectStoreID, metadata));
</del><ins>+    postDatabaseTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::createIndexInBackingStore, requestID, transactionIdentifier, objectStoreID, metadata));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::deleteIndex(const IDBIdentifier&amp; transactionIdentifier, int64_t objectStoreID, int64_t indexID, std::function&lt;void (bool)&gt; successCallback)
</span><span class="lines">@@ -552,7 +552,7 @@
</span><span class="cx">     uint64_t requestID = request-&gt;requestID();
</span><span class="cx">     m_pendingDatabaseTasks.add(requestID, request.release());
</span><span class="cx"> 
</span><del>-    postDatabaseTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::deleteIndexInBackingStore, requestID, transactionIdentifier, objectStoreID, indexID));
</del><ins>+    postDatabaseTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::deleteIndexInBackingStore, requestID, transactionIdentifier, objectStoreID, indexID));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::putRecord(const IDBIdentifier&amp; transactionIdentifier, int64_t objectStoreID, const IDBKeyData&amp; keyData, const IPC::DataReference&amp; value, int64_t putMode, const Vector&lt;int64_t&gt;&amp; indexIDs, const Vector&lt;Vector&lt;IDBKeyData&gt;&gt;&amp; indexKeys, std::function&lt;void (const IDBKeyData&amp;, uint32_t, const String&amp;)&gt; callback)
</span><span class="lines">@@ -575,7 +575,7 @@
</span><span class="cx">     uint64_t requestID = request-&gt;requestID();
</span><span class="cx">     m_pendingDatabaseTasks.add(requestID, request.release());
</span><span class="cx"> 
</span><del>-    postDatabaseTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::putRecordInBackingStore, requestID, transactionIdentifier, m_metadata-&gt;objectStores.get(objectStoreID), keyData, value.vector(), putMode, indexIDs, indexKeys));
</del><ins>+    postDatabaseTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::putRecordInBackingStore, requestID, transactionIdentifier, m_metadata-&gt;objectStores.get(objectStoreID), keyData, value.vector(), putMode, indexIDs, indexKeys));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::getRecord(const IDBIdentifier&amp; transactionIdentifier, int64_t objectStoreID, int64_t indexID, const IDBKeyRangeData&amp; keyRangeData, IndexedDB::CursorType cursorType, std::function&lt;void (const IDBGetResult&amp;, uint32_t, const String&amp;)&gt; callback)
</span><span class="lines">@@ -598,7 +598,7 @@
</span><span class="cx">     uint64_t requestID = request-&gt;requestID();
</span><span class="cx">     m_pendingDatabaseTasks.add(requestID, request.release());
</span><span class="cx"> 
</span><del>-    postDatabaseTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::getRecordFromBackingStore, requestID, transactionIdentifier, m_metadata-&gt;objectStores.get(objectStoreID), indexID, keyRangeData, cursorType));
</del><ins>+    postDatabaseTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::getRecordFromBackingStore, requestID, transactionIdentifier, m_metadata-&gt;objectStores.get(objectStoreID), indexID, keyRangeData, cursorType));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::openCursor(const IDBIdentifier&amp; transactionIdentifier, int64_t objectStoreID, int64_t indexID, IndexedDB::CursorDirection cursorDirection, IndexedDB::CursorType cursorType, IDBDatabaseBackend::TaskType taskType, const IDBKeyRangeData&amp; keyRangeData, std::function&lt;void (int64_t, const IDBKeyData&amp;, const IDBKeyData&amp;, PassRefPtr&lt;SharedBuffer&gt;, uint32_t, const String&amp;)&gt; callback)
</span><span class="lines">@@ -621,7 +621,7 @@
</span><span class="cx">     uint64_t requestID = request-&gt;requestID();
</span><span class="cx">     m_pendingDatabaseTasks.add(requestID, request.release());
</span><span class="cx"> 
</span><del>-    postDatabaseTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::openCursorInBackingStore, requestID, transactionIdentifier, objectStoreID, indexID, cursorDirection, cursorType, taskType, keyRangeData));
</del><ins>+    postDatabaseTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::openCursorInBackingStore, requestID, transactionIdentifier, objectStoreID, indexID, cursorDirection, cursorType, taskType, keyRangeData));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::cursorAdvance(const IDBIdentifier&amp; cursorIdentifier, uint64_t count, std::function&lt;void (const IDBKeyData&amp;, const IDBKeyData&amp;, PassRefPtr&lt;SharedBuffer&gt;, uint32_t, const String&amp;)&gt; callback)
</span><span class="lines">@@ -642,7 +642,7 @@
</span><span class="cx">     uint64_t requestID = request-&gt;requestID();
</span><span class="cx">     m_pendingDatabaseTasks.add(requestID, request.release());
</span><span class="cx"> 
</span><del>-    postDatabaseTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::advanceCursorInBackingStore, requestID, cursorIdentifier, count));
</del><ins>+    postDatabaseTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::advanceCursorInBackingStore, requestID, cursorIdentifier, count));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::cursorIterate(const IDBIdentifier&amp; cursorIdentifier, const IDBKeyData&amp; key, std::function&lt;void (const IDBKeyData&amp;, const IDBKeyData&amp;, PassRefPtr&lt;SharedBuffer&gt;, uint32_t, const String&amp;)&gt; callback)
</span><span class="lines">@@ -663,7 +663,7 @@
</span><span class="cx">     uint64_t requestID = request-&gt;requestID();
</span><span class="cx">     m_pendingDatabaseTasks.add(requestID, request.release());
</span><span class="cx"> 
</span><del>-    postDatabaseTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::iterateCursorInBackingStore, requestID, cursorIdentifier, key));
</del><ins>+    postDatabaseTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::iterateCursorInBackingStore, requestID, cursorIdentifier, key));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::count(const IDBIdentifier&amp; transactionIdentifier, int64_t objectStoreID, int64_t indexID, const IDBKeyRangeData&amp; keyRangeData, std::function&lt;void (int64_t, uint32_t, const String&amp;)&gt; callback)
</span><span class="lines">@@ -684,7 +684,7 @@
</span><span class="cx">     uint64_t requestID = request-&gt;requestID();
</span><span class="cx">     m_pendingDatabaseTasks.add(requestID, request.release());
</span><span class="cx"> 
</span><del>-    postDatabaseTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::countInBackingStore, requestID, transactionIdentifier, objectStoreID, indexID, keyRangeData));
</del><ins>+    postDatabaseTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::countInBackingStore, requestID, transactionIdentifier, objectStoreID, indexID, keyRangeData));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::deleteRange(const IDBIdentifier&amp; transactionIdentifier, int64_t objectStoreID, const IDBKeyRangeData&amp; keyRangeData, std::function&lt;void (uint32_t, const String&amp;)&gt; callback)
</span><span class="lines">@@ -705,7 +705,7 @@
</span><span class="cx">     uint64_t requestID = request-&gt;requestID();
</span><span class="cx">     m_pendingDatabaseTasks.add(requestID, request.release());
</span><span class="cx"> 
</span><del>-    postDatabaseTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::deleteRangeInBackingStore, requestID, transactionIdentifier, objectStoreID, keyRangeData));
</del><ins>+    postDatabaseTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::deleteRangeInBackingStore, requestID, transactionIdentifier, objectStoreID, keyRangeData));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::openBackingStoreTransaction(const IDBIdentifier&amp; transactionIdentifier, const Vector&lt;int64_t&gt;&amp; objectStoreIDs, IndexedDB::TransactionMode mode)
</span><span class="lines">@@ -715,8 +715,8 @@
</span><span class="cx"> 
</span><span class="cx">     bool success = m_backingStore-&gt;establishTransaction(transactionIdentifier, objectStoreIDs, mode);
</span><span class="cx"> 
</span><del>-    postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didEstablishTransaction, transactionIdentifier, success));
-    postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didCompleteTransactionOperation, transactionIdentifier, success));
</del><ins>+    postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didEstablishTransaction, transactionIdentifier, success));
+    postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didCompleteTransactionOperation, transactionIdentifier, success));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::beginBackingStoreTransaction(const IDBIdentifier&amp; transactionIdentifier)
</span><span class="lines">@@ -726,7 +726,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool success = m_backingStore-&gt;beginTransaction(transactionIdentifier);
</span><span class="cx"> 
</span><del>-    postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didCompleteTransactionOperation, transactionIdentifier, success));
</del><ins>+    postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didCompleteTransactionOperation, transactionIdentifier, success));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::commitBackingStoreTransaction(const IDBIdentifier&amp; transactionIdentifier)
</span><span class="lines">@@ -736,7 +736,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool success = m_backingStore-&gt;commitTransaction(transactionIdentifier);
</span><span class="cx"> 
</span><del>-    postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didCompleteTransactionOperation, transactionIdentifier, success));
</del><ins>+    postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didCompleteTransactionOperation, transactionIdentifier, success));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::resetBackingStoreTransaction(const IDBIdentifier&amp; transactionIdentifier)
</span><span class="lines">@@ -746,8 +746,8 @@
</span><span class="cx"> 
</span><span class="cx">     bool success = m_backingStore-&gt;resetTransaction(transactionIdentifier);
</span><span class="cx"> 
</span><del>-    postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didResetTransaction, transactionIdentifier, success));
-    postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didCompleteTransactionOperation, transactionIdentifier, success));
</del><ins>+    postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didResetTransaction, transactionIdentifier, success));
+    postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didCompleteTransactionOperation, transactionIdentifier, success));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::rollbackBackingStoreTransaction(const IDBIdentifier&amp; transactionIdentifier)
</span><span class="lines">@@ -757,7 +757,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool success = m_backingStore-&gt;rollbackTransaction(transactionIdentifier);
</span><span class="cx"> 
</span><del>-    postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didCompleteTransactionOperation, transactionIdentifier, success));
</del><ins>+    postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didCompleteTransactionOperation, transactionIdentifier, success));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::changeDatabaseVersionInBackingStore(uint64_t requestID, const IDBIdentifier&amp; transactionIdentifier, uint64_t newVersion)
</span><span class="lines">@@ -767,7 +767,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool success = m_backingStore-&gt;changeDatabaseVersion(transactionIdentifier, newVersion);
</span><span class="cx"> 
</span><del>-    postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didChangeDatabaseVersion, requestID, success));
</del><ins>+    postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didChangeDatabaseVersion, requestID, success));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::createObjectStoreInBackingStore(uint64_t requestID, const IDBIdentifier&amp; transactionIdentifier, const IDBObjectStoreMetadata&amp; metadata)
</span><span class="lines">@@ -777,7 +777,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool success = m_backingStore-&gt;createObjectStore(transactionIdentifier, metadata);
</span><span class="cx"> 
</span><del>-    postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didCreateObjectStore, requestID, success));
</del><ins>+    postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didCreateObjectStore, requestID, success));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::deleteObjectStoreInBackingStore(uint64_t requestID, const IDBIdentifier&amp; transactionIdentifier, int64_t objectStoreID)
</span><span class="lines">@@ -787,7 +787,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool success = m_backingStore-&gt;deleteObjectStore(transactionIdentifier, objectStoreID);
</span><span class="cx"> 
</span><del>-    postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didDeleteObjectStore, requestID, success));
</del><ins>+    postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didDeleteObjectStore, requestID, success));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::clearObjectStoreInBackingStore(uint64_t requestID, const IDBIdentifier&amp; transactionIdentifier, int64_t objectStoreID)
</span><span class="lines">@@ -797,7 +797,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool success = m_backingStore-&gt;clearObjectStore(transactionIdentifier, objectStoreID);
</span><span class="cx"> 
</span><del>-    postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didClearObjectStore, requestID, success));
</del><ins>+    postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didClearObjectStore, requestID, success));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::createIndexInBackingStore(uint64_t requestID, const IDBIdentifier&amp; transactionIdentifier, int64_t objectStoreID, const IDBIndexMetadata&amp; metadata)
</span><span class="lines">@@ -807,7 +807,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool success = m_backingStore-&gt;createIndex(transactionIdentifier, objectStoreID, metadata);
</span><span class="cx"> 
</span><del>-    postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didCreateIndex, requestID, success));
</del><ins>+    postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didCreateIndex, requestID, success));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::deleteIndexInBackingStore(uint64_t requestID, const IDBIdentifier&amp; transactionIdentifier, int64_t objectStoreID, int64_t indexID)
</span><span class="lines">@@ -817,7 +817,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool success = m_backingStore-&gt;deleteIndex(transactionIdentifier, objectStoreID, indexID);
</span><span class="cx"> 
</span><del>-    postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didDeleteIndex, requestID, success));
</del><ins>+    postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didDeleteIndex, requestID, success));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::putRecordInBackingStore(uint64_t requestID, const IDBIdentifier&amp; transaction, const IDBObjectStoreMetadata&amp; objectStoreMetadata, const IDBKeyData&amp; inputKeyData, const Vector&lt;uint8_t&gt;&amp; value, int64_t putMode, const Vector&lt;int64_t&gt;&amp; indexIDs, const Vector&lt;Vector&lt;IDBKeyData&gt;&gt;&amp; indexKeys)
</span><span class="lines">@@ -831,7 +831,7 @@
</span><span class="cx"> 
</span><span class="cx">     if (putMode != IDBDatabaseBackend::CursorUpdate &amp;&amp; objectStoreMetadata.autoIncrement &amp;&amp; inputKeyData.isNull) {
</span><span class="cx">         if (!m_backingStore-&gt;generateKeyNumber(transaction, objectStoreMetadata.id, keyNumber)) {
</span><del>-            postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didPutRecordInBackingStore, requestID, IDBKeyData(), IDBDatabaseException::UnknownError, ASCIILiteral(&quot;Internal backing store error checking for key existence&quot;)));
</del><ins>+            postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didPutRecordInBackingStore, requestID, IDBKeyData(), IDBDatabaseException::UnknownError, ASCIILiteral(&quot;Internal backing store error checking for key existence&quot;)));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         key.setNumberValue(keyNumber);
</span><span class="lines">@@ -842,11 +842,11 @@
</span><span class="cx">     if (putMode == IDBDatabaseBackend::AddOnly) {
</span><span class="cx">         bool keyExists;
</span><span class="cx">         if (!m_backingStore-&gt;keyExistsInObjectStore(transaction, objectStoreMetadata.id, key, keyExists)) {
</span><del>-            postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didPutRecordInBackingStore, requestID, IDBKeyData(), IDBDatabaseException::UnknownError, ASCIILiteral(&quot;Internal backing store error checking for key existence&quot;)));
</del><ins>+            postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didPutRecordInBackingStore, requestID, IDBKeyData(), IDBDatabaseException::UnknownError, ASCIILiteral(&quot;Internal backing store error checking for key existence&quot;)));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         if (keyExists) {
</span><del>-            postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didPutRecordInBackingStore, requestID, IDBKeyData(), IDBDatabaseException::ConstraintError, ASCIILiteral(&quot;Key already exists in the object store&quot;)));
</del><ins>+            postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didPutRecordInBackingStore, requestID, IDBKeyData(), IDBDatabaseException::ConstraintError, ASCIILiteral(&quot;Key already exists in the object store&quot;)));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="lines">@@ -854,12 +854,12 @@
</span><span class="cx">     // The spec says that even if we're about to overwrite the record, perform the steps to delete it first.
</span><span class="cx">     // This is important because formally deleting it from from the object store also removes it from the appropriate indexes.
</span><span class="cx">     if (!m_backingStore-&gt;deleteRecord(transaction, objectStoreMetadata.id, key)) {
</span><del>-        postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didPutRecordInBackingStore, requestID, IDBKeyData(), IDBDatabaseException::UnknownError, ASCIILiteral(&quot;Replacing an existing key in backing store, unable to delete previous record.&quot;)));
</del><ins>+        postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didPutRecordInBackingStore, requestID, IDBKeyData(), IDBDatabaseException::UnknownError, ASCIILiteral(&quot;Replacing an existing key in backing store, unable to delete previous record.&quot;)));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (!m_backingStore-&gt;putRecord(transaction, objectStoreMetadata.id, key, value.data(), value.size())) {
</span><del>-        postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didPutRecordInBackingStore, requestID, IDBKeyData(), IDBDatabaseException::UnknownError, ASCIILiteral(&quot;Internal backing store error putting a record&quot;)));
</del><ins>+        postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didPutRecordInBackingStore, requestID, IDBKeyData(), IDBDatabaseException::UnknownError, ASCIILiteral(&quot;Internal backing store error putting a record&quot;)));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -867,7 +867,7 @@
</span><span class="cx">     for (size_t i = 0; i &lt; indexIDs.size(); ++i) {
</span><span class="cx">         for (size_t j = 0; j &lt; indexKeys[i].size(); ++j) {
</span><span class="cx">             if (!m_backingStore-&gt;putIndexRecord(transaction, objectStoreMetadata.id, indexIDs[i], key, indexKeys[i][j])) {
</span><del>-                postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didPutRecordInBackingStore, requestID, IDBKeyData(), IDBDatabaseException::UnknownError, ASCIILiteral(&quot;Internal backing store error writing index key&quot;)));
</del><ins>+                postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didPutRecordInBackingStore, requestID, IDBKeyData(), IDBDatabaseException::UnknownError, ASCIILiteral(&quot;Internal backing store error writing index key&quot;)));
</ins><span class="cx">                 return;
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="lines">@@ -877,12 +877,12 @@
</span><span class="cx"> 
</span><span class="cx">     if (putMode != IDBDatabaseBackend::CursorUpdate &amp;&amp; objectStoreMetadata.autoIncrement &amp;&amp; key.type == KeyType::Number) {
</span><span class="cx">         if (!m_backingStore-&gt;updateKeyGeneratorNumber(transaction, objectStoreMetadata.id, keyNumber, keyWasGenerated)) {
</span><del>-            postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didPutRecordInBackingStore, requestID, IDBKeyData(), IDBDatabaseException::UnknownError, ASCIILiteral(&quot;Internal backing store error updating key generator&quot;)));
</del><ins>+            postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didPutRecordInBackingStore, requestID, IDBKeyData(), IDBDatabaseException::UnknownError, ASCIILiteral(&quot;Internal backing store error updating key generator&quot;)));
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didPutRecordInBackingStore, requestID, key, 0, String(StringImpl::empty())));
</del><ins>+    postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didPutRecordInBackingStore, requestID, key, 0, String(StringImpl::empty())));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::didPutRecordInBackingStore(uint64_t requestID, const IDBKeyData&amp; keyData, uint32_t errorCode, const String&amp; errorMessage)
</span><span class="lines">@@ -898,7 +898,7 @@
</span><span class="cx">     RefPtr&lt;IDBKeyRange&gt; keyRange = keyRangeData.maybeCreateIDBKeyRange();
</span><span class="cx">     ASSERT(keyRange);
</span><span class="cx">     if (!keyRange) {
</span><del>-        postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didGetRecordFromBackingStore, requestID, IDBGetResult(), IDBDatabaseException::UnknownError, ASCIILiteral(&quot;Invalid IDBKeyRange requested from backing store&quot;)));
</del><ins>+        postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didGetRecordFromBackingStore, requestID, IDBGetResult(), IDBDatabaseException::UnknownError, ASCIILiteral(&quot;Invalid IDBKeyRange requested from backing store&quot;)));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -908,10 +908,10 @@
</span><span class="cx"> 
</span><span class="cx">         if (keyRange-&gt;isOnlyKey()) {
</span><span class="cx">             if (!m_backingStore-&gt;getKeyRecordFromObjectStore(transaction, objectStoreMetadata.id, *keyRange-&gt;lower(), result))
</span><del>-                postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didGetRecordFromBackingStore, requestID, IDBGetResult(), IDBDatabaseException::UnknownError, ASCIILiteral(&quot;Failed to get key record from object store in backing store&quot;)));
</del><ins>+                postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didGetRecordFromBackingStore, requestID, IDBGetResult(), IDBDatabaseException::UnknownError, ASCIILiteral(&quot;Failed to get key record from object store in backing store&quot;)));
</ins><span class="cx">             else {
</span><span class="cx">                 IDBGetResult getResult = result ? IDBGetResult(result.release(), keyRange-&gt;lower(), objectStoreMetadata.keyPath) : IDBGetResult();
</span><del>-                postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didGetRecordFromBackingStore, requestID, getResult, 0, String(StringImpl::empty())));
</del><ins>+                postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didGetRecordFromBackingStore, requestID, getResult, 0, String(StringImpl::empty())));
</ins><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             return;
</span><span class="lines">@@ -920,10 +920,10 @@
</span><span class="cx">         RefPtr&lt;IDBKey&gt; resultKey;
</span><span class="cx"> 
</span><span class="cx">         if (!m_backingStore-&gt;getKeyRangeRecordFromObjectStore(transaction, objectStoreMetadata.id, *keyRange, result, resultKey))
</span><del>-            postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didGetRecordFromBackingStore, requestID, IDBGetResult(), IDBDatabaseException::UnknownError, ASCIILiteral(&quot;Failed to get key range record from object store in backing store&quot;)));
</del><ins>+            postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didGetRecordFromBackingStore, requestID, IDBGetResult(), IDBDatabaseException::UnknownError, ASCIILiteral(&quot;Failed to get key range record from object store in backing store&quot;)));
</ins><span class="cx">         else {
</span><span class="cx">             IDBGetResult getResult = result ? IDBGetResult(result.release(), resultKey.release(), objectStoreMetadata.keyPath) : IDBGetResult();
</span><del>-            postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didGetRecordFromBackingStore, requestID, getResult, 0, String(StringImpl::empty())));
</del><ins>+            postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didGetRecordFromBackingStore, requestID, getResult, 0, String(StringImpl::empty())));
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         return;
</span><span class="lines">@@ -933,14 +933,14 @@
</span><span class="cx"> 
</span><span class="cx">     IDBGetResult result;
</span><span class="cx">     if (!m_backingStore-&gt;getIndexRecord(transaction, objectStoreMetadata.id, indexID, keyRangeData, cursorType, result)) {
</span><del>-        postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didGetRecordFromBackingStore, requestID, IDBGetResult(), IDBDatabaseException::UnknownError, ASCIILiteral(&quot;Failed to get index record from backing store&quot;)));
</del><ins>+        postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didGetRecordFromBackingStore, requestID, IDBGetResult(), IDBDatabaseException::UnknownError, ASCIILiteral(&quot;Failed to get index record from backing store&quot;)));
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // We must return a key path to know how to inject the result key into the result value object.
</span><span class="cx">     result.keyPath = objectStoreMetadata.keyPath;
</span><span class="cx"> 
</span><del>-    postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didGetRecordFromBackingStore, requestID, result, 0, String(StringImpl::empty())));
</del><ins>+    postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didGetRecordFromBackingStore, requestID, result, 0, String(StringImpl::empty())));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::didGetRecordFromBackingStore(uint64_t requestID, const IDBGetResult&amp; result, uint32_t errorCode, const String&amp; errorMessage)
</span><span class="lines">@@ -966,7 +966,7 @@
</span><span class="cx">         errorMessage = ASCIILiteral(&quot;Unknown error opening cursor in backing store&quot;);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didOpenCursorInBackingStore, requestID, cursorID, key, primaryKey, valueBuffer, errorCode, errorMessage));
</del><ins>+    postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didOpenCursorInBackingStore, requestID, cursorID, key, primaryKey, valueBuffer, errorCode, errorMessage));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::didOpenCursorInBackingStore(uint64_t requestID, int64_t cursorID, const IDBKeyData&amp; key, const IDBKeyData&amp; primaryKey, const Vector&lt;uint8_t&gt;&amp; valueBuffer, uint32_t errorCode, const String&amp; errorMessage)
</span><span class="lines">@@ -988,7 +988,7 @@
</span><span class="cx">         errorMessage = ASCIILiteral(&quot;Unknown error advancing cursor in backing store&quot;);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didAdvanceCursorInBackingStore, requestID, key, primaryKey, valueBuffer, errorCode, errorMessage));
</del><ins>+    postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didAdvanceCursorInBackingStore, requestID, key, primaryKey, valueBuffer, errorCode, errorMessage));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::didAdvanceCursorInBackingStore(uint64_t requestID, const IDBKeyData&amp; key, const IDBKeyData&amp; primaryKey, const Vector&lt;uint8_t&gt;&amp; valueBuffer, uint32_t errorCode, const String&amp; errorMessage)
</span><span class="lines">@@ -1010,7 +1010,7 @@
</span><span class="cx">         errorMessage = ASCIILiteral(&quot;Unknown error iterating cursor in backing store&quot;);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didIterateCursorInBackingStore, requestID, key, primaryKey, valueBuffer, errorCode, errorMessage));
</del><ins>+    postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didIterateCursorInBackingStore, requestID, key, primaryKey, valueBuffer, errorCode, errorMessage));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::didIterateCursorInBackingStore(uint64_t requestID, const IDBKeyData&amp; key, const IDBKeyData&amp; primaryKey, const Vector&lt;uint8_t&gt;&amp; valueBuffer, uint32_t errorCode, const String&amp; errorMessage)
</span><span class="lines">@@ -1024,12 +1024,12 @@
</span><span class="cx"> 
</span><span class="cx">     if (!m_backingStore-&gt;count(transactionIdentifier, objectStoreID, indexID, keyRangeData, count)) {
</span><span class="cx">         LOG_ERROR(&quot;Failed to get count from backing store.&quot;);
</span><del>-        postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didCountInBackingStore, requestID, 0, IDBDatabaseException::UnknownError, ASCIILiteral(&quot;Failed to get count from backing store&quot;)));
</del><ins>+        postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didCountInBackingStore, requestID, 0, IDBDatabaseException::UnknownError, ASCIILiteral(&quot;Failed to get count from backing store&quot;)));
</ins><span class="cx"> 
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didCountInBackingStore, requestID, count, 0, String(StringImpl::empty())));
</del><ins>+    postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didCountInBackingStore, requestID, count, 0, String(StringImpl::empty())));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::didCountInBackingStore(uint64_t requestID, int64_t count, uint32_t errorCode, const String&amp; errorMessage)
</span><span class="lines">@@ -1041,14 +1041,14 @@
</span><span class="cx"> {
</span><span class="cx">     if (!m_backingStore-&gt;deleteRange(transactionIdentifier, objectStoreID, keyRangeData)) {
</span><span class="cx">         LOG_ERROR(&quot;Failed to delete range from backing store.&quot;);
</span><del>-        postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didDeleteRangeInBackingStore, requestID, IDBDatabaseException::UnknownError, ASCIILiteral(&quot;Failed to get count from backing store&quot;)));
</del><ins>+        postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didDeleteRangeInBackingStore, requestID, IDBDatabaseException::UnknownError, ASCIILiteral(&quot;Failed to get count from backing store&quot;)));
</ins><span class="cx"> 
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     m_backingStore-&gt;notifyCursorsOfChanges(transactionIdentifier, objectStoreID);
</span><span class="cx"> 
</span><del>-    postMainThreadTask(createAsyncTask(*this, &amp;UniqueIDBDatabase::didDeleteRangeInBackingStore, requestID, 0, String(StringImpl::empty())));
</del><ins>+    postMainThreadTask(createCrossThreadTask(*this, &amp;UniqueIDBDatabase::didDeleteRangeInBackingStore, requestID, 0, String(StringImpl::empty())));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::didDeleteRangeInBackingStore(uint64_t requestID, uint32_t errorCode, const String&amp; errorMessage)
</span><span class="lines">@@ -1118,7 +1118,7 @@
</span><span class="cx">     return DatabaseProcess::singleton().absoluteIndexedDatabasePathFromDatabaseRelativePath(m_databaseRelativeDirectory);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void UniqueIDBDatabase::postMainThreadTask(std::unique_ptr&lt;AsyncTask&gt; task, DatabaseTaskType taskType)
</del><ins>+void UniqueIDBDatabase::postMainThreadTask(std::unique_ptr&lt;CrossThreadTask&gt; task, DatabaseTaskType taskType)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!RunLoop::isMain());
</span><span class="cx"> 
</span><span class="lines">@@ -1141,7 +1141,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool moreTasks;
</span><span class="cx"> 
</span><del>-    std::unique_ptr&lt;AsyncTask&gt; task;
</del><ins>+    std::unique_ptr&lt;CrossThreadTask&gt; task;
</ins><span class="cx">     {
</span><span class="cx">         LockHolder locker(m_mainThreadTaskMutex);
</span><span class="cx"> 
</span><span class="lines">@@ -1158,7 +1158,7 @@
</span><span class="cx">     return moreTasks;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void UniqueIDBDatabase::postDatabaseTask(std::unique_ptr&lt;AsyncTask&gt; task, DatabaseTaskType taskType)
</del><ins>+void UniqueIDBDatabase::postDatabaseTask(std::unique_ptr&lt;CrossThreadTask&gt; task, DatabaseTaskType taskType)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(RunLoop::isMain());
</span><span class="cx"> 
</span><span class="lines">@@ -1184,7 +1184,7 @@
</span><span class="cx">     // We take a ref() to make sure the database is still live while this last task is performed.
</span><span class="cx">     RefPtr&lt;UniqueIDBDatabase&gt; protector(this);
</span><span class="cx"> 
</span><del>-    std::unique_ptr&lt;AsyncTask&gt; task;
</del><ins>+    std::unique_ptr&lt;CrossThreadTask&gt; task;
</ins><span class="cx">     {
</span><span class="cx">         LockHolder locker(m_databaseTaskMutex);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2DatabaseProcessIndexedDBUniqueIDBDatabaseh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.h (190330 => 190331)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.h        2015-09-29 22:56:20 UTC (rev 190330)
+++ trunk/Source/WebKit2/DatabaseProcess/IndexedDB/UniqueIDBDatabase.h        2015-09-29 23:28:22 UTC (rev 190331)
</span><span class="lines">@@ -56,7 +56,7 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebKit {
</span><span class="cx"> 
</span><del>-class AsyncTask;
</del><ins>+class CrossThreadTask;
</ins><span class="cx"> class DatabaseProcessIDBConnection;
</span><span class="cx"> class UniqueIDBDatabaseBackingStore;
</span><span class="cx"> 
</span><span class="lines">@@ -125,7 +125,7 @@
</span><span class="cx">         Normal,
</span><span class="cx">         Shutdown
</span><span class="cx">     };
</span><del>-    void postDatabaseTask(std::unique_ptr&lt;AsyncTask&gt;, DatabaseTaskType = DatabaseTaskType::Normal);
</del><ins>+    void postDatabaseTask(std::unique_ptr&lt;CrossThreadTask&gt;, DatabaseTaskType = DatabaseTaskType::Normal);
</ins><span class="cx"> 
</span><span class="cx">     void shutdown(UniqueIDBDatabaseShutdownType);
</span><span class="cx"> 
</span><span class="lines">@@ -138,11 +138,11 @@
</span><span class="cx">     // Returns true if this origin can use the same databases as the given origin.
</span><span class="cx">     bool canShareDatabases(const WebCore::SecurityOriginData&amp;, const WebCore::SecurityOriginData&amp;) const;
</span><span class="cx"> 
</span><del>-    void postTransactionOperation(const IDBIdentifier&amp; transactionIdentifier, std::unique_ptr&lt;AsyncTask&gt;, std::function&lt;void (bool)&gt; successCallback);
</del><ins>+    void postTransactionOperation(const IDBIdentifier&amp; transactionIdentifier, std::unique_ptr&lt;CrossThreadTask&gt;, std::function&lt;void (bool)&gt; successCallback);
</ins><span class="cx">     
</span><span class="cx">     // To be called from the database workqueue thread only
</span><span class="cx">     void performNextDatabaseTask();
</span><del>-    void postMainThreadTask(std::unique_ptr&lt;AsyncTask&gt;, DatabaseTaskType = DatabaseTaskType::Normal);
</del><ins>+    void postMainThreadTask(std::unique_ptr&lt;CrossThreadTask&gt;, DatabaseTaskType = DatabaseTaskType::Normal);
</ins><span class="cx">     void openBackingStoreAndReadMetadata(const UniqueIDBDatabaseIdentifier&amp;, const String&amp; databaseDirectory);
</span><span class="cx">     void openBackingStoreTransaction(const IDBIdentifier&amp; transactionIdentifier, const Vector&lt;int64_t&gt;&amp; objectStoreIDs, WebCore::IndexedDB::TransactionMode);
</span><span class="cx">     void beginBackingStoreTransaction(const IDBIdentifier&amp;);
</span><span class="lines">@@ -208,10 +208,10 @@
</span><span class="cx"> 
</span><span class="cx">     RefPtr&lt;UniqueIDBDatabaseBackingStore&gt; m_backingStore;
</span><span class="cx"> 
</span><del>-    Deque&lt;std::unique_ptr&lt;AsyncTask&gt;&gt; m_databaseTasks;
</del><ins>+    Deque&lt;std::unique_ptr&lt;CrossThreadTask&gt;&gt; m_databaseTasks;
</ins><span class="cx">     Lock m_databaseTaskMutex;
</span><span class="cx"> 
</span><del>-    Deque&lt;std::unique_ptr&lt;AsyncTask&gt;&gt; m_mainThreadTasks;
</del><ins>+    Deque&lt;std::unique_ptr&lt;CrossThreadTask&gt;&gt; m_mainThreadTasks;
</ins><span class="cx">     Lock m_mainThreadTaskMutex;
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedAsyncTaskh"></a>
<div class="delfile"><h4>Deleted: trunk/Source/WebKit2/Shared/AsyncTask.h (190330 => 190331)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/AsyncTask.h        2015-09-29 22:56:20 UTC (rev 190330)
+++ trunk/Source/WebKit2/Shared/AsyncTask.h        2015-09-29 23:28:22 UTC (rev 190331)
</span><span class="lines">@@ -1,228 +0,0 @@
</span><del>-/*
- * Copyright (C) 2013 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
- * THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef AsyncTask_h
-#define AsyncTask_h
-
-#include &lt;WebCore/CrossThreadCopier.h&gt;
-#include &lt;functional&gt;
-
-namespace WebKit {
-
-class AsyncTask {
-    WTF_MAKE_NONCOPYABLE(AsyncTask);
-public:
-    AsyncTask(const std::function&lt;void ()&gt; taskFunction)
-        : m_taskFunction(taskFunction)
-    {
-        ASSERT(taskFunction);
-    }
-
-    void performTask()
-    {
-        m_taskFunction();
-    }
-
-protected:
-    AsyncTask() { }
-
-    std::function&lt;void ()&gt; m_taskFunction;
-};
-
-template &lt;typename T, typename... Arguments&gt;
-class AsyncTaskImpl final : public AsyncTask {
-public:
-    AsyncTaskImpl(T* callee, void (T::*method)(Arguments...), Arguments&amp;&amp;... arguments)
-    {
-        m_taskFunction = [callee, method, arguments...] {
-            (callee-&gt;*method)(arguments...);
-        };
-    }
-};
-
-template&lt;typename T&gt;
-std::unique_ptr&lt;AsyncTask&gt; createAsyncTask(
-    T&amp; callee,
-    void (T::*method)())
-{
-    return std::make_unique&lt;AsyncTaskImpl&lt;T&gt;&gt;(&amp;callee, method);
-}
-
-template&lt;typename T, typename P1, typename MP1&gt;
-std::unique_ptr&lt;AsyncTask&gt; createAsyncTask(
-    T&amp; callee,
-    void (T::*method)(MP1),
-    const P1&amp; parameter1)
-{
-    return std::make_unique&lt;AsyncTaskImpl&lt;T, MP1&gt;&gt;(
-        &amp;callee,
-        method,
-        WebCore::CrossThreadCopier&lt;P1&gt;::copy(parameter1));
-}
-
-template&lt;typename T, typename P1, typename MP1, typename P2, typename MP2&gt;
-std::unique_ptr&lt;AsyncTask&gt; createAsyncTask(
-    T&amp; callee,
-    void (T::*method)(MP1, MP2),
-    const P1&amp; parameter1,
-    const P2&amp; parameter2)
-{
-    return std::make_unique&lt;AsyncTaskImpl&lt;T, MP1, MP2&gt;&gt;(
-        &amp;callee,
-        method,
-        WebCore::CrossThreadCopier&lt;P1&gt;::copy(parameter1),
-        WebCore::CrossThreadCopier&lt;P2&gt;::copy(parameter2));
-
-}
-
-template&lt;typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3&gt;
-std::unique_ptr&lt;AsyncTask&gt; createAsyncTask(
-    T&amp; callee,
-    void (T::*method)(MP1, MP2, MP3),
-    const P1&amp; parameter1,
-    const P2&amp; parameter2,
-    const P3&amp; parameter3)
-{
-    return std::make_unique&lt;AsyncTaskImpl&lt;T, MP1, MP2, MP3&gt;&gt;(
-        &amp;callee,
-        method,
-        WebCore::CrossThreadCopier&lt;P1&gt;::copy(parameter1),
-        WebCore::CrossThreadCopier&lt;P2&gt;::copy(parameter2),
-        WebCore::CrossThreadCopier&lt;P3&gt;::copy(parameter3));
-}
-
-template&lt;typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4&gt;
-std::unique_ptr&lt;AsyncTask&gt; createAsyncTask(
-    T&amp; callee,
-    void (T::*method)(MP1, MP2, MP3, MP4),
-    const P1&amp; parameter1,
-    const P2&amp; parameter2,
-    const P3&amp; parameter3,
-    const P4&amp; parameter4)
-{
-    return std::make_unique&lt;AsyncTaskImpl&lt;T, MP1, MP2, MP3, MP4&gt;&gt;(
-        &amp;callee,
-        method,
-        WebCore::CrossThreadCopier&lt;P1&gt;::copy(parameter1),
-        WebCore::CrossThreadCopier&lt;P2&gt;::copy(parameter2),
-        WebCore::CrossThreadCopier&lt;P3&gt;::copy(parameter3),
-        WebCore::CrossThreadCopier&lt;P4&gt;::copy(parameter4));
-}
-
-template&lt;typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5&gt;
-std::unique_ptr&lt;AsyncTask&gt; createAsyncTask(
-    T&amp; callee,
-    void (T::*method)(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)
-{
-    return std::make_unique&lt;AsyncTaskImpl&lt;T, MP1, MP2, MP3, MP4, MP5&gt;&gt;(
-        &amp;callee,
-        method,
-        WebCore::CrossThreadCopier&lt;P1&gt;::copy(parameter1),
-        WebCore::CrossThreadCopier&lt;P2&gt;::copy(parameter2),
-        WebCore::CrossThreadCopier&lt;P3&gt;::copy(parameter3),
-        WebCore::CrossThreadCopier&lt;P4&gt;::copy(parameter4),
-        WebCore::CrossThreadCopier&lt;P5&gt;::copy(parameter5));
-}
-
-template&lt;typename T, 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;
-std::unique_ptr&lt;AsyncTask&gt; createAsyncTask(
-    T&amp; callee,
-    void (T::*method)(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)
-{
-    return std::make_unique&lt;AsyncTaskImpl&lt;T, MP1, MP2, MP3, MP4, MP5, MP6&gt;&gt;(
-        &amp;callee,
-        method,
-        WebCore::CrossThreadCopier&lt;P1&gt;::copy(parameter1),
-        WebCore::CrossThreadCopier&lt;P2&gt;::copy(parameter2),
-        WebCore::CrossThreadCopier&lt;P3&gt;::copy(parameter3),
-        WebCore::CrossThreadCopier&lt;P4&gt;::copy(parameter4),
-        WebCore::CrossThreadCopier&lt;P5&gt;::copy(parameter5),
-        WebCore::CrossThreadCopier&lt;P6&gt;::copy(parameter6));
-}
-
-template&lt;typename T, 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;
-std::unique_ptr&lt;AsyncTask&gt; createAsyncTask(
-    T&amp; callee,
-    void (T::*method)(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)
-{
-    return std::make_unique&lt;AsyncTaskImpl&lt;T, MP1, MP2, MP3, MP4, MP5, MP6, MP7&gt;&gt;(
-        &amp;callee,
-        method,
-        WebCore::CrossThreadCopier&lt;P1&gt;::copy(parameter1),
-        WebCore::CrossThreadCopier&lt;P2&gt;::copy(parameter2),
-        WebCore::CrossThreadCopier&lt;P3&gt;::copy(parameter3),
-        WebCore::CrossThreadCopier&lt;P4&gt;::copy(parameter4),
-        WebCore::CrossThreadCopier&lt;P5&gt;::copy(parameter5),
-        WebCore::CrossThreadCopier&lt;P6&gt;::copy(parameter6),
-        WebCore::CrossThreadCopier&lt;P7&gt;::copy(parameter7));
-}
-
-template&lt;typename T, 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;
-std::unique_ptr&lt;AsyncTask&gt; createAsyncTask(
-    T&amp; callee,
-    void (T::*method)(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)
-{
-    return std::make_unique&lt;AsyncTaskImpl&lt;T, MP1, MP2, MP3, MP4, MP5, MP6, MP7, MP8&gt;&gt;(
-        &amp;callee,
-        method,
-        WebCore::CrossThreadCopier&lt;P1&gt;::copy(parameter1),
-        WebCore::CrossThreadCopier&lt;P2&gt;::copy(parameter2),
-        WebCore::CrossThreadCopier&lt;P3&gt;::copy(parameter3),
-        WebCore::CrossThreadCopier&lt;P4&gt;::copy(parameter4),
-        WebCore::CrossThreadCopier&lt;P5&gt;::copy(parameter5),
-        WebCore::CrossThreadCopier&lt;P6&gt;::copy(parameter6),
-        WebCore::CrossThreadCopier&lt;P7&gt;::copy(parameter7),
-        WebCore::CrossThreadCopier&lt;P8&gt;::copy(parameter8));
-}
-
-} // namespace WebKit
-
-#endif // AsyncTask_h
</del></span></pre></div>
<a id="trunkSourceWebKit2WebKit2xcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj (190330 => 190331)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj        2015-09-29 22:56:20 UTC (rev 190330)
+++ trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj        2015-09-29 23:28:22 UTC (rev 190331)
</span><span class="lines">@@ -985,7 +985,6 @@
</span><span class="cx">                 51AD35731AD2F3940057B38E /* WebHitTestResult.mm in Sources */ = {isa = PBXBuildFile; fileRef = 51AD35721AD2F3750057B38E /* WebHitTestResult.mm */; };
</span><span class="cx">                 51B15A8413843A3900321AD8 /* EnvironmentUtilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51B15A8213843A3900321AD8 /* EnvironmentUtilities.cpp */; };
</span><span class="cx">                 51B15A8513843A3900321AD8 /* EnvironmentUtilities.h in Headers */ = {isa = PBXBuildFile; fileRef = 51B15A8313843A3900321AD8 /* EnvironmentUtilities.h */; };
</span><del>-                51BA24441858EE3000EA2811 /* AsyncTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 51BA24431858EE3000EA2811 /* AsyncTask.h */; };
</del><span class="cx">                 51BA24461858F55D00EA2811 /* WebCrossThreadCopier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51BA24451858F41500EA2811 /* WebCrossThreadCopier.cpp */; };
</span><span class="cx">                 51C96118183D294700D2002E /* WebIDBServerConnectionMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51C96116183D294700D2002E /* WebIDBServerConnectionMessageReceiver.cpp */; };
</span><span class="cx">                 51C96119183D294700D2002E /* WebIDBServerConnectionMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 51C96117183D294700D2002E /* WebIDBServerConnectionMessages.h */; };
</span><span class="lines">@@ -3161,7 +3160,6 @@
</span><span class="cx">                 51AD35721AD2F3750057B38E /* WebHitTestResult.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = WebHitTestResult.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 51B15A8213843A3900321AD8 /* EnvironmentUtilities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = EnvironmentUtilities.cpp; path = unix/EnvironmentUtilities.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 51B15A8313843A3900321AD8 /* EnvironmentUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = EnvironmentUtilities.h; path = unix/EnvironmentUtilities.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><del>-                51BA24431858EE3000EA2811 /* AsyncTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AsyncTask.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</del><span class="cx">                 51BA24451858F41500EA2811 /* WebCrossThreadCopier.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = WebCrossThreadCopier.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 51C96115183C95FF00D2002E /* WebIDBServerConnection.messages.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = WebIDBServerConnection.messages.in; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 51C96116183D294700D2002E /* WebIDBServerConnectionMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebIDBServerConnectionMessageReceiver.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -4681,7 +4679,6 @@
</span><span class="cx">                                 C59C4A5718B81174007BDCB6 /* AssistedNodeInformation.h */,
</span><span class="cx">                                 515E7725183DD6F60007203F /* AsyncRequest.cpp */,
</span><span class="cx">                                 515E7726183DD6F60007203F /* AsyncRequest.h */,
</span><del>-                                51BA24431858EE3000EA2811 /* AsyncTask.h */,
</del><span class="cx">                                 E164A2EF191AF14E0010737D /* BlobDataFileReferenceWithSandboxExtension.cpp */,
</span><span class="cx">                                 E164A2F0191AF14E0010737D /* BlobDataFileReferenceWithSandboxExtension.h */,
</span><span class="cx">                                 4F601430155C5A32001FBDE0 /* BlockingResponseMap.h */,
</span><span class="lines">@@ -7593,7 +7590,6 @@
</span><span class="cx">                                 CE1A0BD21A48E6C60054EF74 /* AssertionServicesSPI.h in Headers */,
</span><span class="cx">                                 C59C4A5918B81174007BDCB6 /* AssistedNodeInformation.h in Headers */,
</span><span class="cx">                                 515E7728183DD6F60007203F /* AsyncRequest.h in Headers */,
</span><del>-                                51BA24441858EE3000EA2811 /* AsyncTask.h in Headers */,
</del><span class="cx">                                 BCEE966D112FAF57006BCC24 /* Attachment.h in Headers */,
</span><span class="cx">                                 E1A31732134CEA6C007C9A4F /* AttributedString.h in Headers */,
</span><span class="cx">                                 512F589712A8838800629530 /* AuthenticationChallengeProxy.h in Headers */,
</span></span></pre>
</div>
</div>

</body>
</html>