Title: [202935] trunk
Revision
202935
Author
beid...@apple.com
Date
2016-07-07 14:49:41 -0700 (Thu, 07 Jul 2016)

Log Message

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.

Source/WebCore:

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.

LayoutTests:

* 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.

Modified Paths

Added Paths

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);
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to