Title: [135226] trunk
- Revision
- 135226
- Author
- dgro...@chromium.org
- Date
- 2012-11-19 18:10:19 -0800 (Mon, 19 Nov 2012)
Log Message
IndexedDB: Complex series of opens/deleteDatabase fails an ASSERT
https://bugs.webkit.org/show_bug.cgi?id=101810
Reviewed by Tony Chang.
Source/WebCore:
Tests - storage/indexeddb/deletedatabase-delayed-by-versionchange.html
* Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
(WebCore::IDBDatabaseBackendImpl::processPendingCalls):
The condition tested by this assert is a valid state.
LayoutTests:
Removed use of setVersion. Surprisingly straightforward conversion
given how gnarly this test is.
* storage/indexeddb/deletedatabase-delayed-by-versionchange-expected.txt:
* storage/indexeddb/resources/deletedatabase-delayed-by-versionchange.js:
(h1OpenSuccess.h1.onversionchange):
(h1OpenSuccess.request.onsuccess.h2OpenSuccess.h2.onversionchange):
(h1OpenSuccess.request.onsuccess.h2OpenSuccess.request.onsuccess):
(h1OpenSuccess.request.onsuccess.h2OpenSuccess.request.onblocked.h3Blocked.request.onsuccess):
(h1OpenSuccess.request.onsuccess.h2OpenSuccess.request.onblocked):
(h1OpenSuccess.request.onsuccess.h2OpenSuccess.request.onupgradeneeded.h3OnUpgradeneeded.transaction.oncomplete):
(h1OpenSuccess.request.onsuccess.h2OpenSuccess.request.onupgradeneeded):
(h1OpenSuccess.request.onsuccess):
(h1OpenSuccess):
Modified Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (135225 => 135226)
--- trunk/LayoutTests/ChangeLog 2012-11-20 02:06:35 UTC (rev 135225)
+++ trunk/LayoutTests/ChangeLog 2012-11-20 02:10:19 UTC (rev 135226)
@@ -1,5 +1,27 @@
2012-11-19 David Grogan <dgro...@chromium.org>
+ IndexedDB: Complex series of opens/deleteDatabase fails an ASSERT
+ https://bugs.webkit.org/show_bug.cgi?id=101810
+
+ Reviewed by Tony Chang.
+
+ Removed use of setVersion. Surprisingly straightforward conversion
+ given how gnarly this test is.
+
+ * storage/indexeddb/deletedatabase-delayed-by-versionchange-expected.txt:
+ * storage/indexeddb/resources/deletedatabase-delayed-by-versionchange.js:
+ (h1OpenSuccess.h1.onversionchange):
+ (h1OpenSuccess.request.onsuccess.h2OpenSuccess.h2.onversionchange):
+ (h1OpenSuccess.request.onsuccess.h2OpenSuccess.request.onsuccess):
+ (h1OpenSuccess.request.onsuccess.h2OpenSuccess.request.onblocked.h3Blocked.request.onsuccess):
+ (h1OpenSuccess.request.onsuccess.h2OpenSuccess.request.onblocked):
+ (h1OpenSuccess.request.onsuccess.h2OpenSuccess.request.onupgradeneeded.h3OnUpgradeneeded.transaction.oncomplete):
+ (h1OpenSuccess.request.onsuccess.h2OpenSuccess.request.onupgradeneeded):
+ (h1OpenSuccess.request.onsuccess):
+ (h1OpenSuccess):
+
+2012-11-19 David Grogan <dgro...@chromium.org>
+
IndexedDB: last setVersion excision batch
https://bugs.webkit.org/show_bug.cgi?id=102713
Modified: trunk/LayoutTests/storage/indexeddb/deletedatabase-delayed-by-versionchange-expected.txt (135225 => 135226)
--- trunk/LayoutTests/storage/indexeddb/deletedatabase-delayed-by-versionchange-expected.txt 2012-11-20 02:06:35 UTC (rev 135225)
+++ trunk/LayoutTests/storage/indexeddb/deletedatabase-delayed-by-versionchange-expected.txt 2012-11-20 02:10:19 UTC (rev 135226)
@@ -1,4 +1,3 @@
-CONSOLE MESSAGE: The setVersion() method is non-standard and will be removed. Use the "upgradeneeded" event instead.
Test the order when there are pending setVersion, delete and open calls.
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
@@ -7,47 +6,61 @@
indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
dbname = "deletedatabase-delayed-by-versionchange.html"
-ver = 1
+indexedDB.deleteDatabase(dbname)
+indexedDB.open(dbname)
+
+h1OpenSuccess():
setVersionBlockedEventFired = false
versionChangeComplete = false
deleteDatabaseBlockedEventFired = false
deleteDatabaseComplete = false
+h1 = event.target.result
+Open h2:
indexedDB.open(dbname)
-openOnSuccess():
-h = event.target.result
-indexedDB.open(dbname)
-
-h2OpenOnSuccess():
-h.setVersion(String(ver++))
+h2OpenSuccess():
+Try to open h3:
+indexedDB.open(dbname, 2)
indexedDB.deleteDatabase(dbname)
+h1OnVersionChange():
+old = 1
+new = 2
+
h2OnVersionChange():
old = 1
-new = "1"
+new = 2
-setVersionOnBlocked():
+h3Blocked():
setVersionBlockedEventFired = true
+Try to open h4:
indexedDB.open(dbname)
h2.close()
-setVersionOnSuccess():
+h1OnVersionChange():
+FIXME: These shouldn't be undefined. http://crbug.com/153122
+old = undefined
+new = undefined
-transactionOnComplete():
-versionChangeComplete = true
+deleteDatabaseOnBlocked():
+deleteDatabaseBlockedEventFired = true
+h1.close()
-onVersionChange():
-old = "1"
-new = ""
-
deleteDatabaseOnBlocked():
deleteDatabaseBlockedEventFired = true
-h.close()
+h1.close()
deleteDatabaseOnSuccess():
deleteDatabaseComplete = true
-h3OpenOnSuccess():
+h3OnUpgradeneeded():
+
+transactionOnComplete():
+versionChangeComplete = true
+
+h3OpenSuccess():
+
+h4OpenSuccess():
PASS setVersionBlockedEventFired is true
PASS versionChangeComplete is true
PASS deleteDatabaseBlockedEventFired is true
Modified: trunk/LayoutTests/storage/indexeddb/resources/deletedatabase-delayed-by-versionchange.js (135225 => 135226)
--- trunk/LayoutTests/storage/indexeddb/resources/deletedatabase-delayed-by-versionchange.js 2012-11-20 02:06:35 UTC (rev 135225)
+++ trunk/LayoutTests/storage/indexeddb/resources/deletedatabase-delayed-by-versionchange.js 2012-11-20 02:10:19 UTC (rev 135226)
@@ -5,91 +5,90 @@
description("Test the order when there are pending setVersion, delete and open calls.");
-function test() {
- removeVendorPrefixes();
- setDBNameFromPath();
-
- evalAndLog("ver = 1");
+indexedDBTest(null, h1OpenSuccess);
+function h1OpenSuccess(evt)
+{
+ preamble(evt);
evalAndLog("setVersionBlockedEventFired = false");
evalAndLog("versionChangeComplete = false");
evalAndLog("deleteDatabaseBlockedEventFired = false");
evalAndLog("deleteDatabaseComplete = false");
+ evalAndLog("h1 = event.target.result");
+
+ h1._onversionchange_ = function h1OnVersionChange(evt) {
+ preamble(evt);
+ if (event.oldVersion === undefined)
+ debug("FIXME: These shouldn't be undefined. http://crbug.com/153122");
+ debug("old = " + event.oldVersion);
+ debug("new = " + event.newVersion);
+ };
+
+ debug("Open h2:");
request = evalAndLog("indexedDB.open(dbname)");
request._onblocked_ = unexpectedBlockedCallback;
request._onerror_ = unexpectedErrorCallback;
- request._onsuccess_ = function openOnSuccess(evt) {
+ request._onsuccess_ = function h2OpenSuccess(evt) {
preamble(evt);
- evalAndLog("h = event.target.result");
+ h2 = event.target.result;
- h._onversionchange_ = function onVersionChange(evt) {
+ h2._onversionchange_ = function h2OnVersionChange(evt) {
preamble(evt);
- debug("old = " + JSON.stringify(event.target.version));
- debug("new = " + JSON.stringify(event.version));
+ debug("old = " + event.oldVersion);
+ debug("new = " + event.newVersion);
};
- request = evalAndLog("indexedDB.open(dbname)");
- request._onblocked_ = unexpectedBlockedCallback;
+ debug("Try to open h3:");
+ request = evalAndLog("indexedDB.open(dbname, 2)");
request._onerror_ = unexpectedErrorCallback;
- request._onsuccess_ = function h2OpenOnSuccess(evt) {
+ request._onsuccess_ = function h3OpenSuccess(evt) {
preamble(evt);
- h2 = event.target.result;
+ }
+ request._onblocked_ = function h3Blocked(evt) {
+ preamble(evt);
+ evalAndLog("setVersionBlockedEventFired = true");
- h2._onversionchange_ = function h2OnVersionChange(evt) {
- preamble(evt);
- debug("old = " + JSON.stringify(event.target.version));
- debug("new = " + JSON.stringify(event.version));
- };
-
- request = evalAndLog("h.setVersion(String(ver++))");
+ debug("Try to open h4:");
+ request = evalAndLog("indexedDB.open(dbname)");
+ request._onblocked_ = unexpectedBlockedCallback;
request._onerror_ = unexpectedErrorCallback;
- request._onblocked_ = function setVersionOnBlocked(evt) {
+ request._onsuccess_ = function h4OpenSuccess(evt) {
preamble(evt);
- evalAndLog("setVersionBlockedEventFired = true");
+ h4 = event.target.result;
+ h4._onversionchange_ = unexpectedVersionChangeCallback;
- request = evalAndLog("indexedDB.open(dbname)");
- request._onblocked_ = unexpectedBlockedCallback;
- request._onerror_ = unexpectedErrorCallback;
- request._onsuccess_ = function h3OpenOnSuccess(evt) {
- preamble(evt);
- h3 = event.target.result;
- h3._onversionchange_ = unexpectedVersionChangeCallback;
+ shouldBeTrue("setVersionBlockedEventFired");
+ shouldBeTrue("versionChangeComplete");
+ shouldBeTrue("deleteDatabaseBlockedEventFired");
+ shouldBeTrue("deleteDatabaseComplete");
- shouldBeTrue("setVersionBlockedEventFired");
- shouldBeTrue("versionChangeComplete");
- shouldBeTrue("deleteDatabaseBlockedEventFired");
- shouldBeTrue("deleteDatabaseComplete");
+ finishJSTest();
+ };
- finishJSTest();
- };
+ evalAndLog("h2.close()");
+ };
+ request._onupgradeneeded_ = function h3OnUpgradeneeded(evt) {
+ preamble(evt);
- evalAndLog("h2.close()");
- };
- request._onsuccess_ = function setVersionOnSuccess(evt) {
+ transaction = event.target.transaction;
+ transaction._onabort_ = unexpectedAbortCallback;
+ transaction._oncomplete_ = function transactionOnComplete(evt) {
preamble(evt);
-
- transaction = event.target.result;
- transaction._onabort_ = unexpectedAbortCallback;
- transaction._oncomplete_ = function transactionOnComplete(evt) {
- preamble(evt);
- evalAndLog("versionChangeComplete = true");
- };
+ evalAndLog("versionChangeComplete = true");
};
+ };
- request = evalAndLog("indexedDB.deleteDatabase(dbname)");
- request._onerror_ = unexpectedErrorCallback;
- request._onblocked_ = function deleteDatabaseOnBlocked(evt) {
- preamble(evt);
- evalAndLog("deleteDatabaseBlockedEventFired = true");
+ request = evalAndLog("indexedDB.deleteDatabase(dbname)");
+ request._onerror_ = unexpectedErrorCallback;
+ request._onblocked_ = function deleteDatabaseOnBlocked(evt) {
+ preamble(evt);
+ evalAndLog("deleteDatabaseBlockedEventFired = true");
- evalAndLog("h.close()");
- };
- request._onsuccess_ = function deleteDatabaseOnSuccess(evt) {
- preamble(evt);
- evalAndLog("deleteDatabaseComplete = true");
- };
+ evalAndLog("h1.close()");
};
+ request._onsuccess_ = function deleteDatabaseOnSuccess(evt) {
+ preamble(evt);
+ evalAndLog("deleteDatabaseComplete = true");
+ };
};
}
-
-test();
Modified: trunk/Source/WebCore/ChangeLog (135225 => 135226)
--- trunk/Source/WebCore/ChangeLog 2012-11-20 02:06:35 UTC (rev 135225)
+++ trunk/Source/WebCore/ChangeLog 2012-11-20 02:10:19 UTC (rev 135226)
@@ -1,3 +1,16 @@
+2012-11-19 David Grogan <dgro...@chromium.org>
+
+ IndexedDB: Complex series of opens/deleteDatabase fails an ASSERT
+ https://bugs.webkit.org/show_bug.cgi?id=101810
+
+ Reviewed by Tony Chang.
+
+ Tests - storage/indexeddb/deletedatabase-delayed-by-versionchange.html
+
+ * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
+ (WebCore::IDBDatabaseBackendImpl::processPendingCalls):
+ The condition tested by this assert is a valid state.
+
2012-11-19 Peter Wang <peter.w...@torchmobile.com.cn>
Web Inspector: [JSC] worker debugger shouldn't stop for "willExecuteProgram" instruction
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp (135225 => 135226)
--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp 2012-11-20 02:06:35 UTC (rev 135225)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp 2012-11-20 02:10:19 UTC (rev 135226)
@@ -412,15 +412,14 @@
openConnectionWithVersion(pendingOpenWithVersionCall->callbacks(), pendingOpenWithVersionCall->databaseCallbacks(), pendingOpenWithVersionCall->version());
}
- // Given the check above, it appears that calls cannot be requeued by
- // openConnection, but use a different queue for iteration to be safe.
+ // Open calls can be requeued if an openWithVersion call started a version
+ // change transaction.
Deque<OwnPtr<PendingOpenCall> > pendingOpenCalls;
m_pendingOpenCalls.swap(pendingOpenCalls);
while (!pendingOpenCalls.isEmpty()) {
OwnPtr<PendingOpenCall> pendingOpenCall = pendingOpenCalls.takeFirst();
openConnection(pendingOpenCall->callbacks(), pendingOpenCall->databaseCallbacks());
}
- ASSERT(m_pendingOpenCalls.isEmpty());
}
PassRefPtr<IDBTransactionBackendInterface> IDBDatabaseBackendImpl::transaction(const Vector<int64_t>& objectStoreIds, unsigned short mode)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes