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

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

Powered by Google App Engine
This is Rietveld 408576698