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

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

Issue 283563002: Password Login Database: report correct changes from AddLogin(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: unused variable Created 6 years, 7 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 | Annotate | Revision Log
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/native_backend_kwallet_x.h" 5 #include "chrome/browser/password_manager/native_backend_kwallet_x.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 if (!reader.PopString(&wallet_name_)) { 258 if (!reader.PopString(&wallet_name_)) {
259 LOG(ERROR) << "Error reading response from kwalletd (networkWallet): " 259 LOG(ERROR) << "Error reading response from kwalletd (networkWallet): "
260 << response->ToString(); 260 << response->ToString();
261 return PERMANENT_FAIL; 261 return PERMANENT_FAIL;
262 } 262 }
263 } 263 }
264 264
265 return INIT_SUCCESS; 265 return INIT_SUCCESS;
266 } 266 }
267 267
268 bool NativeBackendKWallet::AddLogin(const PasswordForm& form) { 268 password_manager::PasswordStoreChangeList NativeBackendKWallet::AddLogin(
269 const PasswordForm& form) {
269 int wallet_handle = WalletHandle(); 270 int wallet_handle = WalletHandle();
270 if (wallet_handle == kInvalidKWalletHandle) 271 if (wallet_handle == kInvalidKWalletHandle)
271 return false; 272 return password_manager::PasswordStoreChangeList();
272 273
273 PasswordFormList forms; 274 ScopedVector<autofill::PasswordForm> forms;
274 GetLoginsList(&forms, form.signon_realm, wallet_handle); 275 GetLoginsList(&forms.get(), form.signon_realm, wallet_handle);
275 276
276 // We search for a login to update, rather than unconditionally appending the 277 // We search for a login to update, rather than unconditionally appending the
277 // login, because in some cases (especially involving sync) we can be asked to 278 // login, because in some cases (especially involving sync) we can be asked to
278 // add a login that already exists. In these cases we want to just update. 279 // add a login that already exists. In these cases we want to just update.
279 bool updated = false; 280 bool updated = false;
281 password_manager::PasswordStoreChangeList changes;
280 for (size_t i = 0; i < forms.size(); ++i) { 282 for (size_t i = 0; i < forms.size(); ++i) {
281 // Use the more restrictive removal comparison, so that we never have 283 // Use the more restrictive removal comparison, so that we never have
282 // duplicate logins that would all be removed together by RemoveLogin(). 284 // duplicate logins that would all be removed together by RemoveLogin().
283 if (CompareForms(form, *forms[i], false)) { 285 if (CompareForms(form, *forms[i], false)) {
286 changes.push_back(password_manager::PasswordStoreChange(
287 password_manager::PasswordStoreChange::REMOVE, *forms[i]));
284 *forms[i] = form; 288 *forms[i] = form;
285 updated = true; 289 updated = true;
286 } 290 }
287 } 291 }
288 if (!updated) 292 if (!updated)
289 forms.push_back(new PasswordForm(form)); 293 forms.push_back(new PasswordForm(form));
294 changes.push_back(password_manager::PasswordStoreChange(
295 password_manager::PasswordStoreChange::ADD, form));
290 296
291 bool ok = SetLoginsList(forms, form.signon_realm, wallet_handle); 297 bool ok = SetLoginsList(forms.get(), form.signon_realm, wallet_handle);
298 if (!ok)
299 changes.clear();
292 300
293 STLDeleteElements(&forms); 301 return changes;
294 return ok;
295 } 302 }
296 303
297 bool NativeBackendKWallet::UpdateLogin(const PasswordForm& form) { 304 bool NativeBackendKWallet::UpdateLogin(const PasswordForm& form) {
298 int wallet_handle = WalletHandle(); 305 int wallet_handle = WalletHandle();
299 if (wallet_handle == kInvalidKWalletHandle) 306 if (wallet_handle == kInvalidKWalletHandle)
300 return false; 307 return false;
301 308
302 PasswordFormList forms; 309 PasswordFormList forms;
303 GetLoginsList(&forms, form.signon_realm, wallet_handle); 310 GetLoginsList(&forms, form.signon_realm, wallet_handle);
304 311
(...skipping 610 matching lines...) Expand 10 before | Expand all | Expand 10 after
915 } 922 }
916 923
917 return handle; 924 return handle;
918 } 925 }
919 926
920 std::string NativeBackendKWallet::GetProfileSpecificFolderName() const { 927 std::string NativeBackendKWallet::GetProfileSpecificFolderName() const {
921 // Originally, the folder name was always just "Chrome Form Data". 928 // Originally, the folder name was always just "Chrome Form Data".
922 // Now we use it to distinguish passwords for different profiles. 929 // Now we use it to distinguish passwords for different profiles.
923 return base::StringPrintf("%s (%d)", kKWalletFolder, profile_id_); 930 return base::StringPrintf("%s (%d)", kKWalletFolder, profile_id_);
924 } 931 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698