<!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>[201356] trunk/Source/WebCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/201356">201356</a></dd>
<dt>Author</dt> <dd>beidson@apple.com</dd>
<dt>Date</dt> <dd>2016-05-24 14:57:56 -0700 (Tue, 24 May 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Modern IDB: (Workers) Eliminate race in getting the ScriptExecutionContext and using it.
https://bugs.webkit.org/show_bug.cgi?id=158038

Reviewed by Alex Christensen.

No new tests (Resolves potential flakes in existing tests).

When the main thread is trying to post a task to a worker thread's ScriptExecutionContext, there is a race
between checking that the context still exists and actually using it.

The solution is to add a new class - IDBActiveDOMObject - which does a few things things:
1 - Remembers its origin thread.
2 - Guards clearing its ScriptExecutionContext with a Lock.
3 - Adds a templated &quot;performCallbackOnOriginThread&quot; that uses the same Lock to make sure posting the task to
    the ScriptExecutionContext's RunLoop is safe.

Also, tons of ASSERTions are updated because each object with an originThread no longer keeps its idea in an
accessible member variable.

* Modules/indexeddb/IDBActiveDOMObject.h:
(WebCore::IDBActiveDOMObject::originThreadID):
(WebCore::IDBActiveDOMObject::performCallbackOnOriginThread):
(WebCore::IDBActiveDOMObject::IDBActiveDOMObject):

* Modules/indexeddb/IDBDatabase.cpp:
(WebCore::IDBDatabase::IDBDatabase):
(WebCore::IDBDatabase::~IDBDatabase):
(WebCore::IDBDatabase::hasPendingActivity):
(WebCore::IDBDatabase::name):
(WebCore::IDBDatabase::version):
(WebCore::IDBDatabase::objectStoreNames):
(WebCore::IDBDatabase::createObjectStore):
(WebCore::IDBDatabase::transaction):
(WebCore::IDBDatabase::deleteObjectStore):
(WebCore::IDBDatabase::close):
(WebCore::IDBDatabase::didCloseFromServer):
(WebCore::IDBDatabase::maybeCloseInServer):
(WebCore::IDBDatabase::activeDOMObjectName):
(WebCore::IDBDatabase::canSuspendForDocumentSuspension):
(WebCore::IDBDatabase::stop):
(WebCore::IDBDatabase::startVersionChangeTransaction):
(WebCore::IDBDatabase::didStartTransaction):
(WebCore::IDBDatabase::willCommitTransaction):
(WebCore::IDBDatabase::didCommitTransaction):
(WebCore::IDBDatabase::willAbortTransaction):
(WebCore::IDBDatabase::didAbortTransaction):
(WebCore::IDBDatabase::didCommitOrAbortTransaction):
(WebCore::IDBDatabase::fireVersionChangeEvent):
(WebCore::IDBDatabase::dispatchEvent):
(WebCore::IDBDatabase::didCreateIndexInfo):
(WebCore::IDBDatabase::didDeleteIndexInfo):
* Modules/indexeddb/IDBDatabase.h:
(WebCore::IDBDatabase::originThreadID): Deleted.

* Modules/indexeddb/IDBRequest.cpp:
(WebCore::IDBRequest::IDBRequest):
(WebCore::IDBRequest::~IDBRequest):
(WebCore::IDBRequest::errorCode):
(WebCore::IDBRequest::error):
(WebCore::IDBRequest::setSource):
(WebCore::IDBRequest::setVersionChangeTransaction):
(WebCore::IDBRequest::transaction):
(WebCore::IDBRequest::readyState):
(WebCore::IDBRequest::sourceObjectStoreIdentifier):
(WebCore::IDBRequest::sourceIndexIdentifier):
(WebCore::IDBRequest::requestedIndexRecordType):
(WebCore::IDBRequest::eventTargetInterface):
(WebCore::IDBRequest::activeDOMObjectName):
(WebCore::IDBRequest::canSuspendForDocumentSuspension):
(WebCore::IDBRequest::hasPendingActivity):
(WebCore::IDBRequest::stop):
(WebCore::IDBRequest::enqueueEvent):
(WebCore::IDBRequest::dispatchEvent):
(WebCore::IDBRequest::uncaughtExceptionInEventHandler):
(WebCore::IDBRequest::setResult):
(WebCore::IDBRequest::setResultToStructuredClone):
(WebCore::IDBRequest::clearResult):
(WebCore::IDBRequest::setResultToUndefined):
(WebCore::IDBRequest::resultCursor):
(WebCore::IDBRequest::willIterateCursor):
(WebCore::IDBRequest::didOpenOrIterateCursor):
(WebCore::IDBRequest::requestCompleted):
(WebCore::IDBRequest::onError):
(WebCore::IDBRequest::onSuccess):
* Modules/indexeddb/IDBRequest.h:
(WebCore::IDBRequest::originThreadID): Deleted.

* Modules/indexeddb/IDBTransaction.cpp:
(WebCore::IDBTransaction::IDBTransaction):
(WebCore::IDBTransaction::originThreadID): Deleted.
* Modules/indexeddb/IDBTransaction.h:

* Modules/indexeddb/client/IDBConnectionProxy.cpp:
(WebCore::IDBClient::IDBConnectionProxy::completeOpenDBRequest):
(WebCore::IDBClient::IDBConnectionProxy::completeOperation):
(WebCore::IDBClient::IDBConnectionProxy::fireVersionChangeEvent):
(WebCore::IDBClient::IDBConnectionProxy::notifyOpenDBRequestBlocked):
(WebCore::IDBClient::IDBConnectionProxy::didStartTransaction):
(WebCore::IDBClient::IDBConnectionProxy::didCommitTransaction):
(WebCore::IDBClient::IDBConnectionProxy::didAbortTransaction):
(WebCore::IDBClient::IDBConnectionProxy::didCloseFromServer):
(WebCore::IDBClient::performCallbackOnCorrectThread): Deleted.

* Modules/indexeddb/client/TransactionOperation.cpp:
(WebCore::IDBClient::TransactionOperation::scriptExecutionContext): Deleted.
* Modules/indexeddb/client/TransactionOperation.h:
(WebCore::IDBClient::TransactionOperation::performCompleteOnOriginThread):

* WebCore.xcodeproj/project.pbxproj:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbIDBDatabasecpp">trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbIDBDatabaseh">trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.h</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbIDBRequestcpp">trunk/Source/WebCore/Modules/indexeddb/IDBRequest.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbIDBRequesth">trunk/Source/WebCore/Modules/indexeddb/IDBRequest.h</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbIDBTransactioncpp">trunk/Source/WebCore/Modules/indexeddb/IDBTransaction.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbIDBTransactionh">trunk/Source/WebCore/Modules/indexeddb/IDBTransaction.h</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbclientIDBConnectionProxycpp">trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionProxy.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbclientTransactionOperationcpp">trunk/Source/WebCore/Modules/indexeddb/client/TransactionOperation.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbclientTransactionOperationh">trunk/Source/WebCore/Modules/indexeddb/client/TransactionOperation.h</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreModulesindexeddbIDBActiveDOMObjecth">trunk/Source/WebCore/Modules/indexeddb/IDBActiveDOMObject.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (201355 => 201356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-05-24 21:48:20 UTC (rev 201355)
+++ trunk/Source/WebCore/ChangeLog        2016-05-24 21:57:56 UTC (rev 201356)
</span><span class="lines">@@ -1,3 +1,115 @@
</span><ins>+2016-05-24  Brady Eidson  &lt;beidson@apple.com&gt;
+
+        Modern IDB: (Workers) Eliminate race in getting the ScriptExecutionContext and using it.
+        https://bugs.webkit.org/show_bug.cgi?id=158038
+
+        Reviewed by Alex Christensen.
+
+        No new tests (Resolves potential flakes in existing tests).
+        
+        When the main thread is trying to post a task to a worker thread's ScriptExecutionContext, there is a race
+        between checking that the context still exists and actually using it.
+        
+        The solution is to add a new class - IDBActiveDOMObject - which does a few things things:
+        1 - Remembers its origin thread.
+        2 - Guards clearing its ScriptExecutionContext with a Lock.
+        3 - Adds a templated &quot;performCallbackOnOriginThread&quot; that uses the same Lock to make sure posting the task to
+            the ScriptExecutionContext's RunLoop is safe.
+
+        Also, tons of ASSERTions are updated because each object with an originThread no longer keeps its idea in an
+        accessible member variable.
+        
+        * Modules/indexeddb/IDBActiveDOMObject.h:
+        (WebCore::IDBActiveDOMObject::originThreadID):
+        (WebCore::IDBActiveDOMObject::performCallbackOnOriginThread):
+        (WebCore::IDBActiveDOMObject::IDBActiveDOMObject):
+        
+        * Modules/indexeddb/IDBDatabase.cpp:
+        (WebCore::IDBDatabase::IDBDatabase):
+        (WebCore::IDBDatabase::~IDBDatabase):
+        (WebCore::IDBDatabase::hasPendingActivity):
+        (WebCore::IDBDatabase::name):
+        (WebCore::IDBDatabase::version):
+        (WebCore::IDBDatabase::objectStoreNames):
+        (WebCore::IDBDatabase::createObjectStore):
+        (WebCore::IDBDatabase::transaction):
+        (WebCore::IDBDatabase::deleteObjectStore):
+        (WebCore::IDBDatabase::close):
+        (WebCore::IDBDatabase::didCloseFromServer):
+        (WebCore::IDBDatabase::maybeCloseInServer):
+        (WebCore::IDBDatabase::activeDOMObjectName):
+        (WebCore::IDBDatabase::canSuspendForDocumentSuspension):
+        (WebCore::IDBDatabase::stop):
+        (WebCore::IDBDatabase::startVersionChangeTransaction):
+        (WebCore::IDBDatabase::didStartTransaction):
+        (WebCore::IDBDatabase::willCommitTransaction):
+        (WebCore::IDBDatabase::didCommitTransaction):
+        (WebCore::IDBDatabase::willAbortTransaction):
+        (WebCore::IDBDatabase::didAbortTransaction):
+        (WebCore::IDBDatabase::didCommitOrAbortTransaction):
+        (WebCore::IDBDatabase::fireVersionChangeEvent):
+        (WebCore::IDBDatabase::dispatchEvent):
+        (WebCore::IDBDatabase::didCreateIndexInfo):
+        (WebCore::IDBDatabase::didDeleteIndexInfo):
+        * Modules/indexeddb/IDBDatabase.h:
+        (WebCore::IDBDatabase::originThreadID): Deleted.
+        
+        * Modules/indexeddb/IDBRequest.cpp:
+        (WebCore::IDBRequest::IDBRequest):
+        (WebCore::IDBRequest::~IDBRequest):
+        (WebCore::IDBRequest::errorCode):
+        (WebCore::IDBRequest::error):
+        (WebCore::IDBRequest::setSource):
+        (WebCore::IDBRequest::setVersionChangeTransaction):
+        (WebCore::IDBRequest::transaction):
+        (WebCore::IDBRequest::readyState):
+        (WebCore::IDBRequest::sourceObjectStoreIdentifier):
+        (WebCore::IDBRequest::sourceIndexIdentifier):
+        (WebCore::IDBRequest::requestedIndexRecordType):
+        (WebCore::IDBRequest::eventTargetInterface):
+        (WebCore::IDBRequest::activeDOMObjectName):
+        (WebCore::IDBRequest::canSuspendForDocumentSuspension):
+        (WebCore::IDBRequest::hasPendingActivity):
+        (WebCore::IDBRequest::stop):
+        (WebCore::IDBRequest::enqueueEvent):
+        (WebCore::IDBRequest::dispatchEvent):
+        (WebCore::IDBRequest::uncaughtExceptionInEventHandler):
+        (WebCore::IDBRequest::setResult):
+        (WebCore::IDBRequest::setResultToStructuredClone):
+        (WebCore::IDBRequest::clearResult):
+        (WebCore::IDBRequest::setResultToUndefined):
+        (WebCore::IDBRequest::resultCursor):
+        (WebCore::IDBRequest::willIterateCursor):
+        (WebCore::IDBRequest::didOpenOrIterateCursor):
+        (WebCore::IDBRequest::requestCompleted):
+        (WebCore::IDBRequest::onError):
+        (WebCore::IDBRequest::onSuccess):
+        * Modules/indexeddb/IDBRequest.h:
+        (WebCore::IDBRequest::originThreadID): Deleted.
+        
+        * Modules/indexeddb/IDBTransaction.cpp:
+        (WebCore::IDBTransaction::IDBTransaction):
+        (WebCore::IDBTransaction::originThreadID): Deleted.
+        * Modules/indexeddb/IDBTransaction.h:
+        
+        * Modules/indexeddb/client/IDBConnectionProxy.cpp:
+        (WebCore::IDBClient::IDBConnectionProxy::completeOpenDBRequest):
+        (WebCore::IDBClient::IDBConnectionProxy::completeOperation):
+        (WebCore::IDBClient::IDBConnectionProxy::fireVersionChangeEvent):
+        (WebCore::IDBClient::IDBConnectionProxy::notifyOpenDBRequestBlocked):
+        (WebCore::IDBClient::IDBConnectionProxy::didStartTransaction):
+        (WebCore::IDBClient::IDBConnectionProxy::didCommitTransaction):
+        (WebCore::IDBClient::IDBConnectionProxy::didAbortTransaction):
+        (WebCore::IDBClient::IDBConnectionProxy::didCloseFromServer):
+        (WebCore::IDBClient::performCallbackOnCorrectThread): Deleted.
+        
+        * Modules/indexeddb/client/TransactionOperation.cpp:
+        (WebCore::IDBClient::TransactionOperation::scriptExecutionContext): Deleted.
+        * Modules/indexeddb/client/TransactionOperation.h:
+        (WebCore::IDBClient::TransactionOperation::performCompleteOnOriginThread):
+        
+        * WebCore.xcodeproj/project.pbxproj:
+
</ins><span class="cx"> 2016-05-23  Ada Chan  &lt;adachan@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Only set overflow:hidden on -webkit-media-controls when the placeholder is showing.
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbIDBActiveDOMObjecthfromrev201355trunkSourceWebCoreModulesindexeddbclientTransactionOperationcpp"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebCore/Modules/indexeddb/IDBActiveDOMObject.h (from rev 201355, trunk/Source/WebCore/Modules/indexeddb/client/TransactionOperation.cpp) (0 => 201356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/IDBActiveDOMObject.h                                (rev 0)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBActiveDOMObject.h        2016-05-24 21:57:56 UTC (rev 201356)
</span><span class="lines">@@ -0,0 +1,80 @@
</span><ins>+/*
+ * Copyright (C) 2016 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.
+ */
+
+#pragma once
+
+#include &quot;ActiveDOMObject.h&quot;
+#include &quot;CrossThreadCopier.h&quot;
+#include &quot;ScriptExecutionContext.h&quot;
+#include &lt;wtf/MainThread.h&gt;
+#include &lt;wtf/Threading.h&gt;
+
+#if ENABLE(INDEXED_DATABASE)
+
+namespace WebCore {
+
+class IDBActiveDOMObject : public ActiveDOMObject {
+public:
+    ThreadIdentifier originThreadID() const { return m_originThreadID; }
+
+    void contextDestroyed() final {
+        Locker&lt;Lock&gt; lock(m_scriptExecutionContextLock);
+        ActiveDOMObject::contextDestroyed();
+    }
+
+    template&lt;typename T, typename... Parameters, typename... Arguments&gt;
+    void performCallbackOnOriginThread(T&amp; object, void (T::*method)(Parameters...), Arguments&amp;&amp;... arguments)
+    {
+        ASSERT(originThreadID() == object.originThreadID());
+
+        if (object.originThreadID() == currentThread()) {
+            (object.*method)(arguments...);
+            return;
+        }
+
+        Locker&lt;Lock&gt; lock(m_scriptExecutionContextLock);
+
+        ScriptExecutionContext* context = scriptExecutionContext();
+        if (!context)
+            return;
+
+        context-&gt;postCrossThreadTask(object, method, arguments...);
+    }
+
+protected:
+    IDBActiveDOMObject(ScriptExecutionContext* context)
+        : ActiveDOMObject(context)
+    {
+        ASSERT(context);
+    }
+
+private:
+    ThreadIdentifier m_originThreadID { currentThread() };
+    Lock m_scriptExecutionContextLock;
+};
+
+} // namespace WebCore
+
+#endif // ENABLE(INDEXED_DATABASE)
</ins></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbIDBDatabasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.cpp (201355 => 201356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.cpp        2016-05-24 21:48:20 UTC (rev 201355)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.cpp        2016-05-24 21:57:56 UTC (rev 201356)
</span><span class="lines">@@ -49,7 +49,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> IDBDatabase::IDBDatabase(ScriptExecutionContext&amp; context, IDBClient::IDBConnectionProxy&amp; connectionProxy, const IDBResultData&amp; resultData)
</span><del>-    : WebCore::ActiveDOMObject(&amp;context)
</del><ins>+    : IDBActiveDOMObject(&amp;context)
</ins><span class="cx">     , m_connectionProxy(connectionProxy)
</span><span class="cx">     , m_info(resultData.databaseInfo())
</span><span class="cx">     , m_databaseConnectionIdentifier(resultData.databaseConnectionIdentifier())
</span><span class="lines">@@ -61,31 +61,31 @@
</span><span class="cx"> 
</span><span class="cx"> IDBDatabase::~IDBDatabase()
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx">     m_connectionProxy-&gt;unregisterDatabaseConnection(*this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool IDBDatabase::hasPendingActivity() const
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx">     return !m_closedInServer;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> const String IDBDatabase::name() const
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx">     return m_info.name();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> uint64_t IDBDatabase::version() const
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx">     return m_info.version();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> RefPtr&lt;DOMStringList&gt; IDBDatabase::objectStoreNames() const
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     RefPtr&lt;DOMStringList&gt; objectStoreNames = DOMStringList::create();
</span><span class="cx">     for (auto&amp; name : m_info.objectStoreNames())
</span><span class="lines">@@ -104,7 +104,7 @@
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBDatabase::createObjectStore - (%s %s)&quot;, m_info.name().utf8().data(), name.utf8().data());
</span><span class="cx"> 
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx">     ASSERT(!m_versionChangeTransaction || m_versionChangeTransaction-&gt;isVersionChange());
</span><span class="cx"> 
</span><span class="cx">     if (!m_versionChangeTransaction) {
</span><span class="lines">@@ -150,7 +150,7 @@
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBDatabase::transaction&quot;);
</span><span class="cx"> 
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     if (m_closePending) {
</span><span class="cx">         ec.code = IDBDatabaseException::InvalidStateError;
</span><span class="lines">@@ -201,7 +201,7 @@
</span><span class="cx"> 
</span><span class="cx"> RefPtr&lt;WebCore::IDBTransaction&gt; IDBDatabase::transaction(ScriptExecutionContext* context, const String&amp; objectStore, const String&amp; mode, ExceptionCodeWithMessage&amp; ec)
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     Vector&lt;String&gt; objectStores(1);
</span><span class="cx">     objectStores[0] = objectStore;
</span><span class="lines">@@ -212,7 +212,7 @@
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBDatabase::deleteObjectStore&quot;);
</span><span class="cx"> 
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     if (!m_versionChangeTransaction) {
</span><span class="cx">         ec.code = IDBDatabaseException::InvalidStateError;
</span><span class="lines">@@ -239,7 +239,7 @@
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBDatabase::close - %&quot; PRIu64, m_databaseConnectionIdentifier);
</span><span class="cx"> 
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     m_closePending = true;
</span><span class="cx">     maybeCloseInServer();
</span><span class="lines">@@ -249,7 +249,7 @@
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBDatabase::didCloseFromServer - %&quot; PRIu64, m_databaseConnectionIdentifier);
</span><span class="cx"> 
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     m_closePending = true;
</span><span class="cx">     m_closedInServer = true;
</span><span class="lines">@@ -268,7 +268,7 @@
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBDatabase::maybeCloseInServer - %&quot; PRIu64, m_databaseConnectionIdentifier);
</span><span class="cx"> 
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     if (m_closedInServer)
</span><span class="cx">         return;
</span><span class="lines">@@ -285,13 +285,13 @@
</span><span class="cx"> 
</span><span class="cx"> const char* IDBDatabase::activeDOMObjectName() const
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx">     return &quot;IDBDatabase&quot;;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool IDBDatabase::canSuspendForDocumentSuspension() const
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     // FIXME: This value will sometimes be false when database operations are actually in progress.
</span><span class="cx">     // Such database operations do not yet exist.
</span><span class="lines">@@ -302,7 +302,7 @@
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBDatabase::stop - %&quot; PRIu64, m_databaseConnectionIdentifier);
</span><span class="cx"> 
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     removeAllEventListeners();
</span><span class="cx"> 
</span><span class="lines">@@ -325,7 +325,7 @@
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBDatabase::startVersionChangeTransaction %s&quot;, info.identifier().loggingString().utf8().data());
</span><span class="cx"> 
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx">     ASSERT(!m_versionChangeTransaction);
</span><span class="cx">     ASSERT(info.mode() == IndexedDB::TransactionMode::VersionChange);
</span><span class="cx">     ASSERT(!m_closePending);
</span><span class="lines">@@ -343,7 +343,7 @@
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBDatabase::didStartTransaction %s&quot;, transaction.info().identifier().loggingString().utf8().data());
</span><span class="cx">     ASSERT(!m_versionChangeTransaction);
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     // It is possible for the client to have aborted a transaction before the server replies back that it has started.
</span><span class="cx">     if (m_abortingTransactions.contains(transaction.info().identifier()))
</span><span class="lines">@@ -356,7 +356,7 @@
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBDatabase::willCommitTransaction %s&quot;, transaction.info().identifier().loggingString().utf8().data());
</span><span class="cx"> 
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     auto refTransaction = m_activeTransactions.take(transaction.info().identifier());
</span><span class="cx">     ASSERT(refTransaction);
</span><span class="lines">@@ -367,7 +367,7 @@
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBDatabase::didCommitTransaction %s&quot;, transaction.info().identifier().loggingString().utf8().data());
</span><span class="cx"> 
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     if (m_versionChangeTransaction == &amp;transaction)
</span><span class="cx">         m_info.setVersion(transaction.info().newVersion());
</span><span class="lines">@@ -379,7 +379,7 @@
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBDatabase::willAbortTransaction %s&quot;, transaction.info().identifier().loggingString().utf8().data());
</span><span class="cx"> 
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     auto refTransaction = m_activeTransactions.take(transaction.info().identifier());
</span><span class="cx">     if (!refTransaction)
</span><span class="lines">@@ -399,7 +399,7 @@
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBDatabase::didAbortTransaction %s&quot;, transaction.info().identifier().loggingString().utf8().data());
</span><span class="cx"> 
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     if (transaction.isVersionChange()) {
</span><span class="cx">         ASSERT(transaction.originalDatabaseInfo());
</span><span class="lines">@@ -415,7 +415,7 @@
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBDatabase::didCommitOrAbortTransaction %s&quot;, transaction.info().identifier().loggingString().utf8().data());
</span><span class="cx"> 
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     if (m_versionChangeTransaction == &amp;transaction)
</span><span class="cx">         m_versionChangeTransaction = nullptr;
</span><span class="lines">@@ -445,7 +445,7 @@
</span><span class="cx">     uint64_t currentVersion = m_info.version();
</span><span class="cx">     LOG(IndexedDB, &quot;IDBDatabase::fireVersionChangeEvent - current version %&quot; PRIu64 &quot;, requested version %&quot; PRIu64 &quot;, connection %&quot; PRIu64, currentVersion, requestedVersion, m_databaseConnectionIdentifier);
</span><span class="cx"> 
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     if (!scriptExecutionContext() || m_closePending) {
</span><span class="cx">         connectionProxy().didFireVersionChangeEvent(m_databaseConnectionIdentifier, requestIdentifier);
</span><span class="lines">@@ -460,7 +460,7 @@
</span><span class="cx"> bool IDBDatabase::dispatchEvent(Event&amp; event)
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBDatabase::dispatchEvent (%&quot; PRIu64 &quot;)&quot;, m_databaseConnectionIdentifier);
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     bool result = EventTargetWithInlineData::dispatchEvent(event);
</span><span class="cx"> 
</span><span class="lines">@@ -472,7 +472,7 @@
</span><span class="cx"> 
</span><span class="cx"> void IDBDatabase::didCreateIndexInfo(const IDBIndexInfo&amp; info)
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     auto* objectStore = m_info.infoForExistingObjectStore(info.objectStoreIdentifier());
</span><span class="cx">     ASSERT(objectStore);
</span><span class="lines">@@ -481,7 +481,7 @@
</span><span class="cx"> 
</span><span class="cx"> void IDBDatabase::didDeleteIndexInfo(const IDBIndexInfo&amp; info)
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     auto* objectStore = m_info.infoForExistingObjectStore(info.objectStoreIdentifier());
</span><span class="cx">     ASSERT(objectStore);
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbIDBDatabaseh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.h (201355 => 201356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.h        2016-05-24 21:48:20 UTC (rev 201355)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.h        2016-05-24 21:57:56 UTC (rev 201356)
</span><span class="lines">@@ -30,6 +30,7 @@
</span><span class="cx"> #include &quot;Dictionary.h&quot;
</span><span class="cx"> #include &quot;EventTarget.h&quot;
</span><span class="cx"> #include &quot;ExceptionCode.h&quot;
</span><ins>+#include &quot;IDBActiveDOMObject.h&quot;
</ins><span class="cx"> #include &quot;IDBConnectionProxy.h&quot;
</span><span class="cx"> #include &quot;IDBConnectionToServer.h&quot;
</span><span class="cx"> #include &quot;IDBDatabaseInfo.h&quot;
</span><span class="lines">@@ -43,7 +44,7 @@
</span><span class="cx"> class IDBTransaction;
</span><span class="cx"> class IDBTransactionInfo;
</span><span class="cx"> 
</span><del>-class IDBDatabase : public ThreadSafeRefCounted&lt;IDBDatabase&gt;, public EventTargetWithInlineData, public ActiveDOMObject {
</del><ins>+class IDBDatabase : public ThreadSafeRefCounted&lt;IDBDatabase&gt;, public EventTargetWithInlineData, public IDBActiveDOMObject {
</ins><span class="cx"> public:
</span><span class="cx">     static Ref&lt;IDBDatabase&gt; create(ScriptExecutionContext&amp;, IDBClient::IDBConnectionProxy&amp;, const IDBResultData&amp;);
</span><span class="cx"> 
</span><span class="lines">@@ -99,8 +100,6 @@
</span><span class="cx"> 
</span><span class="cx">     bool hasPendingActivity() const final;
</span><span class="cx"> 
</span><del>-    ThreadIdentifier originThreadID() const { return m_originThreadID; }
-
</del><span class="cx"> private:
</span><span class="cx">     IDBDatabase(ScriptExecutionContext&amp;, IDBClient::IDBConnectionProxy&amp;, const IDBResultData&amp;);
</span><span class="cx"> 
</span><span class="lines">@@ -119,8 +118,6 @@
</span><span class="cx">     HashMap&lt;IDBResourceIdentifier, RefPtr&lt;IDBTransaction&gt;&gt; m_activeTransactions;
</span><span class="cx">     HashMap&lt;IDBResourceIdentifier, RefPtr&lt;IDBTransaction&gt;&gt; m_committingTransactions;
</span><span class="cx">     HashMap&lt;IDBResourceIdentifier, RefPtr&lt;IDBTransaction&gt;&gt; m_abortingTransactions;
</span><del>-
-    ThreadIdentifier m_originThreadID { currentThread() };
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbIDBRequestcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/IDBRequest.cpp (201355 => 201356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/IDBRequest.cpp        2016-05-24 21:48:20 UTC (rev 201355)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBRequest.cpp        2016-05-24 21:57:56 UTC (rev 201356)
</span><span class="lines">@@ -70,7 +70,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> IDBRequest::IDBRequest(ScriptExecutionContext&amp; context, IDBClient::IDBConnectionProxy&amp; connectionProxy)
</span><del>-    : ActiveDOMObject(&amp;context)
</del><ins>+    : IDBActiveDOMObject(&amp;context)
</ins><span class="cx">     , m_resourceIdentifier(connectionProxy.serverConnectionIdentifier())
</span><span class="cx">     , m_connectionProxy(connectionProxy)
</span><span class="cx"> {
</span><span class="lines">@@ -78,7 +78,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> IDBRequest::IDBRequest(ScriptExecutionContext&amp; context, IDBObjectStore&amp; objectStore, IDBTransaction&amp; transaction)
</span><del>-    : ActiveDOMObject(&amp;context)
</del><ins>+    : IDBActiveDOMObject(&amp;context)
</ins><span class="cx">     , m_transaction(&amp;transaction)
</span><span class="cx">     , m_resourceIdentifier(transaction.connectionProxy())
</span><span class="cx">     , m_objectStoreSource(&amp;objectStore)
</span><span class="lines">@@ -88,7 +88,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> IDBRequest::IDBRequest(ScriptExecutionContext&amp; context, IDBCursor&amp; cursor, IDBTransaction&amp; transaction)
</span><del>-    : ActiveDOMObject(&amp;context)
</del><ins>+    : IDBActiveDOMObject(&amp;context)
</ins><span class="cx">     , m_transaction(&amp;transaction)
</span><span class="cx">     , m_resourceIdentifier(transaction.connectionProxy())
</span><span class="cx">     , m_objectStoreSource(cursor.objectStore())
</span><span class="lines">@@ -102,7 +102,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> IDBRequest::IDBRequest(ScriptExecutionContext&amp; context, IDBIndex&amp; index, IDBTransaction&amp; transaction)
</span><del>-    : ActiveDOMObject(&amp;context)
</del><ins>+    : IDBActiveDOMObject(&amp;context)
</ins><span class="cx">     , m_transaction(&amp;transaction)
</span><span class="cx">     , m_resourceIdentifier(transaction.connectionProxy())
</span><span class="cx">     , m_indexSource(&amp;index)
</span><span class="lines">@@ -119,7 +119,7 @@
</span><span class="cx"> 
</span><span class="cx"> IDBRequest::~IDBRequest()
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     if (m_cursorResult)
</span><span class="cx">         m_cursorResult-&gt;clearRequest();
</span><span class="lines">@@ -127,14 +127,14 @@
</span><span class="cx"> 
</span><span class="cx"> unsigned short IDBRequest::errorCode(ExceptionCode&amp;) const
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     return 0;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> RefPtr&lt;DOMError&gt; IDBRequest::error(ExceptionCodeWithMessage&amp; ec) const
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     if (m_isDone)
</span><span class="cx">         return m_domError;
</span><span class="lines">@@ -146,7 +146,7 @@
</span><span class="cx"> 
</span><span class="cx"> void IDBRequest::setSource(IDBCursor&amp; cursor)
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx">     ASSERT(!m_cursorRequestNotifier);
</span><span class="cx"> 
</span><span class="cx">     m_objectStoreSource = nullptr;
</span><span class="lines">@@ -160,7 +160,7 @@
</span><span class="cx"> 
</span><span class="cx"> void IDBRequest::setVersionChangeTransaction(IDBTransaction&amp; transaction)
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx">     ASSERT(!m_transaction);
</span><span class="cx">     ASSERT(transaction.isVersionChange());
</span><span class="cx">     ASSERT(!transaction.isFinishedOrFinishing());
</span><span class="lines">@@ -170,13 +170,13 @@
</span><span class="cx"> 
</span><span class="cx"> RefPtr&lt;WebCore::IDBTransaction&gt; IDBRequest::transaction() const
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx">     return m_shouldExposeTransactionToDOM ? m_transaction : nullptr;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> const String&amp; IDBRequest::readyState() const
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     static NeverDestroyed&lt;String&gt; pendingString(ASCIILiteral(&quot;pending&quot;));
</span><span class="cx">     static NeverDestroyed&lt;String&gt; doneString(ASCIILiteral(&quot;done&quot;));
</span><span class="lines">@@ -185,7 +185,7 @@
</span><span class="cx"> 
</span><span class="cx"> uint64_t IDBRequest::sourceObjectStoreIdentifier() const
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     if (m_objectStoreSource)
</span><span class="cx">         return m_objectStoreSource-&gt;info().identifier();
</span><span class="lines">@@ -196,7 +196,7 @@
</span><span class="cx"> 
</span><span class="cx"> uint64_t IDBRequest::sourceIndexIdentifier() const
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     if (!m_indexSource)
</span><span class="cx">         return 0;
</span><span class="lines">@@ -205,7 +205,7 @@
</span><span class="cx"> 
</span><span class="cx"> IndexedDB::IndexRecordType IDBRequest::requestedIndexRecordType() const
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx">     ASSERT(m_indexSource);
</span><span class="cx"> 
</span><span class="cx">     return m_requestedIndexRecordType;
</span><span class="lines">@@ -213,33 +213,33 @@
</span><span class="cx"> 
</span><span class="cx"> EventTargetInterface IDBRequest::eventTargetInterface() const
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     return IDBRequestEventTargetInterfaceType;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> const char* IDBRequest::activeDOMObjectName() const
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     return &quot;IDBRequest&quot;;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool IDBRequest::canSuspendForDocumentSuspension() const
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool IDBRequest::hasPendingActivity() const
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx">     return m_hasPendingActivity;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void IDBRequest::stop()
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx">     ASSERT(!m_contextStopped);
</span><span class="cx"> 
</span><span class="cx">     cancelForStop();
</span><span class="lines">@@ -256,7 +256,7 @@
</span><span class="cx"> 
</span><span class="cx"> void IDBRequest::enqueueEvent(Ref&lt;Event&gt;&amp;&amp; event)
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx">     if (!scriptExecutionContext() || m_contextStopped)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="lines">@@ -268,7 +268,7 @@
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBRequest::dispatchEvent - %s (%p)&quot;, event.type().string().utf8().data(), this);
</span><span class="cx"> 
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx">     ASSERT(m_hasPendingActivity);
</span><span class="cx">     ASSERT(!m_contextStopped);
</span><span class="cx"> 
</span><span class="lines">@@ -316,7 +316,7 @@
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBRequest::uncaughtExceptionInEventHandler&quot;);
</span><span class="cx"> 
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     if (m_transaction &amp;&amp; m_idbError.code() != IDBDatabaseException::AbortError)
</span><span class="cx">         m_transaction-&gt;abortDueToFailedRequest(DOMError::create(IDBDatabaseException::getErrorName(IDBDatabaseException::AbortError), ASCIILiteral(&quot;IDBTransaction will abort due to uncaught exception in an event handler&quot;)));
</span><span class="lines">@@ -324,7 +324,7 @@
</span><span class="cx"> 
</span><span class="cx"> void IDBRequest::setResult(const IDBKeyData&amp; keyData)
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     auto* context = scriptExecutionContext();
</span><span class="cx">     if (!context)
</span><span class="lines">@@ -336,7 +336,7 @@
</span><span class="cx"> 
</span><span class="cx"> void IDBRequest::setResult(uint64_t number)
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     auto* context = scriptExecutionContext();
</span><span class="cx">     if (!context)
</span><span class="lines">@@ -348,7 +348,7 @@
</span><span class="cx"> 
</span><span class="cx"> void IDBRequest::setResultToStructuredClone(const IDBValue&amp; value)
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     LOG(IndexedDB, &quot;IDBRequest::setResultToStructuredClone&quot;);
</span><span class="cx"> 
</span><span class="lines">@@ -362,7 +362,7 @@
</span><span class="cx"> 
</span><span class="cx"> void IDBRequest::clearResult()
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     m_scriptResult = { };
</span><span class="cx">     m_cursorResult = nullptr;
</span><span class="lines">@@ -371,7 +371,7 @@
</span><span class="cx"> 
</span><span class="cx"> void IDBRequest::setResultToUndefined()
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     auto* context = scriptExecutionContext();
</span><span class="cx">     if (!context)
</span><span class="lines">@@ -383,14 +383,14 @@
</span><span class="cx"> 
</span><span class="cx"> IDBCursor* IDBRequest::resultCursor()
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     return m_cursorResult.get();
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void IDBRequest::willIterateCursor(IDBCursor&amp; cursor)
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx">     ASSERT(m_isDone);
</span><span class="cx">     ASSERT(scriptExecutionContext());
</span><span class="cx">     ASSERT(m_transaction);
</span><span class="lines">@@ -412,7 +412,7 @@
</span><span class="cx"> 
</span><span class="cx"> void IDBRequest::didOpenOrIterateCursor(const IDBResultData&amp; resultData)
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx">     ASSERT(m_pendingCursor);
</span><span class="cx"> 
</span><span class="cx">     clearResult();
</span><span class="lines">@@ -431,7 +431,7 @@
</span><span class="cx"> 
</span><span class="cx"> void IDBRequest::requestCompleted(const IDBResultData&amp; resultData)
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     m_isDone = true;
</span><span class="cx"> 
</span><span class="lines">@@ -446,7 +446,7 @@
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBRequest::onError&quot;);
</span><span class="cx"> 
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx">     ASSERT(!m_idbError.isNull());
</span><span class="cx"> 
</span><span class="cx">     m_domError = DOMError::create(m_idbError.name(), m_idbError.message());
</span><span class="lines">@@ -456,14 +456,14 @@
</span><span class="cx"> void IDBRequest::onSuccess()
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBRequest::onSuccess&quot;);
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     enqueueEvent(Event::create(eventNames().successEvent, false, false));
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void IDBRequest::setResult(Ref&lt;IDBDatabase&gt;&amp;&amp; database)
</span><span class="cx"> {
</span><del>-    ASSERT(currentThread() == m_originThreadID);
</del><ins>+    ASSERT(currentThread() == originThreadID());
</ins><span class="cx"> 
</span><span class="cx">     clearResult();
</span><span class="cx">     m_databaseResult = WTFMove(database);
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbIDBRequesth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/IDBRequest.h (201355 => 201356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/IDBRequest.h        2016-05-24 21:48:20 UTC (rev 201355)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBRequest.h        2016-05-24 21:57:56 UTC (rev 201356)
</span><span class="lines">@@ -27,8 +27,8 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INDEXED_DATABASE)
</span><span class="cx"> 
</span><del>-#include &quot;ActiveDOMObject.h&quot;
</del><span class="cx"> #include &quot;EventTarget.h&quot;
</span><ins>+#include &quot;IDBActiveDOMObject.h&quot;
</ins><span class="cx"> #include &quot;IDBError.h&quot;
</span><span class="cx"> #include &quot;IDBResourceIdentifier.h&quot;
</span><span class="cx"> #include &quot;IndexedDB.h&quot;
</span><span class="lines">@@ -52,7 +52,7 @@
</span><span class="cx"> class IDBConnectionToServer;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-class IDBRequest : public EventTargetWithInlineData, private ActiveDOMObject, public RefCounted&lt;IDBRequest&gt; {
</del><ins>+class IDBRequest : public EventTargetWithInlineData, public IDBActiveDOMObject, public RefCounted&lt;IDBRequest&gt; {
</ins><span class="cx"> public:
</span><span class="cx">     static Ref&lt;IDBRequest&gt; create(ScriptExecutionContext&amp;, IDBObjectStore&amp;, IDBTransaction&amp;);
</span><span class="cx">     static Ref&lt;IDBRequest&gt; create(ScriptExecutionContext&amp;, IDBCursor&amp;, IDBTransaction&amp;);
</span><span class="lines">@@ -104,8 +104,6 @@
</span><span class="cx"> 
</span><span class="cx">     bool hasPendingActivity() const final;
</span><span class="cx"> 
</span><del>-    ThreadIdentifier originThreadID() const { return m_originThreadID; }
-
</del><span class="cx"> protected:
</span><span class="cx">     IDBRequest(ScriptExecutionContext&amp;, IDBClient::IDBConnectionProxy&amp;);
</span><span class="cx"> 
</span><span class="lines">@@ -173,8 +171,6 @@
</span><span class="cx">     std::unique_ptr&lt;ScopeGuard&gt; m_cursorRequestNotifier;
</span><span class="cx"> 
</span><span class="cx">     Ref&lt;IDBClient::IDBConnectionProxy&gt; m_connectionProxy;
</span><del>-
-    ThreadIdentifier m_originThreadID { currentThread() };
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbIDBTransactioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/IDBTransaction.cpp (201355 => 201356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/IDBTransaction.cpp        2016-05-24 21:48:20 UTC (rev 201355)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBTransaction.cpp        2016-05-24 21:57:56 UTC (rev 201356)
</span><span class="lines">@@ -123,7 +123,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> IDBTransaction::IDBTransaction(IDBDatabase&amp; database, const IDBTransactionInfo&amp; info, IDBOpenDBRequest* request)
</span><del>-    : WebCore::ActiveDOMObject(database.scriptExecutionContext())
</del><ins>+    : IDBActiveDOMObject(database.scriptExecutionContext())
</ins><span class="cx">     , m_database(database)
</span><span class="cx">     , m_info(info)
</span><span class="cx">     , m_operationTimer(*this, &amp;IDBTransaction::operationTimerFired)
</span><span class="lines">@@ -1091,11 +1091,6 @@
</span><span class="cx">     scheduleOperationTimer();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ThreadIdentifier IDBTransaction::originThreadID() const
-{
-    return m_database-&gt;originThreadID();
-}
-
</del><span class="cx"> void IDBTransaction::connectionClosedFromServer(const IDBError&amp; error)
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBTransaction::connectionClosedFromServer - %s&quot;, error.message().utf8().data());
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbIDBTransactionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/IDBTransaction.h (201355 => 201356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/IDBTransaction.h        2016-05-24 21:48:20 UTC (rev 201355)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBTransaction.h        2016-05-24 21:57:56 UTC (rev 201356)
</span><span class="lines">@@ -27,8 +27,8 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INDEXED_DATABASE)
</span><span class="cx"> 
</span><del>-#include &quot;ActiveDOMObject.h&quot;
</del><span class="cx"> #include &quot;EventTarget.h&quot;
</span><ins>+#include &quot;IDBActiveDOMObject.h&quot;
</ins><span class="cx"> #include &quot;IDBError.h&quot;
</span><span class="cx"> #include &quot;IDBOpenDBRequest.h&quot;
</span><span class="cx"> #include &quot;IDBTransactionInfo.h&quot;
</span><span class="lines">@@ -59,7 +59,7 @@
</span><span class="cx"> class TransactionOperation;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-class IDBTransaction : public ThreadSafeRefCounted&lt;IDBTransaction&gt;, public EventTargetWithInlineData, private ActiveDOMObject {
</del><ins>+class IDBTransaction : public ThreadSafeRefCounted&lt;IDBTransaction&gt;, public EventTargetWithInlineData, public IDBActiveDOMObject {
</ins><span class="cx"> public:
</span><span class="cx">     static const AtomicString&amp; modeReadOnly();
</span><span class="cx">     static const AtomicString&amp; modeReadWrite();
</span><span class="lines">@@ -143,8 +143,6 @@
</span><span class="cx"> 
</span><span class="cx">     IDBClient::IDBConnectionProxy&amp; connectionProxy();
</span><span class="cx"> 
</span><del>-    ThreadIdentifier originThreadID() const;
-
</del><span class="cx">     void connectionClosedFromServer(const IDBError&amp;);
</span><span class="cx"> 
</span><span class="cx"> private:
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbclientIDBConnectionProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionProxy.cpp (201355 => 201356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionProxy.cpp        2016-05-24 21:48:20 UTC (rev 201355)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionProxy.cpp        2016-05-24 21:57:56 UTC (rev 201356)
</span><span class="lines">@@ -41,23 +41,6 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> namespace IDBClient {
</span><span class="cx"> 
</span><del>-template&lt;typename T, typename... Parameters, typename... Arguments&gt;
-void performCallbackOnCorrectThread(T&amp; object, void (T::*method)(Parameters...), Arguments&amp;&amp;... arguments)
-{
-    ASSERT(isMainThread());
-
-    if (object.originThreadID() == currentThread()) {
-        (object.*method)(arguments...);
-        return;
-    }
-
-    ScriptExecutionContext* context = object.scriptExecutionContext();
-    if (!context)
-        return;
-
-    context-&gt;postCrossThreadTask(object, method, arguments...);
-}
-
</del><span class="cx"> IDBConnectionProxy::IDBConnectionProxy(IDBConnectionToServer&amp; connection)
</span><span class="cx">     : m_connectionToServer(connection)
</span><span class="cx">     , m_serverConnectionIdentifier(connection.identifier())
</span><span class="lines">@@ -142,7 +125,7 @@
</span><span class="cx"> 
</span><span class="cx">     ASSERT(request);
</span><span class="cx"> 
</span><del>-    performCallbackOnCorrectThread(*request, &amp;IDBOpenDBRequest::requestCompleted, resultData);
</del><ins>+    request-&gt;performCallbackOnOriginThread(*request, &amp;IDBOpenDBRequest::requestCompleted, resultData);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void IDBConnectionProxy::createObjectStore(TransactionOperation&amp; operation, const IDBObjectStoreInfo&amp; info)
</span><span class="lines">@@ -252,7 +235,7 @@
</span><span class="cx">     if (!operation)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    performCallbackOnCorrectThread(*operation, &amp;TransactionOperation::completed, resultData);
</del><ins>+    operation-&gt;performCompleteOnOriginThread(resultData);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void IDBConnectionProxy::abortOpenAndUpgradeNeeded(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier&amp; transactionIdentifier)
</span><span class="lines">@@ -271,7 +254,7 @@
</span><span class="cx">     if (!database)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    performCallbackOnCorrectThread(*database, &amp;IDBDatabase::fireVersionChangeEvent, requestIdentifier, requestedVersion);
</del><ins>+    database-&gt;performCallbackOnOriginThread(*database, &amp;IDBDatabase::fireVersionChangeEvent, requestIdentifier, requestedVersion);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void IDBConnectionProxy::didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier&amp; requestIdentifier)
</span><span class="lines">@@ -291,7 +274,7 @@
</span><span class="cx"> 
</span><span class="cx">     ASSERT(request);
</span><span class="cx"> 
</span><del>-    performCallbackOnCorrectThread(*request, &amp;IDBOpenDBRequest::requestBlocked, oldVersion, newVersion);
</del><ins>+    request-&gt;performCallbackOnOriginThread(*request, &amp;IDBOpenDBRequest::requestBlocked, oldVersion, newVersion);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void IDBConnectionProxy::openDBRequestCancelled(const IDBRequestData&amp; requestData)
</span><span class="lines">@@ -320,7 +303,7 @@
</span><span class="cx"> 
</span><span class="cx">     ASSERT(transaction);
</span><span class="cx"> 
</span><del>-    performCallbackOnCorrectThread(*transaction, &amp;IDBTransaction::didStart, error);
</del><ins>+    transaction-&gt;performCallbackOnOriginThread(*transaction, &amp;IDBTransaction::didStart, error);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void IDBConnectionProxy::commitTransaction(IDBTransaction&amp; transaction)
</span><span class="lines">@@ -344,7 +327,7 @@
</span><span class="cx"> 
</span><span class="cx">     ASSERT(transaction);
</span><span class="cx"> 
</span><del>-    performCallbackOnCorrectThread(*transaction, &amp;IDBTransaction::didCommit, error);
</del><ins>+    transaction-&gt;performCallbackOnOriginThread(*transaction, &amp;IDBTransaction::didCommit, error);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void IDBConnectionProxy::abortTransaction(IDBTransaction&amp; transaction)
</span><span class="lines">@@ -368,7 +351,7 @@
</span><span class="cx"> 
</span><span class="cx">     ASSERT(transaction);
</span><span class="cx"> 
</span><del>-    performCallbackOnCorrectThread(*transaction, &amp;IDBTransaction::didAbort, error);
</del><ins>+    transaction-&gt;performCallbackOnOriginThread(*transaction, &amp;IDBTransaction::didAbort, error);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool IDBConnectionProxy::hasRecordOfTransaction(const IDBTransaction&amp; transaction) const
</span><span class="lines">@@ -404,7 +387,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    performCallbackOnCorrectThread(*database, &amp;IDBDatabase::didCloseFromServer, error);
</del><ins>+    database-&gt;performCallbackOnOriginThread(*database, &amp;IDBDatabase::didCloseFromServer, error);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void IDBConnectionProxy::confirmDidCloseFromServer(IDBDatabase&amp; database)
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbclientTransactionOperationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/client/TransactionOperation.cpp (201355 => 201356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/client/TransactionOperation.cpp        2016-05-24 21:48:20 UTC (rev 201355)
+++ trunk/Source/WebCore/Modules/indexeddb/client/TransactionOperation.cpp        2016-05-24 21:57:56 UTC (rev 201356)
</span><span class="lines">@@ -44,11 +44,6 @@
</span><span class="cx">         m_cursorIdentifier = std::make_unique&lt;IDBResourceIdentifier&gt;(cursor-&gt;info().identifier());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ScriptExecutionContext* TransactionOperation::scriptExecutionContext() const
-{
-    return m_transaction-&gt;scriptExecutionContext();
-}
-
</del><span class="cx"> } // namespace IDBClient
</span><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbclientTransactionOperationh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/client/TransactionOperation.h (201355 => 201356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/client/TransactionOperation.h        2016-05-24 21:48:20 UTC (rev 201355)
+++ trunk/Source/WebCore/Modules/indexeddb/client/TransactionOperation.h        2016-05-24 21:57:56 UTC (rev 201356)
</span><span class="lines">@@ -31,7 +31,9 @@
</span><span class="cx"> #include &quot;IDBRequest.h&quot;
</span><span class="cx"> #include &quot;IDBRequestData.h&quot;
</span><span class="cx"> #include &quot;IDBResourceIdentifier.h&quot;
</span><ins>+#include &quot;IDBResultData.h&quot;
</ins><span class="cx"> #include &quot;IDBTransaction.h&quot;
</span><ins>+#include &lt;wtf/MainThread.h&gt;
</ins><span class="cx"> #include &lt;wtf/Threading.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -60,6 +62,16 @@
</span><span class="cx">         m_performFunction = { };
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    void performCompleteOnOriginThread(const IDBResultData&amp; data)
+    {
+        ASSERT(isMainThread());
+
+        if (m_originThreadID == currentThread())
+            completed(data);
+        else
+            m_transaction-&gt;performCallbackOnOriginThread(*this, &amp;TransactionOperation::completed, data);
+    }
+
</ins><span class="cx">     void completed(const IDBResultData&amp; data)
</span><span class="cx">     {
</span><span class="cx">         ASSERT(m_originThreadID == currentThread());
</span><span class="lines">@@ -77,8 +89,6 @@
</span><span class="cx"> 
</span><span class="cx">     ThreadIdentifier originThreadID() const { return m_originThreadID; }
</span><span class="cx"> 
</span><del>-    ScriptExecutionContext* scriptExecutionContext() const;
-
</del><span class="cx"> protected:
</span><span class="cx">     TransactionOperation(IDBTransaction&amp; transaction)
</span><span class="cx">         : m_transaction(transaction)
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (201355 => 201356)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-05-24 21:48:20 UTC (rev 201355)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2016-05-24 21:57:56 UTC (rev 201356)
</span><span class="lines">@@ -2071,6 +2071,7 @@
</span><span class="cx">                 517139061BF64DEC000D5F01 /* MemoryObjectStoreCursor.h in Headers */ = {isa = PBXBuildFile; fileRef = 517139041BF64DE3000D5F01 /* MemoryObjectStoreCursor.h */; };
</span><span class="cx">                 517139071BF64DEF000D5F01 /* MemoryCursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 517139011BF64DE3000D5F01 /* MemoryCursor.cpp */; };
</span><span class="cx">                 517139081BF64DEF000D5F01 /* MemoryCursor.h in Headers */ = {isa = PBXBuildFile; fileRef = 517139021BF64DE3000D5F01 /* MemoryCursor.h */; };
</span><ins>+                51714EA81CF4E4B1004723C4 /* IDBActiveDOMObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 51714EA71CF4DE87004723C4 /* IDBActiveDOMObject.h */; settings = {ATTRIBUTES = (Private, ); }; };
</ins><span class="cx">                 51741D0F0B07259A00ED442C /* BackForwardClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 51741D0B0B07259A00ED442C /* BackForwardClient.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 51741D110B07259A00ED442C /* HistoryItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 51741D0D0B07259A00ED442C /* HistoryItem.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 51741D120B07259A00ED442C /* HistoryItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 51741D0E0B07259A00ED442C /* HistoryItem.cpp */; };
</span><span class="lines">@@ -9662,6 +9663,7 @@
</span><span class="cx">                 517139021BF64DE3000D5F01 /* MemoryCursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryCursor.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 517139031BF64DE3000D5F01 /* MemoryObjectStoreCursor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MemoryObjectStoreCursor.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 517139041BF64DE3000D5F01 /* MemoryObjectStoreCursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryObjectStoreCursor.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                51714EA71CF4DE87004723C4 /* IDBActiveDOMObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IDBActiveDOMObject.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 51741D0B0B07259A00ED442C /* BackForwardClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BackForwardClient.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 51741D0D0B07259A00ED442C /* HistoryItem.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = HistoryItem.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 51741D0E0B07259A00ED442C /* HistoryItem.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = HistoryItem.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -19566,6 +19568,7 @@
</span><span class="cx">                                 51D7196C181106DF0016DC51 /* DOMWindowIndexedDatabase.cpp */,
</span><span class="cx">                                 51D7196D181106DF0016DC51 /* DOMWindowIndexedDatabase.h */,
</span><span class="cx">                                 51D7196E181106DF0016DC51 /* DOMWindowIndexedDatabase.idl */,
</span><ins>+                                51714EA71CF4DE87004723C4 /* IDBActiveDOMObject.h */,
</ins><span class="cx">                                 51645B541B9F88E800F789CE /* IDBCursor.cpp */,
</span><span class="cx">                                 51645B411B9F889B00F789CE /* IDBCursor.h */,
</span><span class="cx">                                 51D71977181106DF0016DC51 /* IDBCursor.idl */,
</span><span class="lines">@@ -25058,6 +25061,7 @@
</span><span class="cx">                                 31DCD29D1AB4FBDE0072E817 /* AnimationTrigger.h in Headers */,
</span><span class="cx">                                 0F580FAF149800D400FB5BD8 /* AnimationUtilities.h in Headers */,
</span><span class="cx">                                 93309DD7099E64920056E581 /* AppendNodeCommand.h in Headers */,
</span><ins>+                                51714EA81CF4E4B1004723C4 /* IDBActiveDOMObject.h in Headers */,
</ins><span class="cx">                                 1A8F6BBD0DB55CDC001DB794 /* ApplicationCache.h in Headers */,
</span><span class="cx">                                 1A8F6BBF0DB55CDC001DB794 /* ApplicationCacheGroup.h in Headers */,
</span><span class="cx">                                 24F54EAD101FE914000AE741 /* ApplicationCacheHost.h in Headers */,
</span></span></pre>
</div>
</div>

</body>
</html>