Diff
Modified: trunk/LayoutTests/ChangeLog (202934 => 202935)
--- trunk/LayoutTests/ChangeLog 2016-07-07 21:48:12 UTC (rev 202934)
+++ trunk/LayoutTests/ChangeLog 2016-07-07 21:49:41 UTC (rev 202935)
@@ -1,3 +1,16 @@
+2016-07-07 Brady Eidson <beid...@apple.com>
+
+ Modern IDB: When IDBDatabase objects are garbage collected, they don't close their server connection.
+ <rdar://problem/25910345> and https://bugs.webkit.org/show_bug.cgi?id=159523
+
+ Reviewed by Alex Christensen.
+
+ * storage/indexeddb/modern/gc-closes-database-expected.txt: Added.
+ * storage/indexeddb/modern/gc-closes-database-private-expected.txt: Added.
+ * storage/indexeddb/modern/gc-closes-database-private.html: Added.
+ * storage/indexeddb/modern/gc-closes-database.html: Added.
+ * storage/indexeddb/modern/resources/gc-closes-database.js: Added.
+
2016-07-07 Frederic Wang <fw...@igalia.com>
Refactor layout functions to avoid using flexbox in MathML
Added: trunk/LayoutTests/storage/indexeddb/modern/gc-closes-database-expected.txt (0 => 202935)
--- trunk/LayoutTests/storage/indexeddb/modern/gc-closes-database-expected.txt (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/gc-closes-database-expected.txt 2016-07-07 21:49:41 UTC (rev 202935)
@@ -0,0 +1,14 @@
+This tests that when IDBDatabase objects are destroyed in garbage collection that their database handles are closed.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Database deleted
+Creating the default database
+Database upgraded to version 1
+Database created
+Huge upgrade open success
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/storage/indexeddb/modern/gc-closes-database-private-expected.txt (0 => 202935)
--- trunk/LayoutTests/storage/indexeddb/modern/gc-closes-database-private-expected.txt (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/gc-closes-database-private-expected.txt 2016-07-07 21:49:41 UTC (rev 202935)
@@ -0,0 +1,14 @@
+This tests that when IDBDatabase objects are destroyed in garbage collection that their database handles are closed.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Database deleted
+Creating the default database
+Database upgraded to version 1
+Database created
+Huge upgrade open success
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/storage/indexeddb/modern/gc-closes-database-private.html (0 => 202935)
--- trunk/LayoutTests/storage/indexeddb/modern/gc-closes-database-private.html (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/gc-closes-database-private.html 2016-07-07 21:49:41 UTC (rev 202935)
@@ -0,0 +1,9 @@
+<html>
+<head>
+<script src=""
+<script src=""
+</head>
+<body>
+<script src=""
+</body>
+</html>
Added: trunk/LayoutTests/storage/indexeddb/modern/gc-closes-database.html (0 => 202935)
--- trunk/LayoutTests/storage/indexeddb/modern/gc-closes-database.html (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/gc-closes-database.html 2016-07-07 21:49:41 UTC (rev 202935)
@@ -0,0 +1,9 @@
+<html>
+<head>
+<script src=""
+<script src=""
+</head>
+<body>
+<script src=""
+</body>
+</html>
Added: trunk/LayoutTests/storage/indexeddb/modern/resources/gc-closes-database.js (0 => 202935)
--- trunk/LayoutTests/storage/indexeddb/modern/resources/gc-closes-database.js (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/modern/resources/gc-closes-database.js 2016-07-07 21:49:41 UTC (rev 202935)
@@ -0,0 +1,56 @@
+description("This tests that when IDBDatabase objects are destroyed in garbage collection that their database handles are closed.");
+
+function done()
+{
+ finishJSTest();
+}
+
+function log(msg)
+{
+ debug(msg);
+}
+
+var databaseName;
+
+
+deleteRequest = indexedDB.deleteDatabase("gc-closes-database");
+deleteRequest._onsuccess_ = function() {
+ log("Database deleted");
+ continueTest();
+}
+
+deleteRequest._onerror_ = function() {
+ log("Error deleting database");
+ done();
+}
+
+function continueTest()
+{
+ log("Creating the default database");
+ var openRequest = indexedDB.open("gc-closes-database");
+
+ openRequest._onupgradeneeded_ = function(e) {
+ log("Database upgraded to version 1");
+ }
+
+ openRequest._onsuccess_ = function(e) {
+ log("Database created");
+ setTimeout(window.gc, 0);
+ }
+
+ openRequest._onerror_ = function() {
+ log("Error opening database");
+ done();
+ }
+
+ hugeUpgradeOpen = indexedDB.open("gc-closes-database", 928375298375);
+ hugeUpgradeOpen._onsuccess_ = function(e) {
+ log("Huge upgrade open success");
+ done();
+ }
+ hugeUpgradeOpen._onerror_ = function() {
+ log("Unexpected error");
+ done();
+ }
+
+}
Modified: trunk/Source/WebCore/ChangeLog (202934 => 202935)
--- trunk/Source/WebCore/ChangeLog 2016-07-07 21:48:12 UTC (rev 202934)
+++ trunk/Source/WebCore/ChangeLog 2016-07-07 21:49:41 UTC (rev 202935)
@@ -1,3 +1,22 @@
+2016-07-07 Brady Eidson <beid...@apple.com>
+
+ Modern IDB: When IDBDatabase objects are garbage collected, they don't close their server connection.
+ <rdar://problem/25910345> and https://bugs.webkit.org/show_bug.cgi?id=159523
+
+ Reviewed by Alex Christensen.
+
+ Tests: storage/indexeddb/modern/gc-closes-database-private.html
+ storage/indexeddb/modern/gc-closes-database.html
+
+ * Modules/indexeddb/IDBDatabase.cpp:
+ (WebCore::IDBDatabase::IDBDatabase): New logging.
+ (WebCore::IDBDatabase::~IDBDatabase): Close server connection.
+ (WebCore::IDBDatabase::fireVersionChangeEvent): New logging.
+ (WebCore::IDBDatabase::dispatchEvent): New logging.
+
+ * Modules/indexeddb/client/IDBConnectionToServer.cpp:
+ (WebCore::IDBClient::IDBConnectionToServer::openDatabase): New logging.
+
2016-07-07 Frederic Wang <fw...@igalia.com>
Refactor layout functions to avoid using flexbox in MathML
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.cpp (202934 => 202935)
--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.cpp 2016-07-07 21:48:12 UTC (rev 202934)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabase.cpp 2016-07-07 21:49:41 UTC (rev 202935)
@@ -55,7 +55,7 @@
, m_info(resultData.databaseInfo())
, m_databaseConnectionIdentifier(resultData.databaseConnectionIdentifier())
{
- LOG(IndexedDB, "IDBDatabase::IDBDatabase - Creating database %s with version %" PRIu64 " connection %" PRIu64, m_info.name().utf8().data(), m_info.version(), m_databaseConnectionIdentifier);
+ LOG(IndexedDB, "IDBDatabase::IDBDatabase - Creating database %s with version %" PRIu64 " connection %" PRIu64 " (%p)", m_info.name().utf8().data(), m_info.version(), m_databaseConnectionIdentifier, this);
suspendIfNeeded();
m_connectionProxy->registerDatabaseConnection(*this);
}
@@ -63,6 +63,10 @@
IDBDatabase::~IDBDatabase()
{
ASSERT(currentThread() == originThreadID());
+
+ if (!m_closedInServer)
+ m_connectionProxy->databaseConnectionClosed(*this);
+
m_connectionProxy->unregisterDatabaseConnection(*this);
}
@@ -460,7 +464,7 @@
void IDBDatabase::fireVersionChangeEvent(const IDBResourceIdentifier& requestIdentifier, uint64_t requestedVersion)
{
uint64_t currentVersion = m_info.version();
- LOG(IndexedDB, "IDBDatabase::fireVersionChangeEvent - current version %" PRIu64 ", requested version %" PRIu64 ", connection %" PRIu64, currentVersion, requestedVersion, m_databaseConnectionIdentifier);
+ LOG(IndexedDB, "IDBDatabase::fireVersionChangeEvent - current version %" PRIu64 ", requested version %" PRIu64 ", connection %" PRIu64 " (%p)", currentVersion, requestedVersion, m_databaseConnectionIdentifier, this);
ASSERT(currentThread() == originThreadID());
@@ -476,7 +480,7 @@
bool IDBDatabase::dispatchEvent(Event& event)
{
- LOG(IndexedDB, "IDBDatabase::dispatchEvent (%" PRIu64 ")", m_databaseConnectionIdentifier);
+ LOG(IndexedDB, "IDBDatabase::dispatchEvent (%" PRIu64 ") (%p)", m_databaseConnectionIdentifier, this);
ASSERT(currentThread() == originThreadID());
bool result = EventTargetWithInlineData::dispatchEvent(event);
Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp (202934 => 202935)
--- trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp 2016-07-07 21:48:12 UTC (rev 202934)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBConnectionToServer.cpp 2016-07-07 21:49:41 UTC (rev 202935)
@@ -77,7 +77,7 @@
void IDBConnectionToServer::openDatabase(const IDBRequestData& request)
{
- LOG(IndexedDB, "IDBConnectionToServer::openDatabase - %s (%" PRIu64 ")", request.databaseIdentifier().debugString().utf8().data(), request.requestedVersion());
+ LOG(IndexedDB, "IDBConnectionToServer::openDatabase - %s (%s) (%" PRIu64 ")", request.databaseIdentifier().debugString().utf8().data(), request.requestIdentifier().loggingString().utf8().data(), request.requestedVersion());
m_delegate->openDatabase(request);
}