Chromium Code Reviews| Index: chrome/common/net/cookie_monster_sqlite.cc |
| =================================================================== |
| --- chrome/common/net/cookie_monster_sqlite.cc (revision 24867) |
| +++ chrome/common/net/cookie_monster_sqlite.cc (working copy) |
| @@ -271,8 +271,11 @@ |
| } |
| } |
| -// Version number of the database. |
| -static const int kCurrentVersionNumber = 3; |
| +// Version number of the database. In version 4, we migrated the time epoch. |
| +// If you open the DB with an older version on Mac or Linux, the times will |
| +// look wonky, but the file will likely be usable. On Windows version 3 and 4 |
| +// are the same. |
| +static const int kCurrentVersionNumber = 4; |
| static const int kCompatibleVersionNumber = 3; |
|
Evan Martin
2009/09/01 00:04:14
Can you doc this too? (I checked the code and it
|
| namespace { |
| @@ -393,6 +396,43 @@ |
| transaction.Commit(); |
| } |
| + if (cur_version == 3) { |
| + // The time epoch changed for Mac & Linux in this version to match Windows. |
| + // This patch came after the main epoch change happened, so some |
| + // developers have "good" times for cookies added by the more recent |
| + // versions. So we have to be careful to only update times that are under |
| + // the old system (which will appear to be from before 1970 in the new |
| + // system). The magic number used below is 1970 in our time units. |
| + SQLTransaction transaction(db); |
| + transaction.Begin(); |
| +#if !defined(OS_WIN) |
| + sqlite3_exec(db, |
| + "UPDATE cookies " |
| + "SET creation_utc = creation_utc + 11644473600000000 " |
| + "WHERE rowid IN " |
| + "(SELECT rowid FROM cookies WHERE " |
| + "creation_utc > 0 AND creation_utc < 11644473600000000)", |
| + NULL, NULL, NULL); |
| + sqlite3_exec(db, |
| + "UPDATE cookies " |
| + "SET expires_utc = expires_utc + 11644473600000000 " |
| + "WHERE rowid IN " |
| + "(SELECT rowid FROM cookies WHERE " |
| + "expires_utc > 0 AND expires_utc < 11644473600000000)", |
| + NULL, NULL, NULL); |
| + sqlite3_exec(db, |
| + "UPDATE cookies " |
| + "SET last_access_utc = last_access_utc + 11644473600000000 " |
| + "WHERE rowid IN " |
| + "(SELECT rowid FROM cookies WHERE " |
| + "last_access_utc > 0 AND last_access_utc < 11644473600000000)", |
| + NULL, NULL, NULL); |
| +#endif |
| + ++cur_version; |
| + meta_table_.SetVersionNumber(cur_version); |
| + transaction.Commit(); |
| + } |
| + |
| // Put future migration cases here. |
| // When the version is too old, we just try to continue anyway, there should |