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

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

Issue 838453003: Open the LoginDatabase on the DB thread, not the UI thread. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix nits from vabr@. Created 5 years, 11 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 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 void LogAccountStat(const std::string& name, int sample) { 146 void LogAccountStat(const std::string& name, int sample) {
147 LogDynamicUMAStat(name, sample, 0, 32, 6); 147 LogDynamicUMAStat(name, sample, 0, 32, 6);
148 } 148 }
149 149
150 void LogTimesUsedStat(const std::string& name, int sample) { 150 void LogTimesUsedStat(const std::string& name, int sample) {
151 LogDynamicUMAStat(name, sample, 0, 100, 10); 151 LogDynamicUMAStat(name, sample, 0, 100, 10);
152 } 152 }
153 153
154 } // namespace 154 } // namespace
155 155
156 LoginDatabase::LoginDatabase() { 156 LoginDatabase::LoginDatabase(const base::FilePath& db_path)
157 : db_path_(db_path) {
157 } 158 }
158 159
159 LoginDatabase::~LoginDatabase() { 160 LoginDatabase::~LoginDatabase() {
160 } 161 }
161 162
162 bool LoginDatabase::Init(const base::FilePath& db_path) { 163 bool LoginDatabase::Init() {
163 // Set pragmas for a small, private database (based on WebDatabase). 164 // Set pragmas for a small, private database (based on WebDatabase).
164 db_.set_page_size(2048); 165 db_.set_page_size(2048);
165 db_.set_cache_size(32); 166 db_.set_cache_size(32);
166 db_.set_exclusive_locking(); 167 db_.set_exclusive_locking();
167 db_.set_restrict_to_user(); 168 db_.set_restrict_to_user();
168 169
169 { 170 {
170 // TODO(vadimt): Remove ScopedTracker below once crbug.com/138903 is fixed. 171 // TODO(vadimt): Remove ScopedTracker below once crbug.com/138903 is fixed.
171 tracked_objects::ScopedTracker tracking_profile( 172 tracked_objects::ScopedTracker tracking_profile(
172 FROM_HERE_WITH_EXPLICIT_FUNCTION("138903 LoginDatabase::Init db init")); 173 FROM_HERE_WITH_EXPLICIT_FUNCTION("138903 LoginDatabase::Init db init"));
173 174
174 if (!db_.Open(db_path)) { 175 if (!db_.Open(db_path_)) {
175 LOG(WARNING) << "Unable to open the password store database."; 176 LOG(WARNING) << "Unable to open the password store database.";
176 return false; 177 return false;
177 } 178 }
178 } 179 }
179 180
180 sql::Transaction transaction(&db_); 181 sql::Transaction transaction(&db_);
181 transaction.Begin(); 182 transaction.Begin();
182 183
183 // Check the database version. 184 // Check the database version.
184 if (!meta_table_.Init(&db_, kCurrentVersionNumber, 185 if (!meta_table_.Init(&db_, kCurrentVersionNumber,
185 kCompatibleVersionNumber)) { 186 kCompatibleVersionNumber)) {
186 db_.Close(); 187 db_.Close();
187 return false; 188 return false;
188 } 189 }
189 if (meta_table_.GetCompatibleVersionNumber() > kCurrentVersionNumber) { 190 if (meta_table_.GetCompatibleVersionNumber() > kCurrentVersionNumber) {
190 LOG(WARNING) << "Password store database is too new."; 191 LOG(WARNING) << "Password store database is too new.";
191 db_.Close(); 192 db_.Close();
192 return false; 193 return false;
193 } 194 }
194 195
195 // Initialize the tables. 196 // Initialize the tables.
196 if (!InitLoginsTable()) { 197 if (!InitLoginsTable()) {
197 LOG(WARNING) << "Unable to initialize the password store database."; 198 LOG(WARNING) << "Unable to initialize the password store database.";
198 db_.Close(); 199 db_.Close();
199 return false; 200 return false;
200 } 201 }
201 202
202 // Save the path for DeleteDatabaseFile().
203 db_path_ = db_path;
204
205 // If the file on disk is an older database version, bring it up to date. 203 // If the file on disk is an older database version, bring it up to date.
206 if (!MigrateOldVersionsAsNeeded()) { 204 if (!MigrateOldVersionsAsNeeded()) {
207 LOG(WARNING) << "Unable to migrate database"; 205 LOG(WARNING) << "Unable to migrate database";
208 db_.Close(); 206 db_.Close();
209 return false; 207 return false;
210 } 208 }
211 209
212 if (!transaction.Commit()) { 210 if (!transaction.Commit()) {
213 db_.Close(); 211 db_.Close();
214 return false; 212 return false;
(...skipping 669 matching lines...) Expand 10 before | Expand all | Expand 10 after
884 forms->push_back(new_form.release()); 882 forms->push_back(new_form.release());
885 } 883 }
886 return s.Succeeded(); 884 return s.Succeeded();
887 } 885 }
888 886
889 bool LoginDatabase::DeleteAndRecreateDatabaseFile() { 887 bool LoginDatabase::DeleteAndRecreateDatabaseFile() {
890 DCHECK(db_.is_open()); 888 DCHECK(db_.is_open());
891 meta_table_.Reset(); 889 meta_table_.Reset();
892 db_.Close(); 890 db_.Close();
893 sql::Connection::Delete(db_path_); 891 sql::Connection::Delete(db_path_);
894 return Init(db_path_); 892 return Init();
895 } 893 }
896 894
897 } // namespace password_manager 895 } // namespace password_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698