Changeset 115922 in webkit
- Timestamp:
- May 2, 2012, 6:12:03 PM (13 years ago)
- Location:
- trunk
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r115917 r115922 1 2012-05-02 Sheriff Bot <webkit.review.bot@gmail.com> 2 3 Unreviewed, rolling out r115902. 4 http://trac.webkit.org/changeset/115902 5 https://bugs.webkit.org/show_bug.cgi?id=85441 6 7 Compile failure on linux 32 (Requested by zhenyao on #webkit). 8 9 * storage/indexeddb/key-generator-expected.txt: 10 * storage/indexeddb/resources/key-generator.js: 11 1 12 2012-05-02 Sheriff Bot <webkit.review.bot@gmail.com> 2 13 -
trunk/LayoutTests/storage/indexeddb/key-generator-expected.txt
r115902 r115922 143 143 PASS Got "d" for key: 2 144 144 db.close() 145 146 Verify that keys above 2^53 result in errors.147 request = indexedDB.deleteDatabase('key-generator')148 request = indexedDB.open('key-generator')149 db = request.result150 request = db.setVersion('1')151 trans = request.result152 trans1 = db.transaction(['store'], IDBTransaction.READ_WRITE)153 store_t1 = trans1.objectStore('store')154 store_t1.put('a')155 request = store.get(1)156 store_t1.put('b', 9007199254740992)157 request = store.get(9007199254740992)158 store_t1.put('c')159 store_t1.put('d', 2)160 request = store.get(2)161 PASS Got "a" for key: 1162 PASS Got "b" for key: 9007199254740992163 Error event fired auto-incrementing past 2^53 (as expected)164 PASS event.target.errorCode is IDBDatabaseException.DATA_ERR165 event.preventDefault()166 PASS Got "d" for key: 2167 db.close()168 145 PASS successfullyParsed is true 169 146 -
trunk/LayoutTests/storage/indexeddb/resources/key-generator.js
r115902 r115922 204 204 ); 205 205 206 defineTest(207 'Verify that keys above 2^53 result in errors.',208 function (db, trans) {209 db.createObjectStore('store', { autoIncrement: true });210 },211 212 function (db, callback) {213 evalAndLog("trans1 = db.transaction(['store'], IDBTransaction.READ_WRITE)");214 evalAndLog("store_t1 = trans1.objectStore('store')");215 evalAndLog("store_t1.put('a')");216 check(store_t1, 1, 'a');217 evalAndLog("store_t1.put('b', 9007199254740992)");218 check(store_t1, 9007199254740992, 'b');219 request = evalAndLog("store_t1.put('c')");220 request.onsuccess = unexpectedSuccessCallback;221 request.onerror = function () {222 debug("Error event fired auto-incrementing past 2^53 (as expected)");223 shouldBe("event.target.errorCode", "IDBDatabaseException.DATA_ERR");224 evalAndLog("event.preventDefault()");225 };226 evalAndLog("store_t1.put('d', 2)");227 check(store_t1, 2, 'd');228 229 trans1.oncomplete = callback;230 }231 );232 233 206 test(); -
trunk/Source/WebCore/ChangeLog
r115913 r115922 1 2012-05-02 Sheriff Bot <webkit.review.bot@gmail.com> 2 3 Unreviewed, rolling out r115902. 4 http://trac.webkit.org/changeset/115902 5 https://bugs.webkit.org/show_bug.cgi?id=85441 6 7 Compile failure on linux 32 (Requested by zhenyao on #webkit). 8 9 * Modules/indexeddb/IDBBackingStore.h: 10 (IDBBackingStore): 11 * Modules/indexeddb/IDBLevelDBBackingStore.cpp: 12 (WebCore::IDBLevelDBBackingStore::nextAutoIncrementNumber): 13 * Modules/indexeddb/IDBLevelDBBackingStore.h: 14 (IDBLevelDBBackingStore): 15 * Modules/indexeddb/IDBObjectStoreBackendImpl.cpp: 16 (WebCore::IDBObjectStoreBackendImpl::putInternal): 17 (WebCore::IDBObjectStoreBackendImpl::genAutoIncrementKey): 18 * Modules/indexeddb/IDBObjectStoreBackendImpl.h: 19 (IDBObjectStoreBackendImpl): 20 1 21 2012-05-02 Julien Chaffraix <jchaffraix@webkit.org> 2 22 -
trunk/Source/WebCore/Modules/indexeddb/IDBBackingStore.h
r115902 r115922 68 68 virtual void clearObjectStore(int64_t databaseId, int64_t objectStoreId) = 0; 69 69 virtual void deleteObjectStoreRecord(int64_t databaseId, int64_t objectStoreId, const ObjectStoreRecordIdentifier*) = 0; 70 virtual int64_tnextAutoIncrementNumber(int64_t databaseId, int64_t objectStoreId) = 0;70 virtual double nextAutoIncrementNumber(int64_t databaseId, int64_t objectStoreId) = 0; 71 71 virtual bool keyExistsInObjectStore(int64_t databaseId, int64_t objectStoreId, const IDBKey&, ObjectStoreRecordIdentifier* foundRecordIdentifier) = 0; 72 72 -
trunk/Source/WebCore/Modules/indexeddb/IDBLevelDBBackingStore.cpp
r115902 r115922 603 603 } 604 604 605 int64_tIDBLevelDBBackingStore::nextAutoIncrementNumber(int64_t databaseId, int64_t objectStoreId)605 double IDBLevelDBBackingStore::nextAutoIncrementNumber(int64_t databaseId, int64_t objectStoreId) 606 606 { 607 607 ASSERT(m_currentTransaction); … … 611 611 OwnPtr<LevelDBIterator> it = m_currentTransaction->createIterator(); 612 612 613 int64_t maxNumericKey = 0; 614 615 // FIXME: This does a forward scan over all keys. Improve it. 616 // Since all dates > all numbers, create Date(-Infinity) and seek backwards. 613 int maxNumericKey = 0; 614 615 // FIXME: Be more efficient: seek to something after the object store data, then reverse. 617 616 618 617 for (it->seek(startKey); it->isValid() && compareKeys(it->key(), stopKey) < 0; it->next()) { -
trunk/Source/WebCore/Modules/indexeddb/IDBLevelDBBackingStore.h
r115902 r115922 59 59 virtual void clearObjectStore(int64_t databaseId, int64_t objectStoreId); 60 60 virtual void deleteObjectStoreRecord(int64_t databaseId, int64_t objectStoreId, const ObjectStoreRecordIdentifier*); 61 virtual int64_tnextAutoIncrementNumber(int64_t databaseId, int64_t objectStoreId);61 virtual double nextAutoIncrementNumber(int64_t databaseId, int64_t objectStoreId); 62 62 virtual bool keyExistsInObjectStore(int64_t databaseId, int64_t objectStoreId, const IDBKey&, ObjectStoreRecordIdentifier* foundRecordIdentifier); 63 63 -
trunk/Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp
r115902 r115922 256 256 if (!key) { 257 257 RefPtr<IDBKey> autoIncKey = objectStore->genAutoIncrementKey(); 258 if (!autoIncKey->valid()) {259 callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::DATA_ERR, "Maximum key generator value reached."));260 return;261 }262 258 if (hasKeyPath) { 263 259 RefPtr<SerializedScriptValue> valueAfterInjection = injectKeyIntoKeyPath(autoIncKey, value, objectStore->m_keyPath); … … 684 680 PassRefPtr<IDBKey> IDBObjectStoreBackendImpl::genAutoIncrementKey() 685 681 { 686 const int64_t kMaxGeneratorValue = 9007199254740992; // Maximum integer storable as ECMAScript number.687 if (m_autoIncrementNumber > kMaxGeneratorValue)688 return IDBKey::createInvalid();689 682 if (m_autoIncrementNumber > 0) 690 683 return IDBKey::createNumber(m_autoIncrementNumber++); 691 684 692 m_autoIncrementNumber = m_backingStore->nextAutoIncrementNumber(m_databaseId, id()); 693 if (m_autoIncrementNumber > kMaxGeneratorValue) 694 return IDBKey::createInvalid(); 685 m_autoIncrementNumber = static_cast<int>(m_backingStore->nextAutoIncrementNumber(m_databaseId, id())); 695 686 return IDBKey::createNumber(m_autoIncrementNumber++); 696 687 } -
trunk/Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.h
r115902 r115922 116 116 typedef HashMap<String, RefPtr<IDBIndexBackendImpl> > IndexMap; 117 117 IndexMap m_indexes; 118 int 64_tm_autoIncrementNumber;118 int m_autoIncrementNumber; 119 119 }; 120 120
Note:
See TracChangeset
for help on using the changeset viewer.