Changeset 135226 in webkit
- Timestamp:
- Nov 19, 2012, 6:10:19 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r135223 r135226 1 2012-11-19 David Grogan <dgrogan@chromium.org> 2 3 IndexedDB: Complex series of opens/deleteDatabase fails an ASSERT 4 https://bugs.webkit.org/show_bug.cgi?id=101810 5 6 Reviewed by Tony Chang. 7 8 Removed use of setVersion. Surprisingly straightforward conversion 9 given how gnarly this test is. 10 11 * storage/indexeddb/deletedatabase-delayed-by-versionchange-expected.txt: 12 * storage/indexeddb/resources/deletedatabase-delayed-by-versionchange.js: 13 (h1OpenSuccess.h1.onversionchange): 14 (h1OpenSuccess.request.onsuccess.h2OpenSuccess.h2.onversionchange): 15 (h1OpenSuccess.request.onsuccess.h2OpenSuccess.request.onsuccess): 16 (h1OpenSuccess.request.onsuccess.h2OpenSuccess.request.onblocked.h3Blocked.request.onsuccess): 17 (h1OpenSuccess.request.onsuccess.h2OpenSuccess.request.onblocked): 18 (h1OpenSuccess.request.onsuccess.h2OpenSuccess.request.onupgradeneeded.h3OnUpgradeneeded.transaction.oncomplete): 19 (h1OpenSuccess.request.onsuccess.h2OpenSuccess.request.onupgradeneeded): 20 (h1OpenSuccess.request.onsuccess): 21 (h1OpenSuccess): 22 1 23 2012-11-19 David Grogan <dgrogan@chromium.org> 2 24 -
trunk/LayoutTests/storage/indexeddb/deletedatabase-delayed-by-versionchange-expected.txt
r131466 r135226 1 CONSOLE MESSAGE: The setVersion() method is non-standard and will be removed. Use the "upgradeneeded" event instead.2 1 Test the order when there are pending setVersion, delete and open calls. 3 2 … … 8 7 9 8 dbname = "deletedatabase-delayed-by-versionchange.html" 10 ver = 1 9 indexedDB.deleteDatabase(dbname) 10 indexedDB.open(dbname) 11 12 h1OpenSuccess(): 11 13 setVersionBlockedEventFired = false 12 14 versionChangeComplete = false 13 15 deleteDatabaseBlockedEventFired = false 14 16 deleteDatabaseComplete = false 17 h1 = event.target.result 18 Open h2: 15 19 indexedDB.open(dbname) 16 20 17 openOnSuccess(): 18 h = event.target.result 19 indexedDB.open(dbname) 21 h2OpenSuccess(): 22 Try to open h3: 23 indexedDB.open(dbname, 2) 24 indexedDB.deleteDatabase(dbname) 20 25 21 h 2OpenOnSuccess():22 h.setVersion(String(ver++)) 23 indexedDB.deleteDatabase(dbname) 26 h1OnVersionChange(): 27 old = 1 28 new = 2 24 29 25 30 h2OnVersionChange(): 26 31 old = 1 27 new = "1"32 new = 2 28 33 29 setVersionOnBlocked():34 h3Blocked(): 30 35 setVersionBlockedEventFired = true 36 Try to open h4: 31 37 indexedDB.open(dbname) 32 38 h2.close() 33 39 34 setVersionOnSuccess(): 40 h1OnVersionChange(): 41 FIXME: These shouldn't be undefined. http://crbug.com/153122 42 old = undefined 43 new = undefined 44 45 deleteDatabaseOnBlocked(): 46 deleteDatabaseBlockedEventFired = true 47 h1.close() 48 49 deleteDatabaseOnBlocked(): 50 deleteDatabaseBlockedEventFired = true 51 h1.close() 52 53 deleteDatabaseOnSuccess(): 54 deleteDatabaseComplete = true 55 56 h3OnUpgradeneeded(): 35 57 36 58 transactionOnComplete(): 37 59 versionChangeComplete = true 38 60 39 onVersionChange(): 40 old = "1" 41 new = "" 61 h3OpenSuccess(): 42 62 43 deleteDatabaseOnBlocked(): 44 deleteDatabaseBlockedEventFired = true 45 h.close() 46 47 deleteDatabaseOnSuccess(): 48 deleteDatabaseComplete = true 49 50 h3OpenOnSuccess(): 63 h4OpenSuccess(): 51 64 PASS setVersionBlockedEventFired is true 52 65 PASS versionChangeComplete is true -
trunk/LayoutTests/storage/indexeddb/resources/deletedatabase-delayed-by-versionchange.js
r131466 r135226 6 6 description("Test the order when there are pending setVersion, delete and open calls."); 7 7 8 function test() { 9 removeVendorPrefixes(); 10 setDBNameFromPath(); 11 12 evalAndLog("ver = 1"); 8 indexedDBTest(null, h1OpenSuccess); 9 function h1OpenSuccess(evt) 10 { 11 preamble(evt); 13 12 evalAndLog("setVersionBlockedEventFired = false"); 14 13 evalAndLog("versionChangeComplete = false"); … … 16 15 evalAndLog("deleteDatabaseComplete = false"); 17 16 17 evalAndLog("h1 = event.target.result"); 18 19 h1.onversionchange = function h1OnVersionChange(evt) { 20 preamble(evt); 21 if (event.oldVersion === undefined) 22 debug("FIXME: These shouldn't be undefined. http://crbug.com/153122"); 23 debug("old = " + event.oldVersion); 24 debug("new = " + event.newVersion); 25 }; 26 27 debug("Open h2:"); 18 28 request = evalAndLog("indexedDB.open(dbname)"); 19 29 request.onblocked = unexpectedBlockedCallback; 20 30 request.onerror = unexpectedErrorCallback; 21 request.onsuccess = function openOnSuccess(evt) {31 request.onsuccess = function h2OpenSuccess(evt) { 22 32 preamble(evt); 23 evalAndLog("h = event.target.result");33 h2 = event.target.result; 24 34 25 h .onversionchange = function onVersionChange(evt) {35 h2.onversionchange = function h2OnVersionChange(evt) { 26 36 preamble(evt); 27 debug("old = " + JSON.stringify(event.target.version));28 debug("new = " + JSON.stringify(event.version));37 debug("old = " + event.oldVersion); 38 debug("new = " + event.newVersion); 29 39 }; 30 40 31 request = evalAndLog("indexedDB.open(dbname)");32 request .onblocked = unexpectedBlockedCallback;41 debug("Try to open h3:"); 42 request = evalAndLog("indexedDB.open(dbname, 2)"); 33 43 request.onerror = unexpectedErrorCallback; 34 request.onsuccess = function h 2OpenOnSuccess(evt) {44 request.onsuccess = function h3OpenSuccess(evt) { 35 45 preamble(evt); 36 h2 = event.target.result; 46 } 47 request.onblocked = function h3Blocked(evt) { 48 preamble(evt); 49 evalAndLog("setVersionBlockedEventFired = true"); 37 50 38 h2.onversionchange = function h2OnVersionChange(evt) { 51 debug("Try to open h4:"); 52 request = evalAndLog("indexedDB.open(dbname)"); 53 request.onblocked = unexpectedBlockedCallback; 54 request.onerror = unexpectedErrorCallback; 55 request.onsuccess = function h4OpenSuccess(evt) { 39 56 preamble(evt); 40 debug("old = " + JSON.stringify(event.target.version)); 41 debug("new = " + JSON.stringify(event.version)); 57 h4 = event.target.result; 58 h4.onversionchange = unexpectedVersionChangeCallback; 59 60 shouldBeTrue("setVersionBlockedEventFired"); 61 shouldBeTrue("versionChangeComplete"); 62 shouldBeTrue("deleteDatabaseBlockedEventFired"); 63 shouldBeTrue("deleteDatabaseComplete"); 64 65 finishJSTest(); 42 66 }; 43 67 44 request = evalAndLog("h.setVersion(String(ver++))"); 45 request.onerror = unexpectedErrorCallback; 46 request.onblocked = function setVersionOnBlocked(evt) { 68 evalAndLog("h2.close()"); 69 }; 70 request.onupgradeneeded = function h3OnUpgradeneeded(evt) { 71 preamble(evt); 72 73 transaction = event.target.transaction; 74 transaction.onabort = unexpectedAbortCallback; 75 transaction.oncomplete = function transactionOnComplete(evt) { 47 76 preamble(evt); 48 evalAndLog("setVersionBlockedEventFired = true"); 77 evalAndLog("versionChangeComplete = true"); 78 }; 79 }; 49 80 50 request = evalAndLog("indexedDB.open(dbname)"); 51 request.onblocked = unexpectedBlockedCallback; 52 request.onerror = unexpectedErrorCallback; 53 request.onsuccess = function h3OpenOnSuccess(evt) { 54 preamble(evt); 55 h3 = event.target.result; 56 h3.onversionchange = unexpectedVersionChangeCallback; 81 request = evalAndLog("indexedDB.deleteDatabase(dbname)"); 82 request.onerror = unexpectedErrorCallback; 83 request.onblocked = function deleteDatabaseOnBlocked(evt) { 84 preamble(evt); 85 evalAndLog("deleteDatabaseBlockedEventFired = true"); 57 86 58 shouldBeTrue("setVersionBlockedEventFired"); 59 shouldBeTrue("versionChangeComplete"); 60 shouldBeTrue("deleteDatabaseBlockedEventFired"); 61 shouldBeTrue("deleteDatabaseComplete"); 62 63 finishJSTest(); 64 }; 65 66 evalAndLog("h2.close()"); 67 }; 68 request.onsuccess = function setVersionOnSuccess(evt) { 69 preamble(evt); 70 71 transaction = event.target.result; 72 transaction.onabort = unexpectedAbortCallback; 73 transaction.oncomplete = function transactionOnComplete(evt) { 74 preamble(evt); 75 evalAndLog("versionChangeComplete = true"); 76 }; 77 }; 78 79 request = evalAndLog("indexedDB.deleteDatabase(dbname)"); 80 request.onerror = unexpectedErrorCallback; 81 request.onblocked = function deleteDatabaseOnBlocked(evt) { 82 preamble(evt); 83 evalAndLog("deleteDatabaseBlockedEventFired = true"); 84 85 evalAndLog("h.close()"); 86 }; 87 request.onsuccess = function deleteDatabaseOnSuccess(evt) { 88 preamble(evt); 89 evalAndLog("deleteDatabaseComplete = true"); 90 }; 87 evalAndLog("h1.close()"); 88 }; 89 request.onsuccess = function deleteDatabaseOnSuccess(evt) { 90 preamble(evt); 91 evalAndLog("deleteDatabaseComplete = true"); 91 92 }; 92 93 }; 93 94 } 94 95 test(); -
trunk/Source/WebCore/ChangeLog
r135224 r135226 1 2012-11-19 David Grogan <dgrogan@chromium.org> 2 3 IndexedDB: Complex series of opens/deleteDatabase fails an ASSERT 4 https://bugs.webkit.org/show_bug.cgi?id=101810 5 6 Reviewed by Tony Chang. 7 8 Tests - storage/indexeddb/deletedatabase-delayed-by-versionchange.html 9 10 * Modules/indexeddb/IDBDatabaseBackendImpl.cpp: 11 (WebCore::IDBDatabaseBackendImpl::processPendingCalls): 12 The condition tested by this assert is a valid state. 13 1 14 2012-11-19 Peter Wang <peter.wang@torchmobile.com.cn> 2 15 -
trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp
r134095 r135226 413 413 } 414 414 415 // Given the check above, it appears that calls cannot be requeued by416 // openConnection, but use a different queue for iteration to be safe.415 // Open calls can be requeued if an openWithVersion call started a version 416 // change transaction. 417 417 Deque<OwnPtr<PendingOpenCall> > pendingOpenCalls; 418 418 m_pendingOpenCalls.swap(pendingOpenCalls); … … 421 421 openConnection(pendingOpenCall->callbacks(), pendingOpenCall->databaseCallbacks()); 422 422 } 423 ASSERT(m_pendingOpenCalls.isEmpty());424 423 } 425 424
Note:
See TracChangeset
for help on using the changeset viewer.