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

Side by Side Diff: chrome/browser/password_manager/password_store_x.cc

Issue 906973007: PasswordStore: Clean up expectations about rewriting vectors of forms (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Just rebased Created 5 years, 9 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/password_manager/password_store_x.h" 5 #include "chrome/browser/password_manager/password_store_x.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 ScopedVector<autofill::PasswordForm> PasswordStoreX::FillMatchingLogins( 139 ScopedVector<autofill::PasswordForm> PasswordStoreX::FillMatchingLogins(
140 const autofill::PasswordForm& form, 140 const autofill::PasswordForm& form,
141 AuthorizationPromptPolicy prompt_policy) { 141 AuthorizationPromptPolicy prompt_policy) {
142 CheckMigration(); 142 CheckMigration();
143 ScopedVector<autofill::PasswordForm> matched_forms; 143 ScopedVector<autofill::PasswordForm> matched_forms;
144 if (use_native_backend() && backend_->GetLogins(form, &matched_forms)) { 144 if (use_native_backend() && backend_->GetLogins(form, &matched_forms)) {
145 SortLoginsByOrigin(&matched_forms.get()); 145 SortLoginsByOrigin(&matched_forms.get());
146 // The native backend may succeed and return no data even while locked, if 146 // The native backend may succeed and return no data even while locked, if
147 // the query did not match anything stored. So we continue to allow fallback 147 // the query did not match anything stored. So we continue to allow fallback
148 // until we perform a write operation, or until a read returns actual data. 148 // until we perform a write operation, or until a read returns actual data.
149 if (matched_forms.size() > 0) 149 if (!matched_forms.empty())
150 allow_fallback_ = false; 150 allow_fallback_ = false;
151 } else if (allow_default_store()) { 151 return matched_forms.Pass();
152 DCHECK(matched_forms.empty()); 152 }
153 if (allow_default_store())
153 return PasswordStoreDefault::FillMatchingLogins(form, prompt_policy); 154 return PasswordStoreDefault::FillMatchingLogins(form, prompt_policy);
154 } 155 return ScopedVector<autofill::PasswordForm>();
155 return matched_forms.Pass();
156 } 156 }
157 157
158 bool PasswordStoreX::FillAutofillableLogins( 158 bool PasswordStoreX::FillAutofillableLogins(
159 ScopedVector<autofill::PasswordForm>* forms) { 159 ScopedVector<autofill::PasswordForm>* forms) {
160 CheckMigration(); 160 CheckMigration();
161 if (use_native_backend() && backend_->GetAutofillableLogins(forms)) { 161 if (use_native_backend() && backend_->GetAutofillableLogins(forms)) {
162 SortLoginsByOrigin(&forms->get()); 162 SortLoginsByOrigin(&forms->get());
163 // See GetLoginsImpl() for why we disallow fallback conditionally here. 163 // See GetLoginsImpl() for why we disallow fallback conditionally here.
164 if (!forms->empty()) 164 if (!forms->empty())
165 allow_fallback_ = false; 165 allow_fallback_ = false;
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 backend_.reset(); 214 backend_.reset();
215 // Don't warn again. We'll use the default store because backend_ is NULL. 215 // Don't warn again. We'll use the default store because backend_ is NULL.
216 allow_fallback_ = false; 216 allow_fallback_ = false;
217 } 217 }
218 return !backend_.get(); 218 return !backend_.get();
219 } 219 }
220 220
221 ssize_t PasswordStoreX::MigrateLogins() { 221 ssize_t PasswordStoreX::MigrateLogins() {
222 DCHECK(backend_.get()); 222 DCHECK(backend_.get());
223 ScopedVector<autofill::PasswordForm> forms; 223 ScopedVector<autofill::PasswordForm> forms;
224 ScopedVector<autofill::PasswordForm> blacklist_forms;
224 bool ok = PasswordStoreDefault::FillAutofillableLogins(&forms) && 225 bool ok = PasswordStoreDefault::FillAutofillableLogins(&forms) &&
225 PasswordStoreDefault::FillBlacklistLogins(&forms); 226 PasswordStoreDefault::FillBlacklistLogins(&blacklist_forms);
227 forms.reserve(forms.size() + blacklist_forms.size());
228 forms.insert(forms.end(), blacklist_forms.begin(), blacklist_forms.end());
229 blacklist_forms.weak_clear();
226 if (ok) { 230 if (ok) {
227 // We add all the passwords (and blacklist entries) to the native backend 231 // We add all the passwords (and blacklist entries) to the native backend
228 // before attempting to remove any from the login database, to make sure we 232 // before attempting to remove any from the login database, to make sure we
229 // don't somehow end up with some of the passwords in one store and some in 233 // don't somehow end up with some of the passwords in one store and some in
230 // another. We'll always have at least one intact store this way. 234 // another. We'll always have at least one intact store this way.
231 for (size_t i = 0; i < forms.size(); ++i) { 235 for (size_t i = 0; i < forms.size(); ++i) {
232 PasswordStoreChangeList changes; 236 PasswordStoreChangeList changes;
233 if (!AddLoginToBackend(backend_, *forms[i], &changes)) { 237 if (!AddLoginToBackend(backend_, *forms[i], &changes)) {
234 ok = false; 238 ok = false;
235 break; 239 break;
(...skipping 12 matching lines...) Expand all
248 // Finally, delete the database file itself. We remove the passwords from 252 // Finally, delete the database file itself. We remove the passwords from
249 // it before deleting the file just in case there is some problem deleting 253 // it before deleting the file just in case there is some problem deleting
250 // the file (e.g. directory is not writable, but file is), which would 254 // the file (e.g. directory is not writable, but file is), which would
251 // otherwise cause passwords to re-migrate next (or maybe every) time. 255 // otherwise cause passwords to re-migrate next (or maybe every) time.
252 DeleteAndRecreateDatabaseFile(); 256 DeleteAndRecreateDatabaseFile();
253 } 257 }
254 } 258 }
255 ssize_t result = ok ? forms.size() : -1; 259 ssize_t result = ok ? forms.size() : -1;
256 return result; 260 return result;
257 } 261 }
OLDNEW
« no previous file with comments | « chrome/browser/password_manager/password_store_x.h ('k') | chrome/browser/password_manager/password_store_x_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698