void LocalStorageDatabase::importItems(StorageMap& storageMap) { // FIXME: If it can't import, then the default WebKit behavior should be that of private browsing, // not silently ignoring it. https://bugs.webkit.org/show_bug.cgi?id=25894 openDatabase(SkipIfNonExistent); if (!m_database.isOpen()) return; SQLiteStatement query(m_database, "SELECT key, value FROM ItemTable"); if (query.prepare() != SQLResultOk) { LOG_ERROR("Unable to select items from ItemTable for local storage"); return; } HashMap<String, String> items; int result = query.step(); while (result == SQLResultRow) { items.set(query.getColumnText(0), query.getColumnBlobAsString(1)); result = query.step(); } if (result != SQLResultDone) { LOG_ERROR("Error reading items from ItemTable for local storage"); return; } storageMap.importItems(items); }
void LocalStorageDatabase::importItems(StorageMap& storageMap) { if (m_didImportItems) return; // FIXME: If it can't import, then the default WebKit behavior should be that of private browsing, // not silently ignoring it. https://bugs.webkit.org/show_bug.cgi?id=25894 // We set this to true even if we don't end up importing any items due to failure because // there's really no good way to recover other than not importing anything. m_didImportItems = true; openDatabase(SkipIfNonExistent); if (!m_database.isOpen()) return; SQLiteStatement query(m_database, "SELECT key, value FROM ItemTable"); if (query.prepare() != SQLITE_OK) { LOG_ERROR("Unable to select items from ItemTable for local storage"); return; } HashMap<String, String> items; int result = query.step(); while (result == SQLITE_ROW) { String key = query.getColumnText(0); String value = query.getColumnBlobAsString(1); if (!key.isNull() && !value.isNull()) items.set(key, value); result = query.step(); } if (result != SQLITE_DONE) { LOG_ERROR("Error reading items from ItemTable for local storage"); return; } storageMap.importItems(items); }