Changeset 85122 in webkit
- Timestamp:
- Apr 27, 2011 4:52:09 PM (13 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r85118 r85122 1 2011-04-27 Adam Barth <abarth@webkit.org> 2 3 Reviewed by David Levin. 4 5 Fix OwnPtr issues in IndexedDB 6 https://bugs.webkit.org/show_bug.cgi?id=59656 7 8 I didn't do an exhaustive review of this code, but I fixed the problems 9 caught by turning on strict OwnPtr and all their antecedents. This 10 patch is entirely tighter bookkeeping. There shouldn't be any actual 11 behavior change. 12 13 * platform/leveldb/LevelDBDatabase.cpp: 14 (WebCore::LevelDBDatabase::LevelDBDatabase): 15 (WebCore::LevelDBDatabase::open): 16 (WebCore::LevelDBDatabase::createIterator): 17 * platform/leveldb/LevelDBDatabase.h: 18 * platform/leveldb/LevelDBIterator.cpp: 19 (WebCore::LevelDBIterator::LevelDBIterator): 20 * platform/leveldb/LevelDBIterator.h: 21 * storage/IDBLevelDBBackingStore.cpp: 22 (WebCore::IDBLevelDBBackingStore::IDBLevelDBBackingStore): 23 (WebCore::IDBLevelDBBackingStore::open): 24 (WebCore::getNewDatabaseId): 25 (WebCore::IDBLevelDBBackingStore::getObjectStores): 26 (WebCore::getNewObjectStoreId): 27 (WebCore::deleteRange): 28 (WebCore::IDBLevelDBBackingStore::nextAutoIncrementNumber): 29 (WebCore::IDBLevelDBBackingStore::forEachObjectStoreRecord): 30 (WebCore::IDBLevelDBBackingStore::getIndexes): 31 (WebCore::getNewIndexId): 32 (WebCore::findGreatestKeyLessThan): 33 (WebCore::IDBLevelDBBackingStore::getPrimaryKeyViaIndex): 34 (WebCore::IDBLevelDBBackingStore::keyExistsInIndex): 35 (WebCore::findLastIndexKeyEqualTo): 36 * storage/IDBLevelDBBackingStore.h: 37 1 38 2011-04-19 MORITA Hajime <morrita@google.com> 2 39 -
trunk/Source/WebCore/platform/leveldb/LevelDBDatabase.cpp
r84149 r85122 89 89 90 90 LevelDBDatabase::LevelDBDatabase() 91 : m_db(0)92 91 { 93 92 } … … 97 96 } 98 97 99 LevelDBDatabase*LevelDBDatabase::open(const String& fileName, const LevelDBComparator* comparator)98 PassOwnPtr<LevelDBDatabase> LevelDBDatabase::open(const String& fileName, const LevelDBComparator* comparator) 100 99 { 101 OwnPtr<ComparatorAdapter> comparatorAdapter (new ComparatorAdapter(comparator));100 OwnPtr<ComparatorAdapter> comparatorAdapter = adoptPtr(new ComparatorAdapter(comparator)); 102 101 103 LevelDBDatabase* result = new LevelDBDatabase();102 OwnPtr<LevelDBDatabase> result = adoptPtr(new LevelDBDatabase); 104 103 105 104 leveldb::Options options; … … 109 108 leveldb::Status s = leveldb::DB::Open(options, fileName.utf8().data(), &db); 110 109 111 if (!s.ok()) { 112 delete result; 113 return 0; 114 } 110 if (!s.ok()) 111 return PassOwnPtr<LevelDBDatabase>(); 115 112 116 result->m_db = WTF::adoptPtr(db);113 result->m_db = adoptPtr(db); 117 114 result->m_comparatorAdapter = comparatorAdapter.release(); 118 115 119 return result ;116 return result.release(); 120 117 } 121 118 … … 147 144 } 148 145 149 LevelDBIterator* LevelDBDatabase::newIterator()146 PassOwnPtr<LevelDBIterator> LevelDBDatabase::createIterator() 150 147 { 151 leveldb::Iterator* i = m_db->NewIterator(leveldb::ReadOptions());148 OwnPtr<leveldb::Iterator> i = adoptPtr(m_db->NewIterator(leveldb::ReadOptions())); 152 149 if (!i) // FIXME: Double check if we actually need to check this. 153 150 return 0; 154 return new LevelDBIterator(i);151 return adoptPtr(new LevelDBIterator(i.release())); 155 152 } 156 153 157 } // namespace WebCore154 } 158 155 159 #endif // ENABLE(LEVELDB)156 #endif -
trunk/Source/WebCore/platform/leveldb/LevelDBDatabase.h
r84149 r85122 29 29 #if ENABLE(LEVELDB) 30 30 31 #include "PlatformString.h" 32 #include <OwnPtr.h> 33 #include <Vector.h> 31 #include <wtf/OwnPtr.h> 32 #include <wtf/PassOwnPtr.h> 33 #include <wtf/Vector.h> 34 #include <wtf/text/WTFString.h> 34 35 35 36 namespace leveldb { … … 46 47 class LevelDBDatabase { 47 48 public: 48 static LevelDBDatabase*open(const String& fileName, const LevelDBComparator*);49 static PassOwnPtr<LevelDBDatabase> open(const String& fileName, const LevelDBComparator*); 49 50 ~LevelDBDatabase(); 50 51 … … 52 53 bool remove(const LevelDBSlice& key); 53 54 bool get(const LevelDBSlice& key, Vector<char>& value); 54 LevelDBIterator* newIterator();55 PassOwnPtr<LevelDBIterator> createIterator(); 55 56 56 57 private: … … 61 62 }; 62 63 63 } // namespace WebCore64 } 64 65 65 #endif // ENABLE(LEVELDB)66 #endif // LevelDBDatabase_h66 #endif 67 #endif -
trunk/Source/WebCore/platform/leveldb/LevelDBIterator.cpp
r84149 r85122 31 31 #include <leveldb/iterator.h> 32 32 #include <leveldb/slice.h> 33 #include <wtf/PassOwnPtr.h> 33 34 #include <wtf/text/CString.h> 34 35 #include <wtf/text/WTFString.h> … … 40 41 } 41 42 42 LevelDBIterator::LevelDBIterator( leveldb::Iterator*it)43 LevelDBIterator::LevelDBIterator(PassOwnPtr<leveldb::Iterator> it) 43 44 : m_iterator(it) 44 45 { -
trunk/Source/WebCore/platform/leveldb/LevelDBIterator.h
r84149 r85122 53 53 54 54 private: 55 LevelDBIterator( leveldb::Iterator*);55 LevelDBIterator(PassOwnPtr<leveldb::Iterator>); 56 56 friend class LevelDBDatabase; 57 57 -
trunk/Source/WebCore/storage/IDBLevelDBBackingStore.cpp
r85046 r85122 116 116 } 117 117 118 IDBLevelDBBackingStore::IDBLevelDBBackingStore(String identifier, IDBFactoryBackendImpl* factory, LevelDBDatabase*db)118 IDBLevelDBBackingStore::IDBLevelDBBackingStore(String identifier, IDBFactoryBackendImpl* factory, PassOwnPtr<LevelDBDatabase> db) 119 119 : m_identifier(identifier) 120 120 , m_factory(factory) … … 135 135 if (pathBase.isEmpty()) { 136 136 ASSERT_NOT_REACHED(); // FIXME: We need to handle this case for incognito and DumpRenderTree. 137 return 0;137 return PassRefPtr<IDBBackingStore>(); 138 138 } 139 139 140 140 if (!makeAllDirectories(pathBase)) { 141 141 LOG_ERROR("Unable to create IndexedDB database path %s", pathBase.utf8().data()); 142 return 0;142 return PassRefPtr<IDBBackingStore>(); 143 143 } 144 144 // FIXME: We should eventually use the same LevelDB database for all origins. 145 145 String path = pathByAppendingComponent(pathBase, securityOrigin->databaseIdentifier() + ".indexeddb.leveldb"); 146 146 147 OwnPtr<LevelDBComparator> comparator (new Comparator());148 LevelDBDatabase*db = LevelDBDatabase::open(path, comparator.get());147 OwnPtr<LevelDBComparator> comparator = adoptPtr(new Comparator()); 148 OwnPtr<LevelDBDatabase> db = LevelDBDatabase::open(path, comparator.get()); 149 149 if (!db) 150 return 0;150 return PassRefPtr<IDBBackingStore>(); 151 151 152 152 // FIXME: Handle comparator name changes. 153 153 154 RefPtr<IDBLevelDBBackingStore> backingStore(adoptRef(new IDBLevelDBBackingStore(fileIdentifier, factory, db )));154 RefPtr<IDBLevelDBBackingStore> backingStore(adoptRef(new IDBLevelDBBackingStore(fileIdentifier, factory, db.release()))); 155 155 backingStore->m_comparator = comparator.release(); 156 156 157 157 if (!setUpMetadata(backingStore->m_db.get())) 158 return 0;158 return PassRefPtr<IDBBackingStore>(); 159 159 160 160 return backingStore.release(); … … 181 181 const Vector<char> freeListStopKey = DatabaseFreeListKey::encode(INT64_MAX); 182 182 183 OwnPtr<LevelDBIterator> it (db->newIterator());183 OwnPtr<LevelDBIterator> it = db->createIterator(); 184 184 for (it->seek(freeListStartKey); it->isValid() && compareKeys(it->key(), freeListStopKey) < 0; it->next()) { 185 185 const char *p = it->key().begin(); … … 232 232 const Vector<char> stopKey = ObjectStoreMetaDataKey::encode(databaseId, INT64_MAX, 0); 233 233 234 OwnPtr<LevelDBIterator> it (m_db->newIterator());234 OwnPtr<LevelDBIterator> it = m_db->createIterator(); 235 235 for (it->seek(startKey); it->isValid() && compareKeys(it->key(), stopKey) < 0; it->next()) { 236 236 const char *p = it->key().begin(); … … 289 289 const Vector<char> freeListStopKey = ObjectStoreFreeListKey::encode(databaseId, INT64_MAX); 290 290 291 OwnPtr<LevelDBIterator> it (db->newIterator());291 OwnPtr<LevelDBIterator> it = db->createIterator(); 292 292 for (it->seek(freeListStartKey); it->isValid() && compareKeys(it->key(), freeListStopKey) < 0; it->next()) { 293 293 const char* p = it->key().begin(); … … 380 380 { 381 381 // FIXME: LevelDB may be able to provide a bulk operation that we can do first. 382 OwnPtr<LevelDBIterator> it (db->newIterator());382 OwnPtr<LevelDBIterator> it = db->createIterator(); 383 383 for (it->seek(begin); it->isValid() && compareKeys(it->key(), end) < 0; it->next()) { 384 384 if (!db->remove(it->key())) … … 512 512 const Vector<char> stopKey = ObjectStoreDataKey::encode(databaseId, objectStoreId, maxIDBKey()); 513 513 514 OwnPtr<LevelDBIterator> it (m_db->newIterator());514 OwnPtr<LevelDBIterator> it = m_db->createIterator(); 515 515 516 516 int maxNumericKey = 0; … … 559 559 const Vector<char> stopKey = ObjectStoreDataKey::encode(databaseId, objectStoreId, maxIDBKey()); 560 560 561 OwnPtr<LevelDBIterator> it (m_db->newIterator());561 OwnPtr<LevelDBIterator> it = m_db->createIterator(); 562 562 for (it->seek(startKey); it->isValid() && compareKeys(it->key(), stopKey) < 0; it->next()) { 563 563 const char *p = it->key().begin(); … … 588 588 const Vector<char> stopKey = IndexMetaDataKey::encode(databaseId, objectStoreId + 1, 0, 0); 589 589 590 OwnPtr<LevelDBIterator> it (m_db->newIterator());590 OwnPtr<LevelDBIterator> it = m_db->createIterator(); 591 591 for (it->seek(startKey); it->isValid() && compareKeys(it->key(), stopKey) < 0; it->next()) { 592 592 const char* p = it->key().begin(); … … 628 628 const Vector<char> stopKey = IndexFreeListKey::encode(databaseId, objectStoreId, INT64_MAX); 629 629 630 OwnPtr<LevelDBIterator> it (db->newIterator());630 OwnPtr<LevelDBIterator> it = db->createIterator(); 631 631 for (it->seek(startKey); it->isValid() && compareKeys(it->key(), stopKey) < 0; it->next()) { 632 632 const char* p = it->key().begin(); … … 711 711 static bool findGreatestKeyLessThan(LevelDBDatabase* db, const Vector<char>& target, Vector<char>& foundKey) 712 712 { 713 OwnPtr<LevelDBIterator> it (db->newIterator());713 OwnPtr<LevelDBIterator> it = db->createIterator(); 714 714 it->seek(target); 715 715 … … 760 760 { 761 761 const Vector<char> leveldbKey = IndexDataKey::encode(databaseId, objectStoreId, indexId, key, 0); 762 OwnPtr<LevelDBIterator> it (m_db->newIterator());762 OwnPtr<LevelDBIterator> it = m_db->createIterator(); 763 763 it->seek(leveldbKey); 764 764 … … 792 792 { 793 793 const Vector<char> levelDBKey = IndexDataKey::encode(databaseId, objectStoreId, indexId, key, 0); 794 OwnPtr<LevelDBIterator> it (m_db->newIterator());794 OwnPtr<LevelDBIterator> it = m_db->createIterator(); 795 795 796 796 bool found = false; … … 841 841 bool CursorImplCommon::firstSeek() 842 842 { 843 m_iterator = m_db-> newIterator();843 m_iterator = m_db->createIterator(); 844 844 845 845 if (m_forward) … … 1118 1118 static bool findLastIndexKeyEqualTo(LevelDBDatabase* db, const Vector<char>& target, Vector<char>& foundKey) 1119 1119 { 1120 OwnPtr<LevelDBIterator> it (db->newIterator());1120 OwnPtr<LevelDBIterator> it = db->createIterator(); 1121 1121 it->seek(target); 1122 1122 -
trunk/Source/WebCore/storage/IDBLevelDBBackingStore.h
r84149 r85122 75 75 76 76 private: 77 IDBLevelDBBackingStore(String identifier, IDBFactoryBackendImpl*, LevelDBDatabase*);77 IDBLevelDBBackingStore(String identifier, IDBFactoryBackendImpl*, PassOwnPtr<LevelDBDatabase>); 78 78 79 79 String m_identifier;
Note: See TracChangeset
for help on using the changeset viewer.