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

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

Issue 133893004: Allow deleting autofill password suggestions on Shift+Delete (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: cleaning the code Created 6 years, 10 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_form_manager.h" 5 #include "chrome/browser/password_manager/password_form_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/strings/string_split.h" 10 #include "base/strings/string_split.h"
(...skipping 17 matching lines...) Expand all
28 28
29 PasswordFormManager::PasswordFormManager(Profile* profile, 29 PasswordFormManager::PasswordFormManager(Profile* profile,
30 PasswordManager* password_manager, 30 PasswordManager* password_manager,
31 content::WebContents* web_contents, 31 content::WebContents* web_contents,
32 const PasswordForm& observed_form, 32 const PasswordForm& observed_form,
33 bool ssl_valid) 33 bool ssl_valid)
34 : best_matches_deleter_(&best_matches_), 34 : best_matches_deleter_(&best_matches_),
35 observed_form_(observed_form), 35 observed_form_(observed_form),
36 is_new_login_(true), 36 is_new_login_(true),
37 has_generated_password_(false), 37 has_generated_password_(false),
38 remover_(false),
38 password_manager_(password_manager), 39 password_manager_(password_manager),
39 preferred_match_(NULL), 40 preferred_match_(NULL),
40 state_(PRE_MATCHING_PHASE), 41 state_(PRE_MATCHING_PHASE),
41 profile_(profile), 42 profile_(profile),
42 web_contents_(web_contents), 43 web_contents_(web_contents),
43 manager_action_(kManagerActionNone), 44 manager_action_(kManagerActionNone),
44 user_action_(kUserActionNone), 45 user_action_(kUserActionNone),
45 submit_result_(kSubmitResultNotSubmitted) { 46 submit_result_(kSubmitResultNotSubmitted) {
46 DCHECK(profile_); 47 DCHECK(profile_);
47 if (observed_form_.origin.is_valid()) 48 if (observed_form_.origin.is_valid())
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 form.origin.spec().end(), 103 form.origin.spec().end(),
103 after_scheme2, 104 after_scheme2,
104 observed_form_.origin.spec().end()) 105 observed_form_.origin.spec().end())
105 != form.origin.spec().end(); 106 != form.origin.spec().end();
106 } 107 }
107 return false; 108 return false;
108 } 109 }
109 return true; 110 return true;
110 } 111 }
111 112
113 void PasswordFormManager::RemoveAndUpdate(const string16& username_to_remove) {
vabr (Chromium) 2014/03/07 23:43:36 This is duplicated code: RemoveAndUpdate and Updat
riadh.chtara 2014/03/14 17:16:08 Done.
114 remover_ = true;
115 only_update_ = false;
116 username_to_remove_ = username_to_remove;
117
118 state_ = PRE_MATCHING_PHASE;
119 FetchMatchingLoginsFromPasswordStore();
120 }
121
122 void PasswordFormManager::Update(const string16& username_to_remove) {
123 remover_ = true;
124 only_update_ = true;
125 username_to_remove_ = username_to_remove;
126
127 state_ = PRE_MATCHING_PHASE;
128 FetchMatchingLoginsFromPasswordStore();
129 }
130
112 bool PasswordFormManager::IsBlacklisted() { 131 bool PasswordFormManager::IsBlacklisted() {
113 DCHECK_EQ(state_, POST_MATCHING_PHASE); 132 DCHECK_EQ(state_, POST_MATCHING_PHASE);
114 if (preferred_match_ && preferred_match_->blacklisted_by_user) 133 if (preferred_match_ && preferred_match_->blacklisted_by_user)
115 return true; 134 return true;
116 return false; 135 return false;
117 } 136 }
118 137
119 void PasswordFormManager::PermanentlyBlacklist() { 138 void PasswordFormManager::PermanentlyBlacklist() {
120 DCHECK_EQ(state_, POST_MATCHING_PHASE); 139 DCHECK_EQ(state_, POST_MATCHING_PHASE);
121 140
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 275
257 void PasswordFormManager::FetchMatchingLoginsFromPasswordStore() { 276 void PasswordFormManager::FetchMatchingLoginsFromPasswordStore() {
258 DCHECK_EQ(state_, PRE_MATCHING_PHASE); 277 DCHECK_EQ(state_, PRE_MATCHING_PHASE);
259 state_ = MATCHING_PHASE; 278 state_ = MATCHING_PHASE;
260 PasswordStore* password_store = PasswordStoreFactory::GetForProfile( 279 PasswordStore* password_store = PasswordStoreFactory::GetForProfile(
261 profile_, Profile::EXPLICIT_ACCESS).get(); 280 profile_, Profile::EXPLICIT_ACCESS).get();
262 if (!password_store) { 281 if (!password_store) {
263 NOTREACHED(); 282 NOTREACHED();
264 return; 283 return;
265 } 284 }
266 password_store->GetLogins(observed_form_, this); 285 PasswordForm f = observed_form_;
vabr (Chromium) 2014/03/07 23:43:36 Could you please explain to me why do we need to d
riadh.chtara 2014/03/14 18:06:18 I thought that using GetLogins with a PasswordForm
286 f.username_value = string16();
287 password_store->GetLogins(f, this);
267 } 288 }
268 289
269 bool PasswordFormManager::HasCompletedMatching() { 290 bool PasswordFormManager::HasCompletedMatching() {
270 return state_ == POST_MATCHING_PHASE; 291 return state_ == POST_MATCHING_PHASE;
271 } 292 }
272 293
273 void PasswordFormManager::OnRequestDone( 294 void PasswordFormManager::OnRequestDone(
274 const std::vector<PasswordForm*>& logins_result) { 295 const std::vector<PasswordForm*>& logins_result) {
275 // Note that the result gets deleted after this call completes, but we own 296 // Note that the result gets deleted after this call completes, but we own
276 // the PasswordForm objects pointed to by the result vector, thus we keep 297 // the PasswordForm objects pointed to by the result vector, thus we keep
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 // or (3) if it matched using public suffix domain matching. 396 // or (3) if it matched using public suffix domain matching.
376 bool wait_for_username = 397 bool wait_for_username =
377 profile_->IsOffTheRecord() || 398 profile_->IsOffTheRecord() ||
378 observed_form_.action.GetWithEmptyPath() != 399 observed_form_.action.GetWithEmptyPath() !=
379 preferred_match_->action.GetWithEmptyPath() || 400 preferred_match_->action.GetWithEmptyPath() ||
380 preferred_match_->IsPublicSuffixMatch(); 401 preferred_match_->IsPublicSuffixMatch();
381 if (wait_for_username) 402 if (wait_for_username)
382 manager_action_ = kManagerActionNone; 403 manager_action_ = kManagerActionNone;
383 else 404 else
384 manager_action_ = kManagerActionAutofilled; 405 manager_action_ = kManagerActionAutofilled;
385 password_manager_->Autofill(observed_form_, best_matches_, 406
386 *preferred_match_, wait_for_username); 407 if (!remover_) {
408 password_manager_->Autofill(
409 observed_form_, best_matches_, *preferred_match_, wait_for_username);
410 } else {
411 remover_ = false;
412 PasswordStore* password_store = PasswordStoreFactory::GetForProfile(
413 profile_, Profile::EXPLICIT_ACCESS).get();
414 if (!password_store) {
415 NOTREACHED();
416 return;
417 }
418
419 PasswordFormMap::iterator it = best_matches_.find(username_to_remove_);
420
421 if (it != best_matches_.end()) {
422 if (!only_update_)
423 password_store->RemoveLogin(*(it->second));
424
425 best_matches_.erase(it);
426 if (best_matches_.size() > 0) {
427 preferred_match_ = best_matches_.begin()->second;
428 password_manager_->Autofill(observed_form_,
429 best_matches_,
430 *preferred_match_,
431 wait_for_username);
432 }
433
434 }
435
436 }
387 } 437 }
388 438
389 void PasswordFormManager::OnPasswordStoreRequestDone( 439 void PasswordFormManager::OnPasswordStoreRequestDone(
390 CancelableRequestProvider::Handle handle, 440 CancelableRequestProvider::Handle handle,
391 const std::vector<autofill::PasswordForm*>& result) { 441 const std::vector<autofill::PasswordForm*>& result) {
392 // TODO(kaiwang): Remove this function. 442 // TODO(kaiwang): Remove this function.
393 NOTREACHED(); 443 NOTREACHED();
394 } 444 }
395 445
396 void PasswordFormManager::OnGetPasswordStoreResults( 446 void PasswordFormManager::OnGetPasswordStoreResults(
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
650 700
651 void PasswordFormManager::SubmitFailed() { 701 void PasswordFormManager::SubmitFailed() {
652 submit_result_ = kSubmitResultFailed; 702 submit_result_ = kSubmitResultFailed;
653 } 703 }
654 704
655 void PasswordFormManager::SendNotBlacklistedToRenderer() { 705 void PasswordFormManager::SendNotBlacklistedToRenderer() {
656 content::RenderViewHost* host = web_contents_->GetRenderViewHost(); 706 content::RenderViewHost* host = web_contents_->GetRenderViewHost();
657 host->Send(new AutofillMsg_FormNotBlacklisted(host->GetRoutingID(), 707 host->Send(new AutofillMsg_FormNotBlacklisted(host->GetRoutingID(),
658 observed_form_)); 708 observed_form_));
659 } 709 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698