OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/password_manager/core/browser/login_database.h" | 5 #include "components/password_manager/core/browser/login_database.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 10 matching lines...) Expand all Loading... | |
21 #include "google_apis/gaia/gaia_auth_util.h" | 21 #include "google_apis/gaia/gaia_auth_util.h" |
22 #include "google_apis/gaia/gaia_urls.h" | 22 #include "google_apis/gaia/gaia_urls.h" |
23 #include "sql/connection.h" | 23 #include "sql/connection.h" |
24 #include "sql/statement.h" | 24 #include "sql/statement.h" |
25 #include "sql/transaction.h" | 25 #include "sql/transaction.h" |
26 | 26 |
27 using autofill::PasswordForm; | 27 using autofill::PasswordForm; |
28 | 28 |
29 namespace password_manager { | 29 namespace password_manager { |
30 | 30 |
31 const int kCurrentVersionNumber = 9; | 31 const int kCurrentVersionNumber = 10; |
32 static const int kCompatibleVersionNumber = 1; | 32 static const int kCompatibleVersionNumber = 1; |
33 | 33 |
34 Pickle SerializeVector(const std::vector<base::string16>& vec) { | 34 Pickle SerializeVector(const std::vector<base::string16>& vec) { |
35 Pickle p; | 35 Pickle p; |
36 for (size_t i = 0; i < vec.size(); ++i) { | 36 for (size_t i = 0; i < vec.size(); ++i) { |
37 p.WriteString16(vec[i]); | 37 p.WriteString16(vec[i]); |
38 } | 38 } |
39 return p; | 39 return p; |
40 } | 40 } |
41 | 41 |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
262 case 6: | 262 case 6: |
263 if (!db_.Execute("ALTER TABLE logins ADD COLUMN display_name VARCHAR") || | 263 if (!db_.Execute("ALTER TABLE logins ADD COLUMN display_name VARCHAR") || |
264 !db_.Execute("ALTER TABLE logins ADD COLUMN avatar_url VARCHAR") || | 264 !db_.Execute("ALTER TABLE logins ADD COLUMN avatar_url VARCHAR") || |
265 !db_.Execute("ALTER TABLE logins " | 265 !db_.Execute("ALTER TABLE logins " |
266 "ADD COLUMN federation_url VARCHAR") || | 266 "ADD COLUMN federation_url VARCHAR") || |
267 !db_.Execute("ALTER TABLE logins ADD COLUMN is_zero_click INTEGER")) { | 267 !db_.Execute("ALTER TABLE logins ADD COLUMN is_zero_click INTEGER")) { |
268 return false; | 268 return false; |
269 } | 269 } |
270 meta_table_.SetVersionNumber(7); | 270 meta_table_.SetVersionNumber(7); |
271 // Fall through. | 271 // Fall through. |
272 case 7: | 272 case 7: { |
273 // Keep version 8 around even though no changes are made. See | 273 // Keep version 8 around even though no changes are made. See |
274 // crbug.com/423716 for context. | 274 // crbug.com/423716 for context. |
275 meta_table_.SetVersionNumber(8); | 275 meta_table_.SetVersionNumber(8); |
276 // Fall through. | 276 // Fall through. |
277 // TODO(gcasto): Remove use_additional_auth by copying table. | 277 } |
278 // https://www.sqlite.org/lang_altertable.html | |
279 case 8: { | 278 case 8: { |
280 sql::Statement s; | 279 sql::Statement s; |
281 s.Assign(db_.GetCachedStatement(SQL_FROM_HERE, | 280 s.Assign(db_.GetCachedStatement(SQL_FROM_HERE, |
282 "UPDATE logins SET " | 281 "UPDATE logins SET " |
283 "date_created = " | 282 "date_created = " |
284 "(date_created * ?) + ?")); | 283 "(date_created * ?) + ?")); |
285 s.BindInt64(0, base::Time::kMicrosecondsPerSecond); | 284 s.BindInt64(0, base::Time::kMicrosecondsPerSecond); |
286 s.BindInt64(1, base::Time::kTimeTToMicrosecondsOffset); | 285 s.BindInt64(1, base::Time::kTimeTToMicrosecondsOffset); |
287 if (!s.Run()) | 286 if (!s.Run()) |
288 return false; | 287 return false; |
289 meta_table_.SetVersionNumber(9); | 288 meta_table_.SetVersionNumber(9); |
290 // Fall through. | 289 // Fall through. |
291 } | 290 } |
291 case 9: { | |
292 // Remove use_additional_auth column from database schema | |
293 // crbug.com/423716 for context. | |
294 std::string fields_to_copy = | |
295 "origin_url, action_url, username_element, username_value, " | |
296 "password_element, password_value, submit_element, " | |
297 "signon_realm, ssl_valid, preferred, date_created, " | |
298 "blacklisted_by_user, " | |
Garrett Casto
2015/01/13 21:53:08
Any reason why this line is so short?
melandory
2015/01/14 08:47:10
git cl format decided so =)
melandory
2015/01/14 09:05:44
Oh, nope. It was me. Will format it better.
| |
299 "scheme, password_type, possible_usernames, times_used, form_data, " | |
300 "date_synced, display_name, avatar_url," | |
301 "federation_url, is_zero_click"; | |
302 auto copy_data_query = | |
303 [&fields_to_copy](const std::string& from, const std::string& to) { | |
304 return "INSERT INTO " + to + " SELECT " + fields_to_copy + " FROM " + | |
305 from; | |
306 }; | |
307 | |
308 if (!db_.Execute(("CREATE TEMPORARY TABLE logins_data(" + fields_to_copy + | |
309 ")").c_str()) || | |
310 !db_.Execute(copy_data_query("logins", "logins_data").c_str()) || | |
311 !db_.Execute("DROP TABLE logins") || | |
312 !db_.Execute( | |
313 ("CREATE TABLE logins(" + fields_to_copy + ")").c_str()) || | |
314 !db_.Execute(copy_data_query("logins_data", "logins").c_str()) || | |
315 !db_.Execute("DROP TABLE logins_data") || | |
316 !db_.Execute("CREATE INDEX logins_signon ON logins (signon_realm)")) | |
317 return false; | |
318 | |
319 meta_table_.SetVersionNumber(10); | |
320 } | |
292 case kCurrentVersionNumber: | 321 case kCurrentVersionNumber: |
293 // Already up to date | 322 // Already up to date |
294 return true; | 323 return true; |
295 default: | 324 default: |
296 NOTREACHED(); | 325 NOTREACHED(); |
297 return false; | 326 return false; |
298 } | 327 } |
299 } | 328 } |
300 | 329 |
301 bool LoginDatabase::InitLoginsTable() { | 330 bool LoginDatabase::InitLoginsTable() { |
(...skipping 555 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
857 | 886 |
858 bool LoginDatabase::DeleteAndRecreateDatabaseFile() { | 887 bool LoginDatabase::DeleteAndRecreateDatabaseFile() { |
859 DCHECK(db_.is_open()); | 888 DCHECK(db_.is_open()); |
860 meta_table_.Reset(); | 889 meta_table_.Reset(); |
861 db_.Close(); | 890 db_.Close(); |
862 sql::Connection::Delete(db_path_); | 891 sql::Connection::Delete(db_path_); |
863 return Init(db_path_); | 892 return Init(db_path_); |
864 } | 893 } |
865 | 894 |
866 } // namespace password_manager | 895 } // namespace password_manager |
OLD | NEW |