Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(283)

Side by Side Diff: components/history/core/browser/thumbnail_database.cc

Issue 1010973011: Deprecate version 5 of the favicon database. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/browser/history/thumbnail_database_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/history/core/browser/thumbnail_database.h" 5 #include "components/history/core/browser/thumbnail_database.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 // For this database, schema migrations are deprecated after two 72 // For this database, schema migrations are deprecated after two
73 // years. This means that the oldest non-deprecated version should be 73 // years. This means that the oldest non-deprecated version should be
74 // two years old or greater (thus the migrations to get there are 74 // two years old or greater (thus the migrations to get there are
75 // older). Databases containing deprecated versions will be cleared 75 // older). Databases containing deprecated versions will be cleared
76 // at startup. Since this database is a cache, losing old data is not 76 // at startup. Since this database is a cache, losing old data is not
77 // fatal (in fact, very old data may be expired immediately at startup 77 // fatal (in fact, very old data may be expired immediately at startup
78 // anyhow). 78 // anyhow).
79 79
80 // Version 7: 911a634d/r209424 by qsr@chromium.org on 2013-07-01 80 // Version 7: 911a634d/r209424 by qsr@chromium.org on 2013-07-01
81 // Version 6: 610f923b/r152367 by pkotwicz@chromium.org on 2012-08-20 81 // Version 6: 610f923b/r152367 by pkotwicz@chromium.org on 2012-08-20
82 // Version 5: e2ee8ae9/r105004 by groby@chromium.org on 2011-10-12 82 // Version 5: e2ee8ae9/r105004 by groby@chromium.org on 2011-10-12
Scott Hess - ex-Googler 2015/03/24 19:28:25 Mark this line (deprecated).
Roger McFarlane (Chromium) 2015/03/24 22:26:57 Done.
83 // Version 4: 5f104d76/r77288 by sky@chromium.org on 2011-03-08 (deprecated) 83 // Version 4: 5f104d76/r77288 by sky@chromium.org on 2011-03-08 (deprecated)
84 // Version 3: 09911bf3/r15 by initial.commit on 2008-07-26 (deprecated) 84 // Version 3: 09911bf3/r15 by initial.commit on 2008-07-26 (deprecated)
85 85
86 // Version number of the database. 86 // Version number of the database.
87 // NOTE(shess): When changing the version, add a new golden file for 87 // NOTE(shess): When changing the version, add a new golden file for
88 // the new version and a test to verify that Init() works with it. 88 // the new version and a test to verify that Init() works with it.
89 const int kCurrentVersionNumber = 7; 89 const int kCurrentVersionNumber = 7;
90 const int kCompatibleVersionNumber = 7; 90 const int kCompatibleVersionNumber = 7;
91 const int kDeprecatedVersionNumber = 4; // and earlier. 91 const int kDeprecatedVersionNumber = 5; // and earlier.
92 92
93 void FillIconMapping(const sql::Statement& statement, 93 void FillIconMapping(const sql::Statement& statement,
94 const GURL& page_url, 94 const GURL& page_url,
95 IconMapping* icon_mapping) { 95 IconMapping* icon_mapping) {
96 icon_mapping->mapping_id = statement.ColumnInt64(0); 96 icon_mapping->mapping_id = statement.ColumnInt64(0);
97 icon_mapping->icon_id = statement.ColumnInt64(1); 97 icon_mapping->icon_id = statement.ColumnInt64(1);
98 icon_mapping->icon_type = 98 icon_mapping->icon_type =
99 static_cast<favicon_base::IconType>(statement.ColumnInt(2)); 99 static_cast<favicon_base::IconType>(statement.ColumnInt(2));
100 icon_mapping->icon_url = GURL(statement.ColumnString(3)); 100 icon_mapping->icon_url = GURL(statement.ColumnString(3));
101 icon_mapping->page_url = page_url; 101 icon_mapping->page_url = page_url;
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after
431 // creating the recover virtual table for corrupt.meta. The table 431 // creating the recover virtual table for corrupt.meta. The table
432 // may not exist, or the database may be too far gone. Either 432 // may not exist, or the database may be too far gone. Either
433 // way, unclear how to resolve. 433 // way, unclear how to resolve.
434 sql::Recovery::Rollback(recovery.Pass()); 434 sql::Recovery::Rollback(recovery.Pass());
435 RecordRecoveryEvent(RECOVERY_EVENT_FAILED_META_VERSION); 435 RecordRecoveryEvent(RECOVERY_EVENT_FAILED_META_VERSION);
436 return; 436 return;
437 } 437 }
438 438
439 // This code may be able to fetch version information that the regular 439 // This code may be able to fetch version information that the regular
440 // deprecation path cannot. 440 // deprecation path cannot.
441 // NOTE(shess): v5 and v6 are currently not deprecated in the normal Init() 441 // NOTE(shess,rogerm): v6 is not currently deprecated in the normal Init()
442 // path, but are deprecated in the recovery path in the interest of keeping 442 // path, but is deprecated in the recovery path in the interest of keeping
443 // the code simple. http://crbug.com/327485 for numbers. 443 // the code simple. http://crbug.com/327485 for numbers.
444 DCHECK_LE(kDeprecatedVersionNumber, 6); 444 DCHECK_LE(kDeprecatedVersionNumber, 6);
445 if (version <= 6) { 445 if (version <= 6) {
446 sql::Recovery::Unrecoverable(recovery.Pass()); 446 sql::Recovery::Unrecoverable(recovery.Pass());
447 RecordRecoveryEvent(RECOVERY_EVENT_DEPRECATED); 447 RecordRecoveryEvent(RECOVERY_EVENT_DEPRECATED);
448 return; 448 return;
449 } 449 }
450 450
451 // Earlier versions have been handled or deprecated, later versions should be 451 // Earlier versions have been handled or deprecated, later versions should be
452 // impossible. 452 // impossible.
(...skipping 780 matching lines...) Expand 10 before | Expand all | Expand 10 after
1233 } 1233 }
1234 1234
1235 if (cur_version < 7 && !db_.DoesColumnExist("favicons", "sizes")) { 1235 if (cur_version < 7 && !db_.DoesColumnExist("favicons", "sizes")) {
1236 LOG(ERROR) << "Raze because of missing favicon.sizes"; 1236 LOG(ERROR) << "Raze because of missing favicon.sizes";
1237 RecordInvalidStructure(STRUCTURE_EVENT_VERSION5); 1237 RecordInvalidStructure(STRUCTURE_EVENT_VERSION5);
1238 1238
1239 db_.RazeAndClose(); 1239 db_.RazeAndClose();
1240 return sql::INIT_FAILURE; 1240 return sql::INIT_FAILURE;
1241 } 1241 }
1242 1242
1243 if (cur_version == 5) {
1244 ++cur_version;
1245 if (!UpgradeToVersion6())
1246 return CantUpgradeToVersion(cur_version);
1247 }
1248
1249 if (cur_version == 6) { 1243 if (cur_version == 6) {
1250 ++cur_version; 1244 ++cur_version;
1251 if (!UpgradeToVersion7()) 1245 if (!UpgradeToVersion7())
1252 return CantUpgradeToVersion(cur_version); 1246 return CantUpgradeToVersion(cur_version);
1253 } 1247 }
1254 1248
1255 LOG_IF(WARNING, cur_version < kCurrentVersionNumber) << 1249 LOG_IF(WARNING, cur_version < kCurrentVersionNumber) <<
1256 "Thumbnail database version " << cur_version << " is too old to handle."; 1250 "Thumbnail database version " << cur_version << " is too old to handle.";
1257 1251
1258 // Initialization is complete. 1252 // Initialization is complete.
(...skipping 17 matching lines...) Expand all
1276 return sql::INIT_OK; 1270 return sql::INIT_OK;
1277 } 1271 }
1278 1272
1279 sql::InitStatus ThumbnailDatabase::CantUpgradeToVersion(int cur_version) { 1273 sql::InitStatus ThumbnailDatabase::CantUpgradeToVersion(int cur_version) {
1280 LOG(WARNING) << "Unable to update to thumbnail database to version " << 1274 LOG(WARNING) << "Unable to update to thumbnail database to version " <<
1281 cur_version << "."; 1275 cur_version << ".";
1282 db_.Close(); 1276 db_.Close();
1283 return sql::INIT_FAILURE; 1277 return sql::INIT_FAILURE;
1284 } 1278 }
1285 1279
1286 bool ThumbnailDatabase::UpgradeToVersion6() {
1287 // Move bitmap data from favicons to favicon_bitmaps.
1288 bool success =
1289 db_.Execute("INSERT INTO favicon_bitmaps (icon_id, last_updated, "
1290 "image_data, width, height)"
1291 "SELECT id, last_updated, image_data, 0, 0 FROM favicons") &&
1292 db_.Execute("CREATE TABLE temp_favicons ("
1293 "id INTEGER PRIMARY KEY,"
1294 "url LONGVARCHAR NOT NULL,"
1295 "icon_type INTEGER DEFAULT 1,"
1296 // default icon_type FAVICON to be consistent with
1297 // past migration.
1298 "sizes LONGVARCHAR)") &&
1299 db_.Execute("INSERT INTO temp_favicons (id, url, icon_type) "
1300 "SELECT id, url, icon_type FROM favicons") &&
1301 db_.Execute("DROP TABLE favicons") &&
1302 db_.Execute("ALTER TABLE temp_favicons RENAME TO favicons");
1303 // NOTE(shess): v7 will re-create the index.
1304 if (!success)
1305 return false;
1306
1307 meta_table_.SetVersionNumber(6);
1308 meta_table_.SetCompatibleVersionNumber(std::min(6, kCompatibleVersionNumber));
1309 return true;
1310 }
1311
1312 bool ThumbnailDatabase::UpgradeToVersion7() { 1280 bool ThumbnailDatabase::UpgradeToVersion7() {
1313 // Sizes column was never used, remove it. 1281 // Sizes column was never used, remove it.
1314 bool success = 1282 bool success =
1315 db_.Execute("CREATE TABLE temp_favicons (" 1283 db_.Execute("CREATE TABLE temp_favicons ("
1316 "id INTEGER PRIMARY KEY," 1284 "id INTEGER PRIMARY KEY,"
1317 "url LONGVARCHAR NOT NULL," 1285 "url LONGVARCHAR NOT NULL,"
1318 // default icon_type FAVICON to be consistent with 1286 // default icon_type FAVICON to be consistent with
1319 // past migration. 1287 // past migration.
1320 "icon_type INTEGER DEFAULT 1)") && 1288 "icon_type INTEGER DEFAULT 1)") &&
1321 db_.Execute("INSERT INTO temp_favicons (id, url, icon_type) " 1289 db_.Execute("INSERT INTO temp_favicons (id, url, icon_type) "
1322 "SELECT id, url, icon_type FROM favicons") && 1290 "SELECT id, url, icon_type FROM favicons") &&
1323 db_.Execute("DROP TABLE favicons") && 1291 db_.Execute("DROP TABLE favicons") &&
1324 db_.Execute("ALTER TABLE temp_favicons RENAME TO favicons") && 1292 db_.Execute("ALTER TABLE temp_favicons RENAME TO favicons") &&
1325 db_.Execute("CREATE INDEX IF NOT EXISTS favicons_url ON favicons(url)"); 1293 db_.Execute("CREATE INDEX IF NOT EXISTS favicons_url ON favicons(url)");
1326 1294
1327 if (!success) 1295 if (!success)
1328 return false; 1296 return false;
1329 1297
1330 meta_table_.SetVersionNumber(7); 1298 meta_table_.SetVersionNumber(7);
1331 meta_table_.SetCompatibleVersionNumber(std::min(7, kCompatibleVersionNumber)); 1299 meta_table_.SetCompatibleVersionNumber(std::min(7, kCompatibleVersionNumber));
1332 return true; 1300 return true;
1333 } 1301 }
1334 1302
1335 bool ThumbnailDatabase::IsFaviconDBStructureIncorrect() { 1303 bool ThumbnailDatabase::IsFaviconDBStructureIncorrect() {
1336 return !db_.IsSQLValid("SELECT id, url, icon_type FROM favicons"); 1304 return !db_.IsSQLValid("SELECT id, url, icon_type FROM favicons");
1337 } 1305 }
1338 1306
1339 } // namespace history 1307 } // namespace history
OLDNEW
« no previous file with comments | « chrome/browser/history/thumbnail_database_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698