<!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>[194452] trunk</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/194452">194452</a></dd>
<dt>Author</dt> <dd>beidson@apple.com</dd>
<dt>Date</dt> <dd>2015-12-30 21:43:33 -0800 (Wed, 30 Dec 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Modern IDB: Only fire blocked events after all open connections have handled their versionchange events.
https://bugs.webkit.org/show_bug.cgi?id=152593

Reviewed by Andy Estes.

Source/WebCore:

No new tests (At least two previously timing-out tests now pass, others are now closer to passing).

Before this patch, whenever we sent all open connections the versionchange event, we would immediately
fire the blocked event on the request.

That's not right, as those event handlers can close the connections, rendering the request unblocked.

So this patch implements the behavior of waiting for each open connection to either close or positively
message back &quot;I finished firing my versionchange event handler&quot;

This behavior is explicitly denoted in the spec and is covered by existing tests.

* Modules/indexeddb/client/IDBConnectionToServer.cpp:
(WebCore::IDBClient::IDBConnectionToServer::fireVersionChangeEvent):
(WebCore::IDBClient::IDBConnectionToServer::didFireVersionChangeEvent):
* Modules/indexeddb/client/IDBConnectionToServer.h:
* Modules/indexeddb/client/IDBConnectionToServerDelegate.h:

* Modules/indexeddb/client/IDBDatabaseImpl.cpp:
(WebCore::IDBClient::IDBDatabase::fireVersionChangeEvent):
(WebCore::IDBClient::IDBDatabase::dispatchEvent):
* Modules/indexeddb/client/IDBDatabaseImpl.h:

* Modules/indexeddb/client/IDBVersionChangeEventImpl.cpp:
(WebCore::IDBClient::IDBVersionChangeEvent::IDBVersionChangeEvent):
* Modules/indexeddb/client/IDBVersionChangeEventImpl.h:

* Modules/indexeddb/server/IDBConnectionToClient.cpp:
(WebCore::IDBServer::IDBConnectionToClient::fireVersionChangeEvent):
* Modules/indexeddb/server/IDBConnectionToClient.h:
* Modules/indexeddb/server/IDBConnectionToClientDelegate.h:

* Modules/indexeddb/server/IDBServer.cpp:
(WebCore::IDBServer::IDBServer::didFireVersionChangeEvent):
* Modules/indexeddb/server/IDBServer.h:

* Modules/indexeddb/server/ServerOpenDBRequest.cpp:
(WebCore::IDBServer::ServerOpenDBRequest::notifyRequestBlocked):
(WebCore::IDBServer::ServerOpenDBRequest::notifiedConnectionsOfVersionChange):
(WebCore::IDBServer::ServerOpenDBRequest::connectionClosedOrFiredVersionChangeEvent):
(WebCore::IDBServer::ServerOpenDBRequest::notifyDeleteRequestBlocked): Deleted.
* Modules/indexeddb/server/ServerOpenDBRequest.h:
(WebCore::IDBServer::ServerOpenDBRequest::hasNotifiedBlocked):
(WebCore::IDBServer::ServerOpenDBRequest::hasConnectionsPendingVersionChangeEvent):
(WebCore::IDBServer::ServerOpenDBRequest::hasNotifiedConnectionsOfVersionChange):
(WebCore::IDBServer::ServerOpenDBRequest::hasNotifiedDeleteRequestBlocked): Deleted.

* Modules/indexeddb/server/UniqueIDBDatabase.cpp:
(WebCore::IDBServer::UniqueIDBDatabase::performCurrentOpenOperation):
(WebCore::IDBServer::UniqueIDBDatabase::performCurrentDeleteOperation):
(WebCore::IDBServer::UniqueIDBDatabase::maybeNotifyConnectionsOfVersionChange):
(WebCore::IDBServer::UniqueIDBDatabase::notifyCurrentRequestConnectionClosedOrFiredVersionChangeEvent):
(WebCore::IDBServer::UniqueIDBDatabase::didFireVersionChangeEvent):
(WebCore::IDBServer::UniqueIDBDatabase::connectionClosedFromClient):
(WebCore::IDBServer::UniqueIDBDatabase::notifyConnectionsOfVersionChangeForUpgrade): Deleted.
(WebCore::IDBServer::UniqueIDBDatabase::notifyConnectionsOfVersionChange): Deleted.
* Modules/indexeddb/server/UniqueIDBDatabase.h:

* Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
(WebCore::IDBServer::UniqueIDBDatabaseConnection::connectionClosedFromClient):
(WebCore::IDBServer::UniqueIDBDatabaseConnection::didFireVersionChangeEvent):
(WebCore::IDBServer::UniqueIDBDatabaseConnection::fireVersionChangeEvent):
* Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:

* Modules/indexeddb/shared/InProcessIDBServer.cpp:
(WebCore::InProcessIDBServer::fireVersionChangeEvent):
(WebCore::InProcessIDBServer::didFireVersionChangeEvent):
* Modules/indexeddb/shared/InProcessIDBServer.h:

* dom/Event.h:
(WebCore::Event::isVersionChangeEvent):

LayoutTests:

- Unskip two timeout tests that now pass.
- Reclassify a text-failure test to be skipped for new reasons.

* platform/mac-wk1/TestExpectations:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk1TestExpectations">trunk/LayoutTests/platform/mac-wk1/TestExpectations</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</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="#trunkSourceWebCoreModulesindexeddbclientIDBConnectionToServerDelegateh">trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServerDelegate.h</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbclientIDBDatabaseImplcpp">trunk/Source/WebCore/Modules/indexeddb/client/IDBDatabaseImpl.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbclientIDBDatabaseImplh">trunk/Source/WebCore/Modules/indexeddb/client/IDBDatabaseImpl.h</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbclientIDBVersionChangeEventImplcpp">trunk/Source/WebCore/Modules/indexeddb/client/IDBVersionChangeEventImpl.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbclientIDBVersionChangeEventImplh">trunk/Source/WebCore/Modules/indexeddb/client/IDBVersionChangeEventImpl.h</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbserverIDBConnectionToClientcpp">trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbserverIDBConnectionToClienth">trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.h</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbserverIDBConnectionToClientDelegateh">trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClientDelegate.h</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbserverIDBServercpp">trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbserverIDBServerh">trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.h</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbserverServerOpenDBRequestcpp">trunk/Source/WebCore/Modules/indexeddb/server/ServerOpenDBRequest.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbserverServerOpenDBRequesth">trunk/Source/WebCore/Modules/indexeddb/server/ServerOpenDBRequest.h</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbserverUniqueIDBDatabasecpp">trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbserverUniqueIDBDatabaseh">trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbserverUniqueIDBDatabaseConnectioncpp">trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbserverUniqueIDBDatabaseConnectionh">trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.h</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbsharedInProcessIDBServercpp">trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.cpp</a></li>
<li><a href="#trunkSourceWebCoreModulesindexeddbsharedInProcessIDBServerh">trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.h</a></li>
<li><a href="#trunkSourceWebCoredomEventh">trunk/Source/WebCore/dom/Event.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (194451 => 194452)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2015-12-31 05:24:12 UTC (rev 194451)
+++ trunk/LayoutTests/ChangeLog        2015-12-31 05:43:33 UTC (rev 194452)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2015-12-30  Brady Eidson  &lt;beidson@apple.com&gt;
+
+        Modern IDB: Only fire blocked events after all open connections have handled their versionchange events.
+        https://bugs.webkit.org/show_bug.cgi?id=152593
+
+        Reviewed by Andy Estes.
+
+        - Unskip two timeout tests that now pass.
+        - Reclassify a text-failure test to be skipped for new reasons.
+        
+        * platform/mac-wk1/TestExpectations:
+
</ins><span class="cx"> 2015-12-30  Gyuyoung Kim  &lt;gyuyoung.kim@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, EFL gardening.
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk1TestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac-wk1/TestExpectations (194451 => 194452)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk1/TestExpectations        2015-12-31 05:24:12 UTC (rev 194451)
+++ trunk/LayoutTests/platform/mac-wk1/TestExpectations        2015-12-31 05:43:33 UTC (rev 194452)
</span><span class="lines">@@ -91,13 +91,10 @@
</span><span class="cx"> # IDB tests that timeout                                                               
</span><span class="cx"> storage/indexeddb/database-quota.html [ Skip ]
</span><span class="cx"> storage/indexeddb/dont-wedge.html [ Skip ]
</span><del>-storage/indexeddb/intversion-pending-version-changes-ascending.html [ Skip ]
</del><span class="cx"> storage/indexeddb/transaction-starvation.html [ Skip ]
</span><del>-storage/indexeddb/unblocked-version-changes.html [ Skip ]
</del><span class="cx"> 
</span><span class="cx"> # IDB tests with text failures                                                             
</span><span class="cx"> storage/indexeddb/database-deletepending-flag.html [ Failure ]
</span><del>-storage/indexeddb/delete-closed-database-object.html [ Failure ]
</del><span class="cx"> storage/indexeddb/intversion-gated-on-delete.html [ Failure ]
</span><span class="cx"> storage/indexeddb/odd-strings.html [ Failure ]
</span><span class="cx"> storage/indexeddb/open-db-private-browsing.html [ Failure ]
</span><span class="lines">@@ -106,6 +103,7 @@
</span><span class="cx"> storage/indexeddb/transaction-scope-sequencing.html [ Failure ]
</span><span class="cx"> 
</span><span class="cx"> # Relies on internals.observeGC
</span><ins>+storage/indexeddb/delete-closed-database-object.html [ Skip ]
</ins><span class="cx"> storage/indexeddb/cursor-leak.html [ Failure ]
</span><span class="cx"> storage/indexeddb/cursor-request-cycle.html [ Failure ]
</span><span class="cx"> storage/indexeddb/request-leak.html [ Failure ]
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (194451 => 194452)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-12-31 05:24:12 UTC (rev 194451)
+++ trunk/Source/WebCore/ChangeLog        2015-12-31 05:43:33 UTC (rev 194452)
</span><span class="lines">@@ -1,3 +1,82 @@
</span><ins>+2015-12-30  Brady Eidson  &lt;beidson@apple.com&gt;
+
+        Modern IDB: Only fire blocked events after all open connections have handled their versionchange events.
+        https://bugs.webkit.org/show_bug.cgi?id=152593
+
+        Reviewed by Andy Estes.
+
+        No new tests (At least two previously timing-out tests now pass, others are now closer to passing).
+
+        Before this patch, whenever we sent all open connections the versionchange event, we would immediately 
+        fire the blocked event on the request.
+
+        That's not right, as those event handlers can close the connections, rendering the request unblocked.
+
+        So this patch implements the behavior of waiting for each open connection to either close or positively
+        message back &quot;I finished firing my versionchange event handler&quot;
+        
+        This behavior is explicitly denoted in the spec and is covered by existing tests.
+
+        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
+        (WebCore::IDBClient::IDBConnectionToServer::fireVersionChangeEvent):
+        (WebCore::IDBClient::IDBConnectionToServer::didFireVersionChangeEvent):
+        * Modules/indexeddb/client/IDBConnectionToServer.h:
+        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:
+        
+        * Modules/indexeddb/client/IDBDatabaseImpl.cpp:
+        (WebCore::IDBClient::IDBDatabase::fireVersionChangeEvent):
+        (WebCore::IDBClient::IDBDatabase::dispatchEvent):
+        * Modules/indexeddb/client/IDBDatabaseImpl.h:
+        
+        * Modules/indexeddb/client/IDBVersionChangeEventImpl.cpp:
+        (WebCore::IDBClient::IDBVersionChangeEvent::IDBVersionChangeEvent):
+        * Modules/indexeddb/client/IDBVersionChangeEventImpl.h:
+        
+        * Modules/indexeddb/server/IDBConnectionToClient.cpp:
+        (WebCore::IDBServer::IDBConnectionToClient::fireVersionChangeEvent):
+        * Modules/indexeddb/server/IDBConnectionToClient.h:
+        * Modules/indexeddb/server/IDBConnectionToClientDelegate.h:
+        
+        * Modules/indexeddb/server/IDBServer.cpp:
+        (WebCore::IDBServer::IDBServer::didFireVersionChangeEvent):
+        * Modules/indexeddb/server/IDBServer.h:
+        
+        * Modules/indexeddb/server/ServerOpenDBRequest.cpp:
+        (WebCore::IDBServer::ServerOpenDBRequest::notifyRequestBlocked):
+        (WebCore::IDBServer::ServerOpenDBRequest::notifiedConnectionsOfVersionChange):
+        (WebCore::IDBServer::ServerOpenDBRequest::connectionClosedOrFiredVersionChangeEvent):
+        (WebCore::IDBServer::ServerOpenDBRequest::notifyDeleteRequestBlocked): Deleted.
+        * Modules/indexeddb/server/ServerOpenDBRequest.h:
+        (WebCore::IDBServer::ServerOpenDBRequest::hasNotifiedBlocked):
+        (WebCore::IDBServer::ServerOpenDBRequest::hasConnectionsPendingVersionChangeEvent):
+        (WebCore::IDBServer::ServerOpenDBRequest::hasNotifiedConnectionsOfVersionChange):
+        (WebCore::IDBServer::ServerOpenDBRequest::hasNotifiedDeleteRequestBlocked): Deleted.
+
+        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
+        (WebCore::IDBServer::UniqueIDBDatabase::performCurrentOpenOperation):
+        (WebCore::IDBServer::UniqueIDBDatabase::performCurrentDeleteOperation):
+        (WebCore::IDBServer::UniqueIDBDatabase::maybeNotifyConnectionsOfVersionChange):
+        (WebCore::IDBServer::UniqueIDBDatabase::notifyCurrentRequestConnectionClosedOrFiredVersionChangeEvent):
+        (WebCore::IDBServer::UniqueIDBDatabase::didFireVersionChangeEvent):
+        (WebCore::IDBServer::UniqueIDBDatabase::connectionClosedFromClient):
+        (WebCore::IDBServer::UniqueIDBDatabase::notifyConnectionsOfVersionChangeForUpgrade): Deleted.
+        (WebCore::IDBServer::UniqueIDBDatabase::notifyConnectionsOfVersionChange): Deleted.
+        * Modules/indexeddb/server/UniqueIDBDatabase.h:
+        
+        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
+        (WebCore::IDBServer::UniqueIDBDatabaseConnection::connectionClosedFromClient):
+        (WebCore::IDBServer::UniqueIDBDatabaseConnection::didFireVersionChangeEvent):
+        (WebCore::IDBServer::UniqueIDBDatabaseConnection::fireVersionChangeEvent):
+        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:
+        
+        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
+        (WebCore::InProcessIDBServer::fireVersionChangeEvent):
+        (WebCore::InProcessIDBServer::didFireVersionChangeEvent):
+        * Modules/indexeddb/shared/InProcessIDBServer.h:
+        
+        * dom/Event.h:
+        (WebCore::Event::isVersionChangeEvent):
+
</ins><span class="cx"> 2015-12-30  Simon Fraser  &lt;simon.fraser@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Add explicit conversions between scrollOffset and scrollPostion, and use them in a few places
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbclientIDBConnectionToServercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp (194451 => 194452)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp        2015-12-31 05:24:12 UTC (rev 194451)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp        2015-12-31 05:43:33 UTC (rev 194452)
</span><span class="lines">@@ -317,7 +317,7 @@
</span><span class="cx">     transaction-&gt;didAbort(error);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void IDBConnectionToServer::fireVersionChangeEvent(uint64_t databaseConnectionIdentifier, uint64_t requestedVersion)
</del><ins>+void IDBConnectionToServer::fireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier&amp; requestIdentifier, uint64_t requestedVersion)
</ins><span class="cx"> {
</span><span class="cx">     LOG(IndexedDB, &quot;IDBConnectionToServer::fireVersionChangeEvent&quot;);
</span><span class="cx"> 
</span><span class="lines">@@ -325,9 +325,16 @@
</span><span class="cx">     if (!connection)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    connection-&gt;fireVersionChangeEvent(requestedVersion);
</del><ins>+    connection-&gt;fireVersionChangeEvent(requestIdentifier, requestedVersion);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void IDBConnectionToServer::didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier&amp; requestIdentifier)
+{
+    LOG(IndexedDB, &quot;IDBConnectionToServer::didFireVersionChangeEvent&quot;);
+
+    m_delegate-&gt;didFireVersionChangeEvent(databaseConnectionIdentifier, requestIdentifier);
+}
+
</ins><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></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbclientIDBConnectionToServerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h (194451 => 194452)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h        2015-12-31 05:24:12 UTC (rev 194451)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h        2015-12-31 05:43:33 UTC (rev 194452)
</span><span class="lines">@@ -103,7 +103,9 @@
</span><span class="cx">     void abortTransaction(IDBTransaction&amp;);
</span><span class="cx">     void didAbortTransaction(const IDBResourceIdentifier&amp; transactionIdentifier, const IDBError&amp;);
</span><span class="cx"> 
</span><del>-    void fireVersionChangeEvent(uint64_t databaseConnectionIdentifier, uint64_t requestedVersion);
</del><ins>+    void fireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier&amp; requestIdentifier, uint64_t requestedVersion);
+    void didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier&amp; requestIdentifier);
+
</ins><span class="cx">     void didStartTransaction(const IDBResourceIdentifier&amp; transactionIdentifier, const IDBError&amp;);
</span><span class="cx">     void notifyOpenDBRequestBlocked(const IDBResourceIdentifier&amp; requestIdentifier, uint64_t oldVersion, uint64_t newVersion);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbclientIDBConnectionToServerDelegateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServerDelegate.h (194451 => 194452)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServerDelegate.h        2015-12-31 05:24:12 UTC (rev 194451)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServerDelegate.h        2015-12-31 05:43:33 UTC (rev 194452)
</span><span class="lines">@@ -73,8 +73,8 @@
</span><span class="cx">     virtual void iterateCursor(const IDBRequestData&amp;, const IDBKeyData&amp;, unsigned long count) = 0;
</span><span class="cx"> 
</span><span class="cx">     virtual void establishTransaction(uint64_t databaseConnectionIdentifier, const IDBTransactionInfo&amp;) = 0;
</span><del>-
</del><span class="cx">     virtual void databaseConnectionClosed(uint64_t databaseConnectionIdentifier) = 0;
</span><ins>+    virtual void didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier&amp; requestIdentifier) = 0;
</ins><span class="cx"> 
</span><span class="cx">     virtual void ref() = 0;
</span><span class="cx">     virtual void deref() = 0;
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbclientIDBDatabaseImplcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBDatabaseImpl.cpp (194451 => 194452)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/client/IDBDatabaseImpl.cpp        2015-12-31 05:24:12 UTC (rev 194451)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBDatabaseImpl.cpp        2015-12-31 05:43:33 UTC (rev 194452)
</span><span class="lines">@@ -357,19 +357,33 @@
</span><span class="cx">         maybeCloseInServer();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void IDBDatabase::fireVersionChangeEvent(uint64_t requestedVersion)
</del><ins>+void IDBDatabase::fireVersionChangeEvent(const IDBResourceIdentifier&amp; requestIdentifier, uint64_t requestedVersion)
</ins><span class="cx"> {
</span><span class="cx">     uint64_t currentVersion = m_info.version();
</span><del>-    LOG(IndexedDB, &quot;IDBDatabase::fireVersionChangeEvent - current version %&quot; PRIu64 &quot;, requested version %&quot; PRIu64, currentVersion, requestedVersion);
</del><ins>+    LOG(IndexedDB, &quot;IDBDatabase::fireVersionChangeEvent - current version %&quot; PRIu64 &quot;, requested version %&quot; PRIu64 &quot;, connection %&quot; PRIu64, currentVersion, requestedVersion, m_databaseConnectionIdentifier);
</ins><span class="cx"> 
</span><del>-    if (!scriptExecutionContext() || m_closePending)
</del><ins>+    if (!scriptExecutionContext() || m_closePending) {
+        serverConnection().didFireVersionChangeEvent(m_databaseConnectionIdentifier, requestIdentifier);
</ins><span class="cx">         return;
</span><ins>+    }
</ins><span class="cx"> 
</span><del>-    Ref&lt;Event&gt; event = IDBVersionChangeEvent::create(currentVersion, requestedVersion, eventNames().versionchangeEvent);
</del><ins>+    Ref&lt;Event&gt; event = IDBVersionChangeEvent::create(requestIdentifier, currentVersion, requestedVersion, eventNames().versionchangeEvent);
</ins><span class="cx">     event-&gt;setTarget(this);
</span><span class="cx">     scriptExecutionContext()-&gt;eventQueue().enqueueEvent(WTF::move(event));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+bool IDBDatabase::dispatchEvent(Event&amp; event)
+{
+    LOG(IndexedDB, &quot;IDBDatabase::dispatchEvent (%&quot; PRIu64 &quot;)&quot;, m_databaseConnectionIdentifier);
+
+    bool result = WebCore::IDBDatabase::dispatchEvent(event);
+
+    if (event.isVersionChangeEvent() &amp;&amp; event.type() == eventNames().versionchangeEvent)
+        serverConnection().didFireVersionChangeEvent(m_databaseConnectionIdentifier, static_cast&lt;IDBVersionChangeEvent&amp;&gt;(event).requestIdentifier());
+
+    return result;
+}
+
</ins><span class="cx"> void IDBDatabase::didCreateIndexInfo(const IDBIndexInfo&amp; info)
</span><span class="cx"> {
</span><span class="cx">     auto* objectStore = m_info.infoForExistingObjectStore(info.objectStoreIdentifier());
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbclientIDBDatabaseImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBDatabaseImpl.h (194451 => 194452)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/client/IDBDatabaseImpl.h        2015-12-31 05:24:12 UTC (rev 194451)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBDatabaseImpl.h        2015-12-31 05:43:33 UTC (rev 194452)
</span><span class="lines">@@ -80,7 +80,7 @@
</span><span class="cx">     void willAbortTransaction(IDBTransaction&amp;);
</span><span class="cx">     void didAbortTransaction(IDBTransaction&amp;);
</span><span class="cx"> 
</span><del>-    void fireVersionChangeEvent(uint64_t requestedVersion);
</del><ins>+    void fireVersionChangeEvent(const IDBResourceIdentifier&amp; requestIdentifier, uint64_t requestedVersion);
</ins><span class="cx"> 
</span><span class="cx">     IDBConnectionToServer&amp; serverConnection() { return m_serverConnection.get(); }
</span><span class="cx"> 
</span><span class="lines">@@ -89,6 +89,8 @@
</span><span class="cx"> 
</span><span class="cx">     bool isClosingOrClosed() const { return m_closePending || m_closedInServer; }
</span><span class="cx"> 
</span><ins>+    bool dispatchEvent(Event&amp;) override final;
+
</ins><span class="cx"> private:
</span><span class="cx">     IDBDatabase(ScriptExecutionContext&amp;, IDBConnectionToServer&amp;, const IDBResultData&amp;);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbclientIDBVersionChangeEventImplcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBVersionChangeEventImpl.cpp (194451 => 194452)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/client/IDBVersionChangeEventImpl.cpp        2015-12-31 05:24:12 UTC (rev 194451)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBVersionChangeEventImpl.cpp        2015-12-31 05:43:33 UTC (rev 194452)
</span><span class="lines">@@ -31,8 +31,9 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> namespace IDBClient {
</span><span class="cx"> 
</span><del>-IDBVersionChangeEvent::IDBVersionChangeEvent(uint64_t oldVersion, uint64_t newVersion, const AtomicString&amp; eventType)
</del><ins>+IDBVersionChangeEvent::IDBVersionChangeEvent(const IDBResourceIdentifier&amp; requestIdentifier, uint64_t oldVersion, uint64_t newVersion, const AtomicString&amp; eventType)
</ins><span class="cx">     : WebCore::IDBVersionChangeEvent(eventType)
</span><ins>+    , m_requestIdentifier(requestIdentifier)
</ins><span class="cx">     , m_oldVersion(oldVersion)
</span><span class="cx">     , m_newVersion(newVersion)
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbclientIDBVersionChangeEventImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBVersionChangeEventImpl.h (194451 => 194452)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/client/IDBVersionChangeEventImpl.h        2015-12-31 05:24:12 UTC (rev 194451)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBVersionChangeEventImpl.h        2015-12-31 05:43:33 UTC (rev 194452)
</span><span class="lines">@@ -28,6 +28,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INDEXED_DATABASE)
</span><span class="cx"> 
</span><ins>+#include &quot;IDBResourceIdentifier.h&quot;
</ins><span class="cx"> #include &quot;IDBVersionChangeEvent.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -37,16 +38,26 @@
</span><span class="cx"> public:
</span><span class="cx">     static Ref&lt;IDBVersionChangeEvent&gt; create(uint64_t oldVersion, uint64_t newVersion, const AtomicString&amp; eventType)
</span><span class="cx">     {
</span><del>-        return adoptRef(*new IDBVersionChangeEvent(oldVersion, newVersion, eventType));
</del><ins>+        return adoptRef(*new IDBVersionChangeEvent(IDBResourceIdentifier::emptyValue(), oldVersion, newVersion, eventType));
</ins><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    static Ref&lt;IDBVersionChangeEvent&gt; create(const IDBResourceIdentifier&amp; requestIdentifier, uint64_t oldVersion, uint64_t newVersion, const AtomicString&amp; eventType)
+    {
+        return adoptRef(*new IDBVersionChangeEvent(requestIdentifier, oldVersion, newVersion, eventType));
+    }
+
+    const IDBResourceIdentifier&amp; requestIdentifier() const { return m_requestIdentifier; }
+
+    bool isVersionChangeEvent() const override final { return true; }
+
</ins><span class="cx"> private:
</span><del>-    IDBVersionChangeEvent(uint64_t oldVersion, uint64_t newVersion, const AtomicString&amp; eventType);
</del><ins>+    IDBVersionChangeEvent(const IDBResourceIdentifier&amp; requestIdentifier, uint64_t oldVersion, uint64_t newVersion, const AtomicString&amp; eventType);
</ins><span class="cx"> 
</span><span class="cx">     virtual uint64_t oldVersion() const override { return m_oldVersion; }
</span><span class="cx">     virtual Optional&lt;uint64_t&gt; newVersion() const override;
</span><span class="cx">     virtual EventInterface eventInterface() const override;
</span><span class="cx"> 
</span><ins>+    IDBResourceIdentifier m_requestIdentifier;
</ins><span class="cx">     uint64_t m_oldVersion;
</span><span class="cx">     uint64_t m_newVersion;
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbserverIDBConnectionToClientcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.cpp (194451 => 194452)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.cpp        2015-12-31 05:24:12 UTC (rev 194451)
+++ trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.cpp        2015-12-31 05:43:33 UTC (rev 194452)
</span><span class="lines">@@ -123,9 +123,9 @@
</span><span class="cx">     m_delegate-&gt;didCommitTransaction(transactionIdentifier, error);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void IDBConnectionToClient::fireVersionChangeEvent(UniqueIDBDatabaseConnection&amp; connection, uint64_t requestedVersion)
</del><ins>+void IDBConnectionToClient::fireVersionChangeEvent(UniqueIDBDatabaseConnection&amp; connection, const IDBResourceIdentifier&amp; requestIdentifier, uint64_t requestedVersion)
</ins><span class="cx"> {
</span><del>-    m_delegate-&gt;fireVersionChangeEvent(connection, requestedVersion);
</del><ins>+    m_delegate-&gt;fireVersionChangeEvent(connection, requestIdentifier, requestedVersion);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void IDBConnectionToClient::didStartTransaction(const IDBResourceIdentifier&amp; transactionIdentifier, const IDBError&amp; error)
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbserverIDBConnectionToClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.h (194451 => 194452)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.h        2015-12-31 05:24:12 UTC (rev 194451)
+++ trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClient.h        2015-12-31 05:43:33 UTC (rev 194452)
</span><span class="lines">@@ -64,7 +64,7 @@
</span><span class="cx">     void didOpenCursor(const IDBResultData&amp;);
</span><span class="cx">     void didIterateCursor(const IDBResultData&amp;);
</span><span class="cx"> 
</span><del>-    void fireVersionChangeEvent(UniqueIDBDatabaseConnection&amp;, uint64_t requestedVersion);
</del><ins>+    void fireVersionChangeEvent(UniqueIDBDatabaseConnection&amp;, const IDBResourceIdentifier&amp; requestIdentifier, uint64_t requestedVersion);
</ins><span class="cx">     void didStartTransaction(const IDBResourceIdentifier&amp; transactionIdentifier, const IDBError&amp;);
</span><span class="cx"> 
</span><span class="cx">     void notifyOpenDBRequestBlocked(const IDBResourceIdentifier&amp; requestIdentifier, uint64_t oldVersion, uint64_t newVersion);
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbserverIDBConnectionToClientDelegateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClientDelegate.h (194451 => 194452)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClientDelegate.h        2015-12-31 05:24:12 UTC (rev 194451)
+++ trunk/Source/WebCore/Modules/indexeddb/server/IDBConnectionToClientDelegate.h        2015-12-31 05:43:33 UTC (rev 194452)
</span><span class="lines">@@ -60,7 +60,7 @@
</span><span class="cx">     virtual void didOpenCursor(const IDBResultData&amp;) = 0;
</span><span class="cx">     virtual void didIterateCursor(const IDBResultData&amp;) = 0;
</span><span class="cx"> 
</span><del>-    virtual void fireVersionChangeEvent(UniqueIDBDatabaseConnection&amp;, uint64_t requestedVersion) = 0;
</del><ins>+    virtual void fireVersionChangeEvent(UniqueIDBDatabaseConnection&amp;, const IDBResourceIdentifier&amp; requestIdentifier, uint64_t requestedVersion) = 0;
</ins><span class="cx">     virtual void didStartTransaction(const IDBResourceIdentifier&amp; transactionIdentifier, const IDBError&amp;) = 0;
</span><span class="cx">     virtual void notifyOpenDBRequestBlocked(const IDBResourceIdentifier&amp; requestIdentifier, uint64_t oldVersion, uint64_t newVersion) = 0;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbserverIDBServercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp (194451 => 194452)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp        2015-12-31 05:24:12 UTC (rev 194451)
+++ trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp        2015-12-31 05:43:33 UTC (rev 194452)
</span><span class="lines">@@ -339,6 +339,14 @@
</span><span class="cx">     databaseConnection-&gt;connectionClosedFromClient();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void IDBServer::didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier&amp; requestIdentifier)
+{
+    LOG(IndexedDB, &quot;IDBServer::didFireVersionChangeEvent&quot;);
+
+    if (auto databaseConnection = m_databaseConnections.get(databaseConnectionIdentifier))
+        databaseConnection-&gt;didFireVersionChangeEvent(requestIdentifier);
+}
+
</ins><span class="cx"> void IDBServer::postDatabaseTask(std::unique_ptr&lt;CrossThreadTask&gt;&amp;&amp; task)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(isMainThread());
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbserverIDBServerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.h (194451 => 194452)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.h        2015-12-31 05:24:12 UTC (rev 194451)
+++ trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.h        2015-12-31 05:43:33 UTC (rev 194452)
</span><span class="lines">@@ -75,6 +75,7 @@
</span><span class="cx"> 
</span><span class="cx">     void establishTransaction(uint64_t databaseConnectionIdentifier, const IDBTransactionInfo&amp;);
</span><span class="cx">     void databaseConnectionClosed(uint64_t databaseConnectionIdentifier);
</span><ins>+    void didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier&amp; requestIdentifier);
</ins><span class="cx"> 
</span><span class="cx">     void postDatabaseTask(std::unique_ptr&lt;CrossThreadTask&gt;&amp;&amp;);
</span><span class="cx">     void postDatabaseTaskReply(std::unique_ptr&lt;CrossThreadTask&gt;&amp;&amp;);
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbserverServerOpenDBRequestcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/server/ServerOpenDBRequest.cpp (194451 => 194452)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/server/ServerOpenDBRequest.cpp        2015-12-31 05:24:12 UTC (rev 194451)
+++ trunk/Source/WebCore/Modules/indexeddb/server/ServerOpenDBRequest.cpp        2015-12-31 05:43:33 UTC (rev 194452)
</span><span class="lines">@@ -55,13 +55,14 @@
</span><span class="cx">     return m_requestData.isDeleteRequest();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ServerOpenDBRequest::notifyDeleteRequestBlocked(uint64_t currentVersion)
</del><ins>+void ServerOpenDBRequest::notifyRequestBlocked(uint64_t currentVersion)
</ins><span class="cx"> {
</span><del>-    ASSERT(isDeleteRequest());
-    ASSERT(!m_notifiedDeleteRequestBlocked);
</del><ins>+    ASSERT(!m_notifiedBlocked);
</ins><span class="cx"> 
</span><del>-    m_connection.notifyOpenDBRequestBlocked(m_requestData.requestIdentifier(), currentVersion, 0);
-    m_notifiedDeleteRequestBlocked = true;
</del><ins>+    uint64_t requestedVersion = isOpenRequest() ?  m_requestData.requestedVersion() : 0;
+    m_connection.notifyOpenDBRequestBlocked(m_requestData.requestIdentifier(), currentVersion, requestedVersion);
+
+    m_notifiedBlocked = true;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ServerOpenDBRequest::notifyDidDeleteDatabase(const IDBDatabaseInfo&amp; info)
</span><span class="lines">@@ -71,6 +72,19 @@
</span><span class="cx">     m_connection.didDeleteDatabase(IDBResultData::deleteDatabaseSuccess(m_requestData.requestIdentifier(), info));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void ServerOpenDBRequest::notifiedConnectionsOfVersionChange(HashSet&lt;uint64_t&gt;&amp;&amp; connectionIdentifiers)
+{
+    ASSERT(!m_notifiedConnectionsOfVersionChange);
+
+    m_notifiedConnectionsOfVersionChange = true;
+    m_connectionsPendingVersionChangeEvent = WTF::move(connectionIdentifiers);
+}
+
+void ServerOpenDBRequest::connectionClosedOrFiredVersionChangeEvent(uint64_t connectionIdentifier)
+{
+    m_connectionsPendingVersionChangeEvent.remove(connectionIdentifier);
+}
+
</ins><span class="cx"> } // namespace IDBServer
</span><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbserverServerOpenDBRequesth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/server/ServerOpenDBRequest.h (194451 => 194452)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/server/ServerOpenDBRequest.h        2015-12-31 05:24:12 UTC (rev 194451)
+++ trunk/Source/WebCore/Modules/indexeddb/server/ServerOpenDBRequest.h        2015-12-31 05:43:33 UTC (rev 194452)
</span><span class="lines">@@ -30,6 +30,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;IDBConnectionToClient.h&quot;
</span><span class="cx"> #include &quot;IDBRequestData.h&quot;
</span><ins>+#include &lt;wtf/HashSet.h&gt;
</ins><span class="cx"> #include &lt;wtf/Ref.h&gt;
</span><span class="cx"> #include &lt;wtf/RefCounted.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -49,17 +50,28 @@
</span><span class="cx">     bool isOpenRequest() const;
</span><span class="cx">     bool isDeleteRequest() const;
</span><span class="cx"> 
</span><del>-    void notifyDeleteRequestBlocked(uint64_t currentVersion);
</del><ins>+    bool hasNotifiedBlocked() const { return m_notifiedBlocked; }
+    void notifyRequestBlocked(uint64_t currentVersion);
</ins><span class="cx">     void notifyDidDeleteDatabase(const IDBDatabaseInfo&amp;);
</span><del>-    bool hasNotifiedDeleteRequestBlocked() const { return m_notifiedDeleteRequestBlocked; }
</del><span class="cx"> 
</span><ins>+    uint64_t versionChangeID() const;
+
+    void notifiedConnectionsOfVersionChange(HashSet&lt;uint64_t&gt;&amp;&amp; connectionIdentifiers);
+    void connectionClosedOrFiredVersionChangeEvent(uint64_t connectionIdentifier);
+    bool hasConnectionsPendingVersionChangeEvent() const { return !m_connectionsPendingVersionChangeEvent.isEmpty(); }
+    bool hasNotifiedConnectionsOfVersionChange() const { return m_notifiedConnectionsOfVersionChange; }
+
+
</ins><span class="cx"> private:
</span><span class="cx">     ServerOpenDBRequest(IDBConnectionToClient&amp;, const IDBRequestData&amp;);
</span><span class="cx"> 
</span><span class="cx">     IDBConnectionToClient&amp; m_connection;
</span><span class="cx">     IDBRequestData m_requestData;
</span><span class="cx"> 
</span><del>-    bool m_notifiedDeleteRequestBlocked { false };
</del><ins>+    bool m_notifiedBlocked { false };
+
+    bool m_notifiedConnectionsOfVersionChange { false };
+    HashSet&lt;uint64_t&gt; m_connectionsPendingVersionChangeEvent;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace IDBServer
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbserverUniqueIDBDatabasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp (194451 => 194452)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp        2015-12-31 05:24:12 UTC (rev 194451)
+++ trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp        2015-12-31 05:43:33 UTC (rev 194452)
</span><span class="lines">@@ -158,10 +158,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // Otherwise we have to notify all those open connections and wait for them to close.
</span><del>-    notifyConnectionsOfVersionChangeForUpgrade();
-
-    // And we notify this OpenDBRequest that it is blocked until those connections close.
-    m_versionChangeDatabaseConnection-&gt;connectionToClient().notifyOpenDBRequestBlocked(m_currentOpenDBRequest-&gt;requestData().requestIdentifier(), m_databaseInfo-&gt;version(), requestedVersion);
</del><ins>+    maybeNotifyConnectionsOfVersionChange();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabase::performCurrentDeleteOperation()
</span><span class="lines">@@ -173,15 +170,7 @@
</span><span class="cx">     ASSERT(m_currentOpenDBRequest-&gt;isDeleteRequest());
</span><span class="cx"> 
</span><span class="cx">     if (hasAnyOpenConnections()) {
</span><del>-        // Exactly once, notify all open connections of the pending deletion.
-        if (!m_hasNotifiedConnectionsOfDelete) {
-            notifyConnectionsOfVersionChange(0);
-            m_hasNotifiedConnectionsOfDelete = true;
-        }
-
-        if (!m_currentOpenDBRequest-&gt;hasNotifiedDeleteRequestBlocked())
-            m_currentOpenDBRequest-&gt;notifyDeleteRequestBlocked(m_databaseInfo-&gt;version());
-
</del><ins>+        maybeNotifyConnectionsOfVersionChange();
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -192,7 +181,6 @@
</span><span class="cx"> 
</span><span class="cx">     m_currentOpenDBRequest-&gt;notifyDidDeleteDatabase(*m_databaseInfo);
</span><span class="cx">     m_currentOpenDBRequest = nullptr;
</span><del>-    m_hasNotifiedConnectionsOfDelete = false;
</del><span class="cx">     m_deletePending = false;
</span><span class="cx"> 
</span><span class="cx">     if (m_pendingOpenDBRequests.isEmpty())
</span><span class="lines">@@ -329,30 +317,69 @@
</span><span class="cx">     m_backingStore-&gt;beginTransaction(info);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void UniqueIDBDatabase::notifyConnectionsOfVersionChangeForUpgrade()
</del><ins>+void UniqueIDBDatabase::maybeNotifyConnectionsOfVersionChange()
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(m_currentOpenDBRequest);
</span><del>-    ASSERT(m_currentOpenDBRequest-&gt;isOpenRequest());
-    ASSERT(m_versionChangeDatabaseConnection);
</del><span class="cx"> 
</span><del>-    notifyConnectionsOfVersionChange(m_currentOpenDBRequest-&gt;requestData().requestedVersion());
-}
</del><ins>+    if (m_currentOpenDBRequest-&gt;hasNotifiedConnectionsOfVersionChange())
+        return;
</ins><span class="cx"> 
</span><del>-void UniqueIDBDatabase::notifyConnectionsOfVersionChange(uint64_t requestedVersion)
-{
-    LOG(IndexedDB, &quot;(main) UniqueIDBDatabase::notifyConnectionsOfVersionChange - %&quot; PRIu64, requestedVersion);
</del><ins>+    uint64_t newVersion = m_currentOpenDBRequest-&gt;isOpenRequest() ? m_currentOpenDBRequest-&gt;requestData().requestedVersion() : 0;
+    auto requestIdentifier = m_currentOpenDBRequest-&gt;requestData().requestIdentifier();
</ins><span class="cx"> 
</span><ins>+    LOG(IndexedDB, &quot;(main) UniqueIDBDatabase::notifyConnectionsOfVersionChange - %&quot; PRIu64, newVersion);
+
</ins><span class="cx">     // 3.3.7 &quot;versionchange&quot; transaction steps
</span><span class="cx">     // Fire a versionchange event at each connection in m_openDatabaseConnections that is open.
</span><span class="cx">     // The event must not be fired on connections which has the closePending flag set.
</span><ins>+    HashSet&lt;uint64_t&gt; connectionIdentifiers;
</ins><span class="cx">     for (auto connection : m_openDatabaseConnections) {
</span><span class="cx">         if (connection-&gt;closePending())
</span><span class="cx">             continue;
</span><span class="cx"> 
</span><del>-        connection-&gt;fireVersionChangeEvent(requestedVersion);
</del><ins>+        connection-&gt;fireVersionChangeEvent(requestIdentifier, newVersion);
+        connectionIdentifiers.add(connection-&gt;identifier());
</ins><span class="cx">     }
</span><ins>+
+    m_currentOpenDBRequest-&gt;notifiedConnectionsOfVersionChange(WTF::move(connectionIdentifiers));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void UniqueIDBDatabase::notifyCurrentRequestConnectionClosedOrFiredVersionChangeEvent(uint64_t connectionIdentifier)
+{
+    LOG(IndexedDB, &quot;UniqueIDBDatabase::notifyCurrentRequestConnectionClosedOrFiredVersionChangeEvent - %&quot; PRIu64, connectionIdentifier);
+
+    ASSERT(m_currentOpenDBRequest);
+
+    m_currentOpenDBRequest-&gt;connectionClosedOrFiredVersionChangeEvent(connectionIdentifier);
+
+    if (m_currentOpenDBRequest-&gt;hasConnectionsPendingVersionChangeEvent())
+        return;
+
+    if (!hasAnyOpenConnections()) {
+        invokeOperationAndTransactionTimer();
+        return;
+    }
+
+    if (m_currentOpenDBRequest-&gt;hasNotifiedBlocked())
+        return;
+
+    // Since all open connections have fired their version change events but not all of them have closed,
+    // this request is officially blocked.
+    m_currentOpenDBRequest-&gt;notifyRequestBlocked(m_databaseInfo-&gt;version());
+}
+
+void UniqueIDBDatabase::didFireVersionChangeEvent(UniqueIDBDatabaseConnection&amp; connection, const IDBResourceIdentifier&amp; requestIdentifier)
+{
+    LOG(IndexedDB, &quot;UniqueIDBDatabase::didFireVersionChangeEvent&quot;);
+
+    if (!m_currentOpenDBRequest)
+        return;
+
+    ASSERT_UNUSED(requestIdentifier, m_currentOpenDBRequest-&gt;requestData().requestIdentifier() == requestIdentifier);
+
+    notifyCurrentRequestConnectionClosedOrFiredVersionChangeEvent(connection.identifier());
+}
+
</ins><span class="cx"> void UniqueIDBDatabase::addOpenDatabaseConnection(Ref&lt;UniqueIDBDatabaseConnection&gt;&amp;&amp; connection)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(!m_openDatabaseConnections.contains(&amp;connection.get()));
</span><span class="lines">@@ -938,6 +965,9 @@
</span><span class="cx"> 
</span><span class="cx">     ASSERT(m_openDatabaseConnections.contains(&amp;connection));
</span><span class="cx"> 
</span><ins>+    if (m_currentOpenDBRequest)
+        notifyCurrentRequestConnectionClosedOrFiredVersionChangeEvent(connection.identifier());
+
</ins><span class="cx">     Deque&lt;RefPtr&lt;UniqueIDBDatabaseTransaction&gt;&gt; pendingTransactions;
</span><span class="cx">     while (!m_pendingTransactions.isEmpty()) {
</span><span class="cx">         auto transaction = m_pendingTransactions.takeFirst();
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbserverUniqueIDBDatabaseh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h (194451 => 194452)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h        2015-12-31 05:24:12 UTC (rev 194451)
+++ trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h        2015-12-31 05:43:33 UTC (rev 194452)
</span><span class="lines">@@ -95,6 +95,7 @@
</span><span class="cx">     void didFinishHandlingVersionChange(UniqueIDBDatabaseTransaction&amp;);
</span><span class="cx">     void transactionDestroyed(UniqueIDBDatabaseTransaction&amp;);
</span><span class="cx">     void connectionClosedFromClient(UniqueIDBDatabaseConnection&amp;);
</span><ins>+    void didFireVersionChangeEvent(UniqueIDBDatabaseConnection&amp;, const IDBResourceIdentifier&amp; requestIdentifier);
</ins><span class="cx"> 
</span><span class="cx">     void enqueueTransaction(Ref&lt;UniqueIDBDatabaseTransaction&gt;&amp;&amp;);
</span><span class="cx"> 
</span><span class="lines">@@ -115,8 +116,8 @@
</span><span class="cx">     bool hasAnyOpenConnections() const;
</span><span class="cx"> 
</span><span class="cx">     void startVersionChangeTransaction();
</span><del>-    void notifyConnectionsOfVersionChangeForUpgrade();
-    void notifyConnectionsOfVersionChange(uint64_t requestedVersion);
</del><ins>+    void maybeNotifyConnectionsOfVersionChange();
+    void notifyCurrentRequestConnectionClosedOrFiredVersionChangeEvent(uint64_t connectionIdentifier);
</ins><span class="cx">     bool isVersionChangeInProgress();
</span><span class="cx"> 
</span><span class="cx">     void activateTransactionInBackingStore(UniqueIDBDatabaseTransaction&amp;);
</span><span class="lines">@@ -207,7 +208,6 @@
</span><span class="cx">     HashCountedSet&lt;uint64_t&gt; m_objectStoreTransactionCounts;
</span><span class="cx"> 
</span><span class="cx">     bool m_deletePending { false };
</span><del>-    bool m_hasNotifiedConnectionsOfDelete { false };
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace IDBServer
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbserverUniqueIDBDatabaseConnectioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp (194451 => 194452)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp        2015-12-31 05:24:12 UTC (rev 194451)
+++ trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp        2015-12-31 05:43:33 UTC (rev 194452)
</span><span class="lines">@@ -68,16 +68,23 @@
</span><span class="cx"> 
</span><span class="cx"> void UniqueIDBDatabaseConnection::connectionClosedFromClient()
</span><span class="cx"> {
</span><del>-    LOG(IndexedDB, &quot;UniqueIDBDatabaseConnection::connectionClosedFromClient&quot;);
</del><ins>+    LOG(IndexedDB, &quot;UniqueIDBDatabaseConnection::connectionClosedFromClient - %&quot; PRIu64, m_identifier);
</ins><span class="cx"> 
</span><span class="cx">     m_closePending = true;
</span><span class="cx">     m_database.connectionClosedFromClient(*this);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void UniqueIDBDatabaseConnection::fireVersionChangeEvent(uint64_t requestedVersion)
</del><ins>+void UniqueIDBDatabaseConnection::didFireVersionChangeEvent(const IDBResourceIdentifier&amp; requestIdentifier)
</ins><span class="cx"> {
</span><ins>+    LOG(IndexedDB, &quot;UniqueIDBDatabaseConnection::didFireVersionChangeEvent&quot;);
+
+    m_database.didFireVersionChangeEvent(*this, requestIdentifier);
+}
+
+void UniqueIDBDatabaseConnection::fireVersionChangeEvent(const IDBResourceIdentifier&amp; requestIdentifier, uint64_t requestedVersion)
+{
</ins><span class="cx">     ASSERT(!m_closePending);
</span><del>-    m_connectionToClient.fireVersionChangeEvent(*this, requestedVersion);
</del><ins>+    m_connectionToClient.fireVersionChangeEvent(*this, requestIdentifier, requestedVersion);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> UniqueIDBDatabaseTransaction&amp; UniqueIDBDatabaseConnection::createVersionChangeTransaction(uint64_t newVersion)
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbserverUniqueIDBDatabaseConnectionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.h (194451 => 194452)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.h        2015-12-31 05:24:12 UTC (rev 194451)
+++ trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.h        2015-12-31 05:43:33 UTC (rev 194452)
</span><span class="lines">@@ -60,7 +60,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool hasNonFinishedTransactions() const;
</span><span class="cx"> 
</span><del>-    void fireVersionChangeEvent(uint64_t requestedVersion);
</del><ins>+    void fireVersionChangeEvent(const IDBResourceIdentifier&amp; requestIdentifier, uint64_t requestedVersion);
</ins><span class="cx">     UniqueIDBDatabaseTransaction&amp; createVersionChangeTransaction(uint64_t newVersion);
</span><span class="cx"> 
</span><span class="cx">     void establishTransaction(const IDBTransactionInfo&amp;);
</span><span class="lines">@@ -71,6 +71,7 @@
</span><span class="cx">     void didClearObjectStore(const IDBResultData&amp;);
</span><span class="cx">     void didCreateIndex(const IDBResultData&amp;);
</span><span class="cx">     void didDeleteIndex(const IDBResultData&amp;);
</span><ins>+    void didFireVersionChangeEvent(const IDBResourceIdentifier&amp; requestIdentifier);
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     UniqueIDBDatabaseConnection(UniqueIDBDatabase&amp;, IDBConnectionToClient&amp;);
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbsharedInProcessIDBServercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.cpp (194451 => 194452)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.cpp        2015-12-31 05:24:12 UTC (rev 194451)
+++ trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.cpp        2015-12-31 05:43:33 UTC (rev 194452)
</span><span class="lines">@@ -336,12 +336,12 @@
</span><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void InProcessIDBServer::fireVersionChangeEvent(IDBServer::UniqueIDBDatabaseConnection&amp; connection, uint64_t requestedVersion)
</del><ins>+void InProcessIDBServer::fireVersionChangeEvent(IDBServer::UniqueIDBDatabaseConnection&amp; connection, const IDBResourceIdentifier&amp; requestIdentifier, uint64_t requestedVersion)
</ins><span class="cx"> {
</span><span class="cx">     RefPtr&lt;InProcessIDBServer&gt; self(this);
</span><span class="cx">     uint64_t databaseConnectionIdentifier = connection.identifier();
</span><del>-    RunLoop::current().dispatch([this, self, databaseConnectionIdentifier, requestedVersion] {
-        m_connectionToServer-&gt;fireVersionChangeEvent(databaseConnectionIdentifier, requestedVersion);
</del><ins>+    RunLoop::current().dispatch([this, self, databaseConnectionIdentifier, requestIdentifier, requestedVersion] {
+        m_connectionToServer-&gt;fireVersionChangeEvent(databaseConnectionIdentifier, requestIdentifier, requestedVersion);
</ins><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -369,6 +369,14 @@
</span><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void InProcessIDBServer::didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier&amp; requestIdentifier)
+{
+    RefPtr&lt;InProcessIDBServer&gt; self(this);
+    RunLoop::current().dispatch([this, self, databaseConnectionIdentifier, requestIdentifier] {
+        m_server-&gt;didFireVersionChangeEvent(databaseConnectionIdentifier, requestIdentifier);
+    });
+}
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // ENABLE(INDEXED_DATABASE)
</span></span></pre></div>
<a id="trunkSourceWebCoreModulesindexeddbsharedInProcessIDBServerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.h (194451 => 194452)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.h        2015-12-31 05:24:12 UTC (rev 194451)
+++ trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.h        2015-12-31 05:43:33 UTC (rev 194452)
</span><span class="lines">@@ -72,6 +72,7 @@
</span><span class="cx">     virtual void iterateCursor(const IDBRequestData&amp;, const IDBKeyData&amp;, unsigned long count) override final;
</span><span class="cx">     virtual void establishTransaction(uint64_t databaseConnectionIdentifier, const IDBTransactionInfo&amp;) override final;
</span><span class="cx">     virtual void databaseConnectionClosed(uint64_t databaseConnectionIdentifier) override final;
</span><ins>+    virtual void didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier&amp; requestIdentifier) override final;
</ins><span class="cx"> 
</span><span class="cx">     // IDBConnectionToClient
</span><span class="cx">     virtual uint64_t identifier() const override;
</span><span class="lines">@@ -90,7 +91,7 @@
</span><span class="cx">     virtual void didDeleteRecord(const IDBResultData&amp;) override final;
</span><span class="cx">     virtual void didOpenCursor(const IDBResultData&amp;) override final;
</span><span class="cx">     virtual void didIterateCursor(const IDBResultData&amp;) override final;
</span><del>-    virtual void fireVersionChangeEvent(IDBServer::UniqueIDBDatabaseConnection&amp;, uint64_t requestedVersion) override final;
</del><ins>+    virtual void fireVersionChangeEvent(IDBServer::UniqueIDBDatabaseConnection&amp;, const IDBResourceIdentifier&amp; requestIdentifier, uint64_t requestedVersion) override final;
</ins><span class="cx">     virtual void didStartTransaction(const IDBResourceIdentifier&amp; transactionIdentifier, const IDBError&amp;) override final;
</span><span class="cx">     virtual void notifyOpenDBRequestBlocked(const IDBResourceIdentifier&amp; requestIdentifier, uint64_t oldVersion, uint64_t newVersion) override final;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoredomEventh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/Event.h (194451 => 194452)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/Event.h        2015-12-31 05:24:12 UTC (rev 194451)
+++ trunk/Source/WebCore/dom/Event.h        2015-12-31 05:43:33 UTC (rev 194452)
</span><span class="lines">@@ -151,6 +151,10 @@
</span><span class="cx">     virtual bool isTextEvent() const;
</span><span class="cx">     virtual bool isWheelEvent() const;
</span><span class="cx"> 
</span><ins>+#if ENABLE(INDEXED_DATABASE)
+    virtual bool isVersionChangeEvent() const { return false; }
+#endif
+
</ins><span class="cx">     bool propagationStopped() const { return m_propagationStopped || m_immediatePropagationStopped; }
</span><span class="cx">     bool immediatePropagationStopped() const { return m_immediatePropagationStopped; }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>