<!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>[200485] 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/200485">200485</a></dd>
<dt>Author</dt> <dd>beidson@apple.com</dd>
<dt>Date</dt> <dd>2016-05-05 15:14:08 -0700 (Thu, 05 May 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Modern IDB: Move all IDB DOM object management from IDBConnectionToServer to IDBConnectionProxy.
https://bugs.webkit.org/show_bug.cgi?id=157348

Reviewed by Alex Christensen.

No new tests (Refactor, no change in behavior yet).

This is in-progress IDB-in-Workers code that is isolated enough to land right now.

The goal is to have IDBConnectionToServer be a main-thread-only object, leaving IDBConnectionProxy
as the threading bridge between the worker thread and the main thread.

As such, IDBConnectionToServer no longer maintains maps of IDB DOM objects, but instead the proxy
does and guards that access with locks.

No threading changes takes place in this patch but it does scatter some isMainThread() checks and FIXMEs
accurately representing where threading changes will take place once I can return to this.

* Modules/indexeddb/IDBDatabase.cpp:
(WebCore::IDBDatabase::IDBDatabase):
(WebCore::IDBDatabase::~IDBDatabase):
(WebCore::IDBDatabase::maybeCloseInServer):

* Modules/indexeddb/IDBOpenDBRequest.cpp:
(WebCore::IDBOpenDBRequest::dispatchEvent):

* Modules/indexeddb/IDBTransaction.cpp:
(WebCore::IDBTransaction::abortOnServerAndCancelRequests):
(WebCore::IDBTransaction::commitOnServer):
(WebCore::IDBTransaction::establishOnServer):

* Modules/indexeddb/client/IDBConnectionProxy.cpp:
(WebCore::IDBClient::IDBConnectionProxy::openDatabase):
(WebCore::IDBClient::IDBConnectionProxy::deleteDatabase):
(WebCore::IDBClient::IDBConnectionProxy::didOpenDatabase):
(WebCore::IDBClient::IDBConnectionProxy::didDeleteDatabase):
(WebCore::IDBClient::IDBConnectionProxy::completeOpenDBRequest):
(WebCore::IDBClient::IDBConnectionProxy::fireVersionChangeEvent):
(WebCore::IDBClient::IDBConnectionProxy::didFireVersionChangeEvent):
(WebCore::IDBClient::IDBConnectionProxy::notifyOpenDBRequestBlocked):
(WebCore::IDBClient::IDBConnectionProxy::establishTransaction):
(WebCore::IDBClient::IDBConnectionProxy::didStartTransaction):
(WebCore::IDBClient::IDBConnectionProxy::commitTransaction):
(WebCore::IDBClient::IDBConnectionProxy::didCommitTransaction):
(WebCore::IDBClient::IDBConnectionProxy::abortTransaction):
(WebCore::IDBClient::IDBConnectionProxy::didAbortTransaction):
(WebCore::IDBClient::IDBConnectionProxy::hasRecordOfTransaction):
(WebCore::IDBClient::IDBConnectionProxy::didFinishHandlingVersionChangeTransaction):
(WebCore::IDBClient::IDBConnectionProxy::databaseConnectionClosed):
(WebCore::IDBClient::IDBConnectionProxy::registerDatabaseConnection):
(WebCore::IDBClient::IDBConnectionProxy::unregisterDatabaseConnection):
* Modules/indexeddb/client/IDBConnectionProxy.h:

* Modules/indexeddb/client/IDBConnectionToServer.cpp:
(WebCore::IDBClient::IDBConnectionToServer::deleteDatabase):
(WebCore::IDBClient::IDBConnectionToServer::didDeleteDatabase):
(WebCore::IDBClient::IDBConnectionToServer::openDatabase):
(WebCore::IDBClient::IDBConnectionToServer::didOpenDatabase):
(WebCore::IDBClient::IDBConnectionToServer::establishTransaction):
(WebCore::IDBClient::IDBConnectionToServer::commitTransaction):
(WebCore::IDBClient::IDBConnectionToServer::didCommitTransaction):
(WebCore::IDBClient::IDBConnectionToServer::didFinishHandlingVersionChangeTransaction):
(WebCore::IDBClient::IDBConnectionToServer::abortTransaction):
(WebCore::IDBClient::IDBConnectionToServer::didAbortTransaction):
(WebCore::IDBClient::IDBConnectionToServer::fireVersionChangeEvent):
(WebCore::IDBClient::IDBConnectionToServer::didFireVersionChangeEvent):
(WebCore::IDBClient::IDBConnectionToServer::didStartTransaction):
(WebCore::IDBClient::IDBConnectionToServer::notifyOpenDBRequestBlocked):
(WebCore::IDBClient::IDBConnectionToServer::databaseConnectionClosed):
(WebCore::IDBClient::IDBConnectionToServer::registerDatabaseConnection): Deleted.
(WebCore::IDBClient::IDBConnectionToServer::unregisterDatabaseConnection): Deleted.
(WebCore::IDBClient::IDBConnectionToServer::hasRecordOfTransaction): Deleted.
* Modules/indexeddb/client/IDBConnectionToServer.h:

* Modules/indexeddb/shared/IDBRequestData.cpp:
(WebCore::IDBRequestData::IDBRequestData):
* Modules/indexeddb/shared/IDBRequestData.h:

* Modules/indexeddb/shared/IDBResourceIdentifier.cpp:
(WebCore::IDBResourceIdentifier::IDBResourceIdentifier):
* Modules/indexeddb/shared/IDBResourceIdentifier.h:</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="#trunkSourceWebCoreModulesindexeddbIDBOpenDBRequestcpp">trunk/Source/WebCore/Modules/indexeddb/IDBOpenDBRequest.cpp</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="#trunkSourceWebCoreModulesindexeddbclientIDBConnectionProxyh">trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionProxy.h</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbclientIDBConnectionToServercpp">trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbclientIDBConnectionToServerh">trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbsharedIDBRequestDatacpp">trunk/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbsharedIDBRequestDatah">trunk/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.h</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbsharedIDBResourceIdentifiercpp">trunk/Source/WebCore/Modules/indexeddb/shared/IDBResourceIdentifier.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbsharedIDBResourceIdentifierh">trunk/Source/WebCore/Modules/indexeddb/shared/IDBResourceIdentifier.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (200484 => 200485)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-05-05 22:14:02 UTC (rev 200484)
+++ trunk/Source/WebCore/ChangeLog        2016-05-05 22:14:08 UTC (rev 200485)
</span><span class="lines">@@ -1,5 +1,89 @@
</span><span class="cx"> 2016-05-04  Brady Eidson  &lt;beidson@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        Modern IDB: Move all IDB DOM object management from IDBConnectionToServer to IDBConnectionProxy.
+        https://bugs.webkit.org/show_bug.cgi?id=157348
+
+        Reviewed by Alex Christensen.
+
+        No new tests (Refactor, no change in behavior yet).
+
+        This is in-progress IDB-in-Workers code that is isolated enough to land right now.
+        
+        The goal is to have IDBConnectionToServer be a main-thread-only object, leaving IDBConnectionProxy
+        as the threading bridge between the worker thread and the main thread.
+        
+        As such, IDBConnectionToServer no longer maintains maps of IDB DOM objects, but instead the proxy
+        does and guards that access with locks.
+        
+        No threading changes takes place in this patch but it does scatter some isMainThread() checks and FIXMEs 
+        accurately representing where threading changes will take place once I can return to this.
+        
+        * Modules/indexeddb/IDBDatabase.cpp:
+        (WebCore::IDBDatabase::IDBDatabase):
+        (WebCore::IDBDatabase::~IDBDatabase):
+        (WebCore::IDBDatabase::maybeCloseInServer):
+
+        * Modules/indexeddb/IDBOpenDBRequest.cpp:
+        (WebCore::IDBOpenDBRequest::dispatchEvent):
+
+        * Modules/indexeddb/IDBTransaction.cpp:
+        (WebCore::IDBTransaction::abortOnServerAndCancelRequests):
+        (WebCore::IDBTransaction::commitOnServer):
+        (WebCore::IDBTransaction::establishOnServer):
+
+        * Modules/indexeddb/client/IDBConnectionProxy.cpp:
+        (WebCore::IDBClient::IDBConnectionProxy::openDatabase):
+        (WebCore::IDBClient::IDBConnectionProxy::deleteDatabase):
+        (WebCore::IDBClient::IDBConnectionProxy::didOpenDatabase):
+        (WebCore::IDBClient::IDBConnectionProxy::didDeleteDatabase):
+        (WebCore::IDBClient::IDBConnectionProxy::completeOpenDBRequest):
+        (WebCore::IDBClient::IDBConnectionProxy::fireVersionChangeEvent):
+        (WebCore::IDBClient::IDBConnectionProxy::didFireVersionChangeEvent):
+        (WebCore::IDBClient::IDBConnectionProxy::notifyOpenDBRequestBlocked):
+        (WebCore::IDBClient::IDBConnectionProxy::establishTransaction):
+        (WebCore::IDBClient::IDBConnectionProxy::didStartTransaction):
+        (WebCore::IDBClient::IDBConnectionProxy::commitTransaction):
+        (WebCore::IDBClient::IDBConnectionProxy::didCommitTransaction):
+        (WebCore::IDBClient::IDBConnectionProxy::abortTransaction):
+        (WebCore::IDBClient::IDBConnectionProxy::didAbortTransaction):
+        (WebCore::IDBClient::IDBConnectionProxy::hasRecordOfTransaction):
+        (WebCore::IDBClient::IDBConnectionProxy::didFinishHandlingVersionChangeTransaction):
+        (WebCore::IDBClient::IDBConnectionProxy::databaseConnectionClosed):
+        (WebCore::IDBClient::IDBConnectionProxy::registerDatabaseConnection):
+        (WebCore::IDBClient::IDBConnectionProxy::unregisterDatabaseConnection):
+        * Modules/indexeddb/client/IDBConnectionProxy.h:
+        
+        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
+        (WebCore::IDBClient::IDBConnectionToServer::deleteDatabase):
+        (WebCore::IDBClient::IDBConnectionToServer::didDeleteDatabase):
+        (WebCore::IDBClient::IDBConnectionToServer::openDatabase):
+        (WebCore::IDBClient::IDBConnectionToServer::didOpenDatabase):
+        (WebCore::IDBClient::IDBConnectionToServer::establishTransaction):
+        (WebCore::IDBClient::IDBConnectionToServer::commitTransaction):
+        (WebCore::IDBClient::IDBConnectionToServer::didCommitTransaction):
+        (WebCore::IDBClient::IDBConnectionToServer::didFinishHandlingVersionChangeTransaction):
+        (WebCore::IDBClient::IDBConnectionToServer::abortTransaction):
+        (WebCore::IDBClient::IDBConnectionToServer::didAbortTransaction):
+        (WebCore::IDBClient::IDBConnectionToServer::fireVersionChangeEvent):
+        (WebCore::IDBClient::IDBConnectionToServer::didFireVersionChangeEvent):
+        (WebCore::IDBClient::IDBConnectionToServer::didStartTransaction):
+        (WebCore::IDBClient::IDBConnectionToServer::notifyOpenDBRequestBlocked):
+        (WebCore::IDBClient::IDBConnectionToServer::databaseConnectionClosed):
+        (WebCore::IDBClient::IDBConnectionToServer::registerDatabaseConnection): Deleted.
+        (WebCore::IDBClient::IDBConnectionToServer::unregisterDatabaseConnection): Deleted.
+        (WebCore::IDBClient::IDBConnectionToServer::hasRecordOfTransaction): Deleted.
+        * Modules/indexeddb/client/IDBConnectionToServer.h:
+        
+        * Modules/indexeddb/shared/IDBRequestData.cpp:
+        (WebCore::IDBRequestData::IDBRequestData):
+        * Modules/indexeddb/shared/IDBRequestData.h:
+        
+        * Modules/indexeddb/shared/IDBResourceIdentifier.cpp:
+        (WebCore::IDBResourceIdentifier::IDBResourceIdentifier):
+        * Modules/indexeddb/shared/IDBResourceIdentifier.h:
+
+2016-05-04  Brady Eidson  &lt;beidson@apple.com&gt;
+
</ins><span class="cx">         Modern IDB: Add isolatedCopy to a few more objects.
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=157330
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbIDBDatabasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.cpp (200484 => 200485)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.cpp        2016-05-05 22:14:02 UTC (rev 200484)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.cpp        2016-05-05 22:14:08 UTC (rev 200485)
</span><span class="lines">@@ -56,14 +56,13 @@
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBDatabase::IDBDatabase - Creating database %s with version %&quot; PRIu64 &quot; connection %&quot; PRIu64, m_info.name().utf8().data(), m_info.version(), m_databaseConnectionIdentifier);
</span><span class="cx">     suspendIfNeeded();
</span><del>-    relaxAdoptionRequirement();
-    m_connectionProxy-&gt;connectionToServer().registerDatabaseConnection(*this);
</del><ins>+    m_connectionProxy-&gt;registerDatabaseConnection(*this);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> IDBDatabase::~IDBDatabase()
</span><span class="cx"> {
</span><span class="cx">     ASSERT(currentThread() == m_originThreadID);
</span><del>-    m_connectionProxy-&gt;connectionToServer().unregisterDatabaseConnection(*this);
</del><ins>+    m_connectionProxy-&gt;unregisterDatabaseConnection(*this);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool IDBDatabase::hasPendingActivity() const
</span><span class="lines">@@ -262,7 +261,7 @@
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     m_closedInServer = true;
</span><del>-    m_connectionProxy-&gt;connectionToServer().databaseConnectionClosed(*this);
</del><ins>+    m_connectionProxy-&gt;databaseConnectionClosed(*this);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> const char* IDBDatabase::activeDOMObjectName() const
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbIDBDatabaseh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.h (200484 => 200485)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.h        2016-05-05 22:14:02 UTC (rev 200484)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.h        2016-05-05 22:14:08 UTC (rev 200485)
</span><span class="lines">@@ -43,7 +43,7 @@
</span><span class="cx"> class IDBTransaction;
</span><span class="cx"> class IDBTransactionInfo;
</span><span class="cx"> 
</span><del>-class IDBDatabase : public RefCounted&lt;IDBDatabase&gt;, public EventTargetWithInlineData, public ActiveDOMObject {
</del><ins>+class IDBDatabase : public ThreadSafeRefCounted&lt;IDBDatabase&gt;, public EventTargetWithInlineData, public ActiveDOMObject {
</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">@@ -64,11 +64,11 @@
</span><span class="cx">     // EventTarget
</span><span class="cx">     EventTargetInterface eventTargetInterface() const final { return IDBDatabaseEventTargetInterfaceType; }
</span><span class="cx">     ScriptExecutionContext* scriptExecutionContext() const final { return ActiveDOMObject::scriptExecutionContext(); }
</span><del>-    void refEventTarget() final { RefCounted&lt;IDBDatabase&gt;::ref(); }
-    void derefEventTarget() final { RefCounted&lt;IDBDatabase&gt;::deref(); }
</del><ins>+    void refEventTarget() final { ThreadSafeRefCounted&lt;IDBDatabase&gt;::ref(); }
+    void derefEventTarget() final { ThreadSafeRefCounted&lt;IDBDatabase&gt;::deref(); }
</ins><span class="cx"> 
</span><del>-    using RefCounted&lt;IDBDatabase&gt;::ref;
-    using RefCounted&lt;IDBDatabase&gt;::deref;
</del><ins>+    using ThreadSafeRefCounted&lt;IDBDatabase&gt;::ref;
+    using ThreadSafeRefCounted&lt;IDBDatabase&gt;::deref;
</ins><span class="cx"> 
</span><span class="cx">     const char* activeDOMObjectName() const final;
</span><span class="cx">     bool canSuspendForDocumentSuspension() const final;
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbIDBOpenDBRequestcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/IDBOpenDBRequest.cpp (200484 => 200485)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/IDBOpenDBRequest.cpp        2016-05-05 22:14:02 UTC (rev 200484)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBOpenDBRequest.cpp        2016-05-05 22:14:08 UTC (rev 200485)
</span><span class="lines">@@ -118,7 +118,7 @@
</span><span class="cx">     bool result = IDBRequest::dispatchEvent(event);
</span><span class="cx"> 
</span><span class="cx">     if (m_transaction &amp;&amp; m_transaction-&gt;isVersionChange() &amp;&amp; (event.type() == eventNames().errorEvent || event.type() == eventNames().successEvent))
</span><del>-        m_transaction-&gt;database().serverConnection().didFinishHandlingVersionChangeTransaction(*m_transaction);
</del><ins>+        m_transaction-&gt;database().connectionProxy().didFinishHandlingVersionChangeTransaction(*m_transaction);
</ins><span class="cx"> 
</span><span class="cx">     return result;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbIDBTransactioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/IDBTransaction.cpp (200484 => 200485)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/IDBTransaction.cpp        2016-05-05 22:14:02 UTC (rev 200484)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBTransaction.cpp        2016-05-05 22:14:08 UTC (rev 200485)
</span><span class="lines">@@ -133,8 +133,6 @@
</span><span class="cx">     LOG(IndexedDB, &quot;IDBTransaction::IDBTransaction - %s&quot;, m_info.loggingString().utf8().data());
</span><span class="cx">     ASSERT(currentThread() == m_database-&gt;originThreadID());
</span><span class="cx"> 
</span><del>-    relaxAdoptionRequirement();
-
</del><span class="cx">     if (m_info.mode() == IndexedDB::TransactionMode::VersionChange) {
</span><span class="cx">         ASSERT(m_openDBRequest);
</span><span class="cx">         m_openDBRequest-&gt;setVersionChangeTransaction(*this);
</span><span class="lines">@@ -295,7 +293,7 @@
</span><span class="cx">     ASSERT(currentThread() == m_database-&gt;originThreadID());
</span><span class="cx">     ASSERT(m_transactionOperationQueue.isEmpty());
</span><span class="cx"> 
</span><del>-    serverConnection().abortTransaction(*this);
</del><ins>+    m_database-&gt;connectionProxy().abortTransaction(*this);
</ins><span class="cx"> 
</span><span class="cx">     ASSERT(m_transactionOperationMap.contains(operation.identifier()));
</span><span class="cx">     m_transactionOperationMap.remove(operation.identifier());
</span><span class="lines">@@ -432,7 +430,7 @@
</span><span class="cx">     LOG(IndexedDB, &quot;IDBTransaction::commitOnServer&quot;);
</span><span class="cx">     ASSERT(currentThread() == m_database-&gt;originThreadID());
</span><span class="cx"> 
</span><del>-    serverConnection().commitTransaction(*this);
</del><ins>+    m_database-&gt;connectionProxy().commitTransaction(*this);
</ins><span class="cx"> 
</span><span class="cx">     ASSERT(m_transactionOperationMap.contains(operation.identifier()));
</span><span class="cx">     m_transactionOperationMap.remove(operation.identifier());
</span><span class="lines">@@ -1044,7 +1042,7 @@
</span><span class="cx">     LOG(IndexedDB, &quot;IDBTransaction::establishOnServer&quot;);
</span><span class="cx">     ASSERT(currentThread() == m_database-&gt;originThreadID());
</span><span class="cx"> 
</span><del>-    serverConnection().establishTransaction(*this);
</del><ins>+    m_database-&gt;connectionProxy().establishTransaction(*this);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void IDBTransaction::activate()
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbIDBTransactionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/IDBTransaction.h (200484 => 200485)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/IDBTransaction.h        2016-05-05 22:14:02 UTC (rev 200484)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBTransaction.h        2016-05-05 22:14:08 UTC (rev 200485)
</span><span class="lines">@@ -58,7 +58,7 @@
</span><span class="cx"> class TransactionOperation;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-class IDBTransaction : public RefCounted&lt;IDBTransaction&gt;, public EventTargetWithInlineData, private ActiveDOMObject {
</del><ins>+class IDBTransaction : public ThreadSafeRefCounted&lt;IDBTransaction&gt;, public EventTargetWithInlineData, private ActiveDOMObject {
</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">@@ -83,13 +83,13 @@
</span><span class="cx"> 
</span><span class="cx">     EventTargetInterface eventTargetInterface() const final { return IDBTransactionEventTargetInterfaceType; }
</span><span class="cx">     ScriptExecutionContext* scriptExecutionContext() const final { return ActiveDOMObject::scriptExecutionContext(); }
</span><del>-    void refEventTarget() final { RefCounted::ref(); }
-    void derefEventTarget() final { RefCounted::deref(); }
</del><ins>+    void refEventTarget() final { ThreadSafeRefCounted::ref(); }
+    void derefEventTarget() final { ThreadSafeRefCounted::deref(); }
</ins><span class="cx">     using EventTarget::dispatchEvent;
</span><span class="cx">     bool dispatchEvent(Event&amp;) final;
</span><span class="cx"> 
</span><del>-    using RefCounted&lt;IDBTransaction&gt;::ref;
-    using RefCounted&lt;IDBTransaction&gt;::deref;
</del><ins>+    using ThreadSafeRefCounted&lt;IDBTransaction&gt;::ref;
+    using ThreadSafeRefCounted&lt;IDBTransaction&gt;::deref;
</ins><span class="cx"> 
</span><span class="cx">     const char* activeDOMObjectName() const final;
</span><span class="cx">     bool canSuspendForDocumentSuspension() const final;
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbclientIDBConnectionProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionProxy.cpp (200484 => 200485)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionProxy.cpp        2016-05-05 22:14:02 UTC (rev 200484)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionProxy.cpp        2016-05-05 22:14:08 UTC (rev 200485)
</span><span class="lines">@@ -28,7 +28,10 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INDEXED_DATABASE)
</span><span class="cx"> 
</span><ins>+#include &quot;IDBDatabase.h&quot;
</ins><span class="cx"> #include &quot;IDBOpenDBRequest.h&quot;
</span><ins>+#include &quot;IDBRequestData.h&quot;
+#include &quot;IDBResultData.h&quot;
</ins><span class="cx"> #include &lt;wtf/MainThread.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -66,9 +69,21 @@
</span><span class="cx">     if (!isMainThread())
</span><span class="cx">         return nullptr;
</span><span class="cx"> 
</span><del>-    auto request = IDBOpenDBRequest::createOpenRequest(context, *this, databaseIdentifier, version);
-    m_connectionToServer.openDatabase(request.get());
-    return WTFMove(request);
</del><ins>+    RefPtr&lt;IDBOpenDBRequest&gt; request;
+    {
+        Locker&lt;Lock&gt; locker(m_openDBRequestMapLock);
+
+        request = IDBOpenDBRequest::createOpenRequest(context, *this, databaseIdentifier, version);
+        ASSERT(!m_openDBRequestMap.contains(request-&gt;resourceIdentifier()));
+        m_openDBRequestMap.set(request-&gt;resourceIdentifier(), request.get());
+    }
+
+    IDBRequestData requestData(*this, *request);
+
+    // FIXME: For workers, marshall this to the main thread if necessary.
+    m_connectionToServer.openDatabase(requestData);
+
+    return request;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> RefPtr&lt;IDBOpenDBRequest&gt; IDBConnectionProxy::deleteDatabase(ScriptExecutionContext&amp; context, const IDBDatabaseIdentifier&amp; databaseIdentifier)
</span><span class="lines">@@ -77,11 +92,203 @@
</span><span class="cx">     if (!isMainThread())
</span><span class="cx">         return nullptr;
</span><span class="cx"> 
</span><del>-    auto request = IDBOpenDBRequest::createDeleteRequest(context, *this, databaseIdentifier);
-    m_connectionToServer.deleteDatabase(request.get());
-    return WTFMove(request);
</del><ins>+    RefPtr&lt;IDBOpenDBRequest&gt; request;
+    {
+        Locker&lt;Lock&gt; locker(m_openDBRequestMapLock);
+
+        request = IDBOpenDBRequest::createDeleteRequest(context, *this, databaseIdentifier);
+        ASSERT(!m_openDBRequestMap.contains(request-&gt;resourceIdentifier()));
+        m_openDBRequestMap.set(request-&gt;resourceIdentifier(), request.get());
+    }
+
+    IDBRequestData requestData(*this, *request);
+
+    // FIXME: For workers, marshall this to the main thread if necessary.
+    m_connectionToServer.deleteDatabase(requestData);
+
+    return request;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void IDBConnectionProxy::didOpenDatabase(const IDBResultData&amp; resultData)
+{
+    completeOpenDBRequest(resultData);
+}
+
+void IDBConnectionProxy::didDeleteDatabase(const IDBResultData&amp; resultData)
+{
+    completeOpenDBRequest(resultData);
+}
+
+void IDBConnectionProxy::completeOpenDBRequest(const IDBResultData&amp; resultData)
+{
+    ASSERT(isMainThread());
+
+    RefPtr&lt;IDBOpenDBRequest&gt; request;
+    {
+        Locker&lt;Lock&gt; locker(m_openDBRequestMapLock);
+        request = m_openDBRequestMap.get(resultData.requestIdentifier());
+        ASSERT(request);
+    }
+
+    request-&gt;requestCompleted(resultData);
+}
+
+void IDBConnectionProxy::fireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier&amp; requestIdentifier, uint64_t requestedVersion)
+{
+    ASSERT(isMainThread());
+
+    RefPtr&lt;IDBDatabase&gt; database;
+    {
+        Locker&lt;Lock&gt; locker(m_databaseConnectionMapLock);
+        database = m_databaseConnectionMap.get(databaseConnectionIdentifier);
+    }
+
+    if (!database)
+        return;
+
+    database-&gt;fireVersionChangeEvent(requestIdentifier, requestedVersion);
+}
+
+void IDBConnectionProxy::didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier&amp; requestIdentifier)
+{
+    // FIXME: Handle Workers
+    if (!isMainThread())
+        return;
+
+    m_connectionToServer.didFireVersionChangeEvent(databaseConnectionIdentifier, requestIdentifier);
+}
+
+void IDBConnectionProxy::notifyOpenDBRequestBlocked(const IDBResourceIdentifier&amp; requestIdentifier, uint64_t oldVersion, uint64_t newVersion)
+{
+    ASSERT(isMainThread());
+
+    RefPtr&lt;IDBOpenDBRequest&gt; request;
+    {
+        Locker&lt;Lock&gt; locker(m_openDBRequestMapLock);
+        request = m_openDBRequestMap.get(requestIdentifier);
+    }
+
+    ASSERT(request);
+
+    request-&gt;requestBlocked(oldVersion, newVersion);
+}
+
+void IDBConnectionProxy::establishTransaction(IDBTransaction&amp; transaction)
+{
+    {
+        Locker&lt;Lock&gt; locker(m_transactionMapLock);
+        ASSERT(!hasRecordOfTransaction(transaction));
+        m_pendingTransactions.set(transaction.info().identifier(), &amp;transaction);
+    }
+
+    // FIXME: Handle Workers
+    if (!isMainThread())
+        return;
+
+    m_connectionToServer.establishTransaction(transaction.database().databaseConnectionIdentifier(), transaction.info());
+}
+
+void IDBConnectionProxy::didStartTransaction(const IDBResourceIdentifier&amp; transactionIdentifier, const IDBError&amp; error)
+{
+    RefPtr&lt;IDBTransaction&gt; transaction;
+    {
+        Locker&lt;Lock&gt; locker(m_transactionMapLock);
+        transaction = m_pendingTransactions.take(transactionIdentifier);
+    }
+
+    ASSERT(transaction);
+
+    // FIXME: Handle hopping to the Worker thread here if necessary.
+
+    transaction-&gt;didStart(error);
+}
+
+void IDBConnectionProxy::commitTransaction(IDBTransaction&amp; transaction)
+{
+    {
+        Locker&lt;Lock&gt; locker(m_transactionMapLock);
+        ASSERT(!m_committingTransactions.contains(transaction.info().identifier()));
+        m_committingTransactions.set(transaction.info().identifier(), &amp;transaction);
+    }
+
+    // FIXME: Handle Workers
+    if (!isMainThread())
+        return;
+
+    m_connectionToServer.commitTransaction(transaction.info().identifier());
+}
+
+void IDBConnectionProxy::didCommitTransaction(const IDBResourceIdentifier&amp; transactionIdentifier, const IDBError&amp; error)
+{
+    RefPtr&lt;IDBTransaction&gt; transaction;
+    {
+        Locker&lt;Lock&gt; locker(m_transactionMapLock);
+        transaction = m_committingTransactions.take(transactionIdentifier);
+    }
+
+    ASSERT(transaction);
+
+    // FIXME: Handle hopping to the Worker thread here if necessary.
+
+    transaction-&gt;didCommit(error);
+}
+
+void IDBConnectionProxy::abortTransaction(IDBTransaction&amp; transaction)
+{
+    {
+        Locker&lt;Lock&gt; locker(m_transactionMapLock);
+        ASSERT(!m_abortingTransactions.contains(transaction.info().identifier()));
+        m_abortingTransactions.set(transaction.info().identifier(), &amp;transaction);
+    }
+
+    // FIXME: Handle Workers
+    if (!isMainThread())
+        return;
+
+    m_connectionToServer.abortTransaction(transaction.info().identifier());
+}
+
+void IDBConnectionProxy::didAbortTransaction(const IDBResourceIdentifier&amp; transactionIdentifier, const IDBError&amp; error)
+{
+    RefPtr&lt;IDBTransaction&gt; transaction;
+    {
+        Locker&lt;Lock&gt; locker(m_transactionMapLock);
+        transaction = m_abortingTransactions.take(transactionIdentifier);
+    }
+
+    ASSERT(transaction);
+
+    // FIXME: Handle hopping to the Worker thread here if necessary.
+
+    transaction-&gt;didAbort(error);
+}
+
+bool IDBConnectionProxy::hasRecordOfTransaction(const IDBTransaction&amp; transaction) const
+{
+    ASSERT(m_transactionMapLock.isLocked());
+
+    auto identifier = transaction.info().identifier();
+    return m_pendingTransactions.contains(identifier) || m_committingTransactions.contains(identifier) || m_abortingTransactions.contains(identifier);
+}
+
+void IDBConnectionProxy::didFinishHandlingVersionChangeTransaction(IDBTransaction&amp; transaction)
+{
+    // FIXME: Handle Workers
+    if (!isMainThread())
+        return;
+
+    m_connectionToServer.didFinishHandlingVersionChangeTransaction(transaction.info().identifier());
+}
+
+void IDBConnectionProxy::databaseConnectionClosed(IDBDatabase&amp; database)
+{
+    // FIXME: Handle Workers
+    if (!isMainThread())
+        return;
+
+    m_connectionToServer.databaseConnectionClosed(database.databaseConnectionIdentifier());
+}
+
</ins><span class="cx"> void IDBConnectionProxy::getAllDatabaseNames(const SecurityOrigin&amp; mainFrameOrigin, const SecurityOrigin&amp; openingOrigin, std::function&lt;void (const Vector&lt;String&gt;&amp;)&gt; callback)
</span><span class="cx"> {
</span><span class="cx">     // This method is only meant to be called by the web inspector on the main thread.
</span><span class="lines">@@ -90,7 +297,23 @@
</span><span class="cx">     m_connectionToServer.getAllDatabaseNames(mainFrameOrigin, openingOrigin, callback);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void IDBConnectionProxy::registerDatabaseConnection(IDBDatabase&amp; database)
+{
+    Locker&lt;Lock&gt; locker(m_databaseConnectionMapLock);
</ins><span class="cx"> 
</span><ins>+    ASSERT(!m_databaseConnectionMap.contains(database.databaseConnectionIdentifier()));
+    m_databaseConnectionMap.set(database.databaseConnectionIdentifier(), &amp;database);
+}
+
+void IDBConnectionProxy::unregisterDatabaseConnection(IDBDatabase&amp; database)
+{
+    Locker&lt;Lock&gt; locker(m_databaseConnectionMapLock);
+
+    ASSERT(m_databaseConnectionMap.contains(database.databaseConnectionIdentifier()));
+    ASSERT(m_databaseConnectionMap.get(database.databaseConnectionIdentifier()) == &amp;database);
+    m_databaseConnectionMap.remove(database.databaseConnectionIdentifier());
+}
+
</ins><span class="cx"> } // namesapce IDBClient
</span><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbclientIDBConnectionProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionProxy.h (200484 => 200485)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionProxy.h        2016-05-05 22:14:02 UTC (rev 200484)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionProxy.h        2016-05-05 22:14:08 UTC (rev 200485)
</span><span class="lines">@@ -28,15 +28,21 @@
</span><span class="cx"> #if ENABLE(INDEXED_DATABASE)
</span><span class="cx"> 
</span><span class="cx"> #include &quot;IDBConnectionToServer.h&quot;
</span><ins>+#include &quot;IDBResourceIdentifier.h&quot;
</ins><span class="cx"> #include &lt;functional&gt;
</span><ins>+#include &lt;wtf/HashMap.h&gt;
</ins><span class="cx"> #include &lt;wtf/RefPtr.h&gt;
</span><span class="cx"> #include &lt;wtf/Vector.h&gt;
</span><span class="cx"> #include &lt;wtf/text/WTFString.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><ins>+class IDBDatabase;
</ins><span class="cx"> class IDBDatabaseIdentifier;
</span><ins>+class IDBError;
</ins><span class="cx"> class IDBOpenDBRequest;
</span><ins>+class IDBResultData;
+class IDBTransaction;
</ins><span class="cx"> class ScriptExecutionContext;
</span><span class="cx"> class SecurityOrigin;
</span><span class="cx"> 
</span><span class="lines">@@ -49,8 +55,27 @@
</span><span class="cx">     IDBConnectionProxy(IDBConnectionToServer&amp;);
</span><span class="cx"> 
</span><span class="cx">     RefPtr&lt;IDBOpenDBRequest&gt; openDatabase(ScriptExecutionContext&amp;, const IDBDatabaseIdentifier&amp;, uint64_t version);
</span><ins>+    void didOpenDatabase(const IDBResultData&amp;);
+
</ins><span class="cx">     RefPtr&lt;IDBOpenDBRequest&gt; deleteDatabase(ScriptExecutionContext&amp;, const IDBDatabaseIdentifier&amp;);
</span><ins>+    void didDeleteDatabase(const IDBResultData&amp;);
</ins><span class="cx"> 
</span><ins>+    void fireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier&amp; requestIdentifier, uint64_t requestedVersion);
+    void didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier&amp; requestIdentifier);
+
+    void notifyOpenDBRequestBlocked(const IDBResourceIdentifier&amp; requestIdentifier, uint64_t oldVersion, uint64_t newVersion);
+
+    void establishTransaction(IDBTransaction&amp;);
+    void commitTransaction(IDBTransaction&amp;);
+    void abortTransaction(IDBTransaction&amp;);
+
+    void didStartTransaction(const IDBResourceIdentifier&amp; transactionIdentifier, const IDBError&amp;);
+    void didCommitTransaction(const IDBResourceIdentifier&amp; transactionIdentifier, const IDBError&amp;);
+    void didAbortTransaction(const IDBResourceIdentifier&amp; transactionIdentifier, const IDBError&amp;);
+
+    void didFinishHandlingVersionChangeTransaction(IDBTransaction&amp;);
+    void databaseConnectionClosed(IDBDatabase&amp;);
+
</ins><span class="cx">     uint64_t serverConnectionIdentifier() const { return m_serverConnectionIdentifier; }
</span><span class="cx"> 
</span><span class="cx">     // FIXME: Temporarily required during bringup of IDB-in-Workers.
</span><span class="lines">@@ -63,9 +88,26 @@
</span><span class="cx"> 
</span><span class="cx">     void getAllDatabaseNames(const SecurityOrigin&amp; mainFrameOrigin, const SecurityOrigin&amp; openingOrigin, std::function&lt;void (const Vector&lt;String&gt;&amp;)&gt;);
</span><span class="cx"> 
</span><ins>+    void registerDatabaseConnection(IDBDatabase&amp;);
+    void unregisterDatabaseConnection(IDBDatabase&amp;);
+
</ins><span class="cx"> private:
</span><ins>+    void completeOpenDBRequest(const IDBResultData&amp;);
+    bool hasRecordOfTransaction(const IDBTransaction&amp;) const;
+
</ins><span class="cx">     IDBConnectionToServer&amp; m_connectionToServer;
</span><span class="cx">     uint64_t m_serverConnectionIdentifier;
</span><ins>+
+    HashMap&lt;uint64_t, IDBDatabase*&gt; m_databaseConnectionMap;
+    Lock m_databaseConnectionMapLock;
+
+    HashMap&lt;IDBResourceIdentifier, RefPtr&lt;IDBOpenDBRequest&gt;&gt; m_openDBRequestMap;
+    Lock m_openDBRequestMapLock;
+
+    HashMap&lt;IDBResourceIdentifier, RefPtr&lt;IDBTransaction&gt;&gt; m_pendingTransactions;
+    HashMap&lt;IDBResourceIdentifier, RefPtr&lt;IDBTransaction&gt;&gt; m_committingTransactions;
+    HashMap&lt;IDBResourceIdentifier, RefPtr&lt;IDBTransaction&gt;&gt; m_abortingTransactions;
+    Lock m_transactionMapLock;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace IDBClient
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbclientIDBConnectionToServercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp (200484 => 200485)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp        2016-05-05 22:14:02 UTC (rev 200484)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp        2016-05-05 22:14:08 UTC (rev 200485)
</span><span class="lines">@@ -36,6 +36,7 @@
</span><span class="cx"> #include &quot;IDBResultData.h&quot;
</span><span class="cx"> #include &quot;Logging.h&quot;
</span><span class="cx"> #include &quot;TransactionOperation.h&quot;
</span><ins>+#include &lt;wtf/MainThread.h&gt;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> namespace IDBClient {
</span><span class="lines">@@ -62,46 +63,28 @@
</span><span class="cx">     return *m_proxy;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void IDBConnectionToServer::deleteDatabase(IDBOpenDBRequest&amp; request)
</del><ins>+void IDBConnectionToServer::deleteDatabase(const IDBRequestData&amp; request)
</ins><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBConnectionToServer::deleteDatabase - %s&quot;, request.databaseIdentifier().debugString().utf8().data());
</span><del>-
-    ASSERT(!m_openDBRequestMap.contains(request.resourceIdentifier()));
-    m_openDBRequestMap.set(request.resourceIdentifier(), &amp;request);
-
-    IDBRequestData requestData(*this, request);
-    m_delegate-&gt;deleteDatabase(requestData);
</del><ins>+    m_delegate-&gt;deleteDatabase(request);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void IDBConnectionToServer::didDeleteDatabase(const IDBResultData&amp; resultData)
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBConnectionToServer::didDeleteDatabase&quot;);
</span><del>-
-    auto request = m_openDBRequestMap.take(resultData.requestIdentifier());
-    ASSERT(request);
-
-    request-&gt;requestCompleted(resultData);
</del><ins>+    m_proxy-&gt;didDeleteDatabase(resultData);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void IDBConnectionToServer::openDatabase(IDBOpenDBRequest&amp; request)
</del><ins>+void IDBConnectionToServer::openDatabase(const IDBRequestData&amp; request)
</ins><span class="cx"> {
</span><del>-    LOG(IndexedDB, &quot;IDBConnectionToServer::openDatabase - %s (%&quot; PRIu64 &quot;)&quot;, request.databaseIdentifier().debugString().utf8().data(), request.version());
-
-    ASSERT(!m_openDBRequestMap.contains(request.resourceIdentifier()));
-    m_openDBRequestMap.set(request.resourceIdentifier(), &amp;request);
-    
-    IDBRequestData requestData(*this, request);
-    m_delegate-&gt;openDatabase(requestData);
</del><ins>+    LOG(IndexedDB, &quot;IDBConnectionToServer::openDatabase - %s (%&quot; PRIu64 &quot;)&quot;, request.databaseIdentifier().debugString().utf8().data(), request.requestedVersion());
+    m_delegate-&gt;openDatabase(request);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void IDBConnectionToServer::didOpenDatabase(const IDBResultData&amp; resultData)
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBConnectionToServer::didOpenDatabase&quot;);
</span><del>-
-    auto request = m_openDBRequestMap.take(resultData.requestIdentifier());
-    ASSERT(request);
-
-    request-&gt;requestCompleted(resultData);
</del><ins>+    m_proxy-&gt;didOpenDatabase(resultData);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void IDBConnectionToServer::createObjectStore(TransactionOperation&amp; operation, const IDBObjectStoreInfo&amp; info)
</span><span class="lines">@@ -269,77 +252,66 @@
</span><span class="cx">     completeOperation(resultData);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void IDBConnectionToServer::establishTransaction(IDBTransaction&amp; transaction)
</del><ins>+void IDBConnectionToServer::establishTransaction(uint64_t databaseConnectionIdentifier, const IDBTransactionInfo&amp; info)
</ins><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBConnectionToServer::establishTransaction&quot;);
</span><ins>+    ASSERT(isMainThread());
</ins><span class="cx"> 
</span><del>-    ASSERT(!hasRecordOfTransaction(transaction));
-    m_pendingTransactions.set(transaction.info().identifier(), &amp;transaction);
-
-    m_delegate-&gt;establishTransaction(transaction.database().databaseConnectionIdentifier(), transaction.info());
</del><ins>+    m_delegate-&gt;establishTransaction(databaseConnectionIdentifier, info);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void IDBConnectionToServer::commitTransaction(IDBTransaction&amp; transaction)
</del><ins>+void IDBConnectionToServer::commitTransaction(const IDBResourceIdentifier&amp; transactionIdentifier)
</ins><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBConnectionToServer::commitTransaction&quot;);
</span><del>-    ASSERT(!m_committingTransactions.contains(transaction.info().identifier()));
-    m_committingTransactions.set(transaction.info().identifier(), &amp;transaction);
</del><ins>+    ASSERT(isMainThread());
</ins><span class="cx"> 
</span><del>-    auto identifier = transaction.info().identifier();
-    m_delegate-&gt;commitTransaction(identifier);
</del><ins>+    m_delegate-&gt;commitTransaction(transactionIdentifier);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void IDBConnectionToServer::didCommitTransaction(const IDBResourceIdentifier&amp; transactionIdentifier, const IDBError&amp; error)
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBConnectionToServer::didCommitTransaction&quot;);
</span><ins>+    ASSERT(isMainThread());
</ins><span class="cx"> 
</span><del>-    auto transaction = m_committingTransactions.take(transactionIdentifier);
-    ASSERT(transaction);
-
-    transaction-&gt;didCommit(error);
</del><ins>+    m_proxy-&gt;didCommitTransaction(transactionIdentifier, error);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void IDBConnectionToServer::didFinishHandlingVersionChangeTransaction(IDBTransaction&amp; transaction)
</del><ins>+void IDBConnectionToServer::didFinishHandlingVersionChangeTransaction(const IDBResourceIdentifier&amp; transactionIdentifier)
</ins><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBConnectionToServer::didFinishHandlingVersionChangeTransaction&quot;);
</span><del>-    auto identifier = transaction.info().identifier();
-    m_delegate-&gt;didFinishHandlingVersionChangeTransaction(identifier);
</del><ins>+    ASSERT(isMainThread());
+
+    m_delegate-&gt;didFinishHandlingVersionChangeTransaction(transactionIdentifier);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void IDBConnectionToServer::abortTransaction(IDBTransaction&amp; transaction)
</del><ins>+void IDBConnectionToServer::abortTransaction(const IDBResourceIdentifier&amp; transactionIdentifier)
</ins><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBConnectionToServer::abortTransaction&quot;);
</span><del>-    ASSERT(!m_abortingTransactions.contains(transaction.info().identifier()));
-    m_abortingTransactions.set(transaction.info().identifier(), &amp;transaction);
</del><ins>+    ASSERT(isMainThread());
</ins><span class="cx"> 
</span><del>-    auto identifier = transaction.info().identifier();
-    m_delegate-&gt;abortTransaction(identifier);
</del><ins>+    m_delegate-&gt;abortTransaction(transactionIdentifier);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void IDBConnectionToServer::didAbortTransaction(const IDBResourceIdentifier&amp; transactionIdentifier, const IDBError&amp; error)
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBConnectionToServer::didAbortTransaction&quot;);
</span><ins>+    ASSERT(isMainThread());
</ins><span class="cx"> 
</span><del>-    auto transaction = m_abortingTransactions.take(transactionIdentifier);
-    ASSERT(transaction);
-
-    transaction-&gt;didAbort(error);
</del><ins>+    m_proxy-&gt;didAbortTransaction(transactionIdentifier, error);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void IDBConnectionToServer::fireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier&amp; requestIdentifier, uint64_t requestedVersion)
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBConnectionToServer::fireVersionChangeEvent&quot;);
</span><ins>+    ASSERT(isMainThread());
</ins><span class="cx"> 
</span><del>-    auto connection = m_databaseConnectionMap.get(databaseConnectionIdentifier);
-    if (!connection)
-        return;
-
-    connection-&gt;fireVersionChangeEvent(requestIdentifier, requestedVersion);
</del><ins>+    m_proxy-&gt;fireVersionChangeEvent(databaseConnectionIdentifier, requestIdentifier, requestedVersion);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void IDBConnectionToServer::didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier&amp; requestIdentifier)
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBConnectionToServer::didFireVersionChangeEvent&quot;);
</span><ins>+    ASSERT(isMainThread());
</ins><span class="cx"> 
</span><span class="cx">     m_delegate-&gt;didFireVersionChangeEvent(databaseConnectionIdentifier, requestIdentifier);
</span><span class="cx"> }
</span><span class="lines">@@ -347,28 +319,25 @@
</span><span class="cx"> void IDBConnectionToServer::didStartTransaction(const IDBResourceIdentifier&amp; transactionIdentifier, const IDBError&amp; error)
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBConnectionToServer::didStartTransaction&quot;);
</span><ins>+    ASSERT(isMainThread());
</ins><span class="cx"> 
</span><del>-    auto transaction = m_pendingTransactions.take(transactionIdentifier);
-    ASSERT(transaction);
-
-    transaction-&gt;didStart(error);
</del><ins>+    m_proxy-&gt;didStartTransaction(transactionIdentifier, error);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void IDBConnectionToServer::notifyOpenDBRequestBlocked(const IDBResourceIdentifier&amp; requestIdentifier, uint64_t oldVersion, uint64_t newVersion)
</span><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBConnectionToServer::didStartTransaction&quot;);
</span><ins>+    ASSERT(isMainThread());
</ins><span class="cx"> 
</span><del>-    auto openDBRequest = m_openDBRequestMap.get(requestIdentifier);
-    ASSERT(openDBRequest);
-
-    openDBRequest-&gt;requestBlocked(oldVersion, newVersion);
</del><ins>+    m_proxy-&gt;notifyOpenDBRequestBlocked(requestIdentifier, oldVersion, newVersion);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void IDBConnectionToServer::databaseConnectionClosed(IDBDatabase&amp; database)
</del><ins>+void IDBConnectionToServer::databaseConnectionClosed(uint64_t databaseConnectionIdentifier)
</ins><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBConnectionToServer::databaseConnectionClosed&quot;);
</span><ins>+    ASSERT(isMainThread());
</ins><span class="cx"> 
</span><del>-    m_delegate-&gt;databaseConnectionClosed(database.databaseConnectionIdentifier());
</del><ins>+    m_delegate-&gt;databaseConnectionClosed(databaseConnectionIdentifier);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void IDBConnectionToServer::abortOpenAndUpgradeNeeded(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier&amp; transactionIdentifier)
</span><span class="lines">@@ -378,19 +347,6 @@
</span><span class="cx">     m_delegate-&gt;abortOpenAndUpgradeNeeded(databaseConnectionIdentifier, transactionIdentifier);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void IDBConnectionToServer::registerDatabaseConnection(IDBDatabase&amp; database)
-{
-    ASSERT(!m_databaseConnectionMap.contains(database.databaseConnectionIdentifier()));
-    m_databaseConnectionMap.set(database.databaseConnectionIdentifier(), &amp;database);
-}
-
-void IDBConnectionToServer::unregisterDatabaseConnection(IDBDatabase&amp; database)
-{
-    ASSERT(m_databaseConnectionMap.contains(database.databaseConnectionIdentifier()));
-    ASSERT(m_databaseConnectionMap.get(database.databaseConnectionIdentifier()) == &amp;database);
-    m_databaseConnectionMap.remove(database.databaseConnectionIdentifier());
-}
-
</del><span class="cx"> void IDBConnectionToServer::saveOperation(TransactionOperation&amp; operation)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(!m_activeOperations.contains(operation.identifier()));
</span><span class="lines">@@ -405,12 +361,6 @@
</span><span class="cx">     operation-&gt;completed(resultData);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool IDBConnectionToServer::hasRecordOfTransaction(const IDBTransaction&amp; transaction) const
-{
-    auto identifier = transaction.info().identifier();
-    return m_pendingTransactions.contains(identifier) || m_committingTransactions.contains(identifier) || m_abortingTransactions.contains(identifier);
-}
-
</del><span class="cx"> void IDBConnectionToServer::getAllDatabaseNames(const SecurityOrigin&amp; mainFrameOrigin, const SecurityOrigin&amp; openingOrigin, std::function&lt;void (const Vector&lt;String&gt;&amp;)&gt; callback)
</span><span class="cx"> {
</span><span class="cx">     static uint64_t callbackID = 0;
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbclientIDBConnectionToServerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h (200484 => 200485)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h        2016-05-05 22:14:02 UTC (rev 200484)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h        2016-05-05 22:14:08 UTC (rev 200485)
</span><span class="lines">@@ -42,9 +42,7 @@
</span><span class="cx"> class IDBDatabase;
</span><span class="cx"> class IDBError;
</span><span class="cx"> class IDBObjectStoreInfo;
</span><del>-class IDBOpenDBRequest;
</del><span class="cx"> class IDBResultData;
</span><del>-class IDBTransaction;
</del><span class="cx"> class IDBValue;
</span><span class="cx"> 
</span><span class="cx"> namespace IDBClient {
</span><span class="lines">@@ -59,10 +57,10 @@
</span><span class="cx"> 
</span><span class="cx">     IDBConnectionProxy&amp; proxy();
</span><span class="cx"> 
</span><del>-    void deleteDatabase(IDBOpenDBRequest&amp;);
</del><ins>+    void deleteDatabase(const IDBRequestData&amp;);
</ins><span class="cx">     WEBCORE_EXPORT void didDeleteDatabase(const IDBResultData&amp;);
</span><span class="cx"> 
</span><del>-    void openDatabase(IDBOpenDBRequest&amp;);
</del><ins>+    void openDatabase(const IDBRequestData&amp;);
</ins><span class="cx">     WEBCORE_EXPORT void didOpenDatabase(const IDBResultData&amp;);
</span><span class="cx"> 
</span><span class="cx">     void createObjectStore(TransactionOperation&amp;, const IDBObjectStoreInfo&amp;);
</span><span class="lines">@@ -98,12 +96,12 @@
</span><span class="cx">     void iterateCursor(TransactionOperation&amp;, const IDBKeyData&amp;, unsigned long count);
</span><span class="cx">     WEBCORE_EXPORT void didIterateCursor(const IDBResultData&amp;);
</span><span class="cx"> 
</span><del>-    void commitTransaction(IDBTransaction&amp;);
</del><ins>+    void commitTransaction(const IDBResourceIdentifier&amp; transactionIdentifier);
</ins><span class="cx">     WEBCORE_EXPORT void didCommitTransaction(const IDBResourceIdentifier&amp; transactionIdentifier, const IDBError&amp;);
</span><span class="cx"> 
</span><del>-    void didFinishHandlingVersionChangeTransaction(IDBTransaction&amp;);
</del><ins>+    void didFinishHandlingVersionChangeTransaction(const IDBResourceIdentifier&amp;);
</ins><span class="cx"> 
</span><del>-    void abortTransaction(IDBTransaction&amp;);
</del><ins>+    void abortTransaction(const IDBResourceIdentifier&amp; transactionIdentifier);
</ins><span class="cx">     WEBCORE_EXPORT void didAbortTransaction(const IDBResourceIdentifier&amp; transactionIdentifier, const IDBError&amp;);
</span><span class="cx"> 
</span><span class="cx">     WEBCORE_EXPORT void fireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier&amp; requestIdentifier, uint64_t requestedVersion);
</span><span class="lines">@@ -112,16 +110,13 @@
</span><span class="cx">     WEBCORE_EXPORT void didStartTransaction(const IDBResourceIdentifier&amp; transactionIdentifier, const IDBError&amp;);
</span><span class="cx">     WEBCORE_EXPORT void notifyOpenDBRequestBlocked(const IDBResourceIdentifier&amp; requestIdentifier, uint64_t oldVersion, uint64_t newVersion);
</span><span class="cx"> 
</span><del>-    void establishTransaction(IDBTransaction&amp;);
</del><ins>+    void establishTransaction(uint64_t databaseConnectionIdentifier, const IDBTransactionInfo&amp;);
</ins><span class="cx"> 
</span><del>-    void databaseConnectionClosed(IDBDatabase&amp;);
</del><ins>+    void databaseConnectionClosed(uint64_t databaseConnectionIdentifier);
</ins><span class="cx"> 
</span><span class="cx">     // To be used when an IDBOpenDBRequest gets a new database connection, optionally with a
</span><span class="cx">     // versionchange transaction, but the page is already torn down.
</span><span class="cx">     void abortOpenAndUpgradeNeeded(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier&amp; transactionIdentifier);
</span><del>-    
-    void registerDatabaseConnection(IDBDatabase&amp;);
-    void unregisterDatabaseConnection(IDBDatabase&amp;);
</del><span class="cx"> 
</span><span class="cx">     void getAllDatabaseNames(const SecurityOrigin&amp; mainFrameOrigin, const SecurityOrigin&amp; openingOrigin, std::function&lt;void (const Vector&lt;String&gt;&amp;)&gt;);
</span><span class="cx">     WEBCORE_EXPORT void didGetAllDatabaseNames(uint64_t callbackID, const Vector&lt;String&gt;&amp; databaseNames);
</span><span class="lines">@@ -132,15 +127,8 @@
</span><span class="cx">     void saveOperation(TransactionOperation&amp;);
</span><span class="cx">     void completeOperation(const IDBResultData&amp;);
</span><span class="cx"> 
</span><del>-    bool hasRecordOfTransaction(const IDBTransaction&amp;) const;
-
</del><span class="cx">     Ref&lt;IDBConnectionToServerDelegate&gt; m_delegate;
</span><span class="cx"> 
</span><del>-    HashMap&lt;IDBResourceIdentifier, RefPtr&lt;IDBOpenDBRequest&gt;&gt; m_openDBRequestMap;
-    HashMap&lt;uint64_t, IDBDatabase*&gt; m_databaseConnectionMap;
-    HashMap&lt;IDBResourceIdentifier, RefPtr&lt;IDBTransaction&gt;&gt; m_pendingTransactions;
-    HashMap&lt;IDBResourceIdentifier, RefPtr&lt;IDBTransaction&gt;&gt; m_committingTransactions;
-    HashMap&lt;IDBResourceIdentifier, RefPtr&lt;IDBTransaction&gt;&gt; m_abortingTransactions;
</del><span class="cx">     HashMap&lt;IDBResourceIdentifier, RefPtr&lt;TransactionOperation&gt;&gt; m_activeOperations;
</span><span class="cx"> 
</span><span class="cx">     HashMap&lt;uint64_t, std::function&lt;void (const Vector&lt;String&gt;&amp;)&gt;&gt; m_getAllDatabaseNamesCallbacks;
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbsharedIDBRequestDatacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.cpp (200484 => 200485)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.cpp        2016-05-05 22:14:02 UTC (rev 200484)
+++ trunk/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.cpp        2016-05-05 22:14:08 UTC (rev 200485)
</span><span class="lines">@@ -38,9 +38,9 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-IDBRequestData::IDBRequestData(const IDBClient::IDBConnectionToServer&amp; connection, const IDBOpenDBRequest&amp; request)
-    : m_serverConnectionIdentifier(connection.identifier())
-    , m_requestIdentifier(std::make_unique&lt;IDBResourceIdentifier&gt;(connection, request))
</del><ins>+IDBRequestData::IDBRequestData(const IDBClient::IDBConnectionProxy&amp; connectionProxy, const IDBOpenDBRequest&amp; request)
+    : m_serverConnectionIdentifier(connectionProxy.serverConnectionIdentifier())
+    , m_requestIdentifier(std::make_unique&lt;IDBResourceIdentifier&gt;(connectionProxy, request))
</ins><span class="cx">     , m_databaseIdentifier(request.databaseIdentifier())
</span><span class="cx">     , m_requestedVersion(request.version())
</span><span class="cx">     , m_requestType(request.requestType())
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbsharedIDBRequestDatah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.h (200484 => 200485)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.h        2016-05-05 22:14:02 UTC (rev 200484)
+++ trunk/Source/WebCore/Modules/indexeddb/shared/IDBRequestData.h        2016-05-05 22:14:08 UTC (rev 200485)
</span><span class="lines">@@ -42,13 +42,13 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> namespace IDBClient {
</span><del>-class IDBConnectionToServer;
</del><ins>+class IDBConnectionProxy;
</ins><span class="cx"> class TransactionOperation;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> class IDBRequestData {
</span><span class="cx"> public:
</span><del>-    IDBRequestData(const IDBClient::IDBConnectionToServer&amp;, const IDBOpenDBRequest&amp;);
</del><ins>+    IDBRequestData(const IDBClient::IDBConnectionProxy&amp;, const IDBOpenDBRequest&amp;);
</ins><span class="cx">     explicit IDBRequestData(IDBClient::TransactionOperation&amp;);
</span><span class="cx">     IDBRequestData(const IDBRequestData&amp;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbsharedIDBResourceIdentifiercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/shared/IDBResourceIdentifier.cpp (200484 => 200485)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/shared/IDBResourceIdentifier.cpp        2016-05-05 22:14:02 UTC (rev 200484)
+++ trunk/Source/WebCore/Modules/indexeddb/shared/IDBResourceIdentifier.cpp        2016-05-05 22:14:08 UTC (rev 200485)
</span><span class="lines">@@ -72,8 +72,8 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-IDBResourceIdentifier::IDBResourceIdentifier(const IDBClient::IDBConnectionToServer&amp; connection, const IDBRequest&amp; request)
-    : m_idbConnectionIdentifier(connection.identifier())
</del><ins>+IDBResourceIdentifier::IDBResourceIdentifier(const IDBClient::IDBConnectionProxy&amp; connectionProxy, const IDBRequest&amp; request)
+    : m_idbConnectionIdentifier(connectionProxy.serverConnectionIdentifier())
</ins><span class="cx">     , m_resourceNumber(request.resourceIdentifier().m_resourceNumber)
</span><span class="cx"> {
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbsharedIDBResourceIdentifierh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/shared/IDBResourceIdentifier.h (200484 => 200485)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/shared/IDBResourceIdentifier.h        2016-05-05 22:14:02 UTC (rev 200484)
+++ trunk/Source/WebCore/Modules/indexeddb/shared/IDBResourceIdentifier.h        2016-05-05 22:14:08 UTC (rev 200485)
</span><span class="lines">@@ -34,6 +34,7 @@
</span><span class="cx"> class IDBRequest;
</span><span class="cx"> 
</span><span class="cx"> namespace IDBClient {
</span><ins>+class IDBConnectionProxy;
</ins><span class="cx"> class IDBConnectionToServer;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -44,7 +45,7 @@
</span><span class="cx"> class IDBResourceIdentifier {
</span><span class="cx"> public:
</span><span class="cx">     explicit IDBResourceIdentifier(const IDBClient::IDBConnectionToServer&amp;);
</span><del>-    IDBResourceIdentifier(const IDBClient::IDBConnectionToServer&amp;, const IDBRequest&amp;);
</del><ins>+    IDBResourceIdentifier(const IDBClient::IDBConnectionProxy&amp;, const IDBRequest&amp;);
</ins><span class="cx">     explicit IDBResourceIdentifier(const IDBServer::IDBConnectionToClient&amp;);
</span><span class="cx"> 
</span><span class="cx">     // FIXME: This constructor will be needed during the development of IDB-in-Workers.
</span></span></pre>
</div>
</div>

</body>
</html>