Title: [208609] trunk
Revision
208609
Author
[email protected]
Date
2016-11-11 13:57:42 -0800 (Fri, 11 Nov 2016)

Log Message

IndexedDB 2.0: "close pending flag" and firing blocked events all need fixing.
https://bugs.webkit.org/show_bug.cgi?id=164641

Reviewed by Alex Christensen.

LayoutTests/imported/w3c:

* web-platform-tests/IndexedDB/idbobjectstore-rename-store-expected.txt:

Source/WebCore:

No new tests (Covered by at least 3 existing tests).

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

* Modules/indexeddb/client/IDBConnectionProxy.cpp:
(WebCore::IDBClient::IDBConnectionProxy::databaseConnectionPendingClose):
* Modules/indexeddb/client/IDBConnectionProxy.h:

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

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

* Modules/indexeddb/server/ServerOpenDBRequest.cpp:
(WebCore::IDBServer::ServerOpenDBRequest::maybeNotifyRequestBlocked):
(WebCore::IDBServer::ServerOpenDBRequest::notifyRequestBlocked): Deleted.
* Modules/indexeddb/server/ServerOpenDBRequest.h:
(WebCore::IDBServer::ServerOpenDBRequest::hasNotifiedBlocked): Deleted.

* Modules/indexeddb/server/UniqueIDBDatabase.cpp:
(WebCore::IDBServer::UniqueIDBDatabase::allConnectionsAreClosedOrClosing):
(WebCore::IDBServer::UniqueIDBDatabase::maybeNotifyConnectionsOfVersionChange):
(WebCore::IDBServer::UniqueIDBDatabase::notifyCurrentRequestConnectionClosedOrFiredVersionChangeEvent):
* Modules/indexeddb/server/UniqueIDBDatabase.h:

* Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
(WebCore::IDBServer::UniqueIDBDatabaseConnection::connectionPendingCloseFromClient):
(WebCore::IDBServer::UniqueIDBDatabaseConnection::connectionClosedFromClient):
(WebCore::IDBServer::UniqueIDBDatabaseConnection::connectionIsClosing):
* Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:

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

Source/WebKit2:

* DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:
(WebKit::WebIDBConnectionToClient::databaseConnectionPendingClose):
* DatabaseProcess/IndexedDB/WebIDBConnectionToClient.h:
* DatabaseProcess/IndexedDB/WebIDBConnectionToClient.messages.in:

* WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
(WebKit::WebIDBConnectionToServer::databaseConnectionPendingClose):
* WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:

Modified Paths

Diff

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (208608 => 208609)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2016-11-11 21:55:44 UTC (rev 208608)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2016-11-11 21:57:42 UTC (rev 208609)
@@ -1,3 +1,12 @@
+2016-11-11  Brady Eidson  <[email protected]>
+
+        IndexedDB 2.0: "close pending flag" and firing blocked events all need fixing.
+        https://bugs.webkit.org/show_bug.cgi?id=164641
+
+        Reviewed by Alex Christensen.
+
+        * web-platform-tests/IndexedDB/idbobjectstore-rename-store-expected.txt:
+
 2016-11-10  Brady Eidson  <[email protected]>
 
         IndexedDB 2.0 Support the IDBDatabase.onclose event.

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/idbobjectstore-rename-store-expected.txt (208608 => 208609)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/idbobjectstore-rename-store-expected.txt	2016-11-11 21:55:44 UTC (rev 208608)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/IndexedDB/idbobjectstore-rename-store-expected.txt	2016-11-11 21:57:42 UTC (rev 208609)
@@ -2,7 +2,7 @@
 PASS IndexedDB object store rename in new transaction 
 PASS IndexedDB object store rename in the transaction where it is created 
 PASS IndexedDB object store rename covers index 
-FAIL IndexedDB object store rename covers key generator assert_equals: Renaming an object store should not change the state of its key generator expected 345680 but got 345679
+PASS IndexedDB object store rename covers key generator 
 PASS IndexedDB object store rename to the same name succeeds 
 PASS IndexedDB object store rename to the name of a deleted store succeeds 
 PASS IndexedDB object store swapping via renames succeeds 

Modified: trunk/Source/WebCore/ChangeLog (208608 => 208609)


--- trunk/Source/WebCore/ChangeLog	2016-11-11 21:55:44 UTC (rev 208608)
+++ trunk/Source/WebCore/ChangeLog	2016-11-11 21:57:42 UTC (rev 208609)
@@ -1,3 +1,51 @@
+2016-11-11  Brady Eidson  <[email protected]>
+
+        IndexedDB 2.0: "close pending flag" and firing blocked events all need fixing.
+        https://bugs.webkit.org/show_bug.cgi?id=164641
+
+        Reviewed by Alex Christensen.
+
+        No new tests (Covered by at least 3 existing tests).
+
+        * Modules/indexeddb/IDBDatabase.cpp:
+        (WebCore::IDBDatabase::close):
+        (WebCore::IDBDatabase::maybeCloseInServer):
+
+        * Modules/indexeddb/client/IDBConnectionProxy.cpp:
+        (WebCore::IDBClient::IDBConnectionProxy::databaseConnectionPendingClose):
+        * Modules/indexeddb/client/IDBConnectionProxy.h:
+
+        * Modules/indexeddb/client/IDBConnectionToServer.cpp:
+        (WebCore::IDBClient::IDBConnectionToServer::databaseConnectionPendingClose):
+        * Modules/indexeddb/client/IDBConnectionToServer.h:
+        * Modules/indexeddb/client/IDBConnectionToServerDelegate.h:
+
+        * Modules/indexeddb/server/IDBServer.cpp:
+        (WebCore::IDBServer::IDBServer::databaseConnectionPendingClose):
+        * Modules/indexeddb/server/IDBServer.h:
+
+        * Modules/indexeddb/server/ServerOpenDBRequest.cpp:
+        (WebCore::IDBServer::ServerOpenDBRequest::maybeNotifyRequestBlocked):
+        (WebCore::IDBServer::ServerOpenDBRequest::notifyRequestBlocked): Deleted.
+        * Modules/indexeddb/server/ServerOpenDBRequest.h:
+        (WebCore::IDBServer::ServerOpenDBRequest::hasNotifiedBlocked): Deleted.
+
+        * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
+        (WebCore::IDBServer::UniqueIDBDatabase::allConnectionsAreClosedOrClosing):
+        (WebCore::IDBServer::UniqueIDBDatabase::maybeNotifyConnectionsOfVersionChange):
+        (WebCore::IDBServer::UniqueIDBDatabase::notifyCurrentRequestConnectionClosedOrFiredVersionChangeEvent):
+        * Modules/indexeddb/server/UniqueIDBDatabase.h:
+
+        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
+        (WebCore::IDBServer::UniqueIDBDatabaseConnection::connectionPendingCloseFromClient):
+        (WebCore::IDBServer::UniqueIDBDatabaseConnection::connectionClosedFromClient):
+        (WebCore::IDBServer::UniqueIDBDatabaseConnection::connectionIsClosing):
+        * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:
+
+        * Modules/indexeddb/shared/InProcessIDBServer.cpp:
+        (WebCore::InProcessIDBServer::databaseConnectionPendingClose):
+        * Modules/indexeddb/shared/InProcessIDBServer.h:
+
 2016-11-11  Dave Hyatt  <[email protected]>
 
         [CSS Parser] Fix time unit parsing

Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.cpp (208608 => 208609)


--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.cpp	2016-11-11 21:55:44 UTC (rev 208608)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.cpp	2016-11-11 21:57:42 UTC (rev 208609)
@@ -237,7 +237,11 @@
 
     ASSERT(currentThread() == originThreadID());
 
-    m_closePending = true;
+    if (!m_closePending) {
+        m_closePending = true;
+        m_connectionProxy->databaseConnectionPendingClose(*this);
+    }
+
     maybeCloseInServer();
 }
 
@@ -287,7 +291,7 @@
     // 3.3.9 Database closing steps
     // Wait for all transactions created using this connection to complete.
     // Once they are complete, this connection is closed.
-    if (!m_activeTransactions.isEmpty())
+    if (!m_activeTransactions.isEmpty() || !m_committingTransactions.isEmpty())
         return;
 
     m_closedInServer = true;

Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionProxy.cpp (208608 => 208609)


--- trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionProxy.cpp	2016-11-11 21:55:44 UTC (rev 208608)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionProxy.cpp	2016-11-11 21:57:42 UTC (rev 208609)
@@ -384,6 +384,11 @@
     callConnectionOnMainThread(&IDBConnectionToServer::didFinishHandlingVersionChangeTransaction, databaseConnectionIdentifier, transaction.info().identifier());
 }
 
+void IDBConnectionProxy::databaseConnectionPendingClose(IDBDatabase& database)
+{
+    callConnectionOnMainThread(&IDBConnectionToServer::databaseConnectionPendingClose, database.databaseConnectionIdentifier());
+}
+
 void IDBConnectionProxy::databaseConnectionClosed(IDBDatabase& database)
 {
     callConnectionOnMainThread(&IDBConnectionToServer::databaseConnectionClosed, database.databaseConnectionIdentifier());

Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionProxy.h (208608 => 208609)


--- trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionProxy.h	2016-11-11 21:55:44 UTC (rev 208608)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionProxy.h	2016-11-11 21:57:42 UTC (rev 208609)
@@ -97,6 +97,7 @@
     void didAbortTransaction(const IDBResourceIdentifier& transactionIdentifier, const IDBError&);
 
     void didFinishHandlingVersionChangeTransaction(uint64_t databaseConnectionIdentifier, IDBTransaction&);
+    void databaseConnectionPendingClose(IDBDatabase&);
     void databaseConnectionClosed(IDBDatabase&);
 
     void didCloseFromServer(uint64_t databaseConnectionIdentifier, const IDBError&);

Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp (208608 => 208609)


--- trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp	2016-11-11 21:55:44 UTC (rev 208608)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp	2016-11-11 21:57:42 UTC (rev 208609)
@@ -399,6 +399,14 @@
     m_delegate->openDBRequestCancelled(requestData);
 }
 
+void IDBConnectionToServer::databaseConnectionPendingClose(uint64_t databaseConnectionIdentifier)
+{
+    LOG(IndexedDB, "IDBConnectionToServer::databaseConnectionPendingClose");
+    ASSERT(isMainThread());
+
+    m_delegate->databaseConnectionPendingClose(databaseConnectionIdentifier);
+}
+
 void IDBConnectionToServer::databaseConnectionClosed(uint64_t databaseConnectionIdentifier)
 {
     LOG(IndexedDB, "IDBConnectionToServer::databaseConnectionClosed");

Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h (208608 => 208609)


--- trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h	2016-11-11 21:55:44 UTC (rev 208608)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.h	2016-11-11 21:57:42 UTC (rev 208609)
@@ -129,6 +129,7 @@
 
     void establishTransaction(uint64_t databaseConnectionIdentifier, const IDBTransactionInfo&);
 
+    void databaseConnectionPendingClose(uint64_t databaseConnectionIdentifier);
     void databaseConnectionClosed(uint64_t databaseConnectionIdentifier);
 
     // To be used when an IDBOpenDBRequest gets a new database connection, optionally with a

Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServerDelegate.h (208608 => 208609)


--- trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServerDelegate.h	2016-11-11 21:55:44 UTC (rev 208608)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServerDelegate.h	2016-11-11 21:57:42 UTC (rev 208609)
@@ -79,6 +79,7 @@
     virtual void iterateCursor(const IDBRequestData&, const IDBIterateCursorData&) = 0;
 
     virtual void establishTransaction(uint64_t databaseConnectionIdentifier, const IDBTransactionInfo&) = 0;
+    virtual void databaseConnectionPendingClose(uint64_t databaseConnectionIdentifier) = 0;
     virtual void databaseConnectionClosed(uint64_t databaseConnectionIdentifier) = 0;
     virtual void abortOpenAndUpgradeNeeded(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& transactionIdentifier) = 0;
     virtual void didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& requestIdentifier) = 0;

Modified: trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp (208608 => 208609)


--- trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp	2016-11-11 21:55:44 UTC (rev 208608)
+++ trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp	2016-11-11 21:57:42 UTC (rev 208609)
@@ -385,6 +385,17 @@
     connection->didFinishHandlingVersionChange(transactionIdentifier);
 }
 
+void IDBServer::databaseConnectionPendingClose(uint64_t databaseConnectionIdentifier)
+{
+    LOG(IndexedDB, "IDBServer::databaseConnectionPendingClose - %" PRIu64, databaseConnectionIdentifier);
+
+    auto databaseConnection = m_databaseConnections.get(databaseConnectionIdentifier);
+    if (!databaseConnection)
+        return;
+
+    databaseConnection->connectionPendingCloseFromClient();
+}
+
 void IDBServer::databaseConnectionClosed(uint64_t databaseConnectionIdentifier)
 {
     LOG(IndexedDB, "IDBServer::databaseConnectionClosed - %" PRIu64, databaseConnectionIdentifier);

Modified: trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.h (208608 => 208609)


--- trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.h	2016-11-11 21:55:44 UTC (rev 208608)
+++ trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.h	2016-11-11 21:57:42 UTC (rev 208609)
@@ -81,6 +81,7 @@
     WEBCORE_EXPORT void iterateCursor(const IDBRequestData&, const IDBIterateCursorData&);
 
     WEBCORE_EXPORT void establishTransaction(uint64_t databaseConnectionIdentifier, const IDBTransactionInfo&);
+    WEBCORE_EXPORT void databaseConnectionPendingClose(uint64_t databaseConnectionIdentifier);
     WEBCORE_EXPORT void databaseConnectionClosed(uint64_t databaseConnectionIdentifier);
     WEBCORE_EXPORT void abortOpenAndUpgradeNeeded(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& transactionIdentifier);
     WEBCORE_EXPORT void didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& requestIdentifier);

Modified: trunk/Source/WebCore/Modules/indexeddb/server/ServerOpenDBRequest.cpp (208608 => 208609)


--- trunk/Source/WebCore/Modules/indexeddb/server/ServerOpenDBRequest.cpp	2016-11-11 21:55:44 UTC (rev 208608)
+++ trunk/Source/WebCore/Modules/indexeddb/server/ServerOpenDBRequest.cpp	2016-11-11 21:57:42 UTC (rev 208609)
@@ -55,9 +55,10 @@
     return m_requestData.isDeleteRequest();
 }
 
-void ServerOpenDBRequest::notifyRequestBlocked(uint64_t currentVersion)
+void ServerOpenDBRequest::maybeNotifyRequestBlocked(uint64_t currentVersion)
 {
-    ASSERT(!m_notifiedBlocked);
+    if (m_notifiedBlocked)
+        return;
 
     uint64_t requestedVersion = isOpenRequest() ?  m_requestData.requestedVersion() : 0;
     m_connection.notifyOpenDBRequestBlocked(m_requestData.requestIdentifier(), currentVersion, requestedVersion);

Modified: trunk/Source/WebCore/Modules/indexeddb/server/ServerOpenDBRequest.h (208608 => 208609)


--- trunk/Source/WebCore/Modules/indexeddb/server/ServerOpenDBRequest.h	2016-11-11 21:55:44 UTC (rev 208608)
+++ trunk/Source/WebCore/Modules/indexeddb/server/ServerOpenDBRequest.h	2016-11-11 21:57:42 UTC (rev 208609)
@@ -50,8 +50,7 @@
     bool isOpenRequest() const;
     bool isDeleteRequest() const;
 
-    bool hasNotifiedBlocked() const { return m_notifiedBlocked; }
-    void notifyRequestBlocked(uint64_t currentVersion);
+    void maybeNotifyRequestBlocked(uint64_t currentVersion);
     void notifyDidDeleteDatabase(const IDBDatabaseInfo&);
 
     uint64_t versionChangeID() const;

Modified: trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp (208608 => 208609)


--- trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp	2016-11-11 21:55:44 UTC (rev 208608)
+++ trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp	2016-11-11 21:57:42 UTC (rev 208609)
@@ -366,6 +366,16 @@
     return !m_openDatabaseConnections.isEmpty();
 }
 
+bool UniqueIDBDatabase::allConnectionsAreClosedOrClosing() const
+{
+    for (auto& connection : m_openDatabaseConnections) {
+        if (!connection->connectionIsClosing())
+            return false;
+    }
+
+    return true;
+}
+
 static uint64_t generateUniqueCallbackIdentifier()
 {
     ASSERT(isMainThread());
@@ -504,7 +514,10 @@
         connectionIdentifiers.add(connection->identifier());
     }
 
-    m_currentOpenDBRequest->notifiedConnectionsOfVersionChange(WTFMove(connectionIdentifiers));
+    if (!connectionIdentifiers.isEmpty())
+        m_currentOpenDBRequest->notifiedConnectionsOfVersionChange(WTFMove(connectionIdentifiers));
+    else
+        m_currentOpenDBRequest->maybeNotifyRequestBlocked(m_databaseInfo->version());
 }
 
 void UniqueIDBDatabase::notifyCurrentRequestConnectionClosedOrFiredVersionChangeEvent(uint64_t connectionIdentifier)
@@ -518,17 +531,14 @@
     if (m_currentOpenDBRequest->hasConnectionsPendingVersionChangeEvent())
         return;
 
-    if (!hasAnyOpenConnections()) {
+    if (!hasAnyOpenConnections() || allConnectionsAreClosedOrClosing()) {
         invokeOperationAndTransactionTimer();
         return;
     }
 
-    if (m_currentOpenDBRequest->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->notifyRequestBlocked(m_databaseInfo->version());
+    m_currentOpenDBRequest->maybeNotifyRequestBlocked(m_databaseInfo->version());
 }
 
 void UniqueIDBDatabase::didFireVersionChangeEvent(UniqueIDBDatabaseConnection& connection, const IDBResourceIdentifier& requestIdentifier)

Modified: trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h (208608 => 208609)


--- trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h	2016-11-11 21:55:44 UTC (rev 208608)
+++ trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h	2016-11-11 21:57:42 UTC (rev 208609)
@@ -130,6 +130,7 @@
     void performCurrentDeleteOperation();
     void addOpenDatabaseConnection(Ref<UniqueIDBDatabaseConnection>&&);
     bool hasAnyOpenConnections() const;
+    bool allConnectionsAreClosedOrClosing() const;
 
     void startVersionChangeTransaction();
     void maybeNotifyConnectionsOfVersionChange();

Modified: trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp (208608 => 208609)


--- trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp	2016-11-11 21:55:44 UTC (rev 208608)
+++ trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp	2016-11-11 21:57:42 UTC (rev 208609)
@@ -83,11 +83,17 @@
     });
 }
 
+void UniqueIDBDatabaseConnection::connectionPendingCloseFromClient()
+{
+    LOG(IndexedDB, "UniqueIDBDatabaseConnection::connectionPendingCloseFromClient - %s - %" PRIu64, m_openRequestIdentifier.loggingString().utf8().data(), m_identifier);
+
+    m_closePending = true;
+}
+
 void UniqueIDBDatabaseConnection::connectionClosedFromClient()
 {
     LOG(IndexedDB, "UniqueIDBDatabaseConnection::connectionClosedFromClient - %s - %" PRIu64, m_openRequestIdentifier.loggingString().utf8().data(), m_identifier);
 
-    m_closePending = true;
     m_database.connectionClosedFromClient(*this);
 }
 
@@ -219,6 +225,11 @@
     m_connectionToClient.didRenameIndex(resultData);
 }
 
+bool UniqueIDBDatabaseConnection::connectionIsClosing() const
+{
+    return m_closePending;
+}
+
 } // namespace IDBServer
 } // namespace WebCore
 

Modified: trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.h (208608 => 208609)


--- trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.h	2016-11-11 21:55:44 UTC (rev 208608)
+++ trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.h	2016-11-11 21:57:42 UTC (rev 208609)
@@ -55,6 +55,7 @@
     UniqueIDBDatabase& database() { return m_database; }
     IDBConnectionToClient& connectionToClient() { return m_connectionToClient; }
 
+    void connectionPendingCloseFromClient();
     void connectionClosedFromClient();
 
     bool closePending() const { return m_closePending; }
@@ -80,6 +81,8 @@
 
     void abortTransactionWithoutCallback(UniqueIDBDatabaseTransaction&);
 
+    bool connectionIsClosing() const;
+
 private:
     UniqueIDBDatabaseConnection(UniqueIDBDatabase&, ServerOpenDBRequest&);
 

Modified: trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.cpp (208608 => 208609)


--- trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.cpp	2016-11-11 21:55:44 UTC (rev 208608)
+++ trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.cpp	2016-11-11 21:57:42 UTC (rev 208609)
@@ -385,6 +385,13 @@
     });
 }
 
+void InProcessIDBServer::databaseConnectionPendingClose(uint64_t databaseConnectionIdentifier)
+{
+    RunLoop::current().dispatch([this, protectedThis = makeRef(*this), databaseConnectionIdentifier] {
+        m_server->databaseConnectionPendingClose(databaseConnectionIdentifier);
+    });
+}
+
 void InProcessIDBServer::databaseConnectionClosed(uint64_t databaseConnectionIdentifier)
 {
     RunLoop::current().dispatch([this, protectedThis = makeRef(*this), databaseConnectionIdentifier] {

Modified: trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.h (208608 => 208609)


--- trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.h	2016-11-11 21:55:44 UTC (rev 208608)
+++ trunk/Source/WebCore/Modules/indexeddb/shared/InProcessIDBServer.h	2016-11-11 21:57:42 UTC (rev 208609)
@@ -77,6 +77,7 @@
     void openCursor(const IDBRequestData&, const IDBCursorInfo&) final;
     void iterateCursor(const IDBRequestData&, const IDBIterateCursorData&) final;
     void establishTransaction(uint64_t databaseConnectionIdentifier, const IDBTransactionInfo&) final;
+    void databaseConnectionPendingClose(uint64_t databaseConnectionIdentifier) final;
     void databaseConnectionClosed(uint64_t databaseConnectionIdentifier) final;
     void abortOpenAndUpgradeNeeded(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& transactionIdentifier) final;
     void didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const IDBResourceIdentifier& requestIdentifier) final;

Modified: trunk/Source/WebKit2/ChangeLog (208608 => 208609)


--- trunk/Source/WebKit2/ChangeLog	2016-11-11 21:55:44 UTC (rev 208608)
+++ trunk/Source/WebKit2/ChangeLog	2016-11-11 21:57:42 UTC (rev 208609)
@@ -1,3 +1,19 @@
+2016-11-11  Brady Eidson  <[email protected]>
+
+        IndexedDB 2.0: "close pending flag" and firing blocked events all need fixing.
+        https://bugs.webkit.org/show_bug.cgi?id=164641
+
+        Reviewed by Alex Christensen.
+
+        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp:
+        (WebKit::WebIDBConnectionToClient::databaseConnectionPendingClose):
+        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.h:
+        * DatabaseProcess/IndexedDB/WebIDBConnectionToClient.messages.in:
+
+        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp:
+        (WebKit::WebIDBConnectionToServer::databaseConnectionPendingClose):
+        * WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h:
+
 2016-11-11  Eric Carlson  <[email protected]>
 
         [MediaStream] defer resolution of getUserMedia promise made in a background tab

Modified: trunk/Source/WebKit2/DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp (208608 => 208609)


--- trunk/Source/WebKit2/DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp	2016-11-11 21:55:44 UTC (rev 208608)
+++ trunk/Source/WebKit2/DatabaseProcess/IndexedDB/WebIDBConnectionToClient.cpp	2016-11-11 21:57:42 UTC (rev 208609)
@@ -331,6 +331,11 @@
     DatabaseProcess::singleton().idbServer().establishTransaction(databaseConnectionIdentifier, info);
 }
 
+void WebIDBConnectionToClient::databaseConnectionPendingClose(uint64_t databaseConnectionIdentifier)
+{
+    DatabaseProcess::singleton().idbServer().databaseConnectionPendingClose(databaseConnectionIdentifier);
+}
+
 void WebIDBConnectionToClient::databaseConnectionClosed(uint64_t databaseConnectionIdentifier)
 {
     DatabaseProcess::singleton().idbServer().databaseConnectionClosed(databaseConnectionIdentifier);

Modified: trunk/Source/WebKit2/DatabaseProcess/IndexedDB/WebIDBConnectionToClient.h (208608 => 208609)


--- trunk/Source/WebKit2/DatabaseProcess/IndexedDB/WebIDBConnectionToClient.h	2016-11-11 21:55:44 UTC (rev 208608)
+++ trunk/Source/WebKit2/DatabaseProcess/IndexedDB/WebIDBConnectionToClient.h	2016-11-11 21:57:42 UTC (rev 208609)
@@ -111,6 +111,7 @@
     void iterateCursor(const WebCore::IDBRequestData&, const WebCore::IDBIterateCursorData&);
 
     void establishTransaction(uint64_t databaseConnectionIdentifier, const WebCore::IDBTransactionInfo&);
+    void databaseConnectionPendingClose(uint64_t databaseConnectionIdentifier);
     void databaseConnectionClosed(uint64_t databaseConnectionIdentifier);
     void abortOpenAndUpgradeNeeded(uint64_t databaseConnectionIdentifier, const WebCore::IDBResourceIdentifier& transactionIdentifier);
     void didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const WebCore::IDBResourceIdentifier& requestIdentifier);

Modified: trunk/Source/WebKit2/DatabaseProcess/IndexedDB/WebIDBConnectionToClient.messages.in (208608 => 208609)


--- trunk/Source/WebKit2/DatabaseProcess/IndexedDB/WebIDBConnectionToClient.messages.in	2016-11-11 21:55:44 UTC (rev 208608)
+++ trunk/Source/WebKit2/DatabaseProcess/IndexedDB/WebIDBConnectionToClient.messages.in	2016-11-11 21:57:42 UTC (rev 208609)
@@ -44,6 +44,7 @@
     IterateCursor(WebCore::IDBRequestData requestData, struct WebCore::IDBIterateCursorData data);
 
     EstablishTransaction(uint64_t databaseConnectionIdentifier, WebCore::IDBTransactionInfo info);
+    DatabaseConnectionPendingClose(uint64_t databaseConnectionIdentifier);
     DatabaseConnectionClosed(uint64_t databaseConnectionIdentifier);
     AbortOpenAndUpgradeNeeded(uint64_t databaseConnectionIdentifier, WebCore::IDBResourceIdentifier transactionIdentifier);
     DidFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, WebCore::IDBResourceIdentifier requestIdentifier);

Modified: trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp (208608 => 208609)


--- trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp	2016-11-11 21:55:44 UTC (rev 208608)
+++ trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.cpp	2016-11-11 21:57:42 UTC (rev 208609)
@@ -185,6 +185,11 @@
     send(Messages::WebIDBConnectionToClient::EstablishTransaction(databaseConnectionIdentifier, info));
 }
 
+void WebIDBConnectionToServer::databaseConnectionPendingClose(uint64_t databaseConnectionIdentifier)
+{
+    send(Messages::WebIDBConnectionToClient::DatabaseConnectionPendingClose(databaseConnectionIdentifier));
+}
+
 void WebIDBConnectionToServer::databaseConnectionClosed(uint64_t databaseConnectionIdentifier)
 {
     send(Messages::WebIDBConnectionToClient::DatabaseConnectionClosed(databaseConnectionIdentifier));

Modified: trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h (208608 => 208609)


--- trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h	2016-11-11 21:55:44 UTC (rev 208608)
+++ trunk/Source/WebKit2/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.h	2016-11-11 21:57:42 UTC (rev 208609)
@@ -66,6 +66,7 @@
     void openCursor(const WebCore::IDBRequestData&, const WebCore::IDBCursorInfo&) final;
     void iterateCursor(const WebCore::IDBRequestData&, const WebCore::IDBIterateCursorData&) final;
     void establishTransaction(uint64_t databaseConnectionIdentifier, const WebCore::IDBTransactionInfo&) final;
+    void databaseConnectionPendingClose(uint64_t databaseConnectionIdentifier) final;
     void databaseConnectionClosed(uint64_t databaseConnectionIdentifier) final;
     void abortOpenAndUpgradeNeeded(uint64_t databaseConnectionIdentifier, const WebCore::IDBResourceIdentifier& transactionIdentifier) final;
     void didFireVersionChangeEvent(uint64_t databaseConnectionIdentifier, const WebCore::IDBResourceIdentifier& requestIdentifier) final;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to