Changeset 96322 in webkit
- Timestamp:
- Sep 29, 2011 5:29:13 AM (13 years ago)
- Location:
- trunk
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r96321 r96322 1 2011-09-29 Hans Wennborg <hans@chromium.org> 2 3 IndexedDB: Use LevelDB also for in-memory databases 4 https://bugs.webkit.org/show_bug.cgi?id=68903 5 6 Reviewed by Steve Block. 7 8 Add LevelDBDatabase::openInMemory() which uses leveldb::NewMemEnv() 9 to create in-memory LevelDB databases. 10 11 Use this in IDBLeveLDBBackingStore::open() when the caller passes in 12 an empty file path. 13 This happens in Chromium's incognito mode, and when running layout 14 tests. 15 16 Fix IDBSQLiteBackingStore::backingStoreExists() so it doesn't create 17 files when passed in an empty file path, but uses the in-memory mode 18 instead. 19 20 Existing layout tests will all be run in-memory. 21 22 * platform/leveldb/LevelDBDatabase.cpp: 23 (WebCore::LevelDBDatabase::~LevelDBDatabase): 24 (WebCore::openDB): 25 (WebCore::LevelDBDatabase::open): 26 (WebCore::LevelDBDatabase::openInMemory): 27 * platform/leveldb/LevelDBDatabase.h: 28 * storage/IDBLevelDBBackingStore.cpp: 29 (WebCore::IDBLevelDBBackingStore::open): 30 * storage/IDBSQLiteBackingStore.cpp: 31 (WebCore::IDBSQLiteBackingStore::backingStoreExists): 32 1 33 2011-09-29 Ilya Tikhonovsky <loislo@chromium.org> 2 34 -
trunk/Source/WebCore/platform/leveldb/LevelDBDatabase.cpp
r95901 r96322 34 34 #include "LevelDBWriteBatch.h" 35 35 #include "Logging.h" 36 #include <helpers/memenv/memenv.h> 36 37 #include <leveldb/comparator.h> 37 38 #include <leveldb/db.h> 39 #include <leveldb/env.h> 38 40 #include <leveldb/slice.h> 39 41 #include <string> … … 97 99 m_db.clear(); 98 100 m_comparatorAdapter.clear(); 99 } 100 101 PassOwnPtr<LevelDBDatabase> LevelDBDatabase::open(const String& fileName, const LevelDBComparator* comparator) 102 { 103 OwnPtr<ComparatorAdapter> comparatorAdapter = adoptPtr(new ComparatorAdapter(comparator)); 104 101 m_env.clear(); 102 } 103 104 static leveldb::Status openDB(leveldb::Comparator* comparator, leveldb::Env* env, const String& path, leveldb::DB** db) 105 { 105 106 leveldb::Options options; 106 options.comparator = comparator Adapter.get();107 options.comparator = comparator; 107 108 options.create_if_missing = true; 108 109 options.paranoid_checks = true; 110 options.env = env; 111 112 return leveldb::DB::Open(options, path.utf8().data(), db); 113 } 114 115 PassOwnPtr<LevelDBDatabase> LevelDBDatabase::open(const String& fileName, const LevelDBComparator* comparator) 116 { 117 OwnPtr<ComparatorAdapter> comparatorAdapter = adoptPtr(new ComparatorAdapter(comparator)); 118 109 119 leveldb::DB* db; 110 const leveldb::Status s = leveldb::DB::Open(options, fileName.utf8().data(), &db);120 const leveldb::Status s = openDB(comparatorAdapter.get(), leveldb::Env::Default(), fileName, &db); 111 121 112 122 if (!s.ok()) { … … 116 126 117 127 OwnPtr<LevelDBDatabase> result = adoptPtr(new LevelDBDatabase); 128 result->m_db = adoptPtr(db); 129 result->m_comparatorAdapter = comparatorAdapter.release(); 130 result->m_comparator = comparator; 131 132 return result.release(); 133 } 134 135 PassOwnPtr<LevelDBDatabase> LevelDBDatabase::openInMemory(const LevelDBComparator* comparator) 136 { 137 OwnPtr<ComparatorAdapter> comparatorAdapter = adoptPtr(new ComparatorAdapter(comparator)); 138 OwnPtr<leveldb::Env> inMemoryEnv = adoptPtr(leveldb::NewMemEnv(leveldb::Env::Default())); 139 140 leveldb::DB* db; 141 const leveldb::Status s = openDB(comparatorAdapter.get(), inMemoryEnv.get(), String(), &db); 142 143 if (!s.ok()) { 144 LOG_ERROR("Failed to open in-memory LevelDB database: %s", s.ToString().c_str()); 145 return nullptr; 146 } 147 148 OwnPtr<LevelDBDatabase> result = adoptPtr(new LevelDBDatabase); 149 result->m_env = inMemoryEnv.release(); 118 150 result->m_db = adoptPtr(db); 119 151 result->m_comparatorAdapter = comparatorAdapter.release(); -
trunk/Source/WebCore/platform/leveldb/LevelDBDatabase.h
r95901 r96322 37 37 class Comparator; 38 38 class DB; 39 class Env; 39 40 } 40 41 … … 49 50 public: 50 51 static PassOwnPtr<LevelDBDatabase> open(const String& fileName, const LevelDBComparator*); 52 static PassOwnPtr<LevelDBDatabase> openInMemory(const LevelDBComparator*); 51 53 ~LevelDBDatabase(); 52 54 … … 61 63 LevelDBDatabase(); 62 64 65 OwnPtr<leveldb::Env> m_env; 66 OwnPtr<leveldb::Comparator> m_comparatorAdapter; 63 67 OwnPtr<leveldb::DB> m_db; 64 68 const LevelDBComparator* m_comparator; 65 OwnPtr<leveldb::Comparator> m_comparatorAdapter;66 69 }; 67 70 -
trunk/Source/WebCore/storage/IDBLevelDBBackingStore.cpp
r96054 r96322 137 137 String pathBase = pathBaseArg; 138 138 139 if (pathBase.isEmpty()) {140 ASSERT_NOT_REACHED(); // FIXME: We need to handle this case for incognito and DumpRenderTree.141 return PassRefPtr<IDBBackingStore>();142 }143 144 if (!makeAllDirectories(pathBase)) {145 LOG_ERROR("Unable to create IndexedDB database path %s", pathBase.utf8().data());146 return PassRefPtr<IDBBackingStore>();147 }148 // FIXME: We should eventually use the same LevelDB database for all origins.149 String path = pathByAppendingComponent(pathBase, securityOrigin->databaseIdentifier() + ".indexeddb.leveldb");150 151 139 OwnPtr<LevelDBComparator> comparator = adoptPtr(new Comparator()); 152 OwnPtr<LevelDBDatabase> db = LevelDBDatabase::open(path, comparator.get()); 140 OwnPtr<LevelDBDatabase> db; 141 142 if (pathBase.isEmpty()) 143 db = LevelDBDatabase::openInMemory(comparator.get()); 144 else { 145 if (!makeAllDirectories(pathBase)) { 146 LOG_ERROR("Unable to create IndexedDB database path %s", pathBase.utf8().data()); 147 return PassRefPtr<IDBBackingStore>(); 148 } 149 // FIXME: We should eventually use the same LevelDB database for all origins. 150 String path = pathByAppendingComponent(pathBase, securityOrigin->databaseIdentifier() + ".indexeddb.leveldb"); 151 152 db = LevelDBDatabase::open(path, comparator.get()); 153 } 154 153 155 if (!db) 154 156 return PassRefPtr<IDBBackingStore>(); -
trunk/Source/WebCore/storage/IDBSQLiteBackingStore.cpp
r96054 r96322 170 170 RefPtr<IDBSQLiteBackingStore> backingStore(adoptRef(new IDBSQLiteBackingStore(fileIdentifier, factory))); 171 171 172 String path = ":memory:"; 172 String path = ":memory:"; // in-memory SQLite database. 173 173 if (!pathBase.isEmpty()) { 174 174 if (!makeAllDirectories(pathBase)) { … … 1013 1013 bool IDBSQLiteBackingStore::backingStoreExists(SecurityOrigin* securityOrigin, const String& name, const String& pathBase) 1014 1014 { 1015 String path = pathByAppendingComponent(pathBase, securityOrigin->databaseIdentifier() + ".indexeddb"); 1015 String path = ":memory:"; // in-memory SQLite database. 1016 if (!pathBase.isEmpty()) 1017 path = pathByAppendingComponent(pathBase, securityOrigin->databaseIdentifier() + ".indexeddb"); 1016 1018 SQLiteDatabase db; 1017 1019 if (!db.open(path)) -
trunk/Source/WebKit/chromium/ChangeLog
r96233 r96322 1 2011-09-29 Hans Wennborg <hans@chromium.org> 2 3 IndexedDB: Use LevelDB also for in-memory databases 4 https://bugs.webkit.org/show_bug.cgi?id=68903 5 6 Reviewed by Steve Block. 7 8 Don't fall back to SQLite or use a temporary dir for in-memory 9 databases (Incognito and layout tests); LevelDB supports in-memory 10 databases now. 11 12 * public/WebIDBFactory.h: 13 * src/WebIDBFactoryImpl.cpp: 14 (WebKit::WebIDBFactoryImpl::getDatabaseNames): 15 (WebKit::WebIDBFactoryImpl::open): 16 1 17 2011-09-28 Fady Samuel <fsamuel@chromium.org> 2 18 -
trunk/Source/WebKit/chromium/public/WebIDBFactory.h
r95901 r96322 67 67 // Used for DumpRenderTree tests. 68 68 WEBKIT_EXPORT static void setOverrideBackingStoreType(BackingStoreType); 69 WEBKIT_EXPORT static void setTemporaryDatabaseFolder(const WebString& path);70 69 }; 71 70 -
trunk/Source/WebKit/chromium/src/WebIDBFactoryImpl.cpp
r96054 r96322 46 46 47 47 static WebIDBFactory::BackingStoreType overriddenBackingStoreType = WebIDBFactory::DefaultBackingStore; 48 static WebString tempDatabaseFolder;49 48 50 49 WebIDBFactory* WebIDBFactory::create() … … 56 55 { 57 56 overriddenBackingStoreType = type; 58 }59 60 void WebIDBFactory::setTemporaryDatabaseFolder(const WebString& path)61 {62 tempDatabaseFolder = path;63 57 } 64 58 … … 84 78 backingStoreType = LevelDBBackingStore; 85 79 86 if (dataDir.isEmpty() && backingStoreType == LevelDBBackingStore) {87 if (!tempDatabaseFolder.isEmpty()) {88 // Layout tests provide a temporary folder.89 path = tempDatabaseFolder;90 } else {91 // For incognito mode, fall back to SQLite.92 backingStoreType = SQLiteBackingStore;93 }94 }95 96 80 m_idbFactoryBackend->getDatabaseNames(IDBCallbacksProxy::create(adoptPtr(callbacks)), origin, 0, path, maximumSize, static_cast<IDBFactoryBackendInterface::BackingStoreType>(backingStoreType)); 97 81 } … … 110 94 backingStoreType = LevelDBBackingStore; 111 95 112 if (dataDir.isEmpty() && backingStoreType == LevelDBBackingStore) {113 if (!tempDatabaseFolder.isEmpty()) {114 // Layout tests provide a temporary folder.115 path = tempDatabaseFolder;116 } else {117 // For incognito mode, fall back to SQLite.118 backingStoreType = SQLiteBackingStore;119 }120 }121 122 96 m_idbFactoryBackend->open(name, IDBCallbacksProxy::create(adoptPtr(callbacks)), origin, 0, path, maximumSize, static_cast<IDBFactoryBackendInterface::BackingStoreType>(backingStoreType)); 123 97 } -
trunk/Tools/ChangeLog
r96289 r96322 1 2011-09-29 Hans Wennborg <hans@chromium.org> 2 3 IndexedDB: Use LevelDB also for in-memory databases 4 https://bugs.webkit.org/show_bug.cgi?id=68903 5 6 Reviewed by Steve Block. 7 8 Remove the temporary dir that was necessary before LevelDB supported 9 in-memory databases. 10 11 * DumpRenderTree/chromium/TestShell.cpp: 12 (TestShell::TestShell): 13 * DumpRenderTree/chromium/TestShell.h: 14 1 15 2011-09-28 Xianzhu Wang <wangxianzhu@chromium.org> 2 16 -
trunk/Tools/DumpRenderTree/chromium/TestShell.cpp
r96147 r96322 137 137 m_timeout = 30 * 1000; 138 138 139 #if ENABLE(INDEXED_DATABASE)140 m_tempIndexedDBDirectory = adoptPtr(webkit_support::CreateScopedTempDirectory());141 m_tempIndexedDBDirectory->CreateUniqueTempDir();142 WebIDBFactory::setTemporaryDatabaseFolder(WebString::fromUTF8(m_tempIndexedDBDirectory->path().c_str()));143 #endif144 145 139 createMainWindow(); 146 140 } -
trunk/Tools/DumpRenderTree/chromium/TestShell.h
r95180 r96322 236 236 HANDLE m_finishedEvent; 237 237 #endif 238 239 // Temporary directory for IndexedDB (LevelDB doesn't support in-memory databases.)240 OwnPtr<webkit_support::ScopedTempDirectory> m_tempIndexedDBDirectory;241 238 }; 242 239
Note: See TracChangeset
for help on using the changeset viewer.