Title: [126366] trunk
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;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to