Index: content/browser/appcache/appcache_database.cc |
diff --git a/content/browser/appcache/appcache_database.cc b/content/browser/appcache/appcache_database.cc |
index 985173be166b49be5017b5ad8e6478488b5307bf..8298bfb58bb6fff89a8c230800b653cc3ae4f350 100644 |
--- a/content/browser/appcache/appcache_database.cc |
+++ b/content/browser/appcache/appcache_database.cc |
@@ -23,13 +23,10 @@ namespace content { |
// Schema ------------------------------------------------------------------- |
namespace { |
-#if defined(APPCACHE_USE_SIMPLE_CACHE) |
-const int kCurrentVersion = 6; |
-const int kCompatibleVersion = 6; |
-#else |
-const int kCurrentVersion = 5; |
-const int kCompatibleVersion = 5; |
-#endif |
+const int kCurrentVersion = 7; |
+const int kCompatibleVersion = 7; |
+const bool kCreateIfNeeded = true; |
+const bool kDontCreate = false; |
// A mechanism to run experiments that may affect in data being persisted |
// in different ways such that when the experiment is toggled on/off via |
@@ -63,7 +60,9 @@ const TableInfo kTables[] = { |
" origin TEXT," |
" manifest_url TEXT," |
" creation_time INTEGER," |
- " last_access_time INTEGER)" }, |
+ " last_access_time INTEGER," |
+ " last_full_update_check_time INTEGER," |
+ " first_evictable_error_time INTEGER)" }, |
{ kCachesTable, |
"(cache_id INTEGER PRIMARY KEY," |
@@ -246,10 +245,10 @@ bool AppCacheDatabase::GetAllOriginUsage(std::map<GURL, int64>* usage_map) { |
bool AppCacheDatabase::FindOriginsWithGroups(std::set<GURL>* origins) { |
DCHECK(origins && origins->empty()); |
- if (!LazyOpen(false)) |
+ if (!LazyOpen(kDontCreate)) |
return false; |
- const char* kSql = |
+ const char kSql[] = |
"SELECT DISTINCT(origin) FROM Groups"; |
sql::Statement statement(db_->GetUniqueStatement(kSql)); |
@@ -271,7 +270,7 @@ bool AppCacheDatabase::FindLastStorageIds( |
*last_response_id = 0; |
*last_deletable_response_rowid = 0; |
- if (!LazyOpen(false)) |
+ if (!LazyOpen(kDontCreate)) |
return false; |
const char* kMaxGroupIdSql = "SELECT MAX(group_id) FROM Groups"; |
@@ -308,12 +307,14 @@ bool AppCacheDatabase::FindLastStorageIds( |
bool AppCacheDatabase::FindGroup(int64 group_id, GroupRecord* record) { |
DCHECK(record); |
- if (!LazyOpen(false)) |
+ if (!LazyOpen(kDontCreate)) |
return false; |
- const char* kSql = |
+ const char kSql[] = |
"SELECT group_id, origin, manifest_url," |
- " creation_time, last_access_time" |
+ " creation_time, last_access_time," |
+ " last_full_update_check_time," |
+ " first_evictable_error_time" |
" FROM Groups WHERE group_id = ?"; |
sql::Statement statement(db_->GetCachedStatement(SQL_FROM_HERE, kSql)); |
@@ -330,12 +331,14 @@ bool AppCacheDatabase::FindGroup(int64 group_id, GroupRecord* record) { |
bool AppCacheDatabase::FindGroupForManifestUrl( |
const GURL& manifest_url, GroupRecord* record) { |
DCHECK(record); |
- if (!LazyOpen(false)) |
+ if (!LazyOpen(kDontCreate)) |
return false; |
- const char* kSql = |
+ const char kSql[] = |
"SELECT group_id, origin, manifest_url," |
- " creation_time, last_access_time" |
+ " creation_time, last_access_time," |
+ " last_full_update_check_time," |
+ " first_evictable_error_time" |
" FROM Groups WHERE manifest_url = ?"; |
sql::Statement statement(db_->GetCachedStatement(SQL_FROM_HERE, kSql)); |
@@ -352,12 +355,14 @@ bool AppCacheDatabase::FindGroupForManifestUrl( |
bool AppCacheDatabase::FindGroupsForOrigin( |
const GURL& origin, std::vector<GroupRecord>* records) { |
DCHECK(records && records->empty()); |
- if (!LazyOpen(false)) |
+ if (!LazyOpen(kDontCreate)) |
return false; |
- const char* kSql = |
+ const char kSql[] = |
"SELECT group_id, origin, manifest_url," |
- " creation_time, last_access_time" |
+ " creation_time, last_access_time," |
+ " last_full_update_check_time," |
+ " first_evictable_error_time" |
" FROM Groups WHERE origin = ?"; |
sql::Statement statement(db_->GetCachedStatement(SQL_FROM_HERE, kSql)); |
@@ -374,12 +379,14 @@ bool AppCacheDatabase::FindGroupsForOrigin( |
bool AppCacheDatabase::FindGroupForCache(int64 cache_id, GroupRecord* record) { |
DCHECK(record); |
- if (!LazyOpen(false)) |
+ if (!LazyOpen(kDontCreate)) |
return false; |
- const char* kSql = |
+ const char kSql[] = |
"SELECT g.group_id, g.origin, g.manifest_url," |
- " g.creation_time, g.last_access_time" |
+ " g.creation_time, g.last_access_time," |
+ " g.last_full_update_check_time," |
+ " g.first_evictable_error_time" |
" FROM Groups g, Caches c" |
" WHERE c.cache_id = ? AND c.group_id = g.group_id"; |
@@ -393,24 +400,47 @@ bool AppCacheDatabase::FindGroupForCache(int64 cache_id, GroupRecord* record) { |
return true; |
} |
-bool AppCacheDatabase::UpdateLastAccessTime( |
- int64 group_id, base::Time time) { |
- if (!LazyOpen(true)) |
+bool AppCacheDatabase::InsertGroup(const GroupRecord* record) { |
+ if (!LazyOpen(kCreateIfNeeded)) |
return false; |
- const char* kSql = |
- "UPDATE Groups SET last_access_time = ? WHERE group_id = ?"; |
- |
+ const char kSql[] = |
+ "INSERT INTO Groups" |
+ " (group_id, origin, manifest_url, creation_time, last_access_time," |
+ " last_full_update_check_time, first_evictable_error_time)" |
+ " VALUES(?, ?, ?, ?, ?, ?, ?)"; |
sql::Statement statement(db_->GetCachedStatement(SQL_FROM_HERE, kSql)); |
- statement.BindInt64(0, time.ToInternalValue()); |
- statement.BindInt64(1, group_id); |
+ statement.BindInt64(0, record->group_id); |
+ statement.BindString(1, record->origin.spec()); |
+ statement.BindString(2, record->manifest_url.spec()); |
+ statement.BindInt64(3, record->creation_time.ToInternalValue()); |
+ statement.BindInt64(4, record->last_access_time.ToInternalValue()); |
+ statement.BindInt64(5, record->last_full_update_check_time.ToInternalValue()); |
+ statement.BindInt64(6, record->first_evictable_error_time.ToInternalValue()); |
+ return statement.Run(); |
+} |
+bool AppCacheDatabase::DeleteGroup(int64 group_id) { |
+ if (!LazyOpen(kDontCreate)) |
+ return false; |
+ |
+ const char kSql[] = |
+ "DELETE FROM Groups WHERE group_id = ?"; |
+ sql::Statement statement(db_->GetCachedStatement(SQL_FROM_HERE, kSql)); |
+ statement.BindInt64(0, group_id); |
return statement.Run(); |
} |
+bool AppCacheDatabase::UpdateLastAccessTime( |
+ int64 group_id, base::Time time) { |
+ if (!LazyUpdateLastAccessTime(group_id, time)) |
+ return false; |
+ return CommitLazyLastAccessTimes(); |
+} |
+ |
bool AppCacheDatabase::LazyUpdateLastAccessTime( |
int64 group_id, base::Time time) { |
- if (!LazyOpen(true)) |
+ if (!LazyOpen(kCreateIfNeeded)) |
return false; |
lazy_last_access_times_[group_id] = time; |
return true; |
@@ -419,56 +449,48 @@ bool AppCacheDatabase::LazyUpdateLastAccessTime( |
bool AppCacheDatabase::CommitLazyLastAccessTimes() { |
if (lazy_last_access_times_.empty()) |
return true; |
- if (!LazyOpen(false)) |
+ if (!LazyOpen(kDontCreate)) |
return false; |
sql::Transaction transaction(db_.get()); |
if (!transaction.Begin()) |
return false; |
- for (const auto& pair : lazy_last_access_times_) |
- UpdateLastAccessTime(pair.first, pair.second); |
+ for (const auto& pair : lazy_last_access_times_) { |
+ const char kSql[] = |
+ "UPDATE Groups SET last_access_time = ? WHERE group_id = ?"; |
+ sql::Statement statement(db_->GetCachedStatement(SQL_FROM_HERE, kSql)); |
+ statement.BindInt64(0, pair.second.ToInternalValue()); // time |
+ statement.BindInt64(1, pair.first); // group_id |
+ statement.Run(); |
+ } |
lazy_last_access_times_.clear(); |
return transaction.Commit(); |
} |
-bool AppCacheDatabase::InsertGroup(const GroupRecord* record) { |
- if (!LazyOpen(true)) |
+bool AppCacheDatabase::UpdateEvictionTimes( |
+ int64 group_id, |
+ base::Time last_full_update_check_time, |
+ base::Time first_evictable_error_time) { |
+ if (!LazyOpen(kCreateIfNeeded)) |
return false; |
- const char* kSql = |
- "INSERT INTO Groups" |
- " (group_id, origin, manifest_url, creation_time, last_access_time)" |
- " VALUES(?, ?, ?, ?, ?)"; |
- |
+ const char kSql[] = |
+ "UPDATE Groups" |
+ " SET last_full_update_check_time = ?, first_evictable_error_time = ?" |
+ " WHERE group_id = ?"; |
sql::Statement statement(db_->GetCachedStatement(SQL_FROM_HERE, kSql)); |
- statement.BindInt64(0, record->group_id); |
- statement.BindString(1, record->origin.spec()); |
- statement.BindString(2, record->manifest_url.spec()); |
- statement.BindInt64(3, record->creation_time.ToInternalValue()); |
- statement.BindInt64(4, record->last_access_time.ToInternalValue()); |
- |
- return statement.Run(); |
-} |
- |
-bool AppCacheDatabase::DeleteGroup(int64 group_id) { |
- if (!LazyOpen(false)) |
- return false; |
- |
- const char* kSql = |
- "DELETE FROM Groups WHERE group_id = ?"; |
- |
- sql::Statement statement(db_->GetCachedStatement(SQL_FROM_HERE, kSql)); |
- statement.BindInt64(0, group_id); |
- |
- return statement.Run(); |
+ statement.BindInt64(0, last_full_update_check_time.ToInternalValue()); |
+ statement.BindInt64(1, first_evictable_error_time.ToInternalValue()); |
+ statement.BindInt64(2, group_id); |
+ return statement.Run(); // Will succeed even if group_id is invalid. |
} |
bool AppCacheDatabase::FindCache(int64 cache_id, CacheRecord* record) { |
DCHECK(record); |
- if (!LazyOpen(false)) |
+ if (!LazyOpen(kDontCreate)) |
return false; |
- const char* kSql = |
+ const char kSql[] = |
"SELECT cache_id, group_id, online_wildcard, update_time, cache_size" |
" FROM Caches WHERE cache_id = ?"; |
@@ -484,10 +506,10 @@ bool AppCacheDatabase::FindCache(int64 cache_id, CacheRecord* record) { |
bool AppCacheDatabase::FindCacheForGroup(int64 group_id, CacheRecord* record) { |
DCHECK(record); |
- if (!LazyOpen(false)) |
+ if (!LazyOpen(kDontCreate)) |
return false; |
- const char* kSql = |
+ const char kSql[] = |
"SELECT cache_id, group_id, online_wildcard, update_time, cache_size" |
" FROM Caches WHERE group_id = ?"; |
@@ -519,10 +541,10 @@ bool AppCacheDatabase::FindCachesForOrigin( |
} |
bool AppCacheDatabase::InsertCache(const CacheRecord* record) { |
- if (!LazyOpen(true)) |
+ if (!LazyOpen(kCreateIfNeeded)) |
return false; |
- const char* kSql = |
+ const char kSql[] = |
"INSERT INTO Caches (cache_id, group_id, online_wildcard," |
" update_time, cache_size)" |
" VALUES(?, ?, ?, ?, ?)"; |
@@ -538,10 +560,10 @@ bool AppCacheDatabase::InsertCache(const CacheRecord* record) { |
} |
bool AppCacheDatabase::DeleteCache(int64 cache_id) { |
- if (!LazyOpen(false)) |
+ if (!LazyOpen(kDontCreate)) |
return false; |
- const char* kSql = |
+ const char kSql[] = |
"DELETE FROM Caches WHERE cache_id = ?"; |
sql::Statement statement(db_->GetCachedStatement(SQL_FROM_HERE, kSql)); |
@@ -553,10 +575,10 @@ bool AppCacheDatabase::DeleteCache(int64 cache_id) { |
bool AppCacheDatabase::FindEntriesForCache( |
int64 cache_id, std::vector<EntryRecord>* records) { |
DCHECK(records && records->empty()); |
- if (!LazyOpen(false)) |
+ if (!LazyOpen(kDontCreate)) |
return false; |
- const char* kSql = |
+ const char kSql[] = |
"SELECT cache_id, url, flags, response_id, response_size FROM Entries" |
" WHERE cache_id = ?"; |
@@ -575,10 +597,10 @@ bool AppCacheDatabase::FindEntriesForCache( |
bool AppCacheDatabase::FindEntriesForUrl( |
const GURL& url, std::vector<EntryRecord>* records) { |
DCHECK(records && records->empty()); |
- if (!LazyOpen(false)) |
+ if (!LazyOpen(kDontCreate)) |
return false; |
- const char* kSql = |
+ const char kSql[] = |
"SELECT cache_id, url, flags, response_id, response_size FROM Entries" |
" WHERE url = ?"; |
@@ -597,10 +619,10 @@ bool AppCacheDatabase::FindEntriesForUrl( |
bool AppCacheDatabase::FindEntry( |
int64 cache_id, const GURL& url, EntryRecord* record) { |
DCHECK(record); |
- if (!LazyOpen(false)) |
+ if (!LazyOpen(kDontCreate)) |
return false; |
- const char* kSql = |
+ const char kSql[] = |
"SELECT cache_id, url, flags, response_id, response_size FROM Entries" |
" WHERE cache_id = ? AND url = ?"; |
@@ -618,10 +640,10 @@ bool AppCacheDatabase::FindEntry( |
} |
bool AppCacheDatabase::InsertEntry(const EntryRecord* record) { |
- if (!LazyOpen(true)) |
+ if (!LazyOpen(kCreateIfNeeded)) |
return false; |
- const char* kSql = |
+ const char kSql[] = |
"INSERT INTO Entries (cache_id, url, flags, response_id, response_size)" |
" VALUES(?, ?, ?, ?, ?)"; |
@@ -652,10 +674,10 @@ bool AppCacheDatabase::InsertEntryRecords( |
} |
bool AppCacheDatabase::DeleteEntriesForCache(int64 cache_id) { |
- if (!LazyOpen(false)) |
+ if (!LazyOpen(kDontCreate)) |
return false; |
- const char* kSql = |
+ const char kSql[] = |
"DELETE FROM Entries WHERE cache_id = ?"; |
sql::Statement statement(db_->GetCachedStatement(SQL_FROM_HERE, kSql)); |
@@ -666,10 +688,10 @@ bool AppCacheDatabase::DeleteEntriesForCache(int64 cache_id) { |
bool AppCacheDatabase::AddEntryFlags( |
const GURL& entry_url, int64 cache_id, int additional_flags) { |
- if (!LazyOpen(false)) |
+ if (!LazyOpen(kDontCreate)) |
return false; |
- const char* kSql = |
+ const char kSql[] = |
"UPDATE Entries SET flags = flags | ? WHERE cache_id = ? AND url = ?"; |
sql::Statement statement(db_->GetCachedStatement(SQL_FROM_HERE, kSql)); |
@@ -686,10 +708,10 @@ bool AppCacheDatabase::FindNamespacesForOrigin( |
std::vector<NamespaceRecord>* fallbacks) { |
DCHECK(intercepts && intercepts->empty()); |
DCHECK(fallbacks && fallbacks->empty()); |
- if (!LazyOpen(false)) |
+ if (!LazyOpen(kDontCreate)) |
return false; |
- const char* kSql = |
+ const char kSql[] = |
"SELECT cache_id, origin, type, namespace_url, target_url, is_pattern" |
" FROM Namespaces WHERE origin = ?"; |
@@ -707,10 +729,10 @@ bool AppCacheDatabase::FindNamespacesForCache( |
std::vector<NamespaceRecord>* fallbacks) { |
DCHECK(intercepts && intercepts->empty()); |
DCHECK(fallbacks && fallbacks->empty()); |
- if (!LazyOpen(false)) |
+ if (!LazyOpen(kDontCreate)) |
return false; |
- const char* kSql = |
+ const char kSql[] = |
"SELECT cache_id, origin, type, namespace_url, target_url, is_pattern" |
" FROM Namespaces WHERE cache_id = ?"; |
@@ -724,10 +746,10 @@ bool AppCacheDatabase::FindNamespacesForCache( |
bool AppCacheDatabase::InsertNamespace( |
const NamespaceRecord* record) { |
- if (!LazyOpen(true)) |
+ if (!LazyOpen(kCreateIfNeeded)) |
return false; |
- const char* kSql = |
+ const char kSql[] = |
"INSERT INTO Namespaces" |
" (cache_id, origin, type, namespace_url, target_url, is_pattern)" |
" VALUES (?, ?, ?, ?, ?, ?)"; |
@@ -768,10 +790,10 @@ bool AppCacheDatabase::InsertNamespaceRecords( |
} |
bool AppCacheDatabase::DeleteNamespacesForCache(int64 cache_id) { |
- if (!LazyOpen(false)) |
+ if (!LazyOpen(kDontCreate)) |
return false; |
- const char* kSql = |
+ const char kSql[] = |
"DELETE FROM Namespaces WHERE cache_id = ?"; |
sql::Statement statement(db_->GetCachedStatement(SQL_FROM_HERE, kSql)); |
@@ -783,10 +805,10 @@ bool AppCacheDatabase::DeleteNamespacesForCache(int64 cache_id) { |
bool AppCacheDatabase::FindOnlineWhiteListForCache( |
int64 cache_id, std::vector<OnlineWhiteListRecord>* records) { |
DCHECK(records && records->empty()); |
- if (!LazyOpen(false)) |
+ if (!LazyOpen(kDontCreate)) |
return false; |
- const char* kSql = |
+ const char kSql[] = |
"SELECT cache_id, namespace_url, is_pattern FROM OnlineWhiteLists" |
" WHERE cache_id = ?"; |
@@ -803,10 +825,10 @@ bool AppCacheDatabase::FindOnlineWhiteListForCache( |
bool AppCacheDatabase::InsertOnlineWhiteList( |
const OnlineWhiteListRecord* record) { |
- if (!LazyOpen(true)) |
+ if (!LazyOpen(kCreateIfNeeded)) |
return false; |
- const char* kSql = |
+ const char kSql[] = |
"INSERT INTO OnlineWhiteLists (cache_id, namespace_url, is_pattern)" |
" VALUES (?, ?, ?)"; |
@@ -835,10 +857,10 @@ bool AppCacheDatabase::InsertOnlineWhiteListRecords( |
} |
bool AppCacheDatabase::DeleteOnlineWhiteListForCache(int64 cache_id) { |
- if (!LazyOpen(false)) |
+ if (!LazyOpen(kDontCreate)) |
return false; |
- const char* kSql = |
+ const char kSql[] = |
"DELETE FROM OnlineWhiteLists WHERE cache_id = ?"; |
sql::Statement statement(db_->GetCachedStatement(SQL_FROM_HERE, kSql)); |
@@ -849,10 +871,10 @@ bool AppCacheDatabase::DeleteOnlineWhiteListForCache(int64 cache_id) { |
bool AppCacheDatabase::GetDeletableResponseIds( |
std::vector<int64>* response_ids, int64 max_rowid, int limit) { |
- if (!LazyOpen(false)) |
+ if (!LazyOpen(kDontCreate)) |
return false; |
- const char* kSql = |
+ const char kSql[] = |
"SELECT response_id FROM DeletableResponseIds " |
" WHERE rowid <= ?" |
" LIMIT ?"; |
@@ -868,14 +890,14 @@ bool AppCacheDatabase::GetDeletableResponseIds( |
bool AppCacheDatabase::InsertDeletableResponseIds( |
const std::vector<int64>& response_ids) { |
- const char* kSql = |
+ const char kSql[] = |
"INSERT INTO DeletableResponseIds (response_id) VALUES (?)"; |
return RunCachedStatementWithIds(SQL_FROM_HERE, kSql, response_ids); |
} |
bool AppCacheDatabase::DeleteDeletableResponseIds( |
const std::vector<int64>& response_ids) { |
- const char* kSql = |
+ const char kSql[] = |
"DELETE FROM DeletableResponseIds WHERE response_id = ?"; |
return RunCachedStatementWithIds(SQL_FROM_HERE, kSql, response_ids); |
} |
@@ -884,7 +906,7 @@ bool AppCacheDatabase::RunCachedStatementWithIds( |
const sql::StatementID& statement_id, const char* sql, |
const std::vector<int64>& ids) { |
DCHECK(sql); |
- if (!LazyOpen(true)) |
+ if (!LazyOpen(kCreateIfNeeded)) |
return false; |
sql::Transaction transaction(db_.get()); |
@@ -921,10 +943,10 @@ bool AppCacheDatabase::FindResponseIdsForCacheHelper( |
std::set<int64>* ids_set) { |
DCHECK(ids_vector || ids_set); |
DCHECK(!(ids_vector && ids_set)); |
- if (!LazyOpen(false)) |
+ if (!LazyOpen(kDontCreate)) |
return false; |
- const char* kSql = |
+ const char kSql[] = |
"SELECT response_id FROM Entries WHERE cache_id = ?"; |
sql::Statement statement(db_->GetCachedStatement(SQL_FROM_HERE, kSql)); |
@@ -956,6 +978,11 @@ void AppCacheDatabase::ReadGroupRecord( |
record->last_access_time = |
base::Time::FromInternalValue(statement.ColumnInt64(4)); |
} |
+ |
+ record->last_full_update_check_time = |
+ base::Time::FromInternalValue(statement.ColumnInt64(5)); |
+ record->first_evictable_error_time = |
+ base::Time::FromInternalValue(statement.ColumnInt64(6)); |
} |
void AppCacheDatabase::ReadCacheRecord( |
@@ -1134,8 +1161,9 @@ bool AppCacheDatabase::CreateSchema() { |
bool AppCacheDatabase::UpgradeSchema() { |
#if defined(APPCACHE_USE_SIMPLE_CACHE) |
- return DeleteExistingAndCreateNewDatabase(); |
-#else |
+ if (meta_table_->GetVersionNumber() < 6) |
+ return DeleteExistingAndCreateNewDatabase(); |
+#endif |
if (meta_table_->GetVersionNumber() == 3) { |
// version 3 was pre 12/17/2011 |
DCHECK_EQ(strcmp(kNamespacesTable, kTables[3].table_name), 0); |
@@ -1207,13 +1235,43 @@ bool AppCacheDatabase::UpgradeSchema() { |
} |
meta_table_->SetVersionNumber(5); |
meta_table_->SetCompatibleVersionNumber(5); |
+ if (!transaction.Commit()) |
+ return false; |
+ } |
+ |
+#if defined(APPCACHE_USE_SIMPLE_CACHE) |
+ // The schema version number was increased to 6 when we switched to the |
+ // SimpleCache for Android, but the SQL part of the schema is identical |
+ // to v5 on desktop chrome. |
+ if (meta_table_->GetVersionNumber() == 6) { |
+#else |
+ if (meta_table_->GetVersionNumber() == 5) { |
+#endif |
+ // Versions 5 and 6 were pre-July 2015. |
+ // Version 7 adds support for expiring caches that are failing to update. |
+ sql::Transaction transaction(db_.get()); |
+ if (!transaction.Begin() || |
+ !db_->Execute( |
+ "ALTER TABLE Groups ADD COLUMN" |
+ " last_full_update_check_time INTEGER") || |
+ !db_->Execute( |
+ "ALTER TABLE Groups ADD COLUMN" |
+ " first_evictable_error_time INTEGER") || |
+ !db_->Execute( |
+ "UPDATE Groups" |
+ " SET last_full_update_check_time =" |
+ " (SELECT update_time FROM Caches" |
+ " WHERE Caches.group_id = Groups.group_id)")) { |
+ return false; |
+ } |
+ meta_table_->SetVersionNumber(7); |
+ meta_table_->SetCompatibleVersionNumber(7); |
return transaction.Commit(); |
} |
// If there is no upgrade path for the version on disk to the current |
// version, nuke everything and start over. |
return DeleteExistingAndCreateNewDatabase(); |
-#endif |
} |
void AppCacheDatabase::ResetConnectionAndTables() { |
@@ -1245,7 +1303,7 @@ bool AppCacheDatabase::DeleteExistingAndCreateNewDatabase() { |
return false; |
base::AutoReset<bool> auto_reset(&is_recreating_, true); |
- return LazyOpen(true); |
+ return LazyOpen(kCreateIfNeeded); |
} |
void AppCacheDatabase::OnDatabaseError(int err, sql::Statement* stmt) { |