1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/webdata/logins_table.h" 6 7 #include "app/sql/statement.h" 8 #include "base/logging.h" 9 #include "base/time.h" 10 #include "base/utf_string_conversions.h" 11 #include "chrome/browser/password_manager/ie7_password.h" 12 13 bool LoginsTable::AddIE7Login(const IE7PasswordInfo& info) { 14 sql::Statement s(db_->GetUniqueStatement( 15 "INSERT OR REPLACE INTO ie7_logins " 16 "(url_hash, password_value, date_created) " 17 "VALUES (?,?,?)")); 18 if (!s) { 19 NOTREACHED() << db_->GetErrorMessage(); 20 return false; 21 } 22 23 s.BindString(0, WideToUTF8(info.url_hash)); 24 s.BindBlob(1, &info.encrypted_data.front(), 25 static_cast<int>(info.encrypted_data.size())); 26 s.BindInt64(2, info.date_created.ToTimeT()); 27 if (!s.Run()) { 28 NOTREACHED(); 29 return false; 30 } 31 return true; 32 } 33 34 bool LoginsTable::RemoveIE7Login(const IE7PasswordInfo& info) { 35 // Remove a login by UNIQUE-constrained fields. 36 sql::Statement s(db_->GetUniqueStatement( 37 "DELETE FROM ie7_logins WHERE url_hash = ?")); 38 if (!s) { 39 NOTREACHED() << db_->GetErrorMessage(); 40 return false; 41 } 42 s.BindString(0, WideToUTF8(info.url_hash)); 43 44 if (!s.Run()) { 45 NOTREACHED(); 46 return false; 47 } 48 return true; 49 } 50 51 bool LoginsTable::GetIE7Login(const IE7PasswordInfo& info, 52 IE7PasswordInfo* result) { 53 DCHECK(result); 54 sql::Statement s(db_->GetUniqueStatement( 55 "SELECT password_value, date_created FROM ie7_logins " 56 "WHERE url_hash == ? ")); 57 if (!s) { 58 NOTREACHED() << db_->GetErrorMessage(); 59 return false; 60 } 61 62 s.BindString(0, WideToUTF8(info.url_hash)); 63 if (s.Step()) { 64 s.ColumnBlobAsVector(0, &result->encrypted_data); 65 result->date_created = base::Time::FromTimeT(s.ColumnInt64(1)); 66 result->url_hash = info.url_hash; 67 } 68 return s.Succeeded(); 69 } 70