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

Side by Side Diff: components/password_manager/content/browser/credential_manager_impl_unittest.cc

Issue 2277793002: Filter duplicates in the account chooser. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 3 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/content/browser/credential_manager_impl.h" 5 #include "components/password_manager/content/browser/credential_manager_impl.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <string> 9 #include <string>
10 #include <tuple> 10 #include <tuple>
(...skipping 22 matching lines...) Expand all
33 #include "content/public/browser/web_contents.h" 33 #include "content/public/browser/web_contents.h"
34 #include "content/public/test/mock_render_process_host.h" 34 #include "content/public/test/mock_render_process_host.h"
35 #include "content/public/test/test_renderer_host.h" 35 #include "content/public/test/test_renderer_host.h"
36 #include "testing/gmock/include/gmock/gmock.h" 36 #include "testing/gmock/include/gmock/gmock.h"
37 #include "testing/gtest/include/gtest/gtest.h" 37 #include "testing/gtest/include/gtest/gtest.h"
38 38
39 using content::BrowserContext; 39 using content::BrowserContext;
40 using content::WebContents; 40 using content::WebContents;
41 41
42 using testing::_; 42 using testing::_;
43 using testing::Pointee;
44 using testing::UnorderedElementsAre;
43 45
44 namespace password_manager { 46 namespace password_manager {
45 47
46 namespace { 48 namespace {
47 49
48 const char kTestWebOrigin[] = "https://example.com/"; 50 const char kTestWebOrigin[] = "https://example.com/";
49 const char kTestAndroidRealm1[] = "android://hash@com.example.one.android/"; 51 const char kTestAndroidRealm1[] = "android://hash@com.example.one.android/";
50 const char kTestAndroidRealm2[] = "android://hash@com.example.two.android/"; 52 const char kTestAndroidRealm2[] = "android://hash@com.example.two.android/";
51 53
52 class MockPasswordManagerClient : public StubPasswordManagerClient { 54 class MockPasswordManagerClient : public StubPasswordManagerClient {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 } 92 }
91 93
92 PasswordStore* GetPasswordStore() const override { return store_; } 94 PasswordStore* GetPasswordStore() const override { return store_; }
93 95
94 PrefService* GetPrefs() override { return &prefs_; } 96 PrefService* GetPrefs() override { return &prefs_; }
95 97
96 bool PromptUserToChooseCredentials( 98 bool PromptUserToChooseCredentials(
97 ScopedVector<autofill::PasswordForm> local_forms, 99 ScopedVector<autofill::PasswordForm> local_forms,
98 ScopedVector<autofill::PasswordForm> federated_forms, 100 ScopedVector<autofill::PasswordForm> federated_forms,
99 const GURL& origin, 101 const GURL& origin,
100 const CredentialsCallback& callback) { 102 const CredentialsCallback& callback) override {
101 EXPECT_FALSE(local_forms.empty() && federated_forms.empty()); 103 EXPECT_FALSE(local_forms.empty() && federated_forms.empty());
102 const autofill::PasswordForm* form = 104 const autofill::PasswordForm* form =
103 local_forms.empty() ? federated_forms[0] : local_forms[0]; 105 local_forms.empty() ? federated_forms[0] : local_forms[0];
104 base::ThreadTaskRunnerHandle::Get()->PostTask( 106 base::ThreadTaskRunnerHandle::Get()->PostTask(
105 FROM_HERE, 107 FROM_HERE,
106 base::Bind(callback, base::Owned(new autofill::PasswordForm(*form)))); 108 base::Bind(callback, base::Owned(new autofill::PasswordForm(*form))));
107 PromptUserToChooseCredentialsPtr(local_forms.get(), federated_forms.get(), 109 PromptUserToChooseCredentialsPtr(local_forms.get(), federated_forms.get(),
108 origin, callback); 110 origin, callback);
109 return true; 111 return true;
110 } 112 }
(...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after
688 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _, _)) 690 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _, _))
689 .Times(testing::Exactly(0)); 691 .Times(testing::Exactly(0));
690 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr(_)).Times(testing::Exactly(0)); 692 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr(_)).Times(testing::Exactly(0));
691 693
692 std::vector<GURL> federations; 694 std::vector<GURL> federations;
693 ExpectCredentialType(false, true, federations, 695 ExpectCredentialType(false, true, federations,
694 CredentialType::CREDENTIAL_TYPE_EMPTY); 696 CredentialType::CREDENTIAL_TYPE_EMPTY);
695 } 697 }
696 698
697 TEST_F(CredentialManagerImplTest, 699 TEST_F(CredentialManagerImplTest,
698 CredentialManagerOnRequestCredentialWithEmptyAndNonUsernames) { 700 CredentialManagerOnRequestCredentialWithEmptyAndNonemptyUsernames) {
699 store_->AddLogin(form_); 701 store_->AddLogin(form_);
700 autofill::PasswordForm empty = form_; 702 autofill::PasswordForm empty = form_;
701 empty.username_value.clear(); 703 empty.username_value.clear();
702 store_->AddLogin(empty); 704 store_->AddLogin(empty);
705 autofill::PasswordForm duplicate = form_;
706 duplicate.username_element = base::ASCIIToUTF16("username_element");
vabr (Chromium) 2016/08/24 15:56:17 nit: If this is meant to be different from form_.u
vasilii 2016/08/24 16:51:15 Done.
707 store_->AddLogin(duplicate);
703 708
704 std::vector<GURL> federations; 709 std::vector<GURL> federations;
705 ExpectZeroClickSignInSuccess(false, true, federations, 710 ExpectZeroClickSignInSuccess(false, true, federations,
706 CredentialType::CREDENTIAL_TYPE_PASSWORD); 711 CredentialType::CREDENTIAL_TYPE_PASSWORD);
707 } 712 }
708 713
709 TEST_F(CredentialManagerImplTest, 714 TEST_F(CredentialManagerImplTest,
715 CredentialManagerOnRequestCredentialWithDuplicates) {
716 // Add 5 credentials. Two pairs of duplicates and one empty username. There
717 // should be just two in the account chooser.
718 store_->AddLogin(form_);
719 autofill::PasswordForm empty = form_;
720 empty.username_value.clear();
721 store_->AddLogin(empty);
722 autofill::PasswordForm duplicate = form_;
723 duplicate.username_element = base::ASCIIToUTF16("username_element");
724 duplicate.is_public_suffix_match = true;
725 store_->AddLogin(duplicate);
726
727 store_->AddLogin(origin_path_form_);
728 duplicate = origin_path_form_;
729 duplicate.username_element = base::ASCIIToUTF16("username_element");
730 duplicate.is_public_suffix_match = true;
731 store_->AddLogin(duplicate);
732
733 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(
734 UnorderedElementsAre(Pointee(form_),
735 Pointee(origin_path_form_)),
736 testing::IsEmpty(), _, _))
737 .Times(testing::Exactly(1));
vabr (Chromium) 2016/08/24 15:56:17 optional: This line is not necessary (omitting is
vasilii 2016/08/24 16:51:15 It was copy-paste.
738
739 bool called = false;
740 mojom::CredentialManagerError error;
741 base::Optional<CredentialInfo> credential;
742 std::vector<GURL> federations;
743 CallGet(false, true, federations,
744 base::Bind(&GetCredentialCallback, &called, &error, &credential));
745
746 RunAllPendingTasks();
747 }
748
749 TEST_F(CredentialManagerImplTest,
710 CredentialManagerOnRequestCredentialWithCrossOriginPasswordStore) { 750 CredentialManagerOnRequestCredentialWithCrossOriginPasswordStore) {
711 store_->AddLogin(cross_origin_form_); 751 store_->AddLogin(cross_origin_form_);
712 752
713 std::vector<GURL> federations; 753 std::vector<GURL> federations;
714 EXPECT_CALL(*client_, PromptUserToSavePasswordPtr( 754 EXPECT_CALL(*client_, PromptUserToSavePasswordPtr(
715 _, CredentialSourceType::CREDENTIAL_SOURCE_API)) 755 _, CredentialSourceType::CREDENTIAL_SOURCE_API))
716 .Times(testing::Exactly(0)); 756 .Times(testing::Exactly(0));
717 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _, _)) 757 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _, _))
718 .Times(testing::Exactly(0)); 758 .Times(testing::Exactly(0));
719 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr(_)).Times(testing::Exactly(0)); 759 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr(_)).Times(testing::Exactly(0));
(...skipping 595 matching lines...) Expand 10 before | Expand all | Expand 10 after
1315 _, CredentialSourceType::CREDENTIAL_SOURCE_API)); 1355 _, CredentialSourceType::CREDENTIAL_SOURCE_API));
1316 CallStore(info, base::Bind(&RespondCallback, &called)); 1356 CallStore(info, base::Bind(&RespondCallback, &called));
1317 // Allow the PasswordFormManager to talk to the password store 1357 // Allow the PasswordFormManager to talk to the password store
1318 RunAllPendingTasks(); 1358 RunAllPendingTasks();
1319 1359
1320 ASSERT_TRUE(client_->pending_manager()); 1360 ASSERT_TRUE(client_->pending_manager());
1321 EXPECT_TRUE(client_->pending_manager()->IsBlacklisted()); 1361 EXPECT_TRUE(client_->pending_manager()->IsBlacklisted());
1322 } 1362 }
1323 1363
1324 } // namespace password_manager 1364 } // namespace password_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698