Changeset 236085 in webkit
- Timestamp:
- Sep 17, 2018 2:41:13 PM (6 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r236083 r236085 1 2018-09-17 Christopher Reid <chris.reid@sony.com> 2 3 [Curl] Add schema version and enable auto vacuum for cookie database. 4 https://bugs.webkit.org/show_bug.cgi?id=189669 5 6 Reviewed by Alex Christensen. 7 8 Turning on auto incremental vacuuming and adding versioning to the database. Right now we 9 reset tables if there's an unknown schema or if the none is set. There is placeholder logic 10 in place to upgrade databases as the schema changes in the future. 11 12 Tested by checking the database manually after launching MiniBrowser. 13 14 * platform/network/curl/CookieJarDB.cpp: 15 (WebCore::CookieJarDB::openDatabase): 16 (WebCore::CookieJarDB::verifySchemaVersion): 17 (WebCore::CookieJarDB::deleteAllTables): 18 (WebCore::CookieJarDB::createPrepareStatement): 19 (WebCore::CookieJarDB::getPrepareStatement): 20 (WebCore::CookieJarDB::executeSimpleSql): 21 * platform/network/curl/CookieJarDB.h: 22 * platform/network/curl/NetworkStorageSessionCurl.cpp: 23 (WebCore::defaultSession): 24 * platform/sql/SQLiteDatabase.cpp: 25 (WebCore::SQLiteDatabase::turnOnIncrementalAutoVacuum): fixed a bug. 26 1 27 2018-09-14 Ryosuke Niwa <rniwa@webkit.org> 2 28 -
trunk/Source/WebCore/platform/network/curl/CookieJarDB.cpp
r234973 r236085 72 72 "DELETE FROM Cookie;" 73 73 74 75 // If the database schema is updated: 76 // - Increment schemaVersion 77 // - Add upgrade logic in verifySchemaVersion to migrate databases from the previous schema version 78 static constexpr int schemaVersion = 1; 79 80 74 81 void CookieJarDB::setEnabled(bool enable) 75 82 { … … 126 133 LOG_ERROR("Unable to create the Cookie Database path %s", m_databasePath.utf8().data()); 127 134 128 if (m_database.open(m_databasePath, false)) { 129 bool databaseValidity = true; 130 databaseValidity &= (executeSimpleSql(CREATE_COOKIE_TABLE_SQL) == SQLITE_DONE); 131 databaseValidity &= (executeSimpleSql(CREATE_DOMAIN_INDEX_SQL) == SQLITE_DONE); 132 databaseValidity &= (executeSimpleSql(CREATE_PATH_INDEX_SQL) == SQLITE_DONE); 133 if (!databaseValidity) { 134 // give up create database at this time (all cookies on request/response are ignored) 135 m_database.close(); 136 deleteAllDatabaseFiles(); 137 } 138 } 135 m_database.open(m_databasePath, false); 139 136 } 140 137 141 138 if (!m_database.isOpen()) 142 139 return false; 140 141 if (!isOnMemory() && !m_database.turnOnIncrementalAutoVacuum()) 142 LOG_ERROR("Unable to turn on incremental auto-vacuum (%d %s)", m_database.lastError(), m_database.lastErrorMsg()); 143 144 verifySchemaVersion(); 145 146 bool databaseValidity = true; 147 if (!existsDatabaseFile || !m_database.tableExists("Cookie")) { 148 databaseValidity &= (executeSimpleSql(CREATE_COOKIE_TABLE_SQL) == SQLITE_DONE); 149 databaseValidity &= (executeSimpleSql(CREATE_DOMAIN_INDEX_SQL) == SQLITE_DONE); 150 databaseValidity &= (executeSimpleSql(CREATE_PATH_INDEX_SQL) == SQLITE_DONE); 151 } 152 153 if (!databaseValidity) { 154 // give up create database at this time (all cookies on request/response are ignored) 155 m_database.close(); 156 deleteAllDatabaseFiles(); 157 return false; 158 } 143 159 144 160 m_database.setSynchronous(SQLiteDatabase::SyncNormal); … … 161 177 m_database.close(); 162 178 } 179 } 180 181 void CookieJarDB::verifySchemaVersion() 182 { 183 if (isOnMemory()) 184 return; 185 186 int version = SQLiteStatement(m_database, "PRAGMA user_version").getColumnInt(0); 187 if (version == schemaVersion) 188 return; 189 190 switch (version) { 191 // Placeholder for schema version upgrade logic 192 // Ensure cases fall through to the next version's upgrade logic 193 194 case 0: 195 deleteAllTables(); 196 break; 197 default: 198 // This case can be reached when downgrading versions 199 LOG_ERROR("Unknown cookie database version: %d", version); 200 deleteAllTables(); 201 break; 202 } 203 204 // Update version 205 executeSimpleSql(String::format("PRAGMA user_version=%d", schemaVersion)); 206 } 207 208 void CookieJarDB::deleteAllTables() 209 { 210 if (!m_database.isOpen()) 211 return; 212 213 m_database.clearAllTables(); 163 214 } 164 215 … … 485 536 } 486 537 487 void CookieJarDB::createPrepareStatement(const char*sql)538 void CookieJarDB::createPrepareStatement(const String& sql) 488 539 { 489 540 auto statement = std::make_unique<SQLiteStatement>(m_database, sql); 490 541 int ret = statement->prepare(); 491 542 ASSERT(ret == SQLITE_OK); 492 m_statements.add( String(sql), WTFMove(statement));493 } 494 495 SQLiteStatement* CookieJarDB::getPrepareStatement(const char*sql)496 { 497 const auto& statement = m_statements.get( String(sql));543 m_statements.add(sql, WTFMove(statement)); 544 } 545 546 SQLiteStatement* CookieJarDB::getPrepareStatement(const String& sql) 547 { 548 const auto& statement = m_statements.get(sql); 498 549 ASSERT(statement); 499 550 statement->reset(); … … 501 552 } 502 553 503 int CookieJarDB::executeSimpleSql(const char*sql, bool ignoreError)554 int CookieJarDB::executeSimpleSql(const String& sql, bool ignoreError) 504 555 { 505 556 SQLiteStatement statement(m_database, sql); … … 509 560 checkSQLiteReturnCode(ret); 510 561 if (ret != SQLITE_OK && ret != SQLITE_DONE && ret != SQLITE_ROW && !ignoreError) 511 LOG_ERROR("Failed to execute %s error: %s", sql , m_database.lastErrorMsg());562 LOG_ERROR("Failed to execute %s error: %s", sql.ascii().data(), m_database.lastErrorMsg()); 512 563 513 564 return ret; -
trunk/Source/WebCore/platform/network/curl/CookieJarDB.h
r234938 r236085 76 76 void deleteAllDatabaseFiles(); 77 77 78 void createPrepareStatement(const char* sql); 79 SQLiteStatement* getPrepareStatement(const char* sql); 80 int executeSimpleSql(const char* sql, bool ignoreError = false); 78 void verifySchemaVersion(); 79 void deleteAllTables(); 80 81 void createPrepareStatement(const String& sql); 82 SQLiteStatement* getPrepareStatement(const String& sql); 83 int executeSimpleSql(const String& sql, bool ignoreError = false); 81 84 82 85 int deleteCookieInternal(const String& name, const String& domain, const String& path); -
trunk/Source/WebCore/platform/network/curl/NetworkStorageSessionCurl.cpp
r234376 r236085 86 86 { 87 87 ASSERT(isMainThread()); 88 static NeverDestroyed<std::unique_ptr<NetworkStorageSession>> session;88 static std::unique_ptr<NetworkStorageSession> session; 89 89 return session; 90 90 } -
trunk/Source/WebCore/platform/sql/SQLiteDatabase.cpp
r234501 r236085 489 489 int autoVacuumMode = statement.getColumnInt(0); 490 490 int error = lastError(); 491 statement.finalize(); 491 492 492 493 // Check if we got an error while trying to get the value of the auto_vacuum flag.
Note: See TracChangeset
for help on using the changeset viewer.