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

Side by Side Diff: chrome/browser/webdata/web_database.cc

Issue 14419: Porting in browser/webdata and template_url. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 12 years 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 | Annotate | Revision Log
« no previous file with comments | « chrome/browser/webdata/web_database.h ('k') | chrome/browser/webdata/web_database_unittest.cc » ('j') | 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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 "chrome/browser/webdata/web_database.h"
6
5 #include <algorithm> 7 #include <algorithm>
6 #include <limits> 8 #include <limits>
7 #include <vector> 9 #include <vector>
8 10
9 #include "chrome/browser/webdata/web_database.h"
10
11 #include "base/gfx/png_decoder.h" 11 #include "base/gfx/png_decoder.h"
12 #include "base/gfx/png_encoder.h" 12 #include "base/gfx/png_encoder.h"
13 #include "base/string_util.h" 13 #include "base/string_util.h"
14 #include "base/time.h" 14 #include "base/time.h"
15 #include "base/values.h" 15 #include "base/values.h"
16 #include "chrome/browser/history/history_database.h" 16 #include "chrome/browser/history/history_database.h"
17 #include "chrome/browser/ie7_password.h"
18 #include "chrome/browser/template_url.h" 17 #include "chrome/browser/template_url.h"
19 #include "chrome/browser/encryptor.h" 18 #include "chrome/browser/encryptor.h"
20 #include "chrome/common/l10n_util.h" 19 #include "chrome/common/l10n_util.h"
21 #include "chrome/common/scoped_vector.h" 20 #include "chrome/common/scoped_vector.h"
22 #include "webkit/glue/password_form.h" 21 #include "webkit/glue/password_form.h"
23 22
24 //////////////////////////////////////////////////////////////////////////////// 23 ////////////////////////////////////////////////////////////////////////////////
25 // 24 //
26 // Schema 25 // Schema
27 // 26 //
(...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after
535 534
536 s.column_string16(1, &tmp); 535 s.column_string16(1, &tmp);
537 DCHECK(!tmp.empty()); 536 DCHECK(!tmp.empty());
538 template_url->set_short_name(tmp); 537 template_url->set_short_name(tmp);
539 538
540 s.column_string16(2, &tmp); 539 s.column_string16(2, &tmp);
541 template_url->set_keyword(tmp); 540 template_url->set_keyword(tmp);
542 541
543 s.column_string16(3, &tmp); 542 s.column_string16(3, &tmp);
544 if (!tmp.empty()) 543 if (!tmp.empty())
545 template_url->SetFavIconURL(GURL(tmp)); 544 template_url->SetFavIconURL(GURL(WideToUTF8(tmp)));
546 545
547 s.column_string16(4, &tmp); 546 s.column_string16(4, &tmp);
548 template_url->SetURL(tmp, 0, 0); 547 template_url->SetURL(tmp, 0, 0);
549 548
550 template_url->set_safe_for_autoreplace(s.column_int(5) == 1); 549 template_url->set_safe_for_autoreplace(s.column_int(5) == 1);
551 550
552 s.column_string16(6, &tmp); 551 s.column_string16(6, &tmp);
553 if (!tmp.empty()) 552 if (!tmp.empty())
554 template_url->set_originating_url(GURL(tmp)); 553 template_url->set_originating_url(GURL(WideToUTF8(tmp)));
555 554
556 template_url->set_date_created(Time::FromTimeT(s.column_int64(7))); 555 template_url->set_date_created(Time::FromTimeT(s.column_int64(7)));
557 556
558 template_url->set_usage_count(s.column_int(8)); 557 template_url->set_usage_count(s.column_int(8));
559 558
560 std::vector<std::string> encodings; 559 std::vector<std::string> encodings;
561 SplitString(s.column_string(9), ';', &encodings); 560 SplitString(s.column_string(9), ';', &encodings);
562 template_url->set_input_encodings(encodings); 561 template_url->set_input_encodings(encodings);
563 562
564 template_url->set_show_in_default_list(s.column_int(10) == 1); 563 template_url->set_show_in_default_list(s.column_int(10) == 1);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 bool WebDatabase::SetBuitinKeywordVersion(int version) { 606 bool WebDatabase::SetBuitinKeywordVersion(int version) {
608 return meta_table_.SetValue(kBuiltinKeywordVersion, version); 607 return meta_table_.SetValue(kBuiltinKeywordVersion, version);
609 } 608 }
610 609
611 int WebDatabase::GetBuitinKeywordVersion() { 610 int WebDatabase::GetBuitinKeywordVersion() {
612 int version = 0; 611 int version = 0;
613 meta_table_.GetValue(kBuiltinKeywordVersion, &version); 612 meta_table_.GetValue(kBuiltinKeywordVersion, &version);
614 return version; 613 return version;
615 } 614 }
616 615
617 // Return a new GURL like url, but without any "#foo" bit on the end.
618 static GURL GURLWithoutRef(const GURL& url) {
619 url_canon::Replacements<char> replacements;
620 replacements.ClearRef();
621 return url.ReplaceComponents(replacements);
622 }
623
624 // Convert a list of GUIDs from the in-memory form to the form we keep in
625 // the database (tab-separated string).
626 static std::string SerializeGUIDs(const std::vector<std::string>& guids) {
627 std::string result;
628 for (size_t i = 0; i < guids.size(); ++i) {
629 if (!result.empty())
630 result.push_back('\t');
631 const std::string& guid = guids[i];
632 for (size_t j = 0; j < guid.size(); ++j) {
633 char ch = guid[j];
634 // If we have any embedded tabs in the GUID (a pathological case),
635 // we normalize them to spaces.
636 if (ch == '\t')
637 ch = ' ';
638 result.push_back(ch);
639 }
640 }
641 return result;
642 }
643
644 // The partner of SerializeGUIDs. Converts a serialized GUIDs string
645 // back to a vector.
646 static void DeserializeGUIDs(const std::string& str,
647 std::vector<std::string>* guids) {
648 SplitString(str, '\t', guids);
649 }
650
651 bool WebDatabase::AddLogin(const PasswordForm& form) { 616 bool WebDatabase::AddLogin(const PasswordForm& form) {
652 SQLStatement s; 617 SQLStatement s;
653 std::string encrypted_password; 618 std::string encrypted_password;
654 if (s.prepare(db_, 619 if (s.prepare(db_,
655 "INSERT OR REPLACE INTO logins " 620 "INSERT OR REPLACE INTO logins "
656 "(origin_url, action_url, username_element, username_value, " 621 "(origin_url, action_url, username_element, username_value, "
657 " password_element, password_value, submit_element, " 622 " password_element, password_value, submit_element, "
658 " signon_realm, ssl_valid, preferred, date_created, " 623 " signon_realm, ssl_valid, preferred, date_created, "
659 " blacklisted_by_user, scheme) " 624 " blacklisted_by_user, scheme) "
660 "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)") != SQLITE_OK) { 625 "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)") != SQLITE_OK) {
(...skipping 16 matching lines...) Expand all
677 s.bind_int64(10, form.date_created.ToTimeT()); 642 s.bind_int64(10, form.date_created.ToTimeT());
678 s.bind_int(11, form.blacklisted_by_user); 643 s.bind_int(11, form.blacklisted_by_user);
679 s.bind_int(12, form.scheme); 644 s.bind_int(12, form.scheme);
680 if (s.step() != SQLITE_DONE) { 645 if (s.step() != SQLITE_DONE) {
681 NOTREACHED(); 646 NOTREACHED();
682 return false; 647 return false;
683 } 648 }
684 return true; 649 return true;
685 } 650 }
686 651
687 bool WebDatabase::AddIE7Login(const IE7PasswordInfo& info) {
688 SQLStatement s;
689 if (s.prepare(db_,
690 "INSERT OR REPLACE INTO ie7_logins "
691 "(url_hash, password_value, date_created) "
692 "VALUES (?, ?, ?)") != SQLITE_OK) {
693 NOTREACHED() << "Statement prepare failed";
694 return false;
695 }
696
697 s.bind_wstring(0, info.url_hash);
698 s.bind_blob(1, &info.encrypted_data.front(),
699 static_cast<int>(info.encrypted_data.size()));
700 s.bind_int64(2, info.date_created.ToTimeT());
701 if (s.step() != SQLITE_DONE) {
702 NOTREACHED();
703 return false;
704 }
705 return true;
706 }
707
708 bool WebDatabase::UpdateLogin(const PasswordForm& form) { 652 bool WebDatabase::UpdateLogin(const PasswordForm& form) {
709 SQLStatement s; 653 SQLStatement s;
710 std::string encrypted_password; 654 std::string encrypted_password;
711 if (s.prepare(db_, "UPDATE logins SET " 655 if (s.prepare(db_, "UPDATE logins SET "
712 "action_url = ?, " 656 "action_url = ?, "
713 "password_value = ?, " 657 "password_value = ?, "
714 "ssl_valid = ?, " 658 "ssl_valid = ?, "
715 "preferred = ? " 659 "preferred = ? "
716 "WHERE origin_url = ? AND " 660 "WHERE origin_url = ? AND "
717 "username_element = ? AND " 661 "username_element = ? AND "
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
762 s.bind_wstring(4, form.submit_element); 706 s.bind_wstring(4, form.submit_element);
763 s.bind_string(5, form.signon_realm); 707 s.bind_string(5, form.signon_realm);
764 708
765 if (s.step() != SQLITE_DONE) { 709 if (s.step() != SQLITE_DONE) {
766 NOTREACHED(); 710 NOTREACHED();
767 return false; 711 return false;
768 } 712 }
769 return true; 713 return true;
770 } 714 }
771 715
772 bool WebDatabase::RemoveIE7Login(const IE7PasswordInfo& info) {
773 SQLStatement s;
774 // Remove a login by UNIQUE-constrained fields.
775 if (s.prepare(db_,
776 "DELETE FROM ie7_logins WHERE "
777 "url_hash = ?") != SQLITE_OK) {
778 NOTREACHED() << "Statement prepare failed";
779 return false;
780 }
781 s.bind_wstring(0, info.url_hash);
782
783 if (s.step() != SQLITE_DONE) {
784 NOTREACHED();
785 return false;
786 }
787 return true;
788 }
789
790 bool WebDatabase::RemoveLoginsCreatedBetween(const Time delete_begin, 716 bool WebDatabase::RemoveLoginsCreatedBetween(const Time delete_begin,
791 const Time delete_end) { 717 const Time delete_end) {
792 SQLStatement s1; 718 SQLStatement s1;
793 if (s1.prepare(db_, 719 if (s1.prepare(db_,
794 "DELETE FROM logins WHERE " 720 "DELETE FROM logins WHERE "
795 "date_created >= ? AND date_created < ?") != SQLITE_OK) { 721 "date_created >= ? AND date_created < ?") != SQLITE_OK) {
796 NOTREACHED() << "Statement 1 prepare failed"; 722 NOTREACHED() << "Statement 1 prepare failed";
797 return false; 723 return false;
798 } 724 }
799 s1.bind_int64(0, delete_begin.ToTimeT()); 725 s1.bind_int64(0, delete_begin.ToTimeT());
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
864 int result; 790 int result;
865 while ((result = s.step()) == SQLITE_ROW) { 791 while ((result = s.step()) == SQLITE_ROW) {
866 PasswordForm* new_form = new PasswordForm(); 792 PasswordForm* new_form = new PasswordForm();
867 InitPasswordFormFromStatement(new_form, &s); 793 InitPasswordFormFromStatement(new_form, &s);
868 794
869 forms->push_back(new_form); 795 forms->push_back(new_form);
870 } 796 }
871 return result == SQLITE_DONE; 797 return result == SQLITE_DONE;
872 } 798 }
873 799
874 bool WebDatabase::GetIE7Login(const IE7PasswordInfo& info,
875 IE7PasswordInfo* result) {
876 DCHECK(result);
877 SQLStatement s;
878 if (s.prepare(db_,
879 "SELECT password_value, date_created FROM ie7_logins "
880 "WHERE url_hash == ? ") != SQLITE_OK) {
881 NOTREACHED() << "Statement prepare failed";
882 return false;
883 }
884
885 s.bind_wstring(0, info.url_hash);
886
887 int64 query_result = s.step();
888 if (query_result == SQLITE_ROW) {
889 s.column_blob_as_vector(0, &result->encrypted_data);
890 result->date_created = Time::FromTimeT(s.column_int64(1));
891 result->url_hash = info.url_hash;
892 s.step();
893 }
894 return query_result == SQLITE_DONE;
895 }
896
897 bool WebDatabase::GetAllLogins(std::vector<PasswordForm*>* forms, 800 bool WebDatabase::GetAllLogins(std::vector<PasswordForm*>* forms,
898 bool include_blacklisted) { 801 bool include_blacklisted) {
899 DCHECK(forms); 802 DCHECK(forms);
900 SQLStatement s; 803 SQLStatement s;
901 std::string stmt = "SELECT origin_url, action_url, " 804 std::string stmt = "SELECT origin_url, action_url, "
902 "username_element, username_value, " 805 "username_element, username_value, "
903 "password_element, password_value, " 806 "password_element, password_value, "
904 "submit_element, signon_realm, ssl_valid, preferred, " 807 "submit_element, signon_realm, ssl_valid, preferred, "
905 "date_created, blacklisted_by_user, scheme FROM logins "; 808 "date_created, blacklisted_by_user, scheme FROM logins ";
906 if (!include_blacklisted) 809 if (!include_blacklisted)
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
1231 1134
1232 // Add successive versions here. Each should set the version number and 1135 // Add successive versions here. Each should set the version number and
1233 // compatible version number as appropriate, then fall through to the next 1136 // compatible version number as appropriate, then fall through to the next
1234 // case. 1137 // case.
1235 1138
1236 case kCurrentVersionNumber: 1139 case kCurrentVersionNumber:
1237 // No migration needed. 1140 // No migration needed.
1238 return; 1141 return;
1239 } 1142 }
1240 } 1143 }
OLDNEW
« no previous file with comments | « chrome/browser/webdata/web_database.h ('k') | chrome/browser/webdata/web_database_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698