Diff
Modified: trunk/LayoutTests/ChangeLog (194780 => 194781)
--- trunk/LayoutTests/ChangeLog 2016-01-08 21:01:26 UTC (rev 194780)
+++ trunk/LayoutTests/ChangeLog 2016-01-08 21:12:08 UTC (rev 194781)
@@ -1,3 +1,24 @@
+2016-01-08 Brady Eidson <beid...@apple.com>
+
+ Modern IDB: Blocked event can fire on a delete request even after the last open connection has closed.
+ https://bugs.webkit.org/show_bug.cgi?id=152896
+
+ Reviewed by Alex Christensen.
+
+ * platform/mac-wk1/TestExpectations:
+
+ * platform/wk2/imported/w3c/indexeddb/idbfactory_open12-expected.txt: Copied from LayoutTests/imported/w3c/indexeddb/idbfactory_open12-expected.txt.
+ * platform/wk2/imported/w3c/indexeddb/idbversionchangeevent-expected.txt: Copied from LayoutTests/imported/w3c/indexeddb/idbversionchangeevent-expected.txt.
+
+ * storage/indexeddb/database-wrapper-expected.txt:
+ * storage/indexeddb/delete-in-upgradeneeded-close-in-versionchange-expected.txt:
+ * storage/indexeddb/deletedatabase-not-blocked-expected.txt:
+ * storage/indexeddb/intversion-upgrades-expected.txt:
+ * storage/indexeddb/resources/delete-in-upgradeneeded-close-in-versionchange.js:
+ * storage/indexeddb/resources/deletedatabase-not-blocked.js:
+ * storage/indexeddb/resources/setversion-not-blocked.js:
+ * storage/indexeddb/setversion-not-blocked-expected.txt:
+
2016-01-08 Michael Catanzaro <mcatanz...@igalia.com>
[GTK] Several animation tests fail with accelerated compositing enabled
Modified: trunk/LayoutTests/imported/w3c/ChangeLog (194780 => 194781)
--- trunk/LayoutTests/imported/w3c/ChangeLog 2016-01-08 21:01:26 UTC (rev 194780)
+++ trunk/LayoutTests/imported/w3c/ChangeLog 2016-01-08 21:12:08 UTC (rev 194781)
@@ -1,5 +1,16 @@
2016-01-08 Brady Eidson <beid...@apple.com>
+ Modern IDB: Blocked event can fire on a delete request even after the last open connection has closed.
+ https://bugs.webkit.org/show_bug.cgi?id=152896
+
+ Reviewed by Alex Christensen.
+
+ * indexeddb/idbfactory_open12-expected.txt:
+ * indexeddb/idbversionchangeevent-expected.txt:
+ * indexeddb/transaction-lifetime-expected.txt:
+
+2016-01-08 Brady Eidson <beid...@apple.com>
+
Modern IDB: imported/w3c/indexeddb/idbobjectstore_createIndex6-event_order.htm fails.
https://bugs.webkit.org/show_bug.cgi?id=152891
Modified: trunk/LayoutTests/imported/w3c/indexeddb/idbfactory_open12-expected.txt (194780 => 194781)
--- trunk/LayoutTests/imported/w3c/indexeddb/idbfactory_open12-expected.txt 2016-01-08 21:01:26 UTC (rev 194780)
+++ trunk/LayoutTests/imported/w3c/indexeddb/idbfactory_open12-expected.txt 2016-01-08 21:12:08 UTC (rev 194781)
@@ -1,4 +1,4 @@
PASS IDBFactory.open() - upgradeneeded gets VersionChangeEvent
-FAIL IDBFactory.open() - upgradeneeded gets VersionChangeEvent - second upgrade assert_unreached: unexpected open.blocked event Reached unreachable code
+PASS IDBFactory.open() - upgradeneeded gets VersionChangeEvent - second upgrade
Modified: trunk/LayoutTests/imported/w3c/indexeddb/idbversionchangeevent-expected.txt (194780 => 194781)
--- trunk/LayoutTests/imported/w3c/indexeddb/idbversionchangeevent-expected.txt 2016-01-08 21:01:26 UTC (rev 194780)
+++ trunk/LayoutTests/imported/w3c/indexeddb/idbversionchangeevent-expected.txt 2016-01-08 21:12:08 UTC (rev 194781)
@@ -1,3 +1,3 @@
-FAIL IDBVersionChangeEvent fired in upgradeneeded, versionchange and deleteDatabase assert_equals: new version (versionchange) expected (object) null but got (number) 0
+PASS IDBVersionChangeEvent fired in upgradeneeded, versionchange and deleteDatabase
Modified: trunk/LayoutTests/imported/w3c/indexeddb/transaction-lifetime-expected.txt (194780 => 194781)
--- trunk/LayoutTests/imported/w3c/indexeddb/transaction-lifetime-expected.txt 2016-01-08 21:01:26 UTC (rev 194780)
+++ trunk/LayoutTests/imported/w3c/indexeddb/transaction-lifetime-expected.txt 2016-01-08 21:12:08 UTC (rev 194781)
@@ -1,3 +1,3 @@
-FAIL Test events opening a second database when one connection is open already assert_unreached: open2.blocked Reached unreachable code
+PASS Test events opening a second database when one connection is open already
Modified: trunk/LayoutTests/platform/mac-wk1/TestExpectations (194780 => 194781)
--- trunk/LayoutTests/platform/mac-wk1/TestExpectations 2016-01-08 21:01:26 UTC (rev 194780)
+++ trunk/LayoutTests/platform/mac-wk1/TestExpectations 2016-01-08 21:12:08 UTC (rev 194781)
@@ -74,7 +74,6 @@
imported/w3c/indexeddb/keyorder.htm [ Skip ]
# W3C IDB tests - Legacy IDB fails, Modern IDB fails differently
-imported/w3c/indexeddb/idbversionchangeevent.htm [ Failure ]
imported/w3c/indexeddb/keypath.htm [ Failure ]
# W3C IDB tests where the test is wrong (the spec, other browsers, and WebKit all agree)
Copied: trunk/LayoutTests/platform/wk2/imported/w3c/indexeddb/idbfactory_open12-expected.txt (from rev 194780, trunk/LayoutTests/imported/w3c/indexeddb/idbfactory_open12-expected.txt) (0 => 194781)
--- trunk/LayoutTests/platform/wk2/imported/w3c/indexeddb/idbfactory_open12-expected.txt (rev 0)
+++ trunk/LayoutTests/platform/wk2/imported/w3c/indexeddb/idbfactory_open12-expected.txt 2016-01-08 21:12:08 UTC (rev 194781)
@@ -0,0 +1,4 @@
+
+PASS IDBFactory.open() - upgradeneeded gets VersionChangeEvent
+FAIL IDBFactory.open() - upgradeneeded gets VersionChangeEvent - second upgrade assert_unreached: unexpected open.blocked event Reached unreachable code
+
Copied: trunk/LayoutTests/platform/wk2/imported/w3c/indexeddb/idbversionchangeevent-expected.txt (from rev 194780, trunk/LayoutTests/imported/w3c/indexeddb/idbversionchangeevent-expected.txt) (0 => 194781)
--- trunk/LayoutTests/platform/wk2/imported/w3c/indexeddb/idbversionchangeevent-expected.txt (rev 0)
+++ trunk/LayoutTests/platform/wk2/imported/w3c/indexeddb/idbversionchangeevent-expected.txt 2016-01-08 21:12:08 UTC (rev 194781)
@@ -0,0 +1,3 @@
+
+FAIL IDBVersionChangeEvent fired in upgradeneeded, versionchange and deleteDatabase assert_equals: new version (versionchange) expected (object) null but got (number) 0
+
Modified: trunk/LayoutTests/storage/indexeddb/database-wrapper-expected.txt (194780 => 194781)
--- trunk/LayoutTests/storage/indexeddb/database-wrapper-expected.txt 2016-01-08 21:01:26 UTC (rev 194780)
+++ trunk/LayoutTests/storage/indexeddb/database-wrapper-expected.txt 2016-01-08 21:12:08 UTC (rev 194781)
@@ -27,9 +27,6 @@
event.target.close()
sawVersionChangeEvent = true
-onBlocked():
-FIXME: Blocked event shouldn't fire. http://crbug.com/100123
-
openAgainSuccess():
PASS sawVersionChangeEvent is true
PASS successfullyParsed is true
Modified: trunk/LayoutTests/storage/indexeddb/delete-in-upgradeneeded-close-in-versionchange-expected.txt (194780 => 194781)
--- trunk/LayoutTests/storage/indexeddb/delete-in-upgradeneeded-close-in-versionchange-expected.txt 2016-01-08 21:01:26 UTC (rev 194780)
+++ trunk/LayoutTests/storage/indexeddb/delete-in-upgradeneeded-close-in-versionchange-expected.txt 2016-01-08 21:12:08 UTC (rev 194781)
@@ -27,14 +27,9 @@
Closing the connection before the IDBOpenDBRequest's success fires will cause the open to fail.
db.close()
-deleteBlockedCallback():
-PASS sawVersionChange is true
-sawDeleteBlocked = true
-
deleteSuccessCallback():
PASS sawVersionChange is true
-FIXME: Blocked events shouldn't fire if connections close in versionchange handler. http://crbug.com/100123
-FAIL sawDeleteBlocked should be false. Was true.
+PASS sawDeleteBlocked is false
PASS sawUpgradeNeeded is true
PASS successfullyParsed is true
Modified: trunk/LayoutTests/storage/indexeddb/deletedatabase-not-blocked-expected.txt (194780 => 194781)
--- trunk/LayoutTests/storage/indexeddb/deletedatabase-not-blocked-expected.txt 2016-01-08 21:01:26 UTC (rev 194780)
+++ trunk/LayoutTests/storage/indexeddb/deletedatabase-not-blocked-expected.txt 2016-01-08 21:12:08 UTC (rev 194781)
@@ -19,12 +19,8 @@
PASS event.newVersion is null
h.close()
-deleteDatabaseOnBlocked():
-blockedEventFired = true
-
deleteDatabaseOnSuccess():
-FIXME: blocked event should not fire since connection closed. http://webkit.org/b/71130
-FAIL blockedEventFired should be false. Was true.
+PASS blockedEventFired is false
PASS successfullyParsed is true
TEST COMPLETE
Modified: trunk/LayoutTests/storage/indexeddb/intversion-upgrades-expected.txt (194780 => 194781)
--- trunk/LayoutTests/storage/indexeddb/intversion-upgrades-expected.txt 2016-01-08 21:01:26 UTC (rev 194780)
+++ trunk/LayoutTests/storage/indexeddb/intversion-upgrades-expected.txt 2016-01-08 21:12:08 UTC (rev 194781)
@@ -23,9 +23,6 @@
connection1VersionChangeCallback():
connection1.close()
-connection2BlockedCallback():
-This should not be called: http://crbug.com/100123
-
connection2UpgradeNeeded():
connection2 = event.target.result
PASS String(connection2) is "[object IDBDatabase]"
Modified: trunk/LayoutTests/storage/indexeddb/resources/delete-in-upgradeneeded-close-in-versionchange.js (194780 => 194781)
--- trunk/LayoutTests/storage/indexeddb/resources/delete-in-upgradeneeded-close-in-versionchange.js 2016-01-08 21:01:26 UTC (rev 194780)
+++ trunk/LayoutTests/storage/indexeddb/resources/delete-in-upgradeneeded-close-in-versionchange.js 2016-01-08 21:12:08 UTC (rev 194781)
@@ -63,7 +63,6 @@
{
preamble(evt);
shouldBeTrue("sawVersionChange");
- debug("FIXME: Blocked events shouldn't fire if connections close in versionchange handler. http://crbug.com/100123");
shouldBeFalse("sawDeleteBlocked");
shouldBeTrue("sawUpgradeNeeded");
finishJSTest();
Modified: trunk/LayoutTests/storage/indexeddb/resources/deletedatabase-not-blocked.js (194780 => 194781)
--- trunk/LayoutTests/storage/indexeddb/resources/deletedatabase-not-blocked.js 2016-01-08 21:01:26 UTC (rev 194780)
+++ trunk/LayoutTests/storage/indexeddb/resources/deletedatabase-not-blocked.js 2016-01-08 21:12:08 UTC (rev 194781)
@@ -34,7 +34,6 @@
};
request._onsuccess_ = function deleteDatabaseOnSuccess(evt) {
preamble(evt);
- debug("FIXME: blocked event should not fire since connection closed. http://webkit.org/b/71130");
shouldBeFalse("blockedEventFired");
finishJSTest();
};
Modified: trunk/LayoutTests/storage/indexeddb/resources/setversion-not-blocked.js (194780 => 194781)
--- trunk/LayoutTests/storage/indexeddb/resources/setversion-not-blocked.js 2016-01-08 21:01:26 UTC (rev 194780)
+++ trunk/LayoutTests/storage/indexeddb/resources/setversion-not-blocked.js 2016-01-08 21:12:08 UTC (rev 194781)
@@ -42,7 +42,6 @@
request._onsuccess_ = function h2OpenSuccess(evt) {
preamble(evt);
shouldBeTrue("versionchangeEventFired");
- debug("FIXME: blocked should not have fired since connection closed; http://webkit.org/b/71130");
shouldBeFalse("blockedEventFired");
finishJSTest();
};
Modified: trunk/LayoutTests/storage/indexeddb/setversion-not-blocked-expected.txt (194780 => 194781)
--- trunk/LayoutTests/storage/indexeddb/setversion-not-blocked-expected.txt 2016-01-08 21:01:26 UTC (rev 194780)
+++ trunk/LayoutTests/storage/indexeddb/setversion-not-blocked-expected.txt 2016-01-08 21:12:08 UTC (rev 194781)
@@ -22,19 +22,13 @@
PASS event.newVersion is 2
h1.close()
-h2OpenBlocked():
-PASS event.oldVersion is 1
-PASS event.newVersion is 2
-blockedEventFired = true
-
h2UpgradeNeeded():
PASS event.oldVersion is 1
PASS event.newVersion is 2
h2OpenSuccess():
PASS versionchangeEventFired is true
-FIXME: blocked should not have fired since connection closed; http://webkit.org/b/71130
-FAIL blockedEventFired should be false. Was true.
+PASS blockedEventFired is false
PASS successfullyParsed is true
TEST COMPLETE
Modified: trunk/Source/WebCore/ChangeLog (194780 => 194781)
--- trunk/Source/WebCore/ChangeLog 2016-01-08 21:01:26 UTC (rev 194780)
+++ trunk/Source/WebCore/ChangeLog 2016-01-08 21:12:08 UTC (rev 194781)
@@ -1,3 +1,22 @@
+2016-01-08 Brady Eidson <beid...@apple.com>
+
+ Modern IDB: Blocked event can fire on a delete request even after the last open connection has closed.
+ https://bugs.webkit.org/show_bug.cgi?id=152896
+
+ Reviewed by Alex Christensen.
+
+ No new tests (Progression in many tests).
+
+ * Modules/indexeddb/client/IDBFactoryImpl.cpp:
+ (WebCore::IDBClient::IDBFactory::deleteDatabase):
+
+ * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
+ (WebCore::IDBServer::UniqueIDBDatabase::performCurrentDeleteOperation): Allow for handling 2+ delete operations in a row.
+ (WebCore::IDBServer::UniqueIDBDatabase::didDeleteBackingStore): Ditto.
+ (WebCore::IDBServer::UniqueIDBDatabase::connectionClosedFromClient): Call "notifyCurrentRequestConnectionClosedOrFiredVersionChangeEvent"
+ after the connection is actually removed from the set of open connections.
+ * Modules/indexeddb/server/UniqueIDBDatabase.h:
+
2016-01-08 Zalan Bujtas <za...@apple.com>
Hovering link on http://help.apple.com/appletv/#/ does not show text underline.
Modified: trunk/Source/WebCore/Modules/indexeddb/client/IDBFactoryImpl.cpp (194780 => 194781)
--- trunk/Source/WebCore/Modules/indexeddb/client/IDBFactoryImpl.cpp 2016-01-08 21:01:26 UTC (rev 194780)
+++ trunk/Source/WebCore/Modules/indexeddb/client/IDBFactoryImpl.cpp 2016-01-08 21:12:08 UTC (rev 194781)
@@ -124,7 +124,7 @@
RefPtr<WebCore::IDBOpenDBRequest> IDBFactory::deleteDatabase(ScriptExecutionContext* context, const String& name, ExceptionCode& ec)
{
- LOG(IndexedDB, "IDBFactory::deleteDatabase");
+ LOG(IndexedDB, "IDBFactory::deleteDatabase - %s", name.utf8().data());
if (name.isNull()) {
ec = TypeError;
Modified: trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp (194780 => 194781)
--- trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp 2016-01-08 21:01:26 UTC (rev 194780)
+++ trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp 2016-01-08 21:12:08 UTC (rev 194781)
@@ -164,9 +164,8 @@
void UniqueIDBDatabase::performCurrentDeleteOperation()
{
ASSERT(isMainThread());
- LOG(IndexedDB, "(main) UniqueIDBDatabase::performCurrentDeleteOperation");
+ LOG(IndexedDB, "(main) UniqueIDBDatabase::performCurrentDeleteOperation - %s", m_identifier.debugString().utf8().data());
- ASSERT(m_databaseInfo);
ASSERT(m_currentOpenDBRequest);
ASSERT(m_currentOpenDBRequest->isDeleteRequest());
@@ -189,8 +188,17 @@
ASSERT(m_pendingTransactions.isEmpty());
ASSERT(m_openDatabaseConnections.isEmpty());
- m_deleteBackingStoreInProgress = true;
- m_server.postDatabaseTask(createCrossThreadTask(*this, &UniqueIDBDatabase::deleteBackingStore));
+ // It's possible to have multiple delete requests queued up in a row.
+ // In that scenario only the first request will actually have to delete the database.
+ // Subsequent requests can immediately notify their completion.
+
+ if (m_databaseInfo) {
+ m_deleteBackingStoreInProgress = true;
+ m_server.postDatabaseTask(createCrossThreadTask(*this, &UniqueIDBDatabase::deleteBackingStore));
+ } else {
+ ASSERT(m_mostRecentDeletedDatabaseInfo);
+ didDeleteBackingStore();
+ }
}
void UniqueIDBDatabase::deleteBackingStore()
@@ -211,7 +219,6 @@
ASSERT(isMainThread());
LOG(IndexedDB, "(main) UniqueIDBDatabase::didDeleteBackingStore");
- ASSERT(m_databaseInfo);
ASSERT(m_currentOpenDBRequest);
ASSERT(m_currentOpenDBRequest->isDeleteRequest());
ASSERT(!hasAnyPendingCallbacks());
@@ -219,9 +226,13 @@
ASSERT(m_pendingTransactions.isEmpty());
ASSERT(m_openDatabaseConnections.isEmpty());
- m_currentOpenDBRequest->notifyDidDeleteDatabase(*m_databaseInfo);
+ if (m_databaseInfo)
+ m_mostRecentDeletedDatabaseInfo = WTFMove(m_databaseInfo);
+
+ ASSERT(m_mostRecentDeletedDatabaseInfo);
+ m_currentOpenDBRequest->notifyDidDeleteDatabase(*m_mostRecentDeletedDatabaseInfo);
m_currentOpenDBRequest = nullptr;
- m_databaseInfo = nullptr;
+
m_deletePending = false;
m_deleteBackingStoreInProgress = false;
@@ -1007,9 +1018,6 @@
ASSERT(m_openDatabaseConnections.contains(&connection));
- if (m_currentOpenDBRequest)
- notifyCurrentRequestConnectionClosedOrFiredVersionChangeEvent(connection.identifier());
-
Deque<RefPtr<UniqueIDBDatabaseTransaction>> pendingTransactions;
while (!m_pendingTransactions.isEmpty()) {
auto transaction = m_pendingTransactions.takeFirst();
@@ -1022,6 +1030,10 @@
RefPtr<UniqueIDBDatabaseConnection> refConnection(&connection);
m_openDatabaseConnections.remove(&connection);
+
+ if (m_currentOpenDBRequest)
+ notifyCurrentRequestConnectionClosedOrFiredVersionChangeEvent(connection.identifier());
+
if (connection.hasNonFinishedTransactions()) {
m_closePendingDatabaseConnections.add(WTFMove(refConnection));
return;
Modified: trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h (194780 => 194781)
--- trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h 2016-01-08 21:01:26 UTC (rev 194780)
+++ trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h 2016-01-08 21:12:08 UTC (rev 194781)
@@ -193,6 +193,7 @@
bool m_isOpeningBackingStore { false };
std::unique_ptr<IDBBackingStore> m_backingStore;
std::unique_ptr<IDBDatabaseInfo> m_databaseInfo;
+ std::unique_ptr<IDBDatabaseInfo> m_mostRecentDeletedDatabaseInfo;
HashMap<uint64_t, ErrorCallback> m_errorCallbacks;
HashMap<uint64_t, KeyDataCallback> m_keyDataCallbacks;