- Revision
- 126366
- Author
- [email protected]
- Date
- 2012-08-22 16:23:43 -0700 (Wed, 22 Aug 2012)
Log Message
IndexedDB: revert int version when version change transaction aborts
https://bugs.webkit.org/show_bug.cgi?id=94662
Reviewed by Tony Chang.
Source/WebCore:
Test: storage/indexeddb/intversion-revert-on-abort.html
* Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
(WebCore::IDBDatabaseBackendImpl::runIntVersionChangeTransaction):
(WebCore::IDBDatabaseBackendImpl::resetIntVersion):
One-liner modeled after resetVersion.
(WebCore):
* Modules/indexeddb/IDBDatabaseBackendImpl.h:
(IDBDatabaseBackendImpl):
LayoutTests:
This is tested in some other layout tests but it should have its own,
so add intversion-revert-on-abort.html.
* storage/indexeddb/intversion-abort-in-initial-upgradeneeded-expected.txt:
FAIL event.target.result.version should be 0 will be resolved at least
when we figure out if we can make the default version an integer
during the transition period.
* storage/indexeddb/intversion-revert-on-abort-expected.txt: Added.
* storage/indexeddb/intversion-revert-on-abort.html: Added.
* storage/indexeddb/resources/intversion-revert-on-abort.js: Added.
(test):
(deleteSuccess):
(firstUpgradeNeededCallback):
(openSuccess):
(secondUpgradeNeededCallback):
(errorAfterAbortCallback):
(finalSuccessCallback):
Modified Paths
Added Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (126365 => 126366)
--- trunk/LayoutTests/ChangeLog 2012-08-22 22:58:59 UTC (rev 126365)
+++ trunk/LayoutTests/ChangeLog 2012-08-22 23:23:43 UTC (rev 126366)
@@ -1,3 +1,29 @@
+2012-08-22 David Grogan <[email protected]>
+
+ IndexedDB: revert int version when version change transaction aborts
+ https://bugs.webkit.org/show_bug.cgi?id=94662
+
+ Reviewed by Tony Chang.
+
+ This is tested in some other layout tests but it should have its own,
+ so add intversion-revert-on-abort.html.
+
+ * storage/indexeddb/intversion-abort-in-initial-upgradeneeded-expected.txt:
+ FAIL event.target.result.version should be 0 will be resolved at least
+ when we figure out if we can make the default version an integer
+ during the transition period.
+
+ * storage/indexeddb/intversion-revert-on-abort-expected.txt: Added.
+ * storage/indexeddb/intversion-revert-on-abort.html: Added.
+ * storage/indexeddb/resources/intversion-revert-on-abort.js: Added.
+ (test):
+ (deleteSuccess):
+ (firstUpgradeNeededCallback):
+ (openSuccess):
+ (secondUpgradeNeededCallback):
+ (errorAfterAbortCallback):
+ (finalSuccessCallback):
+
2012-08-17 Jeffrey Pfau <[email protected]>
Allow blocking of Web SQL databases in third-party web workers
Modified: trunk/LayoutTests/storage/indexeddb/intversion-abort-in-initial-upgradeneeded-expected.txt (126365 => 126366)
--- trunk/LayoutTests/storage/indexeddb/intversion-abort-in-initial-upgradeneeded-expected.txt 2012-08-22 22:58:59 UTC (rev 126365)
+++ trunk/LayoutTests/storage/indexeddb/intversion-abort-in-initial-upgradeneeded-expected.txt 2012-08-22 23:23:43 UTC (rev 126366)
@@ -16,14 +16,14 @@
transaction.abort()
onAbort():
-FAIL event.target.db.version should be 0. Was 2.
+FAIL event.target.db.version should be 0 (of type number). Was (of type string).
PASS request.transaction is non-null.
onError():
PASS db is event.target.result
PASS request is event.target
PASS event.target.error.name is "AbortError"
-FAIL event.target.result.version should be 0. Was 2.
+FAIL event.target.result.version should be 0 (of type number). Was (of type string).
PASS request.transaction is null
PASS successfullyParsed is true
Added: trunk/LayoutTests/storage/indexeddb/intversion-revert-on-abort-expected.txt (0 => 126366)
--- trunk/LayoutTests/storage/indexeddb/intversion-revert-on-abort-expected.txt (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/intversion-revert-on-abort-expected.txt 2012-08-22 23:23:43 UTC (rev 126366)
@@ -0,0 +1,42 @@
+Test that integer versions are reverted when their version transactions abort.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;
+
+dbname = "intversion-revert-on-abort.html"
+indexedDB.deleteDatabase(dbname)
+request = indexedDB.open(dbname, 2)
+
+firstUpgradeNeededCallback():
+db = event.target.result
+db.createObjectStore('some os')
+
+openSuccess():
+db = event.target.result
+PASS db.version is 2
+db.close()
+request = indexedDB.open(dbname, 3)
+request._onupgradeneeded_ = secondUpgradeNeededCallback
+request._onerror_ = errorAfterAbortCallback
+
+secondUpgradeNeededCallback():
+db = event.target.result
+db.createObjectStore('some os 2')
+event.target.transaction.abort()
+
+errorAfterAbortCallback():
+PASS db.version is 2
+request = indexedDB.open(dbname)
+request._onsuccess_ = finalSuccessCallback
+
+finalSuccessCallback():
+db = event.target.result
+PASS db.version is 2
+PASS db.objectStoreNames.length is 1
+PASS db.objectStoreNames[0] is "some os"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/storage/indexeddb/intversion-revert-on-abort.html (0 => 126366)
--- trunk/LayoutTests/storage/indexeddb/intversion-revert-on-abort.html (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/intversion-revert-on-abort.html 2012-08-22 23:23:43 UTC (rev 126366)
@@ -0,0 +1,10 @@
+<html>
+<head>
+<script src=""
+<script src=""
+</head>
+<body>
+<script src=""
+<script src=""
+</body>
+</html>
Added: trunk/LayoutTests/storage/indexeddb/resources/intversion-revert-on-abort.js (0 => 126366)
--- trunk/LayoutTests/storage/indexeddb/resources/intversion-revert-on-abort.js (rev 0)
+++ trunk/LayoutTests/storage/indexeddb/resources/intversion-revert-on-abort.js 2012-08-22 23:23:43 UTC (rev 126366)
@@ -0,0 +1,75 @@
+if (this.importScripts) {
+ importScripts('../../../fast/js/resources/js-test-pre.js');
+ importScripts('shared.js');
+}
+
+description("Test that integer versions are reverted when their version transactions abort.");
+
+function test()
+{
+ removeVendorPrefixes();
+ setDBNameFromPath();
+
+ request = evalAndLog("indexedDB.deleteDatabase(dbname)");
+ request._onsuccess_ = deleteSuccess;
+ request._onerror_ = unexpectedErrorCallback;
+}
+
+function deleteSuccess(evt) {
+ evalAndLog("request = indexedDB.open(dbname, 2)");
+ request._onsuccess_ = openSuccess;
+ request._onerror_ = unexpectedErrorCallback;
+ request._onblocked_ = unexpectedBlockedCallback;
+ request._onupgradeneeded_ = firstUpgradeNeededCallback;
+}
+
+function firstUpgradeNeededCallback(evt)
+{
+ preamble(evt);
+ evalAndLog("db = event.target.result");
+ evalAndLog("db.createObjectStore('some os')");
+}
+
+function openSuccess(evt)
+{
+ preamble(evt);
+ evalAndLog("db = event.target.result");
+ shouldBe("db.version", "2");
+ evalAndLog("db.close()");
+ evalAndLog("request = indexedDB.open(dbname, 3)");
+ evalAndLog("request._onupgradeneeded_ = secondUpgradeNeededCallback");
+ evalAndLog("request._onerror_ = errorAfterAbortCallback");
+ request._onsuccess_ = unexpectedSuccessCallback;
+ request._onblocked_ = unexpectedBlockedCallback;
+}
+
+function secondUpgradeNeededCallback(evt)
+{
+ preamble(evt);
+ evalAndLog("db = event.target.result");
+ evalAndLog("db.createObjectStore('some os 2')");
+ evalAndLog("event.target.transaction.abort()");
+}
+
+function errorAfterAbortCallback(evt)
+{
+ preamble(evt);
+ shouldBe("db.version", "2");
+ evalAndLog("request = indexedDB.open(dbname)");
+ evalAndLog("request._onsuccess_ = finalSuccessCallback");
+ request._onerror_ = unexpectedErrorCallback;
+ request._onblocked_ = unexpectedBlockedCallback;
+ request._onupgradeneeded_ = unexpectedUpgradeNeededCallback;
+}
+
+function finalSuccessCallback(evt)
+{
+ preamble(evt);
+ evalAndLog("db = event.target.result");
+ shouldBe("db.version", "2");
+ shouldBe("db.objectStoreNames.length", "1");
+ shouldBeEqualToString("db.objectStoreNames[0]", "some os");
+ finishJSTest();
+}
+
+test();
Modified: trunk/Source/WebCore/ChangeLog (126365 => 126366)
--- trunk/Source/WebCore/ChangeLog 2012-08-22 22:58:59 UTC (rev 126365)
+++ trunk/Source/WebCore/ChangeLog 2012-08-22 23:23:43 UTC (rev 126366)
@@ -1,3 +1,21 @@
+2012-08-22 David Grogan <[email protected]>
+
+ IndexedDB: revert int version when version change transaction aborts
+ https://bugs.webkit.org/show_bug.cgi?id=94662
+
+ Reviewed by Tony Chang.
+
+ Test: storage/indexeddb/intversion-revert-on-abort.html
+
+ * Modules/indexeddb/IDBDatabaseBackendImpl.cpp:
+ (WebCore::IDBDatabaseBackendImpl::runIntVersionChangeTransaction):
+ (WebCore::IDBDatabaseBackendImpl::resetIntVersion):
+ One-liner modeled after resetVersion.
+
+ (WebCore):
+ * Modules/indexeddb/IDBDatabaseBackendImpl.h:
+ (IDBDatabaseBackendImpl):
+
2012-08-17 Jeffrey Pfau <[email protected]>
Allow blocking of Web SQL databases in third-party web workers
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp (126365 => 126366)
--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp 2012-08-22 22:58:59 UTC (rev 126365)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp 2012-08-22 23:23:43 UTC (rev 126366)
@@ -490,8 +490,7 @@
RefPtr<IDBDatabaseBackendImpl> database = this;
OwnPtr<ScriptExecutionContext::Task> intVersionTask = createCallbackTask(&IDBDatabaseBackendImpl::setIntVersionInternal, database, requestedVersion, callbacks, transaction);
- // FIXME: Make this reset the integer version as well.
- OwnPtr<ScriptExecutionContext::Task> resetVersionOnAbortTask = createCallbackTask(&IDBDatabaseBackendImpl::resetVersion, database, m_version);
+ OwnPtr<ScriptExecutionContext::Task> resetVersionOnAbortTask = createCallbackTask(&IDBDatabaseBackendImpl::resetIntVersion, database, m_intVersion);
if (!transaction->scheduleTask(intVersionTask.release(), resetVersionOnAbortTask.release())) {
// FIXME: Remove one of the following lines.
ASSERT_NOT_REACHED();
@@ -624,7 +623,12 @@
database->m_version = version;
}
+void IDBDatabaseBackendImpl::resetIntVersion(ScriptExecutionContext*, PassRefPtr<IDBDatabaseBackendImpl> database, int64_t oldVersion)
+{
+ database->m_intVersion = oldVersion;
+}
+
} // namespace WebCore
#endif // ENABLE(INDEXED_DATABASE)
Modified: trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.h (126365 => 126366)
--- trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.h 2012-08-22 22:58:59 UTC (rev 126365)
+++ trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.h 2012-08-22 23:23:43 UTC (rev 126366)
@@ -93,6 +93,7 @@
static void removeObjectStoreFromMap(ScriptExecutionContext*, PassRefPtr<IDBDatabaseBackendImpl>, PassRefPtr<IDBObjectStoreBackendImpl>);
static void addObjectStoreToMap(ScriptExecutionContext*, PassRefPtr<IDBDatabaseBackendImpl>, PassRefPtr<IDBObjectStoreBackendImpl>);
static void resetVersion(ScriptExecutionContext*, PassRefPtr<IDBDatabaseBackendImpl>, const String& version);
+ static void resetIntVersion(ScriptExecutionContext*, PassRefPtr<IDBDatabaseBackendImpl>, int64_t intVersion);
RefPtr<IDBBackingStore> m_backingStore;
int64_t m_id;