Modified: trunk/Source/WebCore/ChangeLog (200602 => 200603)
--- trunk/Source/WebCore/ChangeLog 2016-05-10 00:20:27 UTC (rev 200602)
+++ trunk/Source/WebCore/ChangeLog 2016-05-10 00:59:33 UTC (rev 200603)
@@ -1,3 +1,27 @@
+2016-05-09 Brady Eidson <beid...@apple.com>
+
+ Modern IDB: Have server database connections remember the OpenDB request that spawned them.
+ https://bugs.webkit.org/show_bug.cgi?id=157498
+
+ Reviewed by Tim Horton.
+
+ No new tests (No testable change in behavior, debug only for now).
+
+ * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
+ (WebCore::IDBServer::UniqueIDBDatabase::performCurrentOpenOperation):
+
+ * Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp:
+ (WebCore::IDBServer::UniqueIDBDatabaseConnection::create):
+ (WebCore::IDBServer::UniqueIDBDatabaseConnection::UniqueIDBDatabaseConnection):
+ (WebCore::IDBServer::UniqueIDBDatabaseConnection::connectionClosedFromClient):
+ (WebCore::IDBServer::UniqueIDBDatabaseConnection::didFireVersionChangeEvent):
+ (WebCore::IDBServer::UniqueIDBDatabaseConnection::createVersionChangeTransaction):
+ (WebCore::IDBServer::UniqueIDBDatabaseConnection::establishTransaction):
+ (WebCore::IDBServer::UniqueIDBDatabaseConnection::didAbortTransaction):
+ (WebCore::IDBServer::UniqueIDBDatabaseConnection::didCommitTransaction):
+ * Modules/indexeddb/server/UniqueIDBDatabaseConnection.h:
+ (WebCore::IDBServer::UniqueIDBDatabaseConnection::openRequestIdentifier):
+
2016-05-09 Simon Fraser <simon.fra...@apple.com>
[iOS] visibility:hidden -webkit-overflow-scrolling: touch divs can interfere with page scrolling
Modified: trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp (200602 => 200603)
--- trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp 2016-05-10 00:20:27 UTC (rev 200602)
+++ trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp 2016-05-10 00:59:33 UTC (rev 200603)
@@ -151,10 +151,10 @@
return;
}
- Ref<UniqueIDBDatabaseConnection> connection = UniqueIDBDatabaseConnection::create(*this, m_currentOpenDBRequest->connection());
- UniqueIDBDatabaseConnection* rawConnection = &connection.get();
+ Ref<UniqueIDBDatabaseConnection> connection = UniqueIDBDatabaseConnection::create(*this, *m_currentOpenDBRequest);
if (requestedVersion == m_databaseInfo->version()) {
+ auto* rawConnection = &connection.get();
addOpenDatabaseConnection(WTFMove(connection));
auto result = IDBResultData::openDatabaseSuccess(m_currentOpenDBRequest->requestData().requestIdentifier(), *rawConnection);
@@ -165,7 +165,7 @@
}
ASSERT(!m_versionChangeDatabaseConnection);
- m_versionChangeDatabaseConnection = rawConnection;
+ m_versionChangeDatabaseConnection = WTFMove(connection);
// 3.3.7 "versionchange" transaction steps
// If there's no other open connections to this database, the version change process can begin immediately.
Modified: trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp (200602 => 200603)
--- trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp 2016-05-10 00:20:27 UTC (rev 200602)
+++ trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp 2016-05-10 00:59:33 UTC (rev 200603)
@@ -43,15 +43,16 @@
return ++nextIdentifier;
}
-Ref<UniqueIDBDatabaseConnection> UniqueIDBDatabaseConnection::create(UniqueIDBDatabase& database, IDBConnectionToClient& connection)
+Ref<UniqueIDBDatabaseConnection> UniqueIDBDatabaseConnection::create(UniqueIDBDatabase& database, ServerOpenDBRequest& request)
{
- return adoptRef(*new UniqueIDBDatabaseConnection(database, connection));
+ return adoptRef(*new UniqueIDBDatabaseConnection(database, request));
}
-UniqueIDBDatabaseConnection::UniqueIDBDatabaseConnection(UniqueIDBDatabase& database, IDBConnectionToClient& connection)
+UniqueIDBDatabaseConnection::UniqueIDBDatabaseConnection(UniqueIDBDatabase& database, ServerOpenDBRequest& request)
: m_identifier(nextDatabaseConnectionIdentifier())
, m_database(database)
- , m_connectionToClient(connection)
+ , m_connectionToClient(request.connection())
+ , m_openRequestIdentifier(request.requestData().requestIdentifier())
{
m_database.server().registerDatabaseConnection(*this);
}
@@ -76,7 +77,7 @@
void UniqueIDBDatabaseConnection::connectionClosedFromClient()
{
- LOG(IndexedDB, "UniqueIDBDatabaseConnection::connectionClosedFromClient - %" PRIu64, m_identifier);
+ LOG(IndexedDB, "UniqueIDBDatabaseConnection::connectionClosedFromClient - %s - %" PRIu64, m_openRequestIdentifier.loggingString().utf8().data(), m_identifier);
m_closePending = true;
m_database.connectionClosedFromClient(*this);
@@ -84,7 +85,7 @@
void UniqueIDBDatabaseConnection::didFireVersionChangeEvent(const IDBResourceIdentifier& requestIdentifier)
{
- LOG(IndexedDB, "UniqueIDBDatabaseConnection::didFireVersionChangeEvent");
+ LOG(IndexedDB, "UniqueIDBDatabaseConnection::didFireVersionChangeEvent - %s - %" PRIu64, m_openRequestIdentifier.loggingString().utf8().data(), m_identifier);
m_database.didFireVersionChangeEvent(*this, requestIdentifier);
}
@@ -97,7 +98,7 @@
UniqueIDBDatabaseTransaction& UniqueIDBDatabaseConnection::createVersionChangeTransaction(uint64_t newVersion)
{
- LOG(IndexedDB, "UniqueIDBDatabaseConnection::createVersionChangeTransaction");
+ LOG(IndexedDB, "UniqueIDBDatabaseConnection::createVersionChangeTransaction - %s - %" PRIu64, m_openRequestIdentifier.loggingString().utf8().data(), m_identifier);
ASSERT(!m_closePending);
IDBTransactionInfo info = IDBTransactionInfo::versionChange(m_connectionToClient, m_database.info(), newVersion);
@@ -110,7 +111,7 @@
void UniqueIDBDatabaseConnection::establishTransaction(const IDBTransactionInfo& info)
{
- LOG(IndexedDB, "UniqueIDBDatabaseConnection::establishTransaction");
+ LOG(IndexedDB, "UniqueIDBDatabaseConnection::establishTransaction - %s - %" PRIu64, m_openRequestIdentifier.loggingString().utf8().data(), m_identifier);
ASSERT(info.mode() != IndexedDB::TransactionMode::VersionChange);
@@ -125,7 +126,7 @@
void UniqueIDBDatabaseConnection::didAbortTransaction(UniqueIDBDatabaseTransaction& transaction, const IDBError& error)
{
- LOG(IndexedDB, "UniqueIDBDatabaseConnection::didAbortTransaction");
+ LOG(IndexedDB, "UniqueIDBDatabaseConnection::didAbortTransaction - %s - %" PRIu64, m_openRequestIdentifier.loggingString().utf8().data(), m_identifier);
auto transactionIdentifier = transaction.info().identifier();
@@ -137,7 +138,7 @@
void UniqueIDBDatabaseConnection::didCommitTransaction(UniqueIDBDatabaseTransaction& transaction, const IDBError& error)
{
- LOG(IndexedDB, "UniqueIDBDatabaseConnection::didCommitTransaction");
+ LOG(IndexedDB, "UniqueIDBDatabaseConnection::didCommitTransaction - %s - %" PRIu64, m_openRequestIdentifier.loggingString().utf8().data(), m_identifier);
auto transactionIdentifier = transaction.info().identifier();
Modified: trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.h (200602 => 200603)
--- trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.h 2016-05-10 00:20:27 UTC (rev 200602)
+++ trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.h 2016-05-10 00:59:33 UTC (rev 200603)
@@ -41,16 +41,18 @@
namespace IDBServer {
class IDBConnectionToClient;
+class ServerOpenDBRequest;
class UniqueIDBDatabase;
class UniqueIDBDatabaseTransaction;
class UniqueIDBDatabaseConnection : public RefCounted<UniqueIDBDatabaseConnection> {
public:
- static Ref<UniqueIDBDatabaseConnection> create(UniqueIDBDatabase&, IDBConnectionToClient&);
+ static Ref<UniqueIDBDatabaseConnection> create(UniqueIDBDatabase&, ServerOpenDBRequest&);
~UniqueIDBDatabaseConnection();
uint64_t identifier() const { return m_identifier; }
+ const IDBResourceIdentifier& openRequestIdentifier() { return m_openRequestIdentifier; }
UniqueIDBDatabase& database() { return m_database; }
IDBConnectionToClient& connectionToClient() { return m_connectionToClient; }
@@ -76,11 +78,12 @@
void abortTransactionWithoutCallback(UniqueIDBDatabaseTransaction&);
private:
- UniqueIDBDatabaseConnection(UniqueIDBDatabase&, IDBConnectionToClient&);
+ UniqueIDBDatabaseConnection(UniqueIDBDatabase&, ServerOpenDBRequest&);
uint64_t m_identifier { 0 };
UniqueIDBDatabase& m_database;
IDBConnectionToClient& m_connectionToClient;
+ IDBResourceIdentifier m_openRequestIdentifier;
bool m_closePending { false };