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

Side by Side Diff: components/password_manager/core/browser/login_database.cc

Issue 920683002: [Password Generation] Add negative votes for crowdsourcing (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Cleanup Created 5 years, 10 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
OLDNEW
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"
11 #include "base/files/file_path.h" 11 #include "base/files/file_path.h"
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/metrics/histogram.h" 13 #include "base/metrics/histogram.h"
14 #include "base/pickle.h" 14 #include "base/pickle.h"
15 #include "base/strings/string_util.h" 15 #include "base/strings/string_util.h"
16 #include "base/strings/stringprintf.h" 16 #include "base/strings/stringprintf.h"
17 #include "base/time/time.h" 17 #include "base/time/time.h"
18 #include "components/autofill/core/common/password_form.h" 18 #include "components/autofill/core/common/password_form.h"
19 #include "components/password_manager/core/browser/password_manager_client.h" 19 #include "components/password_manager/core/browser/password_manager_client.h"
20 #include "google_apis/gaia/gaia_auth_util.h" 20 #include "google_apis/gaia/gaia_auth_util.h"
21 #include "google_apis/gaia/gaia_urls.h" 21 #include "google_apis/gaia/gaia_urls.h"
22 #include "sql/connection.h" 22 #include "sql/connection.h"
23 #include "sql/statement.h" 23 #include "sql/statement.h"
24 #include "sql/transaction.h" 24 #include "sql/transaction.h"
25 25
26 using autofill::PasswordForm; 26 using autofill::PasswordForm;
27 27
28 namespace password_manager { 28 namespace password_manager {
29 29
30 const int kCurrentVersionNumber = 11; 30 const int kCurrentVersionNumber = 12;
31 static const int kCompatibleVersionNumber = 1; 31 static const int kCompatibleVersionNumber = 1;
32 32
33 Pickle SerializeVector(const std::vector<base::string16>& vec) { 33 Pickle SerializeVector(const std::vector<base::string16>& vec) {
34 Pickle p; 34 Pickle p;
35 for (size_t i = 0; i < vec.size(); ++i) { 35 for (size_t i = 0; i < vec.size(); ++i) {
36 p.WriteString16(vec[i]); 36 p.WriteString16(vec[i]);
37 } 37 }
38 return p; 38 return p;
39 } 39 }
40 40
(...skipping 27 matching lines...) Expand all
68 COLUMN_SCHEME, 68 COLUMN_SCHEME,
69 COLUMN_PASSWORD_TYPE, 69 COLUMN_PASSWORD_TYPE,
70 COLUMN_POSSIBLE_USERNAMES, 70 COLUMN_POSSIBLE_USERNAMES,
71 COLUMN_TIMES_USED, 71 COLUMN_TIMES_USED,
72 COLUMN_FORM_DATA, 72 COLUMN_FORM_DATA,
73 COLUMN_DATE_SYNCED, 73 COLUMN_DATE_SYNCED,
74 COLUMN_DISPLAY_NAME, 74 COLUMN_DISPLAY_NAME,
75 COLUMN_AVATAR_URL, 75 COLUMN_AVATAR_URL,
76 COLUMN_FEDERATION_URL, 76 COLUMN_FEDERATION_URL,
77 COLUMN_SKIP_ZERO_CLICK, 77 COLUMN_SKIP_ZERO_CLICK,
78 COLUMN_GENERATION_UPLOAD_STATUS,
78 }; 79 };
79 80
80 void BindAddStatement(const PasswordForm& form, 81 void BindAddStatement(const PasswordForm& form,
81 const std::string& encrypted_password, 82 const std::string& encrypted_password,
82 sql::Statement* s) { 83 sql::Statement* s) {
83 s->BindString(COLUMN_ORIGIN_URL, form.origin.spec()); 84 s->BindString(COLUMN_ORIGIN_URL, form.origin.spec());
84 s->BindString(COLUMN_ACTION_URL, form.action.spec()); 85 s->BindString(COLUMN_ACTION_URL, form.action.spec());
85 s->BindString16(COLUMN_USERNAME_ELEMENT, form.username_element); 86 s->BindString16(COLUMN_USERNAME_ELEMENT, form.username_element);
86 s->BindString16(COLUMN_USERNAME_VALUE, form.username_value); 87 s->BindString16(COLUMN_USERNAME_VALUE, form.username_value);
87 s->BindString16(COLUMN_PASSWORD_ELEMENT, form.password_element); 88 s->BindString16(COLUMN_PASSWORD_ELEMENT, form.password_element);
(...skipping 15 matching lines...) Expand all
103 Pickle form_data_pickle; 104 Pickle form_data_pickle;
104 autofill::SerializeFormData(form.form_data, &form_data_pickle); 105 autofill::SerializeFormData(form.form_data, &form_data_pickle);
105 s->BindBlob(COLUMN_FORM_DATA, 106 s->BindBlob(COLUMN_FORM_DATA,
106 form_data_pickle.data(), 107 form_data_pickle.data(),
107 form_data_pickle.size()); 108 form_data_pickle.size());
108 s->BindInt64(COLUMN_DATE_SYNCED, form.date_synced.ToInternalValue()); 109 s->BindInt64(COLUMN_DATE_SYNCED, form.date_synced.ToInternalValue());
109 s->BindString16(COLUMN_DISPLAY_NAME, form.display_name); 110 s->BindString16(COLUMN_DISPLAY_NAME, form.display_name);
110 s->BindString(COLUMN_AVATAR_URL, form.avatar_url.spec()); 111 s->BindString(COLUMN_AVATAR_URL, form.avatar_url.spec());
111 s->BindString(COLUMN_FEDERATION_URL, form.federation_url.spec()); 112 s->BindString(COLUMN_FEDERATION_URL, form.federation_url.spec());
112 s->BindInt(COLUMN_SKIP_ZERO_CLICK, form.skip_zero_click); 113 s->BindInt(COLUMN_SKIP_ZERO_CLICK, form.skip_zero_click);
114 s->BindInt(COLUMN_GENERATION_UPLOAD_STATUS, form.generation_upload_status);
113 } 115 }
114 116
115 void AddCallback(int err, sql::Statement* /*stmt*/) { 117 void AddCallback(int err, sql::Statement* /*stmt*/) {
116 if (err == 19 /*SQLITE_CONSTRAINT*/) 118 if (err == 19 /*SQLITE_CONSTRAINT*/)
117 DLOG(WARNING) << "LoginDatabase::AddLogin updated an existing form"; 119 DLOG(WARNING) << "LoginDatabase::AddLogin updated an existing form";
118 } 120 }
119 121
120 bool DoesMatchConstraints(const PasswordForm& form) { 122 bool DoesMatchConstraints(const PasswordForm& form) {
121 if (form.origin.is_empty()) { 123 if (form.origin.is_empty()) {
122 DLOG(ERROR) << "Constraint violation: form.origin is empty"; 124 DLOG(ERROR) << "Constraint violation: form.origin is empty";
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 "scheme INTEGER NOT NULL," 171 "scheme INTEGER NOT NULL,"
170 "password_type INTEGER," 172 "password_type INTEGER,"
171 "possible_usernames BLOB," 173 "possible_usernames BLOB,"
172 "times_used INTEGER," 174 "times_used INTEGER,"
173 "form_data BLOB," 175 "form_data BLOB,"
174 "date_synced INTEGER," 176 "date_synced INTEGER,"
175 "display_name VARCHAR," 177 "display_name VARCHAR,"
176 "avatar_url VARCHAR," 178 "avatar_url VARCHAR,"
177 "federation_url VARCHAR," 179 "federation_url VARCHAR,"
178 "skip_zero_click INTEGER," 180 "skip_zero_click INTEGER,"
181 "generation_upload_status INTEGER,"
179 "UNIQUE (origin_url, username_element, username_value, " 182 "UNIQUE (origin_url, username_element, username_value, "
180 "password_element, signon_realm))", table_name); 183 "password_element, signon_realm))",
184 table_name);
181 return db->Execute(query.c_str()); 185 return db->Execute(query.c_str());
182 } 186 }
183 187
184 bool CreateIndexOnSignonRealm(sql::Connection* db, const char* table_name) { 188 bool CreateIndexOnSignonRealm(sql::Connection* db, const char* table_name) {
185 std::string query = base::StringPrintf( 189 std::string query = base::StringPrintf(
186 "CREATE INDEX logins_signon ON %s (signon_realm)", table_name); 190 "CREATE INDEX logins_signon ON %s (signon_realm)", table_name);
187 return db->Execute(query.c_str()); 191 return db->Execute(query.c_str());
188 } 192 }
189 193
190 } // namespace 194 } // namespace
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 "date_synced, display_name, avatar_url, federation_url, is_zero_click" 358 "date_synced, display_name, avatar_url, federation_url, is_zero_click"
355 " FROM logins"; 359 " FROM logins";
356 if (!CreateNewTable(&db_, "logins_new") || 360 if (!CreateNewTable(&db_, "logins_new") ||
357 !db_.Execute(copy_query) || 361 !db_.Execute(copy_query) ||
358 !db_.Execute("DROP TABLE logins") || 362 !db_.Execute("DROP TABLE logins") ||
359 !db_.Execute("ALTER TABLE logins_new RENAME TO logins") || 363 !db_.Execute("ALTER TABLE logins_new RENAME TO logins") ||
360 !CreateIndexOnSignonRealm(&db_, "logins")) 364 !CreateIndexOnSignonRealm(&db_, "logins"))
361 return false; 365 return false;
362 meta_table_.SetVersionNumber(11); 366 meta_table_.SetVersionNumber(11);
363 } 367 }
368 case 11:
369 if (!db_.Execute(
370 "ALTER TABLE logins ADD COLUMN "
371 "generation_upload_status INTEGER"))
372 return false;
373 meta_table_.SetVersionNumber(12);
364 case kCurrentVersionNumber: 374 case kCurrentVersionNumber:
365 // Already up to date 375 // Already up to date
366 return true; 376 return true;
367 default: 377 default:
368 NOTREACHED(); 378 NOTREACHED();
369 return false; 379 return false;
370 } 380 }
371 } 381 }
372 382
373 bool LoginDatabase::InitLoginsTable() { 383 bool LoginDatabase::InitLoginsTable() {
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 514
505 // You *must* change LoginTableColumns if this query changes. 515 // You *must* change LoginTableColumns if this query changes.
506 sql::Statement s(db_.GetCachedStatement( 516 sql::Statement s(db_.GetCachedStatement(
507 SQL_FROM_HERE, 517 SQL_FROM_HERE,
508 "INSERT INTO logins " 518 "INSERT INTO logins "
509 "(origin_url, action_url, username_element, username_value, " 519 "(origin_url, action_url, username_element, username_value, "
510 " password_element, password_value, submit_element, " 520 " password_element, password_value, submit_element, "
511 " signon_realm, ssl_valid, preferred, date_created, blacklisted_by_user, " 521 " signon_realm, ssl_valid, preferred, date_created, blacklisted_by_user, "
512 " scheme, password_type, possible_usernames, times_used, form_data, " 522 " scheme, password_type, possible_usernames, times_used, form_data, "
513 " date_synced, display_name, avatar_url," 523 " date_synced, display_name, avatar_url,"
514 " federation_url, skip_zero_click) VALUES " 524 " federation_url, skip_zero_click, generation_upload_status) VALUES "
515 "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")); 525 "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"));
516 BindAddStatement(form, encrypted_password, &s); 526 BindAddStatement(form, encrypted_password, &s);
517 db_.set_error_callback(base::Bind(&AddCallback)); 527 db_.set_error_callback(base::Bind(&AddCallback));
518 const bool success = s.Run(); 528 const bool success = s.Run();
519 db_.reset_error_callback(); 529 db_.reset_error_callback();
520 if (success) { 530 if (success) {
521 list.push_back(PasswordStoreChange(PasswordStoreChange::ADD, form)); 531 list.push_back(PasswordStoreChange(PasswordStoreChange::ADD, form));
522 return list; 532 return list;
523 } 533 }
524 // Repeat the same statement but with REPLACE semantic. 534 // Repeat the same statement but with REPLACE semantic.
525 s.Assign(db_.GetCachedStatement( 535 s.Assign(db_.GetCachedStatement(
526 SQL_FROM_HERE, 536 SQL_FROM_HERE,
527 "INSERT OR REPLACE INTO logins " 537 "INSERT OR REPLACE INTO logins "
528 "(origin_url, action_url, username_element, username_value, " 538 "(origin_url, action_url, username_element, username_value, "
529 " password_element, password_value, submit_element, " 539 " password_element, password_value, submit_element, "
530 " signon_realm, ssl_valid, preferred, date_created, blacklisted_by_user, " 540 " signon_realm, ssl_valid, preferred, date_created, blacklisted_by_user, "
531 " scheme, password_type, possible_usernames, times_used, form_data, " 541 " scheme, password_type, possible_usernames, times_used, form_data, "
532 " date_synced, display_name, avatar_url," 542 " date_synced, display_name, avatar_url,"
533 " federation_url, skip_zero_click) VALUES " 543 " federation_url, skip_zero_click, generation_upload_status) VALUES "
534 "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)")); 544 "(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"));
535 BindAddStatement(form, encrypted_password, &s); 545 BindAddStatement(form, encrypted_password, &s);
536 if (s.Run()) { 546 if (s.Run()) {
537 list.push_back(PasswordStoreChange(PasswordStoreChange::REMOVE, form)); 547 list.push_back(PasswordStoreChange(PasswordStoreChange::REMOVE, form));
538 list.push_back(PasswordStoreChange(PasswordStoreChange::ADD, form)); 548 list.push_back(PasswordStoreChange(PasswordStoreChange::ADD, form));
539 } 549 }
540 return list; 550 return list;
541 } 551 }
542 552
543 PasswordStoreChangeList LoginDatabase::UpdateLogin(const PasswordForm& form) { 553 PasswordStoreChangeList LoginDatabase::UpdateLogin(const PasswordForm& form) {
544 std::string encrypted_password; 554 std::string encrypted_password;
(...skipping 13 matching lines...) Expand all
558 "times_used = ?, " 568 "times_used = ?, "
559 "submit_element = ?, " 569 "submit_element = ?, "
560 "date_synced = ?, " 570 "date_synced = ?, "
561 "date_created = ?, " 571 "date_created = ?, "
562 "blacklisted_by_user = ?, " 572 "blacklisted_by_user = ?, "
563 "scheme = ?, " 573 "scheme = ?, "
564 "password_type = ?, " 574 "password_type = ?, "
565 "display_name = ?, " 575 "display_name = ?, "
566 "avatar_url = ?, " 576 "avatar_url = ?, "
567 "federation_url = ?, " 577 "federation_url = ?, "
568 "skip_zero_click = ? " 578 "skip_zero_click = ?, "
579 "generation_upload_status = ? "
569 "WHERE origin_url = ? AND " 580 "WHERE origin_url = ? AND "
570 "username_element = ? AND " 581 "username_element = ? AND "
571 "username_value = ? AND " 582 "username_value = ? AND "
572 "password_element = ? AND " 583 "password_element = ? AND "
573 "signon_realm = ?")); 584 "signon_realm = ?"));
574 s.BindString(0, form.action.spec()); 585 s.BindString(0, form.action.spec());
575 s.BindBlob(1, encrypted_password.data(), 586 s.BindBlob(1, encrypted_password.data(),
576 static_cast<int>(encrypted_password.length())); 587 static_cast<int>(encrypted_password.length()));
577 s.BindInt(2, form.ssl_valid); 588 s.BindInt(2, form.ssl_valid);
578 s.BindInt(3, form.preferred); 589 s.BindInt(3, form.preferred);
579 Pickle pickle = SerializeVector(form.other_possible_usernames); 590 Pickle pickle = SerializeVector(form.other_possible_usernames);
580 s.BindBlob(4, pickle.data(), pickle.size()); 591 s.BindBlob(4, pickle.data(), pickle.size());
581 s.BindInt(5, form.times_used); 592 s.BindInt(5, form.times_used);
582 s.BindString16(6, form.submit_element); 593 s.BindString16(6, form.submit_element);
583 s.BindInt64(7, form.date_synced.ToInternalValue()); 594 s.BindInt64(7, form.date_synced.ToInternalValue());
584 s.BindInt64(8, form.date_created.ToInternalValue()); 595 s.BindInt64(8, form.date_created.ToInternalValue());
585 s.BindInt(9, form.blacklisted_by_user); 596 s.BindInt(9, form.blacklisted_by_user);
586 s.BindInt(10, form.scheme); 597 s.BindInt(10, form.scheme);
587 s.BindInt(11, form.type); 598 s.BindInt(11, form.type);
588 s.BindString16(12, form.display_name); 599 s.BindString16(12, form.display_name);
589 s.BindString(13, form.avatar_url.spec()); 600 s.BindString(13, form.avatar_url.spec());
590 s.BindString(14, form.federation_url.spec()); 601 s.BindString(14, form.federation_url.spec());
591 s.BindInt(15, form.skip_zero_click); 602 s.BindInt(15, form.skip_zero_click);
603 s.BindInt(16, form.generation_upload_status);
592 604
593 // WHERE starts here. 605 // WHERE starts here.
594 s.BindString(16, form.origin.spec()); 606 s.BindString(17, form.origin.spec());
595 s.BindString16(17, form.username_element); 607 s.BindString16(18, form.username_element);
596 s.BindString16(18, form.username_value); 608 s.BindString16(19, form.username_value);
597 s.BindString16(19, form.password_element); 609 s.BindString16(20, form.password_element);
598 s.BindString(20, form.signon_realm); 610 s.BindString(21, form.signon_realm);
599 611
600 if (!s.Run()) 612 if (!s.Run())
601 return PasswordStoreChangeList(); 613 return PasswordStoreChangeList();
602 614
603 PasswordStoreChangeList list; 615 PasswordStoreChangeList list;
604 if (db_.GetLastChangeCount()) 616 if (db_.GetLastChangeCount())
605 list.push_back(PasswordStoreChange(PasswordStoreChange::UPDATE, form)); 617 list.push_back(PasswordStoreChange(PasswordStoreChange::UPDATE, form));
606 618
607 return list; 619 return list;
608 } 620 }
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
703 s.ColumnByteLength(COLUMN_FORM_DATA)); 715 s.ColumnByteLength(COLUMN_FORM_DATA));
704 PickleIterator form_data_iter(form_data_pickle); 716 PickleIterator form_data_iter(form_data_pickle);
705 autofill::DeserializeFormData(&form_data_iter, &form->form_data); 717 autofill::DeserializeFormData(&form_data_iter, &form->form_data);
706 } 718 }
707 form->date_synced = 719 form->date_synced =
708 base::Time::FromInternalValue(s.ColumnInt64(COLUMN_DATE_SYNCED)); 720 base::Time::FromInternalValue(s.ColumnInt64(COLUMN_DATE_SYNCED));
709 form->display_name = s.ColumnString16(COLUMN_DISPLAY_NAME); 721 form->display_name = s.ColumnString16(COLUMN_DISPLAY_NAME);
710 form->avatar_url = GURL(s.ColumnString(COLUMN_AVATAR_URL)); 722 form->avatar_url = GURL(s.ColumnString(COLUMN_AVATAR_URL));
711 form->federation_url = GURL(s.ColumnString(COLUMN_FEDERATION_URL)); 723 form->federation_url = GURL(s.ColumnString(COLUMN_FEDERATION_URL));
712 form->skip_zero_click = (s.ColumnInt(COLUMN_SKIP_ZERO_CLICK) > 0); 724 form->skip_zero_click = (s.ColumnInt(COLUMN_SKIP_ZERO_CLICK) > 0);
725 int generation_upload_status_int =
726 s.ColumnInt(COLUMN_GENERATION_UPLOAD_STATUS);
727 DCHECK(generation_upload_status_int >= 0 &&
728 generation_upload_status_int <= PasswordForm::UNKNOWN_STATUS);
729 form->generation_upload_status =
730 static_cast<PasswordForm::GenerationUploadStatus>(
731 generation_upload_status_int);
713 return ENCRYPTION_RESULT_SUCCESS; 732 return ENCRYPTION_RESULT_SUCCESS;
714 } 733 }
715 734
716 bool LoginDatabase::GetLogins( 735 bool LoginDatabase::GetLogins(
717 const PasswordForm& form, 736 const PasswordForm& form,
718 ScopedVector<autofill::PasswordForm>* forms) const { 737 ScopedVector<autofill::PasswordForm>* forms) const {
719 DCHECK(forms); 738 DCHECK(forms);
720 // You *must* change LoginTableColumns if this query changes. 739 // You *must* change LoginTableColumns if this query changes.
721 const std::string sql_query = 740 const std::string sql_query =
722 "SELECT origin_url, action_url, " 741 "SELECT origin_url, action_url, "
723 "username_element, username_value, " 742 "username_element, username_value, "
724 "password_element, password_value, submit_element, " 743 "password_element, password_value, submit_element, "
725 "signon_realm, ssl_valid, preferred, date_created, blacklisted_by_user, " 744 "signon_realm, ssl_valid, preferred, date_created, blacklisted_by_user, "
726 "scheme, password_type, possible_usernames, times_used, form_data, " 745 "scheme, password_type, possible_usernames, times_used, form_data, "
727 "date_synced, display_name, avatar_url, " 746 "date_synced, display_name, avatar_url, "
728 "federation_url, skip_zero_click " 747 "federation_url, skip_zero_click, generation_upload_status "
729 "FROM logins WHERE signon_realm == ? "; 748 "FROM logins WHERE signon_realm == ? ";
730 sql::Statement s; 749 sql::Statement s;
731 const GURL signon_realm(form.signon_realm); 750 const GURL signon_realm(form.signon_realm);
732 std::string registered_domain = GetRegistryControlledDomain(signon_realm); 751 std::string registered_domain = GetRegistryControlledDomain(signon_realm);
733 PSLDomainMatchMetric psl_domain_match_metric = PSL_DOMAIN_MATCH_NONE; 752 PSLDomainMatchMetric psl_domain_match_metric = PSL_DOMAIN_MATCH_NONE;
734 const bool should_PSL_matching_apply = 753 const bool should_PSL_matching_apply =
735 form.scheme == PasswordForm::SCHEME_HTML && 754 form.scheme == PasswordForm::SCHEME_HTML &&
736 ShouldPSLDomainMatchingApply(registered_domain); 755 ShouldPSLDomainMatchingApply(registered_domain);
737 // PSL matching only applies to HTML forms. 756 // PSL matching only applies to HTML forms.
738 if (should_PSL_matching_apply) { 757 if (should_PSL_matching_apply) {
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
816 ScopedVector<autofill::PasswordForm>* forms) const { 835 ScopedVector<autofill::PasswordForm>* forms) const {
817 DCHECK(forms); 836 DCHECK(forms);
818 sql::Statement s(db_.GetCachedStatement( 837 sql::Statement s(db_.GetCachedStatement(
819 SQL_FROM_HERE, 838 SQL_FROM_HERE,
820 "SELECT origin_url, action_url, " 839 "SELECT origin_url, action_url, "
821 "username_element, username_value, " 840 "username_element, username_value, "
822 "password_element, password_value, submit_element, " 841 "password_element, password_value, submit_element, "
823 "signon_realm, ssl_valid, preferred, date_created, blacklisted_by_user, " 842 "signon_realm, ssl_valid, preferred, date_created, blacklisted_by_user, "
824 "scheme, password_type, possible_usernames, times_used, form_data, " 843 "scheme, password_type, possible_usernames, times_used, form_data, "
825 "date_synced, display_name, avatar_url, " 844 "date_synced, display_name, avatar_url, "
826 "federation_url, skip_zero_click FROM logins " 845 "federation_url, skip_zero_click, generation_upload_status FROM logins "
827 "WHERE date_created >= ? AND date_created < ?" 846 "WHERE date_created >= ? AND date_created < ?"
828 "ORDER BY origin_url")); 847 "ORDER BY origin_url"));
829 s.BindInt64(0, begin.ToInternalValue()); 848 s.BindInt64(0, begin.ToInternalValue());
830 s.BindInt64(1, end.is_null() ? std::numeric_limits<int64>::max() 849 s.BindInt64(1, end.is_null() ? std::numeric_limits<int64>::max()
831 : end.ToInternalValue()); 850 : end.ToInternalValue());
832 851
833 while (s.Step()) { 852 while (s.Step()) {
834 scoped_ptr<PasswordForm> new_form(new PasswordForm()); 853 scoped_ptr<PasswordForm> new_form(new PasswordForm());
835 EncryptionResult result = InitPasswordFormFromStatement(new_form.get(), s); 854 EncryptionResult result = InitPasswordFormFromStatement(new_form.get(), s);
836 if (result == ENCRYPTION_RESULT_SERVICE_FAILURE) 855 if (result == ENCRYPTION_RESULT_SERVICE_FAILURE)
(...skipping 11 matching lines...) Expand all
848 const base::Time end, 867 const base::Time end,
849 ScopedVector<autofill::PasswordForm>* forms) const { 868 ScopedVector<autofill::PasswordForm>* forms) const {
850 DCHECK(forms); 869 DCHECK(forms);
851 sql::Statement s(db_.GetCachedStatement( 870 sql::Statement s(db_.GetCachedStatement(
852 SQL_FROM_HERE, 871 SQL_FROM_HERE,
853 "SELECT origin_url, action_url, username_element, username_value, " 872 "SELECT origin_url, action_url, username_element, username_value, "
854 "password_element, password_value, submit_element, signon_realm, " 873 "password_element, password_value, submit_element, signon_realm, "
855 "ssl_valid, preferred, date_created, blacklisted_by_user, " 874 "ssl_valid, preferred, date_created, blacklisted_by_user, "
856 "scheme, password_type, possible_usernames, times_used, form_data, " 875 "scheme, password_type, possible_usernames, times_used, form_data, "
857 "date_synced, display_name, avatar_url, " 876 "date_synced, display_name, avatar_url, "
858 "federation_url, skip_zero_click FROM logins " 877 "federation_url, skip_zero_click, generation_upload_status FROM logins "
859 "WHERE date_synced >= ? AND date_synced < ?" 878 "WHERE date_synced >= ? AND date_synced < ?"
860 "ORDER BY origin_url")); 879 "ORDER BY origin_url"));
861 s.BindInt64(0, begin.ToInternalValue()); 880 s.BindInt64(0, begin.ToInternalValue());
862 s.BindInt64(1, 881 s.BindInt64(1,
863 end.is_null() ? base::Time::Max().ToInternalValue() 882 end.is_null() ? base::Time::Max().ToInternalValue()
864 : end.ToInternalValue()); 883 : end.ToInternalValue());
865 884
866 while (s.Step()) { 885 while (s.Step()) {
867 scoped_ptr<PasswordForm> new_form(new PasswordForm()); 886 scoped_ptr<PasswordForm> new_form(new PasswordForm());
868 EncryptionResult result = InitPasswordFormFromStatement(new_form.get(), s); 887 EncryptionResult result = InitPasswordFormFromStatement(new_form.get(), s);
(...skipping 23 matching lines...) Expand all
892 DCHECK(forms); 911 DCHECK(forms);
893 // You *must* change LoginTableColumns if this query changes. 912 // You *must* change LoginTableColumns if this query changes.
894 sql::Statement s(db_.GetCachedStatement( 913 sql::Statement s(db_.GetCachedStatement(
895 SQL_FROM_HERE, 914 SQL_FROM_HERE,
896 "SELECT origin_url, action_url, " 915 "SELECT origin_url, action_url, "
897 "username_element, username_value, " 916 "username_element, username_value, "
898 "password_element, password_value, submit_element, " 917 "password_element, password_value, submit_element, "
899 "signon_realm, ssl_valid, preferred, date_created, blacklisted_by_user, " 918 "signon_realm, ssl_valid, preferred, date_created, blacklisted_by_user, "
900 "scheme, password_type, possible_usernames, times_used, form_data, " 919 "scheme, password_type, possible_usernames, times_used, form_data, "
901 "date_synced, display_name, avatar_url, " 920 "date_synced, display_name, avatar_url, "
902 "federation_url, skip_zero_click FROM logins " 921 "federation_url, skip_zero_click, generation_upload_status FROM logins "
903 "WHERE blacklisted_by_user == ? ORDER BY origin_url")); 922 "WHERE blacklisted_by_user == ? ORDER BY origin_url"));
904 s.BindInt(0, blacklisted ? 1 : 0); 923 s.BindInt(0, blacklisted ? 1 : 0);
905 924
906 while (s.Step()) { 925 while (s.Step()) {
907 scoped_ptr<PasswordForm> new_form(new PasswordForm()); 926 scoped_ptr<PasswordForm> new_form(new PasswordForm());
908 EncryptionResult result = InitPasswordFormFromStatement(new_form.get(), s); 927 EncryptionResult result = InitPasswordFormFromStatement(new_form.get(), s);
909 if (result == ENCRYPTION_RESULT_SERVICE_FAILURE) 928 if (result == ENCRYPTION_RESULT_SERVICE_FAILURE)
910 return false; 929 return false;
911 if (result == ENCRYPTION_RESULT_ITEM_FAILURE) 930 if (result == ENCRYPTION_RESULT_ITEM_FAILURE)
912 continue; 931 continue;
913 DCHECK(result == ENCRYPTION_RESULT_SUCCESS); 932 DCHECK(result == ENCRYPTION_RESULT_SUCCESS);
914 forms->push_back(new_form.release()); 933 forms->push_back(new_form.release());
915 } 934 }
916 return s.Succeeded(); 935 return s.Succeeded();
917 } 936 }
918 937
919 bool LoginDatabase::DeleteAndRecreateDatabaseFile() { 938 bool LoginDatabase::DeleteAndRecreateDatabaseFile() {
920 DCHECK(db_.is_open()); 939 DCHECK(db_.is_open());
921 meta_table_.Reset(); 940 meta_table_.Reset();
922 db_.Close(); 941 db_.Close();
923 sql::Connection::Delete(db_path_); 942 sql::Connection::Delete(db_path_);
924 return Init(); 943 return Init();
925 } 944 }
926 945
927 } // namespace password_manager 946 } // namespace password_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698