Changeset 129037 in webkit
- Timestamp:
- Sep 19, 2012 1:28:35 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 2 deleted
- 27 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r129036 r129037 1 2012-09-19 David Grogan <dgrogan@chromium.org> 2 3 IndexedDB: fire upgradeneeded even without an explicit integer version 4 https://bugs.webkit.org/show_bug.cgi?id=96444 5 6 Reviewed by Tony Chang. 7 8 Mostly updating expectations about getting an upgradeneeded on a new 9 database and the default version being 1 instead of "". 10 11 * http/tests/inspector/indexeddb/database-structure-expected.txt: 12 * storage/indexeddb/cursor-overloads-expected.txt: 13 * storage/indexeddb/cursor-overloads.html: 14 * storage/indexeddb/dont-commit-on-blocked-expected.txt: 15 * storage/indexeddb/dont-commit-on-blocked.html: 16 * storage/indexeddb/factory-deletedatabase-interactions-expected.txt: 17 * storage/indexeddb/intversion-and-setversion-expected.txt: 18 Remove test that setVersion fires an error if an int version is set. 19 Change it to testing that an int version can replace a string version 20 that replaced an int version. 21 22 * storage/indexeddb/intversion-bad-parameters-expected.txt: 23 * storage/indexeddb/intversion-invalid-setversion-has-no-side-effects-expected.txt: Removed. 24 setVersion is no longer invalid so this test can be deleted. 25 26 * storage/indexeddb/intversion-omit-parameter-expected.txt: 27 We now fully pass this test. 28 29 * storage/indexeddb/intversion-two-opens-no-versions-expected.txt: Added. 30 * storage/indexeddb/intversion-two-opens-no-versions.html: Renamed from LayoutTests/storage/indexeddb/intversion-invalid-setversion-has-no-side-effects.html. 31 * storage/indexeddb/list-ordering-expected.txt: 32 * storage/indexeddb/noblobs-expected.txt: 33 * storage/indexeddb/noblobs.html: 34 * storage/indexeddb/open-during-transaction-expected.txt: 35 This test had a bug in it AND its behavior is changed. It was trying 36 to open one database twice and another once but was actually opening 37 three different databases. The behavior change is that now the 38 transaction finishes while the last call to open is firing 39 upgradeneeded. 40 41 * storage/indexeddb/pending-activity-expected.txt: 42 * storage/indexeddb/pending-activity-workers-expected.txt: 43 * storage/indexeddb/resources/intversion-and-setversion.js: 44 (deleteSuccess): 45 (initialUpgradeNeeded): 46 (openSuccess): 47 (firstUpgradeNeeded): 48 (transactionCompleted): 49 (firstOpenWithVersion): 50 (secondSetVersionCallback): 51 (setIntVersion2): 52 (versionChangeGoingFromStringToInt): 53 (version2ConnectionBlocked): 54 (version2ConnectionSuccess): 55 (errorWhenTryingLowVersion): 56 * storage/indexeddb/resources/intversion-invalid-setversion-has-no-side-effects.js: Removed. 57 * storage/indexeddb/resources/intversion-two-opens-no-versions.js: Added. 58 (test): 59 (deleteSuccess): 60 (connection1UpgradeNeeded): 61 (connection1OpenSuccess): 62 (connection2UpgradeNeeded): 63 (connection2OpenSuccess): 64 * storage/indexeddb/resources/list-ordering.js: 65 * storage/indexeddb/resources/open-during-transaction.js: 66 (startTransaction.trans.oncomplete): 67 (startTransaction): 68 (tryOpens.openreq3.onsuccess): 69 (tryOpens): 70 * storage/indexeddb/resources/pending-activity.js: 71 * storage/indexeddb/structured-clone-expected.txt: 72 * storage/indexeddb/structured-clone.html: 73 1 74 2012-09-19 Dominic Mazzoni <dmazzoni@google.com> 2 75 -
trunk/LayoutTests/http/tests/inspector/indexeddb/database-structure-expected.txt
r128642 r129037 19 19 Dumping database: 20 20 testDatabase1 21 version: 121 version: 2 22 22 objectStores: 23 23 testObjectStore1 … … 28 28 Dumping database: 29 29 testDatabase1 30 version: 230 version: 3 31 31 objectStores: 32 32 testObjectStore1 … … 41 41 Dumping database: 42 42 testDatabase1 43 version: 343 version: 4 44 44 objectStores: 45 45 testObjectStore1 … … 58 58 Dumping database: 59 59 testDatabase1 60 version: 460 version: 5 61 61 objectStores: 62 62 testObjectStore1 … … 79 79 Dumping database: 80 80 testDatabase1 81 version: 581 version: 6 82 82 objectStores: 83 83 testObjectStore1 … … 96 96 Dumping database: 97 97 testDatabase1 98 version: 698 version: 7 99 99 objectStores: 100 100 testObjectStore1 … … 109 109 Dumping database: 110 110 testDatabase1 111 version: 7111 version: 8 112 112 objectStores: 113 113 testObjectStore1 … … 118 118 Dumping database: 119 119 testDatabase1 120 version: 8120 version: 9 121 121 objectStores: 122 122 -
trunk/LayoutTests/storage/indexeddb/cursor-overloads-expected.txt
r128642 r129037 34 34 indexedDB.open(dbname) 35 35 db = request.result 36 PASS db.version is ""36 PASS db.version is 1 37 37 db.setVersion('1') 38 38 store = db.createObjectStore('store') -
trunk/LayoutTests/storage/indexeddb/cursor-overloads.html
r123048 r129037 21 21 request.onsuccess = function(e) { 22 22 evalAndLog("db = request.result"); 23 shouldBe EqualToString("db.version", "");23 shouldBe("db.version", '1'); 24 24 request = evalAndLog("db.setVersion('1')"); 25 25 request.onerror = unexpectedErrorCallback; -
trunk/LayoutTests/storage/indexeddb/dont-commit-on-blocked-expected.txt
r113485 r129037 11 11 db = request.result 12 12 db.onversionchange = onVersionChange 13 PASS db.version is ""13 PASS db.version is 1 14 14 db.setVersion('1') 15 15 store = db.createObjectStore('store1') -
trunk/LayoutTests/storage/indexeddb/dont-commit-on-blocked.html
r113485 r129037 27 27 db.onerror = unexpectedErrorCallback; 28 28 evalAndLog("db.onversionchange = onVersionChange"); 29 shouldBe EqualToString("db.version", "");29 shouldBe("db.version", "1"); 30 30 request = evalAndLog("db.setVersion('1')"); 31 31 request.onerror = unexpectedErrorCallback; -
trunk/LayoutTests/storage/indexeddb/factory-deletedatabase-interactions-expected.txt
r128642 r129037 13 13 'deleteDatabase()' 14 14 'h.onversionchange' 15 in versionchange, old = ""new = ""15 in versionchange, old = 1 new = "" 16 16 h closing, but not immediately 17 17 'deleteDatabase().onblocked' … … 26 26 'deleteDatabase()' 27 27 'h.onversionchange' 28 in versionchange, old = ""new = ""28 in versionchange, old = 1 new = "" 29 29 h closing immediately 30 30 'h.close' … … 59 59 'deleteDatabase()' 60 60 'h2.onversionchange' 61 in versionchange, old = ""new = "1"61 in versionchange, old = 1 new = "1" 62 62 'h.setVersion.onblocked' 63 63 'h3.open' -
trunk/LayoutTests/storage/indexeddb/intversion-and-setversion-expected.txt
r128642 r129037 13 13 indexedDB.open(dbname) 14 14 15 initialUpgradeNeeded(): 16 15 17 openSuccess(): 16 18 db = event.target.result 17 PASS db.version is ""19 PASS db.version is 1 18 20 request = db.setVersion("some version") 19 21 … … 48 50 PASS didTransactionComplete is true 49 51 db = event.target.result 52 db.onversionchange = versionChangeGoingFromStringToInt 50 53 PASS String(db) is "[object IDBDatabase]" 51 54 PASS request.transaction is null … … 54 57 request = db.setVersion("string version 2") 55 58 PASS String(request) is "[object IDBVersionChangeRequest]" 56 request.on error = setVersionNotAllowed59 request.onsuccess = secondSetVersionCallback 57 60 58 setVersionNotAllowed(): 59 PASS event.type is "error" 60 request.webkitErrorMessage = You can't use the setVersion function if you've already set the version through an open call. The current integer version is 2 61 secondSetVersionCallback(): 62 transaction = event.target.result 63 transaction.oncomplete = setIntVersion2 64 65 setIntVersion2(): 66 request = indexedDB.open(dbname, 2) 67 request.onsuccess = version2ConnectionSuccess 68 request.onblocked = version2ConnectionBlocked 69 70 versionChangeGoingFromStringToInt(): 61 71 db.close() 72 73 version2ConnectionBlocked(): 74 75 version2ConnectionSuccess(): 76 event.target.result.close() 62 77 request = indexedDB.open(dbname, 1) 63 78 request.onerror = errorWhenTryingLowVersion -
trunk/LayoutTests/storage/indexeddb/intversion-bad-parameters-expected.txt
r127049 r129037 23 23 Expecting TypeError exception from request = indexedDB.open(dbname, -1) 24 24 FAIL No exception thrown! 25 FAIL Success function called unexpectedly.25 FAIL onupgradeneeded called unexpectedly 26 26 PASS successfullyParsed is true 27 27 -
trunk/LayoutTests/storage/indexeddb/intversion-omit-parameter-expected.txt
r124383 r129037 9 9 indexedDB.deleteDatabase(dbname) 10 10 indexedDB.open(dbname) 11 PASS Got upgradeneeded event 11 12 12 13 openSuccess(): 13 14 db = event.target.result 14 15 Test line from IDBFactory.open: If no version is specified and no database exists, set database version to 1. 15 FAIL db.version should be 1 (of type number). Was (of type string). 16 PASS db.version is 1 16 17 PASS successfullyParsed is true 17 18 -
trunk/LayoutTests/storage/indexeddb/intversion-two-opens-no-versions.html
r129036 r129037 5 5 </head> 6 6 <body> 7 <script src="resources/intversion- invalid-setversion-has-no-side-effects.js"></script>7 <script src="resources/intversion-two-opens-no-versions.js"></script> 8 8 <script src="../../fast/js/resources/js-test-post.js"></script> 9 9 </body> -
trunk/LayoutTests/storage/indexeddb/list-ordering-expected.txt
r128642 r129037 14 14 indexedDB.open('list-ordering') 15 15 db = request.result 16 PASS db.version is ""16 PASS db.version is 1 17 17 db.setVersion('1') 18 18 -
trunk/LayoutTests/storage/indexeddb/noblobs-expected.txt
r128642 r129037 11 11 indexedDB.open('noblobs') 12 12 db = request.result 13 PASS db.version is ""13 PASS db.version is 1 14 14 db.setVersion('1') 15 15 store = db.createObjectStore('storeName') -
trunk/LayoutTests/storage/indexeddb/noblobs.html
r116337 r129037 39 39 request.onsuccess = function(e) { 40 40 evalAndLog("db = request.result"); 41 shouldBe EqualToString("db.version", "");41 shouldBe("db.version", "1"); 42 42 request = evalAndLog("db.setVersion('1')"); 43 43 request.onerror = unexpectedErrorCallback; -
trunk/LayoutTests/storage/indexeddb/open-during-transaction-expected.txt
r128642 r129037 20 20 21 21 trying to open the same database 22 openreq2 = indexedDB.open(' db1')22 openreq2 = indexedDB.open('open-during-transaction1') 23 23 24 24 trying to open a different database … … 29 29 state = 'open2complete' 30 30 31 transaction complete 32 PASS state is "open2complete" 33 31 34 openreq3.onsuccess 32 35 PASS state is "open2complete" 33 36 state = 'open3complete' 34 35 transaction complete36 PASS state is "open3complete"37 37 PASS successfullyParsed is true 38 38 -
trunk/LayoutTests/storage/indexeddb/pending-activity-expected.txt
r128642 r129037 12 12 indexedDB.open(dbname) 13 13 db = request.result 14 PASS db.version is ""14 PASS db.version is 1 15 15 db.setVersion('1') 16 16 store = db.createObjectStore('store') -
trunk/LayoutTests/storage/indexeddb/pending-activity-workers-expected.txt
r128642 r129037 13 13 [Worker] indexedDB.open(dbname) 14 14 [Worker] db = request.result 15 PASS [Worker] db.version is ""15 PASS [Worker] db.version is 1 16 16 [Worker] db.setVersion('1') 17 17 [Worker] store = db.createObjectStore('store') -
trunk/LayoutTests/storage/indexeddb/resources/intversion-and-setversion.js
r124383 r129037 23 23 request.onsuccess = openSuccess; 24 24 request.onerror = unexpectedErrorCallback; 25 request.onupgradeneeded = unexpectedUpgradeNeededCallback; 26 request.onblocked = unexpectedBlockedCallback; 25 request.onupgradeneeded = initialUpgradeNeeded; 26 request.onblocked = unexpectedBlockedCallback; 27 } 28 29 30 function initialUpgradeNeeded(evt) 31 { 32 preamble(evt); 27 33 } 28 34 … … 33 39 debug("openSuccess():"); 34 40 db = evalAndLog("db = event.target.result"); 35 shouldBe EqualToString("db.version", "");41 shouldBe("db.version", "1"); 36 42 evalAndLog('request = db.setVersion("some version")'); 37 43 request.onsuccess = inSetVersion; … … 86 92 function firstUpgradeNeeded(evt) 87 93 { 88 event = evt; 89 debug(""); 90 debug("firstUpgradeNeeded():"); 94 preamble(evt); 91 95 evalAndLog("db = event.target.result"); 92 96 shouldBeEqualToString("String(db)", "[object IDBDatabase]"); … … 101 105 function transactionCompleted(evt) 102 106 { 103 event = evt; 104 debug(""); 105 debug("transactionCompleted():"); 107 preamble(evt); 106 108 evalAndLog("didTransactionComplete = true"); 107 109 } … … 109 111 function firstOpenWithVersion(evt) 110 112 { 111 event = evt; 112 debug(""); 113 debug("firstOpenWithVersion():"); 113 preamble(evt); 114 114 shouldBeTrue("didTransactionComplete"); 115 115 evalAndLog("db = event.target.result"); 116 evalAndLog("db.onversionchange = versionChangeGoingFromStringToInt"); 116 117 shouldBeEqualToString("String(db)", "[object IDBDatabase]"); 117 118 shouldBeNull("request.transaction"); … … 120 121 evalAndLog('request = db.setVersion("string version 2")'); 121 122 shouldBeEqualToString("String(request)", "[object IDBVersionChangeRequest]"); 122 request.onblocked = unexpectedBlockedCallback; 123 request.onsuccess = unexpectedSuccessCallback; 124 evalAndLog("request.onerror = setVersionNotAllowed"); 125 } 126 127 function setVersionNotAllowed(evt) 128 { 129 event = evt; 130 debug(""); 131 debug("setVersionNotAllowed():"); 132 shouldBeEqualToString("event.type", "error"); 133 debug("request.webkitErrorMessage = " + request.webkitErrorMessage); 134 evalAndLog("db.close()"); 123 evalAndLog("request.onsuccess = secondSetVersionCallback"); 124 request.onblocked = unexpectedBlockedCallback; 125 request.onerror = unexpectedErrorCallback; 126 } 127 128 function secondSetVersionCallback(evt) 129 { 130 preamble(evt); 131 evalAndLog("transaction = event.target.result"); 132 evalAndLog("transaction.oncomplete = setIntVersion2"); 133 } 134 135 function setIntVersion2(evt) 136 { 137 preamble(evt); 138 evalAndLog("request = indexedDB.open(dbname, 2)"); 139 evalAndLog("request.onsuccess = version2ConnectionSuccess"); 140 evalAndLog("request.onblocked = version2ConnectionBlocked"); 141 request.onerror = unexpectedErrorCallback; 142 } 143 144 function versionChangeGoingFromStringToInt(evt) 145 { 146 preamble(evt); 147 evalAndLog("db.close()"); 148 } 149 150 function version2ConnectionBlocked(evt) 151 { 152 preamble(evt); 153 } 154 155 function version2ConnectionSuccess(evt) 156 { 157 preamble(evt); 158 evalAndLog("event.target.result.close()"); 135 159 evalAndLog("request = indexedDB.open(dbname, 1)"); 136 160 evalAndLog("request.onerror = errorWhenTryingLowVersion"); 137 161 request.onblocked = unexpectedBlockedCallback; 138 162 request.onsuccess = unexpectedSuccessCallback; 163 request.onupgradeneeded = unexpectedUpgradeNeededCallback; 139 164 } 140 165 141 166 function errorWhenTryingLowVersion(evt) 142 167 { 143 event = evt; 144 debug(""); 145 debug("errorWhenTryingLowVersion():"); 168 preamble(evt); 146 169 debug("request.webkitErrorMessage = " + request.webkitErrorMessage); 147 170 evalAndLog("request = indexedDB.open(dbname, 4)"); -
trunk/LayoutTests/storage/indexeddb/resources/list-ordering.js
r112202 r129037 53 53 request.onsuccess = function(e) { 54 54 evalAndLog("db = request.result"); 55 shouldBe EqualToString("db.version", "");55 shouldBe("db.version", "1"); 56 56 request = evalAndLog("db.setVersion('1')"); 57 57 request.onerror = unexpectedErrorCallback; -
trunk/LayoutTests/storage/indexeddb/resources/open-during-transaction.js
r120976 r129037 46 46 trans.oncomplete = function (e) { 47 47 debug("transaction complete"); 48 shouldBeEqualToString("state", "open 3complete");49 finishJSTest();48 shouldBeEqualToString("state", "open2complete"); 49 debug(""); 50 50 }; 51 51 … … 57 57 { 58 58 debug("trying to open the same database"); 59 evalAndLog("openreq2 = indexedDB.open(' db1')");59 evalAndLog("openreq2 = indexedDB.open('open-during-transaction1')"); 60 60 openreq2.onerror = unexpectedErrorCallback; 61 61 openreq2.onsuccess = function (e) { … … 74 74 shouldBeEqualToString("state", "open2complete"); 75 75 evalAndLog("state = 'open3complete'"); 76 debug("");76 finishJSTest(); 77 77 } 78 78 debug(""); -
trunk/LayoutTests/storage/indexeddb/resources/pending-activity.js
r126254 r129037 23 23 request.onsuccess = function(e) { 24 24 evalAndLog("db = request.result"); 25 shouldBe EqualToString("db.version", "");25 shouldBe("db.version", "1"); 26 26 request = evalAndLog("db.setVersion('1')"); 27 27 request.onerror = unexpectedErrorCallback; -
trunk/LayoutTests/storage/indexeddb/structured-clone-expected.txt
r128642 r129037 11 11 indexedDB.open('structured-clone') 12 12 db = request.result 13 PASS db.version is ""13 PASS db.version is 1 14 14 db.setVersion('1') 15 15 store = db.createObjectStore('storeName') -
trunk/LayoutTests/storage/indexeddb/structured-clone.html
r122262 r129037 37 37 request.onsuccess = function(e) { 38 38 evalAndLog("db = request.result"); 39 shouldBe EqualToString("db.version", "");39 shouldBe("db.version", "1"); 40 40 request = evalAndLog("db.setVersion('1')"); 41 41 request.onerror = unexpectedErrorCallback; -
trunk/Source/WebCore/ChangeLog
r129036 r129037 1 2012-09-19 David Grogan <dgrogan@chromium.org> 2 3 IndexedDB: fire upgradeneeded even without an explicit integer version 4 https://bugs.webkit.org/show_bug.cgi?id=96444 5 6 Reviewed by Tony Chang. 7 8 Also of note: 9 - New databases now get a default version of 1 instead of 10 the empty string when they are opened. 11 - We now allow databases with an integer version to revert to a string 12 version by calling setVersion. 13 14 Implementation detail: we store both an integer version and string 15 version for a particular database. If both are set we give preference 16 to the integer version and assume the db is on the integer track. 17 18 Test: storage/indexeddb/intversion-two-opens-no-versions.html 19 20 * Modules/indexeddb/IDBDatabaseBackendImpl.cpp: 21 (WebCore): 22 (WebCore::IDBDatabaseBackendImpl::IDBDatabaseBackendImpl): 23 (WebCore::IDBDatabaseBackendImpl::setVersion): 24 (WebCore::IDBDatabaseBackendImpl::setVersionInternal): 25 Now that this can be called even after an int version is set we have 26 to make it revoke the int version. 27 28 (WebCore::IDBDatabaseBackendImpl::openConnection): 29 Nested ifs were getting deep, so refactor to return early instead. 30 31 (WebCore::IDBDatabaseBackendImpl::deleteDatabase): 32 (WebCore::IDBDatabaseBackendImpl::resetVersion): 33 Now that an int version could have been set before setVersion was 34 called we have to reset the int version on abort. 35 36 * Modules/indexeddb/IDBDatabaseBackendImpl.h: 37 (IDBDatabaseBackendImpl): 38 * Modules/indexeddb/IDBLevelDBBackingStore.cpp: 39 (WebCore::IDBLevelDBBackingStore::updateIDBDatabaseIntVersion): 40 * Modules/indexeddb/IDBOpenDBRequest.cpp: 41 0 is now a valid integer version to store to leveldb if an idb 42 database is reverting to a string version. 43 44 (WebCore::IDBOpenDBRequest::onUpgradeNeeded): 45 If the open request did not specify an integer version but 46 upgradeneeded is called, it means the database was given the default 47 version of 1. 48 1 49 2012-09-19 Dominic Mazzoni <dmazzoni@google.com> 2 50 -
trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp
r128795 r129037 128 128 } 129 129 130 namespace { 131 const char* NoStringVersion = ""; 132 } 133 130 134 IDBDatabaseBackendImpl::IDBDatabaseBackendImpl(const String& name, IDBBackingStore* backingStore, IDBTransactionCoordinator* coordinator, IDBFactoryBackendImpl* factory, const String& uniqueIdentifier) 131 135 : m_backingStore(backingStore) 132 136 , m_id(InvalidId) 133 137 , m_name(name) 134 , m_version( "")138 , m_version(NoStringVersion) 135 139 , m_intVersion(IDBDatabaseMetadata::NoIntVersion) 136 140 , m_identifier(uniqueIdentifier) … … 239 243 if (!m_databaseCallbacksSet.contains(databaseCallbacks)) { 240 244 callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::IDB_ABORT_ERR, "Connection was closed before set version transaction was created")); 241 return;242 }243 if (m_intVersion != IDBDatabaseMetadata::NoIntVersion) {244 callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::UNKNOWN_ERR, String::format("You can't use the setVersion function if you've already set the version through an open call. The current integer version is %lld", static_cast<long long>(m_intVersion))));245 245 return; 246 246 } … … 273 273 if (!transaction->scheduleTask( 274 274 createCallbackTask(&IDBDatabaseBackendImpl::setVersionInternal, database, version, callbacks, transaction), 275 createCallbackTask(&IDBDatabaseBackendImpl::resetVersion, database, m_version ))) {275 createCallbackTask(&IDBDatabaseBackendImpl::resetVersion, database, m_version, m_intVersion))) { 276 276 // FIXME: Remove one of the following lines. 277 277 ASSERT_NOT_REACHED(); … … 285 285 int64_t databaseId = database->id(); 286 286 database->m_version = version; 287 if (!database->m_backingStore->updateIDBDatabaseMetaData(databaseId, database->m_version)) { 287 database->m_intVersion = IDBDatabaseMetadata::NoIntVersion; 288 if (!database->m_backingStore->updateIDBDatabaseMetaData(databaseId, database->m_version) || !database->m_backingStore->updateIDBDatabaseIntVersion(databaseId, database->m_intVersion)) { 288 289 callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::UNKNOWN_ERR, "Error writing data to stable storage.")); 289 290 transaction->abort(); … … 438 439 { 439 440 ASSERT(m_backingStore.get()); 440 if (!m_pendingDeleteCalls.isEmpty() || m_runningVersionChangeTransaction || !m_pendingSetVersionCalls.isEmpty()) 441 if (!m_pendingDeleteCalls.isEmpty() || m_runningVersionChangeTransaction || !m_pendingSetVersionCalls.isEmpty()) { 441 442 m_pendingOpenCalls.append(PendingOpenCall::create(callbacks, databaseCallbacks)); 442 else { 443 if (m_id == InvalidId && !openInternal()) 444 callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::UNKNOWN_ERR, "Internal error.")); 445 else { 446 m_databaseCallbacksSet.add(RefPtr<IDBDatabaseCallbacks>(databaseCallbacks)); 447 callbacks->onSuccess(this); 448 } 449 } 443 return; 444 } 445 if (m_id == InvalidId && !openInternal()) { 446 callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::UNKNOWN_ERR, "Internal error.")); 447 return; 448 } 449 if (m_version == NoStringVersion && m_intVersion == IDBDatabaseMetadata::NoIntVersion) { 450 // Spec says: If no version is specified and no database exists, set 451 // database version to 1. We infer that the database didn't exist from 452 // its lack of either type of version. 453 openConnectionWithVersion(callbacks, databaseCallbacks, 1); 454 return; 455 } 456 m_databaseCallbacksSet.add(RefPtr<IDBDatabaseCallbacks>(databaseCallbacks)); 457 callbacks->onSuccess(this); 450 458 } 451 459 … … 483 491 RefPtr<IDBDatabaseBackendImpl> database = this; 484 492 OwnPtr<ScriptExecutionContext::Task> intVersionTask = createCallbackTask(&IDBDatabaseBackendImpl::setIntVersionInternal, database, requestedVersion, callbacks, transaction); 485 OwnPtr<ScriptExecutionContext::Task> resetVersionOnAbortTask = createCallbackTask(&IDBDatabaseBackendImpl::reset IntVersion, database, m_intVersion);493 OwnPtr<ScriptExecutionContext::Task> resetVersionOnAbortTask = createCallbackTask(&IDBDatabaseBackendImpl::resetVersion, database, m_version, m_intVersion); 486 494 if (!transaction->scheduleTask(intVersionTask.release(), resetVersionOnAbortTask.release())) { 487 495 // FIXME: Remove one of the following lines. … … 532 540 for (DatabaseCallbacksSet::const_iterator it = m_databaseCallbacksSet.begin(); it != m_databaseCallbacksSet.end(); ++it) { 533 541 // Front end ensures the event is not fired at connections that have closePending set. 534 (*it)->onVersionChange( "");542 (*it)->onVersionChange(NoStringVersion); 535 543 } 536 544 // FIXME: Only fire onBlocked if there are open connections after the … … 547 555 return; 548 556 } 549 m_version = "";557 m_version = NoStringVersion; 550 558 m_id = InvalidId; 551 559 m_intVersion = IDBDatabaseMetadata::NoIntVersion; … … 618 626 } 619 627 620 void IDBDatabaseBackendImpl::resetVersion(ScriptExecutionContext*, PassRefPtr<IDBDatabaseBackendImpl> database, const String& version) 621 { 622 database->m_version = version; 623 } 624 625 void IDBDatabaseBackendImpl::resetIntVersion(ScriptExecutionContext*, PassRefPtr<IDBDatabaseBackendImpl> database, int64_t oldVersion) 626 { 627 database->m_intVersion = oldVersion; 628 } 629 628 void IDBDatabaseBackendImpl::resetVersion(ScriptExecutionContext*, PassRefPtr<IDBDatabaseBackendImpl> database, const String& previousVersion, int64_t previousIntVersion) 629 { 630 database->m_version = previousVersion; 631 database->m_intVersion = previousIntVersion; 632 } 630 633 631 634 } // namespace WebCore -
trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.h
r128533 r129037 92 92 static void removeObjectStoreFromMap(ScriptExecutionContext*, PassRefPtr<IDBDatabaseBackendImpl>, PassRefPtr<IDBObjectStoreBackendImpl>); 93 93 static void addObjectStoreToMap(ScriptExecutionContext*, PassRefPtr<IDBDatabaseBackendImpl>, PassRefPtr<IDBObjectStoreBackendImpl>); 94 static void resetVersion(ScriptExecutionContext*, PassRefPtr<IDBDatabaseBackendImpl>, const String& version); 95 static void resetIntVersion(ScriptExecutionContext*, PassRefPtr<IDBDatabaseBackendImpl>, int64_t intVersion); 94 static void resetVersion(ScriptExecutionContext*, PassRefPtr<IDBDatabaseBackendImpl>, const String& version, int64_t intVersion); 96 95 97 96 RefPtr<IDBBackingStore> m_backingStore; -
trunk/Source/WebCore/Modules/indexeddb/IDBLevelDBBackingStore.cpp
r128217 r129037 340 340 { 341 341 ASSERT(m_currentTransaction); 342 // FIXME: Change this to strictly greater than 0 once we throw TypeError for343 // bad versions.342 if (intVersion == IDBDatabaseMetadata::NoIntVersion) 343 intVersion = IDBDatabaseMetadata::DefaultIntVersion; 344 344 ASSERT_WITH_MESSAGE(intVersion >= 0, "intVersion was %lld", static_cast<long long>(intVersion)); 345 345 if (!putVarInt(m_currentTransaction.get(), DatabaseMetaDataKey::encode(rowId, DatabaseMetaDataKey::UserIntVersion), intVersion)) -
trunk/Source/WebCore/Modules/indexeddb/IDBOpenDBRequest.cpp
r128674 r129037 89 89 90 90 if (oldVersion == IDBDatabaseMetadata::NoIntVersion) { 91 // This database hasn't had an integer version before.92 oldVersion = IDBDatabaseMetadata::DefaultIntVersion;91 // This database hasn't had an integer version before. 92 oldVersion = IDBDatabaseMetadata::DefaultIntVersion; 93 93 } 94 if (m_version == IDBDatabaseMetadata::NoIntVersion) 95 m_version = 1; 94 96 enqueueEvent(IDBUpgradeNeededEvent::create(oldVersion, m_version, eventNames().upgradeneededEvent)); 95 97 }
Note: See TracChangeset
for help on using the changeset viewer.