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

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

Issue 2864493003: Deprecate CredentialRequestOptions.unmediated in favor mediation enum (Closed)
Patch Set: Fix Windows Compilation Error Created 3 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
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 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 EXPECT_TRUE(store_->IsEmpty()); 285 EXPECT_TRUE(store_->IsEmpty());
286 } 286 }
287 287
288 void TearDown() override { 288 void TearDown() override {
289 cm_service_impl_.reset(); 289 cm_service_impl_.reset();
290 290
291 store_->ShutdownOnUIThread(); 291 store_->ShutdownOnUIThread();
292 content::RenderViewHostTestHarness::TearDown(); 292 content::RenderViewHostTestHarness::TearDown();
293 } 293 }
294 294
295 void ExpectZeroClickSignInFailure(bool zero_click_only, 295 void ExpectZeroClickSignInFailure(
296 bool include_passwords, 296 mojom::CredentialMediationRequirement mediation,
vasilii 2017/05/18 12:34:03 No "mojo::"
jdoerrie 2017/05/18 14:57:24 Done.
297 const std::vector<GURL>& federations) { 297 bool include_passwords,
298 const std::vector<GURL>& federations) {
298 bool called = false; 299 bool called = false;
299 mojom::CredentialManagerError error; 300 mojom::CredentialManagerError error;
300 base::Optional<CredentialInfo> credential; 301 base::Optional<CredentialInfo> credential;
301 CallGet(zero_click_only, include_passwords, federations, 302 CallGet(mediation, include_passwords, federations,
302 base::Bind(&GetCredentialCallback, &called, &error, &credential)); 303 base::Bind(&GetCredentialCallback, &called, &error, &credential));
303 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _)) 304 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _))
304 .Times(testing::Exactly(0)); 305 .Times(testing::Exactly(0));
305 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0)); 306 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0));
306 307
307 RunAllPendingTasks(); 308 RunAllPendingTasks();
308 309
309 EXPECT_TRUE(called); 310 EXPECT_TRUE(called);
310 EXPECT_EQ(mojom::CredentialManagerError::SUCCESS, error); 311 EXPECT_EQ(mojom::CredentialManagerError::SUCCESS, error);
311 EXPECT_EQ(CredentialType::CREDENTIAL_TYPE_EMPTY, credential->type); 312 EXPECT_EQ(CredentialType::CREDENTIAL_TYPE_EMPTY, credential->type);
312 } 313 }
313 314
314 void ExpectZeroClickSignInSuccess(bool zero_click_only, 315 void ExpectAccountChooser(mojom::CredentialMediationRequirement mediation,
315 bool include_passwords, 316 bool include_passwords,
316 const std::vector<GURL>& federations, 317 const std::vector<GURL>& federations,
317 CredentialType type) { 318 CredentialType type) {
318 bool called = false; 319 bool called = false;
319 mojom::CredentialManagerError error; 320 mojom::CredentialManagerError error;
320 base::Optional<CredentialInfo> credential; 321 base::Optional<CredentialInfo> credential;
321 CallGet(zero_click_only, include_passwords, federations, 322 CallGet(mediation, include_passwords, federations,
323 base::Bind(&GetCredentialCallback, &called, &error, &credential));
324 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _))
325 .Times(testing::Exactly(1));
326 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0));
327
328 RunAllPendingTasks();
329
330 EXPECT_TRUE(called);
331 EXPECT_EQ(mojom::CredentialManagerError::SUCCESS, error);
332 EXPECT_EQ(type, credential->type);
333 }
334
335 void ExpectZeroClickSignInSuccess(
336 mojom::CredentialMediationRequirement mediation,
337 bool include_passwords,
338 const std::vector<GURL>& federations,
339 CredentialType type) {
340 bool called = false;
341 mojom::CredentialManagerError error;
342 base::Optional<CredentialInfo> credential;
343 CallGet(mediation, include_passwords, federations,
322 base::Bind(&GetCredentialCallback, &called, &error, &credential)); 344 base::Bind(&GetCredentialCallback, &called, &error, &credential));
323 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _)) 345 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _))
324 .Times(testing::Exactly(0)); 346 .Times(testing::Exactly(0));
325 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(1)); 347 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(1));
326 348
327 RunAllPendingTasks(); 349 RunAllPendingTasks();
328 350
329 EXPECT_TRUE(called); 351 EXPECT_TRUE(called);
330 EXPECT_EQ(mojom::CredentialManagerError::SUCCESS, error); 352 EXPECT_EQ(mojom::CredentialManagerError::SUCCESS, error);
331 EXPECT_EQ(type, credential->type); 353 EXPECT_EQ(type, credential->type);
332 } 354 }
333 355
334 void ExpectCredentialType(bool zero_click_only, 356 void ExpectCredentialType(mojom::CredentialMediationRequirement mediation,
335 bool include_passwords, 357 bool include_passwords,
336 const std::vector<GURL>& federations, 358 const std::vector<GURL>& federations,
337 CredentialType type) { 359 CredentialType type) {
338 bool called = false; 360 bool called = false;
339 mojom::CredentialManagerError error; 361 mojom::CredentialManagerError error;
340 base::Optional<CredentialInfo> credential; 362 base::Optional<CredentialInfo> credential;
341 CallGet(zero_click_only, include_passwords, federations, 363 CallGet(mediation, include_passwords, federations,
342 base::Bind(&GetCredentialCallback, &called, &error, &credential)); 364 base::Bind(&GetCredentialCallback, &called, &error, &credential));
343 365
344 RunAllPendingTasks(); 366 RunAllPendingTasks();
345 367
346 EXPECT_TRUE(called); 368 EXPECT_TRUE(called);
347 EXPECT_EQ(mojom::CredentialManagerError::SUCCESS, error); 369 EXPECT_EQ(mojom::CredentialManagerError::SUCCESS, error);
348 EXPECT_EQ(type, credential->type); 370 EXPECT_EQ(type, credential->type);
349 } 371 }
350 372
351 CredentialManagerImpl* cm_service_impl() { return cm_service_impl_.get(); } 373 CredentialManagerImpl* cm_service_impl() { return cm_service_impl_.get(); }
352 374
353 // Helpers for testing CredentialManagerImpl methods. 375 // Helpers for testing CredentialManagerImpl methods.
354 void CallStore(const CredentialInfo& info, 376 void CallStore(const CredentialInfo& info,
355 CredentialManagerImpl::StoreCallback callback) { 377 CredentialManagerImpl::StoreCallback callback) {
356 cm_service_impl_->Store(info, std::move(callback)); 378 cm_service_impl_->Store(info, std::move(callback));
357 } 379 }
358 380
359 void CallRequireUserMediation( 381 void CallRequireUserMediation(
360 CredentialManagerImpl::RequireUserMediationCallback callback) { 382 CredentialManagerImpl::RequireUserMediationCallback callback) {
361 cm_service_impl_->RequireUserMediation(std::move(callback)); 383 cm_service_impl_->RequireUserMediation(std::move(callback));
362 } 384 }
363 385
364 void CallGet(bool zero_click_only, 386 void CallGet(mojom::CredentialMediationRequirement mediation,
365 bool include_passwords, 387 bool include_passwords,
366 const std::vector<GURL>& federations, 388 const std::vector<GURL>& federations,
367 CredentialManagerImpl::GetCallback callback) { 389 CredentialManagerImpl::GetCallback callback) {
368 cm_service_impl_->Get(zero_click_only, include_passwords, federations, 390 cm_service_impl_->Get(mediation, include_passwords, federations,
369 std::move(callback)); 391 std::move(callback));
370 } 392 }
371 393
372 protected: 394 protected:
373 autofill::PasswordForm form_; 395 autofill::PasswordForm form_;
374 autofill::PasswordForm affiliated_form1_; 396 autofill::PasswordForm affiliated_form1_;
375 autofill::PasswordForm affiliated_form2_; 397 autofill::PasswordForm affiliated_form2_;
376 autofill::PasswordForm origin_path_form_; 398 autofill::PasswordForm origin_path_form_;
377 autofill::PasswordForm subdomain_form_; 399 autofill::PasswordForm subdomain_form_;
378 autofill::PasswordForm cross_origin_form_; 400 autofill::PasswordForm cross_origin_form_;
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
673 RunAllPendingTasks(); 695 RunAllPendingTasks();
674 696
675 std::vector<GURL> federations; 697 std::vector<GURL> federations;
676 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _)) 698 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _))
677 .Times(testing::Exactly(1)); 699 .Times(testing::Exactly(1));
678 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0)); 700 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0));
679 701
680 bool called = false; 702 bool called = false;
681 mojom::CredentialManagerError error; 703 mojom::CredentialManagerError error;
682 base::Optional<CredentialInfo> credential; 704 base::Optional<CredentialInfo> credential;
683 CallGet(false, true, federations, 705 CallGet(mojom::CredentialMediationRequirement::OPTIONAL, true, federations,
684 base::Bind(&GetCredentialCallback, &called, &error, &credential)); 706 base::Bind(&GetCredentialCallback, &called, &error, &credential));
685 707
686 RunAllPendingTasks(); 708 RunAllPendingTasks();
687 709
688 EXPECT_TRUE(called); 710 EXPECT_TRUE(called);
689 EXPECT_EQ(mojom::CredentialManagerError::SUCCESS, error); 711 EXPECT_EQ(mojom::CredentialManagerError::SUCCESS, error);
690 712
691 // Verify that the update toggled the skip_zero_click flag. 713 // Verify that the update toggled the skip_zero_click flag.
692 TestPasswordStore::PasswordMap passwords = store_->stored_passwords(); 714 TestPasswordStore::PasswordMap passwords = store_->stored_passwords();
693 EXPECT_FALSE(passwords[form_.signon_realm][0].skip_zero_click); 715 EXPECT_FALSE(passwords[form_.signon_realm][0].skip_zero_click);
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
806 828
807 TEST_F(CredentialManagerImplTest, 829 TEST_F(CredentialManagerImplTest,
808 CredentialManagerOnRequestCredentialWithEmptyPasswordStore) { 830 CredentialManagerOnRequestCredentialWithEmptyPasswordStore) {
809 std::vector<GURL> federations; 831 std::vector<GURL> federations;
810 EXPECT_CALL(*client_, PromptUserToSavePasswordPtr(_)) 832 EXPECT_CALL(*client_, PromptUserToSavePasswordPtr(_))
811 .Times(testing::Exactly(0)); 833 .Times(testing::Exactly(0));
812 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _)) 834 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _))
813 .Times(testing::Exactly(0)); 835 .Times(testing::Exactly(0));
814 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0)); 836 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0));
815 837
816 ExpectCredentialType(false, true, federations, 838 ExpectCredentialType(mojom::CredentialMediationRequirement::OPTIONAL, true,
817 CredentialType::CREDENTIAL_TYPE_EMPTY); 839 federations, CredentialType::CREDENTIAL_TYPE_EMPTY);
840
841 ExpectCredentialType(mojom::CredentialMediationRequirement::SILENT, true,
vasilii 2017/05/18 12:34:03 We have CredentialManagerOnRequestCredentialWithZe
842 federations, CredentialType::CREDENTIAL_TYPE_EMPTY);
818 } 843 }
819 844
820 TEST_F(CredentialManagerImplTest, 845 TEST_F(CredentialManagerImplTest,
821 CredentialManagerOnRequestCredentialWithEmptyUsernames) { 846 CredentialManagerOnRequestCredentialWithEmptyUsernames) {
822 form_.username_value.clear(); 847 form_.username_value.clear();
823 store_->AddLogin(form_); 848 store_->AddLogin(form_);
824 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _)) 849 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _))
825 .Times(testing::Exactly(0)); 850 .Times(testing::Exactly(0));
826 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0)); 851 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0));
827 852
828 std::vector<GURL> federations; 853 std::vector<GURL> federations;
829 ExpectCredentialType(false, true, federations, 854 ExpectCredentialType(mojom::CredentialMediationRequirement::OPTIONAL, true,
830 CredentialType::CREDENTIAL_TYPE_EMPTY); 855 federations, CredentialType::CREDENTIAL_TYPE_EMPTY);
856
857 ExpectCredentialType(mojom::CredentialMediationRequirement::REQUIRED, true,
vasilii 2017/05/18 12:34:03 I'd avoid calling Get() twice in the same test unl
858 federations, CredentialType::CREDENTIAL_TYPE_EMPTY);
831 } 859 }
832 860
833 TEST_F(CredentialManagerImplTest, 861 TEST_F(CredentialManagerImplTest,
834 CredentialManagerOnRequestCredentialWithPSLCredential) { 862 CredentialManagerOnRequestCredentialWithPSLCredential) {
835 store_->AddLogin(subdomain_form_); 863 store_->AddLogin(subdomain_form_);
836 subdomain_form_.is_public_suffix_match = true; 864 subdomain_form_.is_public_suffix_match = true;
837 EXPECT_CALL(*client_, 865 EXPECT_CALL(*client_,
838 PromptUserToChooseCredentialsPtr( 866 PromptUserToChooseCredentialsPtr(
839 UnorderedElementsAre(Pointee(subdomain_form_)), _, _)); 867 UnorderedElementsAre(Pointee(subdomain_form_)), _, _))
868 .Times(testing::Exactly(2));
840 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(0); 869 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(0);
841 870
842 ExpectCredentialType(false, true, std::vector<GURL>(), 871 ExpectCredentialType(mojom::CredentialMediationRequirement::OPTIONAL, true,
872 std::vector<GURL>(),
873 CredentialType::CREDENTIAL_TYPE_PASSWORD);
874
875 ExpectCredentialType(mojom::CredentialMediationRequirement::REQUIRED, true,
876 std::vector<GURL>(),
843 CredentialType::CREDENTIAL_TYPE_PASSWORD); 877 CredentialType::CREDENTIAL_TYPE_PASSWORD);
844 } 878 }
845 879
846 TEST_F(CredentialManagerImplTest, 880 TEST_F(CredentialManagerImplTest,
847 CredentialManagerOnRequestCredentialWithPSLAndNormalCredentials) { 881 CredentialManagerOnRequestCredentialWithPSLAndNormalCredentials) {
848 store_->AddLogin(form_); 882 store_->AddLogin(form_);
849 store_->AddLogin(origin_path_form_); 883 store_->AddLogin(origin_path_form_);
850 store_->AddLogin(subdomain_form_); 884 store_->AddLogin(subdomain_form_);
851 885
852 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr( 886 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(
853 UnorderedElementsAre(Pointee(origin_path_form_), 887 UnorderedElementsAre(Pointee(origin_path_form_),
854 Pointee(form_)), 888 Pointee(form_)),
855 _, _)); 889 _, _))
890 .Times(testing::Exactly(2));
856 891
857 ExpectCredentialType(false, true, std::vector<GURL>(), 892 ExpectCredentialType(mojom::CredentialMediationRequirement::OPTIONAL, true,
893 std::vector<GURL>(),
894 CredentialType::CREDENTIAL_TYPE_PASSWORD);
895
896 ExpectCredentialType(mojom::CredentialMediationRequirement::REQUIRED, true,
897 std::vector<GURL>(),
858 CredentialType::CREDENTIAL_TYPE_PASSWORD); 898 CredentialType::CREDENTIAL_TYPE_PASSWORD);
859 } 899 }
860 900
861 TEST_F(CredentialManagerImplTest, 901 TEST_F(CredentialManagerImplTest,
862 CredentialManagerOnRequestCredentialWithEmptyAndNonemptyUsernames) { 902 CredentialManagerOnRequestCredentialWithEmptyAndNonemptyUsernames) {
863 store_->AddLogin(form_); 903 store_->AddLogin(form_);
864 autofill::PasswordForm empty = form_; 904 autofill::PasswordForm empty = form_;
865 empty.username_value.clear(); 905 empty.username_value.clear();
866 store_->AddLogin(empty); 906 store_->AddLogin(empty);
867 autofill::PasswordForm duplicate = form_; 907 autofill::PasswordForm duplicate = form_;
868 duplicate.username_element = base::ASCIIToUTF16("different_username_element"); 908 duplicate.username_element = base::ASCIIToUTF16("different_username_element");
869 store_->AddLogin(duplicate); 909 store_->AddLogin(duplicate);
870 910
871 std::vector<GURL> federations; 911 std::vector<GURL> federations;
872 ExpectZeroClickSignInSuccess(false, true, federations, 912 ExpectZeroClickSignInSuccess(mojom::CredentialMediationRequirement::OPTIONAL,
913 true, federations,
873 CredentialType::CREDENTIAL_TYPE_PASSWORD); 914 CredentialType::CREDENTIAL_TYPE_PASSWORD);
915
916 ExpectAccountChooser(mojom::CredentialMediationRequirement::REQUIRED, true,
917 federations, CredentialType::CREDENTIAL_TYPE_PASSWORD);
874 } 918 }
875 919
876 TEST_F(CredentialManagerImplTest, 920 TEST_F(CredentialManagerImplTest,
877 CredentialManagerOnRequestCredentialWithDuplicates) { 921 CredentialManagerOnRequestCredentialWithDuplicates) {
878 // Add 6 credentials. Two buckets of duplicates, one empty username and one 922 // Add 6 credentials. Two buckets of duplicates, one empty username and one
879 // federated one. There should be just 3 in the account chooser. 923 // federated one. There should be just 3 in the account chooser.
880 form_.preferred = true; 924 form_.preferred = true;
881 form_.username_element = base::ASCIIToUTF16("username_element"); 925 form_.username_element = base::ASCIIToUTF16("username_element");
882 store_->AddLogin(form_); 926 store_->AddLogin(form_);
883 autofill::PasswordForm empty = form_; 927 autofill::PasswordForm empty = form_;
(...skipping 21 matching lines...) Expand all
905 UnorderedElementsAre(Pointee(form_), 949 UnorderedElementsAre(Pointee(form_),
906 Pointee(origin_path_form_), 950 Pointee(origin_path_form_),
907 Pointee(federated)), 951 Pointee(federated)),
908 _, _)); 952 _, _));
909 953
910 bool called = false; 954 bool called = false;
911 mojom::CredentialManagerError error; 955 mojom::CredentialManagerError error;
912 base::Optional<CredentialInfo> credential; 956 base::Optional<CredentialInfo> credential;
913 std::vector<GURL> federations; 957 std::vector<GURL> federations;
914 federations.push_back(GURL("https://google.com/")); 958 federations.push_back(GURL("https://google.com/"));
915 CallGet(false, true, federations, 959 CallGet(mojom::CredentialMediationRequirement::OPTIONAL, true, federations,
916 base::Bind(&GetCredentialCallback, &called, &error, &credential)); 960 base::Bind(&GetCredentialCallback, &called, &error, &credential));
917 961
918 RunAllPendingTasks(); 962 RunAllPendingTasks();
919 } 963 }
920 964
921 TEST_F(CredentialManagerImplTest, 965 TEST_F(CredentialManagerImplTest,
922 CredentialManagerOnRequestCredentialWithCrossOriginPasswordStore) { 966 CredentialManagerOnRequestCredentialWithCrossOriginPasswordStore) {
923 store_->AddLogin(cross_origin_form_); 967 store_->AddLogin(cross_origin_form_);
924 968
925 std::vector<GURL> federations; 969 std::vector<GURL> federations;
926 EXPECT_CALL(*client_, PromptUserToSavePasswordPtr(_)) 970 EXPECT_CALL(*client_, PromptUserToSavePasswordPtr(_))
927 .Times(testing::Exactly(0)); 971 .Times(testing::Exactly(0));
928 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _)) 972 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _))
929 .Times(testing::Exactly(0)); 973 .Times(testing::Exactly(0));
930 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0)); 974 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0));
931 975
932 ExpectCredentialType(false, true, federations, 976 ExpectCredentialType(mojom::CredentialMediationRequirement::OPTIONAL, true,
933 CredentialType::CREDENTIAL_TYPE_EMPTY); 977 federations, CredentialType::CREDENTIAL_TYPE_EMPTY);
934 } 978 }
935 979
936 TEST_F(CredentialManagerImplTest, 980 TEST_F(CredentialManagerImplTest,
937 CredentialManagerOnRequestCredentialWithFullPasswordStore) { 981 CredentialManagerOnRequestCredentialWithFullPasswordStore) {
938 client_->set_zero_click_enabled(false); 982 client_->set_zero_click_enabled(false);
939 store_->AddLogin(form_); 983 store_->AddLogin(form_);
940 984
941 std::vector<GURL> federations; 985 std::vector<GURL> federations;
942 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _)) 986 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _))
943 .Times(testing::Exactly(1)); 987 .Times(testing::Exactly(1));
944 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0)); 988 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0));
945 989
946 bool called = false; 990 bool called = false;
947 mojom::CredentialManagerError error; 991 mojom::CredentialManagerError error;
948 base::Optional<CredentialInfo> credential; 992 base::Optional<CredentialInfo> credential;
949 CallGet(false, true, federations, 993 CallGet(mojom::CredentialMediationRequirement::OPTIONAL, true, federations,
950 base::Bind(&GetCredentialCallback, &called, &error, &credential)); 994 base::Bind(&GetCredentialCallback, &called, &error, &credential));
951 995
952 RunAllPendingTasks(); 996 RunAllPendingTasks();
953 997
954 EXPECT_TRUE(called); 998 EXPECT_TRUE(called);
955 EXPECT_EQ(mojom::CredentialManagerError::SUCCESS, error); 999 EXPECT_EQ(mojom::CredentialManagerError::SUCCESS, error);
956 } 1000 }
957 1001
958 TEST_F( 1002 TEST_F(
959 CredentialManagerImplTest, 1003 CredentialManagerImplTest,
960 CredentialManagerOnRequestCredentialWithZeroClickOnlyEmptyPasswordStore) { 1004 CredentialManagerOnRequestCredentialWithZeroClickOnlyEmptyPasswordStore) {
961 std::vector<GURL> federations; 1005 std::vector<GURL> federations;
962 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _)) 1006 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _))
963 .Times(testing::Exactly(0)); 1007 .Times(testing::Exactly(0));
964 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0)); 1008 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0));
965 1009
966 ExpectZeroClickSignInFailure(true, true, federations); 1010 ExpectZeroClickSignInFailure(mojom::CredentialMediationRequirement::SILENT,
1011 true, federations);
1012
1013 ExpectZeroClickSignInFailure(mojom::CredentialMediationRequirement::REQUIRED,
vasilii 2017/05/18 12:34:03 Here and below, we shouldn't mix CredentialMediati
1014 true, federations);
967 } 1015 }
968 1016
969 TEST_F(CredentialManagerImplTest, 1017 TEST_F(CredentialManagerImplTest,
970 CredentialManagerOnRequestCredentialWithZeroClickOnlyFullPasswordStore) { 1018 CredentialManagerOnRequestCredentialWithZeroClickOnlyFullPasswordStore) {
971 store_->AddLogin(form_); 1019 store_->AddLogin(form_);
972 client_->set_first_run_seen(true); 1020 client_->set_first_run_seen(true);
973 1021
974 std::vector<GURL> federations; 1022 std::vector<GURL> federations;
975 1023
976 EXPECT_CALL(*client_, NotifyUserCouldBeAutoSignedInPtr(_)).Times(0); 1024 EXPECT_CALL(*client_, NotifyUserCouldBeAutoSignedInPtr(_)).Times(0);
977 1025
978 ExpectZeroClickSignInSuccess(true, true, federations, 1026 ExpectZeroClickSignInSuccess(mojom::CredentialMediationRequirement::SILENT,
1027 true, federations,
979 CredentialType::CREDENTIAL_TYPE_PASSWORD); 1028 CredentialType::CREDENTIAL_TYPE_PASSWORD);
1029
1030 ExpectAccountChooser(mojom::CredentialMediationRequirement::REQUIRED, true,
1031 federations, CredentialType::CREDENTIAL_TYPE_PASSWORD);
980 } 1032 }
981 1033
982 TEST_F(CredentialManagerImplTest, 1034 TEST_F(CredentialManagerImplTest,
983 CredentialManagerOnRequestCredentialWithoutPasswords) { 1035 CredentialManagerOnRequestCredentialWithoutPasswords) {
984 store_->AddLogin(form_); 1036 store_->AddLogin(form_);
985 client_->set_first_run_seen(true); 1037 client_->set_first_run_seen(true);
986 1038
987 std::vector<GURL> federations; 1039 std::vector<GURL> federations;
988 1040
989 EXPECT_CALL(*client_, NotifyUserCouldBeAutoSignedInPtr(_)).Times(0); 1041 EXPECT_CALL(*client_, NotifyUserCouldBeAutoSignedInPtr(_)).Times(0);
990 1042
991 ExpectZeroClickSignInFailure(true, false, federations); 1043 ExpectZeroClickSignInFailure(mojom::CredentialMediationRequirement::SILENT,
1044 false, federations);
1045
1046 ExpectZeroClickSignInFailure(mojom::CredentialMediationRequirement::REQUIRED,
1047 false, federations);
992 } 1048 }
993 1049
994 TEST_F(CredentialManagerImplTest, 1050 TEST_F(CredentialManagerImplTest,
995 CredentialManagerOnRequestCredentialFederatedMatch) { 1051 CredentialManagerOnRequestCredentialFederatedMatch) {
996 form_.federation_origin = url::Origin(GURL("https://example.com/")); 1052 form_.federation_origin = url::Origin(GURL("https://example.com/"));
997 form_.password_value = base::string16(); 1053 form_.password_value = base::string16();
998 store_->AddLogin(form_); 1054 store_->AddLogin(form_);
999 client_->set_first_run_seen(true); 1055 client_->set_first_run_seen(true);
1000 1056
1001 std::vector<GURL> federations; 1057 std::vector<GURL> federations;
1002 federations.push_back(GURL("https://example.com/")); 1058 federations.push_back(GURL("https://example.com/"));
1003 1059
1004 EXPECT_CALL(*client_, NotifyUserCouldBeAutoSignedInPtr(_)).Times(0); 1060 EXPECT_CALL(*client_, NotifyUserCouldBeAutoSignedInPtr(_)).Times(0);
1005 1061
1006 ExpectZeroClickSignInSuccess(true, true, federations, 1062 ExpectZeroClickSignInSuccess(mojom::CredentialMediationRequirement::SILENT,
1063 true, federations,
1007 CredentialType::CREDENTIAL_TYPE_FEDERATED); 1064 CredentialType::CREDENTIAL_TYPE_FEDERATED);
1065
1066 ExpectAccountChooser(mojom::CredentialMediationRequirement::REQUIRED, true,
1067 federations, CredentialType::CREDENTIAL_TYPE_FEDERATED);
1008 } 1068 }
1009 1069
1010 TEST_F(CredentialManagerImplTest, 1070 TEST_F(CredentialManagerImplTest,
1011 CredentialManagerOnRequestCredentialFederatedNoMatch) { 1071 CredentialManagerOnRequestCredentialFederatedNoMatch) {
1012 form_.federation_origin = url::Origin(GURL("https://example.com/")); 1072 form_.federation_origin = url::Origin(GURL("https://example.com/"));
1013 form_.password_value = base::string16(); 1073 form_.password_value = base::string16();
1014 store_->AddLogin(form_); 1074 store_->AddLogin(form_);
1015 client_->set_first_run_seen(true); 1075 client_->set_first_run_seen(true);
1016 1076
1017 std::vector<GURL> federations; 1077 std::vector<GURL> federations;
1018 federations.push_back(GURL("https://not-example.com/")); 1078 federations.push_back(GURL("https://not-example.com/"));
1019 1079
1020 EXPECT_CALL(*client_, NotifyUserCouldBeAutoSignedInPtr(_)).Times(0); 1080 EXPECT_CALL(*client_, NotifyUserCouldBeAutoSignedInPtr(_)).Times(0);
1021 1081
1022 ExpectZeroClickSignInFailure(true, true, federations); 1082 ExpectZeroClickSignInFailure(mojom::CredentialMediationRequirement::SILENT,
1083 true, federations);
1084
1085 ExpectZeroClickSignInFailure(mojom::CredentialMediationRequirement::REQUIRED,
1086 true, federations);
1023 } 1087 }
1024 1088
1025 TEST_F(CredentialManagerImplTest, 1089 TEST_F(CredentialManagerImplTest,
1026 CredentialManagerOnRequestCredentialAffiliatedPasswordMatch) { 1090 CredentialManagerOnRequestCredentialAffiliatedPasswordMatch) {
1027 store_->AddLogin(affiliated_form1_); 1091 store_->AddLogin(affiliated_form1_);
1028 client_->set_first_run_seen(true); 1092 client_->set_first_run_seen(true);
1029 auto mock_helper = base::WrapUnique(new MockAffiliatedMatchHelper); 1093 auto mock_helper = base::WrapUnique(new MockAffiliatedMatchHelper);
1030 store_->SetAffiliatedMatchHelper(std::move(mock_helper)); 1094 store_->SetAffiliatedMatchHelper(std::move(mock_helper));
1031 1095
1032 std::vector<GURL> federations; 1096 std::vector<GURL> federations;
1033 std::vector<std::string> affiliated_realms; 1097 std::vector<std::string> affiliated_realms;
1034 affiliated_realms.push_back(kTestAndroidRealm1); 1098 affiliated_realms.push_back(kTestAndroidRealm1);
1035 static_cast<MockAffiliatedMatchHelper*>(store_->affiliated_match_helper()) 1099 static_cast<MockAffiliatedMatchHelper*>(store_->affiliated_match_helper())
1036 ->ExpectCallToGetAffiliatedAndroidRealms( 1100 ->ExpectCallToGetAffiliatedAndroidRealms(
1037 cm_service_impl_->GetSynthesizedFormForOrigin(), affiliated_realms); 1101 cm_service_impl_->GetSynthesizedFormForOrigin(), affiliated_realms);
1038 1102
1039 // We pass in 'true' for the 'include_passwords' argument to ensure that 1103 // We pass in 'true' for the 'include_passwords' argument to ensure that
1040 // password-type credentials are included as potential matches. 1104 // password-type credentials are included as potential matches.
1041 ExpectZeroClickSignInSuccess(true, true, federations, 1105 ExpectZeroClickSignInSuccess(mojom::CredentialMediationRequirement::SILENT,
1106 true, federations,
1042 CredentialType::CREDENTIAL_TYPE_PASSWORD); 1107 CredentialType::CREDENTIAL_TYPE_PASSWORD);
1108
1109 static_cast<MockAffiliatedMatchHelper*>(store_->affiliated_match_helper())
1110 ->ExpectCallToGetAffiliatedAndroidRealms(
1111 cm_service_impl_->GetSynthesizedFormForOrigin(), affiliated_realms);
1112
1113 ExpectAccountChooser(mojom::CredentialMediationRequirement::REQUIRED, true,
1114 federations, CredentialType::CREDENTIAL_TYPE_PASSWORD);
1043 } 1115 }
1044 1116
1045 TEST_F(CredentialManagerImplTest, 1117 TEST_F(CredentialManagerImplTest,
1046 CredentialManagerOnRequestCredentialAffiliatedPasswordNoMatch) { 1118 CredentialManagerOnRequestCredentialAffiliatedPasswordNoMatch) {
1047 store_->AddLogin(affiliated_form1_); 1119 store_->AddLogin(affiliated_form1_);
1048 client_->set_first_run_seen(true); 1120 client_->set_first_run_seen(true);
1049 auto mock_helper = base::WrapUnique(new MockAffiliatedMatchHelper); 1121 auto mock_helper = base::WrapUnique(new MockAffiliatedMatchHelper);
1050 store_->SetAffiliatedMatchHelper(std::move(mock_helper)); 1122 store_->SetAffiliatedMatchHelper(std::move(mock_helper));
1051 1123
1052 std::vector<GURL> federations; 1124 std::vector<GURL> federations;
1053 std::vector<std::string> affiliated_realms; 1125 std::vector<std::string> affiliated_realms;
1054 affiliated_realms.push_back(kTestAndroidRealm1); 1126 affiliated_realms.push_back(kTestAndroidRealm1);
1055 static_cast<MockAffiliatedMatchHelper*>(store_->affiliated_match_helper()) 1127 static_cast<MockAffiliatedMatchHelper*>(store_->affiliated_match_helper())
1056 ->ExpectCallToGetAffiliatedAndroidRealms( 1128 ->ExpectCallToGetAffiliatedAndroidRealms(
1057 cm_service_impl_->GetSynthesizedFormForOrigin(), affiliated_realms); 1129 cm_service_impl_->GetSynthesizedFormForOrigin(), affiliated_realms);
1058 1130
1059 // We pass in 'false' for the 'include_passwords' argument to ensure that 1131 // We pass in 'false' for the 'include_passwords' argument to ensure that
1060 // password-type credentials are excluded as potential matches. 1132 // password-type credentials are excluded as potential matches.
1061 ExpectZeroClickSignInFailure(true, false, federations); 1133 ExpectZeroClickSignInFailure(mojom::CredentialMediationRequirement::SILENT,
1134 false, federations);
1135
1136 static_cast<MockAffiliatedMatchHelper*>(store_->affiliated_match_helper())
1137 ->ExpectCallToGetAffiliatedAndroidRealms(
1138 cm_service_impl_->GetSynthesizedFormForOrigin(), affiliated_realms);
1139
1140 ExpectZeroClickSignInFailure(mojom::CredentialMediationRequirement::REQUIRED,
1141 false, federations);
1062 } 1142 }
1063 1143
1064 TEST_F(CredentialManagerImplTest, 1144 TEST_F(CredentialManagerImplTest,
1065 CredentialManagerOnRequestCredentialAffiliatedFederatedMatch) { 1145 CredentialManagerOnRequestCredentialAffiliatedFederatedMatch) {
1066 affiliated_form1_.federation_origin = 1146 affiliated_form1_.federation_origin =
1067 url::Origin(GURL("https://example.com/")); 1147 url::Origin(GURL("https://example.com/"));
1068 affiliated_form1_.password_value = base::string16(); 1148 affiliated_form1_.password_value = base::string16();
1069 store_->AddLogin(affiliated_form1_); 1149 store_->AddLogin(affiliated_form1_);
1070 client_->set_first_run_seen(true); 1150 client_->set_first_run_seen(true);
1071 auto mock_helper = base::WrapUnique(new MockAffiliatedMatchHelper); 1151 auto mock_helper = base::WrapUnique(new MockAffiliatedMatchHelper);
1072 store_->SetAffiliatedMatchHelper(std::move(mock_helper)); 1152 store_->SetAffiliatedMatchHelper(std::move(mock_helper));
1073 1153
1074 std::vector<GURL> federations; 1154 std::vector<GURL> federations;
1075 federations.push_back(GURL("https://example.com/")); 1155 federations.push_back(GURL("https://example.com/"));
1076 1156
1077 std::vector<std::string> affiliated_realms; 1157 std::vector<std::string> affiliated_realms;
1078 affiliated_realms.push_back(kTestAndroidRealm1); 1158 affiliated_realms.push_back(kTestAndroidRealm1);
1079 static_cast<MockAffiliatedMatchHelper*>(store_->affiliated_match_helper()) 1159 static_cast<MockAffiliatedMatchHelper*>(store_->affiliated_match_helper())
1080 ->ExpectCallToGetAffiliatedAndroidRealms( 1160 ->ExpectCallToGetAffiliatedAndroidRealms(
1081 cm_service_impl_->GetSynthesizedFormForOrigin(), affiliated_realms); 1161 cm_service_impl_->GetSynthesizedFormForOrigin(), affiliated_realms);
1082 1162
1083 ExpectZeroClickSignInSuccess(true, true, federations, 1163 ExpectZeroClickSignInSuccess(mojom::CredentialMediationRequirement::SILENT,
1164 true, federations,
1084 CredentialType::CREDENTIAL_TYPE_FEDERATED); 1165 CredentialType::CREDENTIAL_TYPE_FEDERATED);
1166
1167 static_cast<MockAffiliatedMatchHelper*>(store_->affiliated_match_helper())
1168 ->ExpectCallToGetAffiliatedAndroidRealms(
1169 cm_service_impl_->GetSynthesizedFormForOrigin(), affiliated_realms);
1170
1171 ExpectAccountChooser(mojom::CredentialMediationRequirement::REQUIRED, true,
1172 federations, CredentialType::CREDENTIAL_TYPE_FEDERATED);
1085 } 1173 }
1086 1174
1087 TEST_F(CredentialManagerImplTest, 1175 TEST_F(CredentialManagerImplTest,
1088 CredentialManagerOnRequestCredentialAffiliatedFederatedNoMatch) { 1176 CredentialManagerOnRequestCredentialAffiliatedFederatedNoMatch) {
1089 affiliated_form1_.federation_origin = 1177 affiliated_form1_.federation_origin =
1090 url::Origin(GURL("https://example.com/")); 1178 url::Origin(GURL("https://example.com/"));
1091 affiliated_form1_.password_value = base::string16(); 1179 affiliated_form1_.password_value = base::string16();
1092 store_->AddLogin(affiliated_form1_); 1180 store_->AddLogin(affiliated_form1_);
1093 client_->set_first_run_seen(true); 1181 client_->set_first_run_seen(true);
1094 auto mock_helper = base::WrapUnique(new MockAffiliatedMatchHelper); 1182 auto mock_helper = base::WrapUnique(new MockAffiliatedMatchHelper);
1095 store_->SetAffiliatedMatchHelper(std::move(mock_helper)); 1183 store_->SetAffiliatedMatchHelper(std::move(mock_helper));
1096 1184
1097 std::vector<GURL> federations; 1185 std::vector<GURL> federations;
1098 federations.push_back(GURL("https://not-example.com/")); 1186 federations.push_back(GURL("https://not-example.com/"));
1099 1187
1100 std::vector<std::string> affiliated_realms; 1188 std::vector<std::string> affiliated_realms;
1101 affiliated_realms.push_back(kTestAndroidRealm1); 1189 affiliated_realms.push_back(kTestAndroidRealm1);
1102 static_cast<MockAffiliatedMatchHelper*>(store_->affiliated_match_helper()) 1190 static_cast<MockAffiliatedMatchHelper*>(store_->affiliated_match_helper())
1103 ->ExpectCallToGetAffiliatedAndroidRealms( 1191 ->ExpectCallToGetAffiliatedAndroidRealms(
1104 cm_service_impl_->GetSynthesizedFormForOrigin(), affiliated_realms); 1192 cm_service_impl_->GetSynthesizedFormForOrigin(), affiliated_realms);
1105 1193
1106 ExpectZeroClickSignInFailure(true, true, federations); 1194 ExpectZeroClickSignInFailure(mojom::CredentialMediationRequirement::SILENT,
1195 true, federations);
1196 static_cast<MockAffiliatedMatchHelper*>(store_->affiliated_match_helper())
1197 ->ExpectCallToGetAffiliatedAndroidRealms(
1198 cm_service_impl_->GetSynthesizedFormForOrigin(), affiliated_realms);
1199
1200 ExpectZeroClickSignInFailure(mojom::CredentialMediationRequirement::REQUIRED,
1201 true, federations);
1107 } 1202 }
1108 1203
1109 TEST_F(CredentialManagerImplTest, RequestCredentialWithoutFirstRun) { 1204 TEST_F(CredentialManagerImplTest, RequestCredentialWithoutFirstRun) {
1110 client_->set_first_run_seen(false); 1205 client_->set_first_run_seen(false);
1111 1206
1112 store_->AddLogin(form_); 1207 store_->AddLogin(form_);
1113 1208
1114 std::vector<GURL> federations; 1209 std::vector<GURL> federations;
1115 EXPECT_CALL(*client_, 1210 EXPECT_CALL(*client_,
1116 NotifyUserCouldBeAutoSignedInPtr(testing::Pointee(form_))) 1211 NotifyUserCouldBeAutoSignedInPtr(testing::Pointee(form_)))
1117 .Times(1); 1212 .Times(1);
1118 1213
1119 ExpectZeroClickSignInFailure(true, true, federations); 1214 ExpectZeroClickSignInFailure(mojom::CredentialMediationRequirement::SILENT,
1215 true, federations);
1216
1217 ExpectAccountChooser(mojom::CredentialMediationRequirement::REQUIRED, true,
1218 federations, CredentialType::CREDENTIAL_TYPE_PASSWORD);
1120 } 1219 }
1121 1220
1122 TEST_F(CredentialManagerImplTest, RequestCredentialWithFirstRunAndSkip) { 1221 TEST_F(CredentialManagerImplTest, RequestCredentialWithFirstRunAndSkip) {
1123 client_->set_first_run_seen(true); 1222 client_->set_first_run_seen(true);
1124 1223
1125 form_.skip_zero_click = true; 1224 form_.skip_zero_click = true;
1126 store_->AddLogin(form_); 1225 store_->AddLogin(form_);
1127 1226
1128 std::vector<GURL> federations; 1227 std::vector<GURL> federations;
1129 EXPECT_CALL(*client_, 1228 EXPECT_CALL(*client_,
1130 NotifyUserCouldBeAutoSignedInPtr(testing::Pointee(form_))) 1229 NotifyUserCouldBeAutoSignedInPtr(testing::Pointee(form_)))
1131 .Times(1); 1230 .Times(1);
1132 1231
1133 ExpectZeroClickSignInFailure(true, true, federations); 1232 ExpectZeroClickSignInFailure(mojom::CredentialMediationRequirement::SILENT,
1233 true, federations);
1234
1235 ExpectAccountChooser(mojom::CredentialMediationRequirement::REQUIRED, true,
1236 federations, CredentialType::CREDENTIAL_TYPE_PASSWORD);
1134 } 1237 }
1135 1238
1136 TEST_F(CredentialManagerImplTest, RequestCredentialWithTLSErrors) { 1239 TEST_F(CredentialManagerImplTest, RequestCredentialWithTLSErrors) {
1137 // If we encounter TLS errors, we won't return credentials. 1240 // If we encounter TLS errors, we won't return credentials.
1138 EXPECT_CALL(*client_, IsFillingEnabledForCurrentPage()) 1241 EXPECT_CALL(*client_, IsFillingEnabledForCurrentPage())
1139 .WillRepeatedly(testing::Return(false)); 1242 .WillRepeatedly(testing::Return(false));
1140 1243
1141 store_->AddLogin(form_); 1244 store_->AddLogin(form_);
1142 1245
1143 std::vector<GURL> federations; 1246 std::vector<GURL> federations;
1144 1247
1145 ExpectZeroClickSignInFailure(true, true, federations); 1248 ExpectZeroClickSignInFailure(mojom::CredentialMediationRequirement::SILENT,
1249 true, federations);
1250
1251 ExpectZeroClickSignInFailure(mojom::CredentialMediationRequirement::REQUIRED,
1252 true, federations);
1146 } 1253 }
1147 1254
1148 TEST_F(CredentialManagerImplTest, RequestCredentialWhilePrerendering) { 1255 TEST_F(CredentialManagerImplTest, RequestCredentialWhilePrerendering) {
1149 // The client disallows the credential manager for the current page. 1256 // The client disallows the credential manager for the current page.
1150 EXPECT_CALL(*client_, OnCredentialManagerUsed()) 1257 EXPECT_CALL(*client_, OnCredentialManagerUsed())
1151 .WillRepeatedly(testing::Return(false)); 1258 .WillRepeatedly(testing::Return(false));
1152 1259
1153 store_->AddLogin(form_); 1260 store_->AddLogin(form_);
1154 1261
1155 std::vector<GURL> federations; 1262 std::vector<GURL> federations;
1156 1263
1157 ExpectZeroClickSignInFailure(true, true, federations); 1264 ExpectZeroClickSignInFailure(mojom::CredentialMediationRequirement::SILENT,
1265 true, federations);
1266
1267 ExpectZeroClickSignInFailure(mojom::CredentialMediationRequirement::REQUIRED,
1268 true, federations);
1158 } 1269 }
1159 1270
1160 TEST_F(CredentialManagerImplTest, 1271 TEST_F(CredentialManagerImplTest,
1161 CredentialManagerOnRequestCredentialWithZeroClickOnlyTwoPasswordStore) { 1272 CredentialManagerOnRequestCredentialWithZeroClickOnlyTwoPasswordStore) {
1162 store_->AddLogin(form_); 1273 store_->AddLogin(form_);
1163 store_->AddLogin(origin_path_form_); 1274 store_->AddLogin(origin_path_form_);
1164 1275
1165 std::vector<GURL> federations; 1276 std::vector<GURL> federations;
1166 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _)) 1277 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _))
1167 .Times(testing::Exactly(0)); 1278 .Times(testing::Exactly(0));
1168 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0)); 1279 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0));
1169 1280
1170 // With two items in the password store, we shouldn't get credentials back. 1281 // With two items in the password store, we shouldn't get credentials back.
1171 ExpectCredentialType(true, true, federations, 1282 ExpectCredentialType(mojom::CredentialMediationRequirement::SILENT, true,
1172 CredentialType::CREDENTIAL_TYPE_EMPTY); 1283 federations, CredentialType::CREDENTIAL_TYPE_EMPTY);
1173 } 1284 }
1174 1285
1175 TEST_F(CredentialManagerImplTest, 1286 TEST_F(CredentialManagerImplTest,
1176 OnRequestCredentialWithZeroClickOnlyAndSkipZeroClickPasswordStore) { 1287 OnRequestCredentialWithZeroClickOnlyAndSkipZeroClickPasswordStore) {
1177 form_.skip_zero_click = true; 1288 form_.skip_zero_click = true;
1178 store_->AddLogin(form_); 1289 store_->AddLogin(form_);
1179 store_->AddLogin(origin_path_form_); 1290 store_->AddLogin(origin_path_form_);
1180 1291
1181 std::vector<GURL> federations; 1292 std::vector<GURL> federations;
1182 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _)) 1293 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _))
1183 .Times(testing::Exactly(0)); 1294 .Times(testing::Exactly(0));
1184 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0)); 1295 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0));
1185 1296
1186 // With two items in the password store, we shouldn't get credentials back, 1297 // With two items in the password store, we shouldn't get credentials back,
1187 // even though only one item has |skip_zero_click| set |false|. 1298 // even though only one item has |skip_zero_click| set |false|.
1188 ExpectCredentialType(true, true, federations, 1299 ExpectCredentialType(mojom::CredentialMediationRequirement::SILENT, true,
1189 CredentialType::CREDENTIAL_TYPE_EMPTY); 1300 federations, CredentialType::CREDENTIAL_TYPE_EMPTY);
1190 } 1301 }
1191 1302
1192 TEST_F(CredentialManagerImplTest, 1303 TEST_F(CredentialManagerImplTest,
1193 OnRequestCredentialWithZeroClickOnlyCrossOriginPasswordStore) { 1304 OnRequestCredentialWithZeroClickOnlyCrossOriginPasswordStore) {
1194 store_->AddLogin(cross_origin_form_); 1305 store_->AddLogin(cross_origin_form_);
1195 1306
1196 form_.skip_zero_click = true; 1307 form_.skip_zero_click = true;
1197 store_->AddLogin(form_); 1308 store_->AddLogin(form_);
1198 1309
1199 std::vector<GURL> federations; 1310 std::vector<GURL> federations;
1200 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _)) 1311 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _))
1201 .Times(testing::Exactly(0)); 1312 .Times(testing::Exactly(0));
1202 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0)); 1313 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0));
1203 1314
1204 // We only have cross-origin zero-click credentials; they should not be 1315 // We only have cross-origin zero-click credentials; they should not be
1205 // returned. 1316 // returned.
1206 ExpectCredentialType(true, true, federations, 1317 ExpectCredentialType(mojom::CredentialMediationRequirement::SILENT, true,
1207 CredentialType::CREDENTIAL_TYPE_EMPTY); 1318 federations, CredentialType::CREDENTIAL_TYPE_EMPTY);
1208 } 1319 }
1209 1320
1210 TEST_F(CredentialManagerImplTest, 1321 TEST_F(CredentialManagerImplTest,
1211 CredentialManagerOnRequestCredentialWhileRequestPending) { 1322 CredentialManagerOnRequestCredentialWhileRequestPending) {
1212 client_->set_zero_click_enabled(false); 1323 client_->set_zero_click_enabled(false);
1213 store_->AddLogin(form_); 1324 store_->AddLogin(form_);
1214 1325
1215 std::vector<GURL> federations; 1326 std::vector<GURL> federations;
1216 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _)) 1327 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _))
1217 .Times(testing::Exactly(0)); 1328 .Times(testing::Exactly(0));
1218 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0)); 1329 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0));
1219 1330
1220 // 1st request. 1331 // 1st request.
1221 bool called_1 = false; 1332 bool called_1 = false;
1222 mojom::CredentialManagerError error_1; 1333 mojom::CredentialManagerError error_1;
1223 base::Optional<CredentialInfo> credential_1; 1334 base::Optional<CredentialInfo> credential_1;
1224 CallGet( 1335 CallGet(
1225 false, true, federations, 1336 mojom::CredentialMediationRequirement::OPTIONAL, true, federations,
1226 base::Bind(&GetCredentialCallback, &called_1, &error_1, &credential_1)); 1337 base::Bind(&GetCredentialCallback, &called_1, &error_1, &credential_1));
1227 // 2nd request. 1338 // 2nd request.
1228 bool called_2 = false; 1339 bool called_2 = false;
1229 mojom::CredentialManagerError error_2; 1340 mojom::CredentialManagerError error_2;
1230 base::Optional<CredentialInfo> credential_2; 1341 base::Optional<CredentialInfo> credential_2;
1231 CallGet( 1342 CallGet(
1232 false, true, federations, 1343 mojom::CredentialMediationRequirement::OPTIONAL, true, federations,
1233 base::Bind(&GetCredentialCallback, &called_2, &error_2, &credential_2)); 1344 base::Bind(&GetCredentialCallback, &called_2, &error_2, &credential_2));
1234 1345
1235 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _)) 1346 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _))
1236 .Times(testing::Exactly(1)); 1347 .Times(testing::Exactly(1));
1237 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0)); 1348 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0));
1238 1349
1239 // Execute the PasswordStore asynchronousness. 1350 // Execute the PasswordStore asynchronousness.
1240 RunAllPendingTasks(); 1351 RunAllPendingTasks();
1241 1352
1242 // Check that the second request triggered a rejection. 1353 // Check that the second request triggered a rejection.
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1279 // MockPasswordManagerClient mocks a user choice, and when users choose a 1390 // MockPasswordManagerClient mocks a user choice, and when users choose a
1280 // credential (and have the global zero-click flag enabled), we make sure that 1391 // credential (and have the global zero-click flag enabled), we make sure that
1281 // they'll be logged in again next time. 1392 // they'll be logged in again next time.
1282 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _)) 1393 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _))
1283 .Times(testing::Exactly(1)); 1394 .Times(testing::Exactly(1));
1284 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0)); 1395 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0));
1285 1396
1286 bool called = false; 1397 bool called = false;
1287 mojom::CredentialManagerError error; 1398 mojom::CredentialManagerError error;
1288 base::Optional<CredentialInfo> credential; 1399 base::Optional<CredentialInfo> credential;
1289 CallGet(false, true, federations, 1400 CallGet(mojom::CredentialMediationRequirement::OPTIONAL, true, federations,
1290 base::Bind(&GetCredentialCallback, &called, &error, &credential)); 1401 base::Bind(&GetCredentialCallback, &called, &error, &credential));
1291 1402
1292 RunAllPendingTasks(); 1403 RunAllPendingTasks();
1293 1404
1294 passwords = store_->stored_passwords(); 1405 passwords = store_->stored_passwords();
1295 EXPECT_EQ(2U, passwords.size()); 1406 EXPECT_EQ(2U, passwords.size());
1296 EXPECT_EQ(1U, passwords[form_.signon_realm].size()); 1407 EXPECT_EQ(1U, passwords[form_.signon_realm].size());
1297 EXPECT_EQ(1U, passwords[cross_origin_form_.signon_realm].size()); 1408 EXPECT_EQ(1U, passwords[cross_origin_form_.signon_realm].size());
1298 EXPECT_FALSE(passwords[form_.signon_realm][0].skip_zero_click); 1409 EXPECT_FALSE(passwords[form_.signon_realm][0].skip_zero_click);
1299 EXPECT_TRUE(passwords[cross_origin_form_.signon_realm][0].skip_zero_click); 1410 EXPECT_TRUE(passwords[cross_origin_form_.signon_realm][0].skip_zero_click);
(...skipping 15 matching lines...) Expand all
1315 1426
1316 // Trigger a request which should return the credential found in |form_|, and 1427 // Trigger a request which should return the credential found in |form_|, and
1317 // wait for it to process. 1428 // wait for it to process.
1318 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _)) 1429 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _))
1319 .Times(testing::Exactly(1)); 1430 .Times(testing::Exactly(1));
1320 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0)); 1431 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0));
1321 1432
1322 bool called = false; 1433 bool called = false;
1323 mojom::CredentialManagerError error; 1434 mojom::CredentialManagerError error;
1324 base::Optional<CredentialInfo> credential; 1435 base::Optional<CredentialInfo> credential;
1325 CallGet(false, true, std::vector<GURL>(), 1436 CallGet(mojom::CredentialMediationRequirement::OPTIONAL, true,
1437 std::vector<GURL>(),
1326 base::Bind(&GetCredentialCallback, &called, &error, &credential)); 1438 base::Bind(&GetCredentialCallback, &called, &error, &credential));
1327 1439
1328 RunAllPendingTasks(); 1440 RunAllPendingTasks();
1329 1441
1330 // The form shouldn't become a zero-click one. 1442 // The form shouldn't become a zero-click one.
1331 passwords = store_->stored_passwords(); 1443 passwords = store_->stored_passwords();
1332 ASSERT_EQ(1U, passwords.size()); 1444 ASSERT_EQ(1U, passwords.size());
1333 ASSERT_EQ(1U, passwords[form_.signon_realm].size()); 1445 ASSERT_EQ(1U, passwords[form_.signon_realm].size());
1334 EXPECT_TRUE(passwords[form_.signon_realm][0].skip_zero_click); 1446 EXPECT_TRUE(passwords[form_.signon_realm][0].skip_zero_click);
1335 } 1447 }
1336 1448
1337 TEST_F(CredentialManagerImplTest, IncognitoZeroClickRequestCredential) { 1449 TEST_F(CredentialManagerImplTest, IncognitoZeroClickRequestCredential) {
1338 EXPECT_CALL(*client_, IsIncognito()).WillRepeatedly(testing::Return(true)); 1450 EXPECT_CALL(*client_, IsIncognito()).WillRepeatedly(testing::Return(true));
1339 store_->AddLogin(form_); 1451 store_->AddLogin(form_);
1340 1452
1341 std::vector<GURL> federations; 1453 std::vector<GURL> federations;
1342 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _)) 1454 EXPECT_CALL(*client_, PromptUserToChooseCredentialsPtr(_, _, _))
1343 .Times(testing::Exactly(0)); 1455 .Times(testing::Exactly(0));
1344 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0)); 1456 EXPECT_CALL(*client_, NotifyUserAutoSigninPtr()).Times(testing::Exactly(0));
1345 1457
1346 ExpectCredentialType(true, true, federations, 1458 ExpectCredentialType(mojom::CredentialMediationRequirement::SILENT, true,
1347 CredentialType::CREDENTIAL_TYPE_EMPTY); 1459 federations, CredentialType::CREDENTIAL_TYPE_EMPTY);
1348 } 1460 }
1349 1461
1350 TEST_F(CredentialManagerImplTest, ZeroClickWithAffiliatedFormInPasswordStore) { 1462 TEST_F(CredentialManagerImplTest, ZeroClickWithAffiliatedFormInPasswordStore) {
1351 // Insert the affiliated form into the store, and mock out the association 1463 // Insert the affiliated form into the store, and mock out the association
1352 // with the current origin. As it's the only form matching the origin, it 1464 // with the current origin. As it's the only form matching the origin, it
1353 // ought to be returned automagically. 1465 // ought to be returned automagically.
1354 store_->AddLogin(affiliated_form1_); 1466 store_->AddLogin(affiliated_form1_);
1355 1467
1356 auto mock_helper = base::WrapUnique(new MockAffiliatedMatchHelper); 1468 auto mock_helper = base::WrapUnique(new MockAffiliatedMatchHelper);
1357 store_->SetAffiliatedMatchHelper(std::move(mock_helper)); 1469 store_->SetAffiliatedMatchHelper(std::move(mock_helper));
1358 1470
1359 std::vector<GURL> federations; 1471 std::vector<GURL> federations;
1360 std::vector<std::string> affiliated_realms; 1472 std::vector<std::string> affiliated_realms;
1361 affiliated_realms.push_back(kTestAndroidRealm1); 1473 affiliated_realms.push_back(kTestAndroidRealm1);
1362 static_cast<MockAffiliatedMatchHelper*>(store_->affiliated_match_helper()) 1474 static_cast<MockAffiliatedMatchHelper*>(store_->affiliated_match_helper())
1363 ->ExpectCallToGetAffiliatedAndroidRealms( 1475 ->ExpectCallToGetAffiliatedAndroidRealms(
1364 cm_service_impl_->GetSynthesizedFormForOrigin(), affiliated_realms); 1476 cm_service_impl_->GetSynthesizedFormForOrigin(), affiliated_realms);
1365 1477
1366 ExpectZeroClickSignInSuccess(true, true, federations, 1478 ExpectZeroClickSignInSuccess(mojom::CredentialMediationRequirement::SILENT,
1479 true, federations,
1367 CredentialType::CREDENTIAL_TYPE_PASSWORD); 1480 CredentialType::CREDENTIAL_TYPE_PASSWORD);
1481
1482 static_cast<MockAffiliatedMatchHelper*>(store_->affiliated_match_helper())
1483 ->ExpectCallToGetAffiliatedAndroidRealms(
1484 cm_service_impl_->GetSynthesizedFormForOrigin(), affiliated_realms);
1485
1486 ExpectAccountChooser(mojom::CredentialMediationRequirement::REQUIRED, true,
1487 federations, CredentialType::CREDENTIAL_TYPE_PASSWORD);
1368 } 1488 }
1369 1489
1370 TEST_F(CredentialManagerImplTest, 1490 TEST_F(CredentialManagerImplTest,
1371 ZeroClickWithTwoAffiliatedFormsInPasswordStore) { 1491 ZeroClickWithTwoAffiliatedFormsInPasswordStore) {
1372 // Insert two affiliated forms into the store, and mock out the association 1492 // Insert two affiliated forms into the store, and mock out the association
1373 // with the current origin. Multiple forms === no zero-click sign in. 1493 // with the current origin. Multiple forms === no zero-click sign in.
1374 store_->AddLogin(affiliated_form1_); 1494 store_->AddLogin(affiliated_form1_);
1375 store_->AddLogin(affiliated_form2_); 1495 store_->AddLogin(affiliated_form2_);
1376 1496
1377 auto mock_helper = base::WrapUnique(new MockAffiliatedMatchHelper); 1497 auto mock_helper = base::WrapUnique(new MockAffiliatedMatchHelper);
1378 store_->SetAffiliatedMatchHelper(std::move(mock_helper)); 1498 store_->SetAffiliatedMatchHelper(std::move(mock_helper));
1379 1499
1380 std::vector<GURL> federations; 1500 std::vector<GURL> federations;
1381 std::vector<std::string> affiliated_realms; 1501 std::vector<std::string> affiliated_realms;
1382 affiliated_realms.push_back(kTestAndroidRealm1); 1502 affiliated_realms.push_back(kTestAndroidRealm1);
1383 affiliated_realms.push_back(kTestAndroidRealm2); 1503 affiliated_realms.push_back(kTestAndroidRealm2);
1384 static_cast<MockAffiliatedMatchHelper*>(store_->affiliated_match_helper()) 1504 static_cast<MockAffiliatedMatchHelper*>(store_->affiliated_match_helper())
1385 ->ExpectCallToGetAffiliatedAndroidRealms( 1505 ->ExpectCallToGetAffiliatedAndroidRealms(
1386 cm_service_impl_->GetSynthesizedFormForOrigin(), affiliated_realms); 1506 cm_service_impl_->GetSynthesizedFormForOrigin(), affiliated_realms);
1387 1507
1388 ExpectZeroClickSignInFailure(true, true, federations); 1508 ExpectZeroClickSignInFailure(mojom::CredentialMediationRequirement::SILENT,
1509 true, federations);
1510
1511 static_cast<MockAffiliatedMatchHelper*>(store_->affiliated_match_helper())
1512 ->ExpectCallToGetAffiliatedAndroidRealms(
1513 cm_service_impl_->GetSynthesizedFormForOrigin(), affiliated_realms);
1514
1515 ExpectAccountChooser(mojom::CredentialMediationRequirement::REQUIRED, true,
1516 federations, CredentialType::CREDENTIAL_TYPE_PASSWORD);
1389 } 1517 }
1390 1518
1391 TEST_F(CredentialManagerImplTest, 1519 TEST_F(CredentialManagerImplTest,
1392 ZeroClickWithUnaffiliatedFormsInPasswordStore) { 1520 ZeroClickWithUnaffiliatedFormsInPasswordStore) {
1393 // Insert the affiliated form into the store, but don't mock out the 1521 // Insert the affiliated form into the store, but don't mock out the
1394 // association with the current origin. No association === no zero-click sign 1522 // association with the current origin. No association === no zero-click sign
1395 // in. 1523 // in.
1396 store_->AddLogin(affiliated_form1_); 1524 store_->AddLogin(affiliated_form1_);
1397 1525
1398 store_->SetAffiliatedMatchHelper( 1526 store_->SetAffiliatedMatchHelper(
1399 base::MakeUnique<MockAffiliatedMatchHelper>()); 1527 base::MakeUnique<MockAffiliatedMatchHelper>());
1400 1528
1401 std::vector<std::string> affiliated_realms; 1529 std::vector<std::string> affiliated_realms;
1402 PasswordStore::FormDigest digest = 1530 PasswordStore::FormDigest digest =
1403 cm_service_impl_->GetSynthesizedFormForOrigin(); 1531 cm_service_impl_->GetSynthesizedFormForOrigin();
1404 // First expect affiliations for the HTTPS domain. 1532 // First expect affiliations for the HTTPS domain.
1405 static_cast<MockAffiliatedMatchHelper*>(store_->affiliated_match_helper()) 1533 static_cast<MockAffiliatedMatchHelper*>(store_->affiliated_match_helper())
1406 ->ExpectCallToGetAffiliatedAndroidRealms(digest, affiliated_realms); 1534 ->ExpectCallToGetAffiliatedAndroidRealms(digest, affiliated_realms);
1407 1535
1408 digest.origin = HttpURLFromHttps(digest.origin); 1536 digest.origin = HttpURLFromHttps(digest.origin);
1409 digest.signon_realm = digest.origin.spec(); 1537 digest.signon_realm = digest.origin.spec();
1410 // The second call happens for HTTP as the migration is triggered. 1538 // The second call happens for HTTP as the migration is triggered.
1411 static_cast<MockAffiliatedMatchHelper*>(store_->affiliated_match_helper()) 1539 static_cast<MockAffiliatedMatchHelper*>(store_->affiliated_match_helper())
1412 ->ExpectCallToGetAffiliatedAndroidRealms(digest, affiliated_realms); 1540 ->ExpectCallToGetAffiliatedAndroidRealms(digest, affiliated_realms);
1413 1541
1414 std::vector<GURL> federations; 1542 std::vector<GURL> federations;
1415 ExpectZeroClickSignInFailure(true, true, federations); 1543 ExpectZeroClickSignInFailure(mojom::CredentialMediationRequirement::SILENT,
1544 true, federations);
1416 } 1545 }
1417 1546
1418 TEST_F(CredentialManagerImplTest, 1547 TEST_F(CredentialManagerImplTest,
1419 ZeroClickWithFormAndUnaffiliatedFormsInPasswordStore) { 1548 ZeroClickWithFormAndUnaffiliatedFormsInPasswordStore) {
1420 // Insert the affiliated form into the store, along with a real form for the 1549 // Insert the affiliated form into the store, along with a real form for the
1421 // origin, and don't mock out the association with the current origin. No 1550 // origin, and don't mock out the association with the current origin. No
1422 // association + existing form === zero-click sign in. 1551 // association + existing form === zero-click sign in.
1423 store_->AddLogin(form_); 1552 store_->AddLogin(form_);
1424 store_->AddLogin(affiliated_form1_); 1553 store_->AddLogin(affiliated_form1_);
1425 1554
1426 auto mock_helper = base::WrapUnique(new MockAffiliatedMatchHelper); 1555 auto mock_helper = base::WrapUnique(new MockAffiliatedMatchHelper);
1427 store_->SetAffiliatedMatchHelper(std::move(mock_helper)); 1556 store_->SetAffiliatedMatchHelper(std::move(mock_helper));
1428 1557
1429 std::vector<GURL> federations; 1558 std::vector<GURL> federations;
1430 std::vector<std::string> affiliated_realms; 1559 std::vector<std::string> affiliated_realms;
1431 static_cast<MockAffiliatedMatchHelper*>(store_->affiliated_match_helper()) 1560 static_cast<MockAffiliatedMatchHelper*>(store_->affiliated_match_helper())
1432 ->ExpectCallToGetAffiliatedAndroidRealms( 1561 ->ExpectCallToGetAffiliatedAndroidRealms(
1433 cm_service_impl_->GetSynthesizedFormForOrigin(), affiliated_realms); 1562 cm_service_impl_->GetSynthesizedFormForOrigin(), affiliated_realms);
1434 1563
1435 ExpectZeroClickSignInSuccess(true, true, federations, 1564 ExpectZeroClickSignInSuccess(mojom::CredentialMediationRequirement::SILENT,
1565 true, federations,
1436 CredentialType::CREDENTIAL_TYPE_PASSWORD); 1566 CredentialType::CREDENTIAL_TYPE_PASSWORD);
1567
1568 static_cast<MockAffiliatedMatchHelper*>(store_->affiliated_match_helper())
1569 ->ExpectCallToGetAffiliatedAndroidRealms(
1570 cm_service_impl_->GetSynthesizedFormForOrigin(), affiliated_realms);
1571
1572 ExpectAccountChooser(mojom::CredentialMediationRequirement::REQUIRED, true,
1573 federations, CredentialType::CREDENTIAL_TYPE_PASSWORD);
1437 } 1574 }
1438 1575
1439 TEST_F(CredentialManagerImplTest, ZeroClickWithPSLCredential) { 1576 TEST_F(CredentialManagerImplTest, ZeroClickWithPSLCredential) {
1440 subdomain_form_.skip_zero_click = false; 1577 subdomain_form_.skip_zero_click = false;
1441 store_->AddLogin(subdomain_form_); 1578 store_->AddLogin(subdomain_form_);
1442 1579
1443 ExpectZeroClickSignInFailure(true, true, std::vector<GURL>()); 1580 ExpectZeroClickSignInFailure(mojom::CredentialMediationRequirement::SILENT,
1581 true, std::vector<GURL>());
1582
1583 ExpectAccountChooser(mojom::CredentialMediationRequirement::REQUIRED, true,
1584 std::vector<GURL>(),
1585 CredentialType::CREDENTIAL_TYPE_PASSWORD);
1444 } 1586 }
1445 1587
1446 TEST_F(CredentialManagerImplTest, ZeroClickWithPSLAndNormalCredentials) { 1588 TEST_F(CredentialManagerImplTest, ZeroClickWithPSLAndNormalCredentials) {
1447 form_.password_value.clear(); 1589 form_.password_value.clear();
1448 form_.federation_origin = url::Origin(GURL("https://google.com/")); 1590 form_.federation_origin = url::Origin(GURL("https://google.com/"));
1449 form_.signon_realm = "federation://" + form_.origin.host() + "/google.com"; 1591 form_.signon_realm = "federation://" + form_.origin.host() + "/google.com";
1450 form_.skip_zero_click = false; 1592 form_.skip_zero_click = false;
1451 store_->AddLogin(form_); 1593 store_->AddLogin(form_);
1452 store_->AddLogin(subdomain_form_); 1594 store_->AddLogin(subdomain_form_);
1453 1595
1454 std::vector<GURL> federations = {GURL("https://google.com/")}; 1596 std::vector<GURL> federations = {GURL("https://google.com/")};
1455 ExpectZeroClickSignInSuccess(true, true, federations, 1597 ExpectZeroClickSignInSuccess(mojom::CredentialMediationRequirement::SILENT,
1598 true, federations,
1456 CredentialType::CREDENTIAL_TYPE_FEDERATED); 1599 CredentialType::CREDENTIAL_TYPE_FEDERATED);
1600
1601 ExpectAccountChooser(mojom::CredentialMediationRequirement::REQUIRED, true,
1602 federations, CredentialType::CREDENTIAL_TYPE_FEDERATED);
1457 } 1603 }
1458 1604
1459 TEST_F(CredentialManagerImplTest, ZeroClickAfterMigratingHttpCredential) { 1605 TEST_F(CredentialManagerImplTest, ZeroClickAfterMigratingHttpCredential) {
1460 // There is an http credential saved. It should be migrated and used for auto 1606 // There is an http credential saved. It should be migrated and used for auto
1461 // sign-in. 1607 // sign-in.
1462 form_.origin = HttpURLFromHttps(form_.origin); 1608 form_.origin = HttpURLFromHttps(form_.origin);
1463 form_.signon_realm = form_.origin.GetOrigin().spec(); 1609 form_.signon_realm = form_.origin.GetOrigin().spec();
1464 // That is the default value for old credentials. 1610 // That is the default value for old credentials.
1465 form_.skip_zero_click = true; 1611 form_.skip_zero_click = true;
1466 store_->AddLogin(form_); 1612 store_->AddLogin(form_);
1467 1613
1468 std::vector<GURL> federations; 1614 std::vector<GURL> federations;
1469 ExpectZeroClickSignInSuccess(true, true, federations, 1615 ExpectZeroClickSignInSuccess(mojom::CredentialMediationRequirement::SILENT,
1616 true, federations,
1470 CredentialType::CREDENTIAL_TYPE_PASSWORD); 1617 CredentialType::CREDENTIAL_TYPE_PASSWORD);
1618
1619 ExpectAccountChooser(mojom::CredentialMediationRequirement::REQUIRED, true,
1620 federations, CredentialType::CREDENTIAL_TYPE_PASSWORD);
1471 } 1621 }
1472 1622
1473 TEST_F(CredentialManagerImplTest, MigrateWithEmptyStore) { 1623 TEST_F(CredentialManagerImplTest, MigrateWithEmptyStore) {
1474 // HTTP scheme is valid for localhost. Nothing should crash. 1624 // HTTP scheme is valid for localhost. Nothing should crash.
1475 NavigateAndCommit(GURL("http://127.0.0.1:8000/")); 1625 NavigateAndCommit(GURL("http://127.0.0.1:8000/"));
1476 1626
1477 std::vector<GURL> federations; 1627 std::vector<GURL> federations;
1478 ExpectZeroClickSignInFailure(false, true, federations); 1628 ExpectZeroClickSignInFailure(mojom::CredentialMediationRequirement::OPTIONAL,
1629 true, federations);
1630
1631 ExpectZeroClickSignInFailure(mojom::CredentialMediationRequirement::REQUIRED,
1632 true, federations);
1479 } 1633 }
vasilii 2017/05/18 12:34:03 There should be a new test for CredentialMediation
vasilii 2017/05/18 16:16:12 Not addressed.
jdoerrie 2017/05/19 09:03:18 Done.
1480 1634
1481 TEST_F(CredentialManagerImplTest, GetSynthesizedFormForOrigin) { 1635 TEST_F(CredentialManagerImplTest, GetSynthesizedFormForOrigin) {
1482 PasswordStore::FormDigest synthesized = 1636 PasswordStore::FormDigest synthesized =
1483 cm_service_impl_->GetSynthesizedFormForOrigin(); 1637 cm_service_impl_->GetSynthesizedFormForOrigin();
1484 EXPECT_EQ(kTestWebOrigin, synthesized.origin.spec()); 1638 EXPECT_EQ(kTestWebOrigin, synthesized.origin.spec());
1485 EXPECT_EQ(kTestWebOrigin, synthesized.signon_realm); 1639 EXPECT_EQ(kTestWebOrigin, synthesized.signon_realm);
1486 EXPECT_EQ(autofill::PasswordForm::SCHEME_HTML, synthesized.scheme); 1640 EXPECT_EQ(autofill::PasswordForm::SCHEME_HTML, synthesized.scheme);
1487 } 1641 }
1488 1642
1489 TEST_F(CredentialManagerImplTest, BlacklistPasswordCredential) { 1643 TEST_F(CredentialManagerImplTest, BlacklistPasswordCredential) {
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
1575 EXPECT_CALL(*client_, PromptUserToSavePasswordPtr(_)); 1729 EXPECT_CALL(*client_, PromptUserToSavePasswordPtr(_));
1576 CallStore(info, base::Bind(&RespondCallback, &called)); 1730 CallStore(info, base::Bind(&RespondCallback, &called));
1577 // Allow the PasswordFormManager to talk to the password store 1731 // Allow the PasswordFormManager to talk to the password store
1578 RunAllPendingTasks(); 1732 RunAllPendingTasks();
1579 1733
1580 ASSERT_TRUE(client_->pending_manager()); 1734 ASSERT_TRUE(client_->pending_manager());
1581 EXPECT_TRUE(client_->pending_manager()->IsBlacklisted()); 1735 EXPECT_TRUE(client_->pending_manager()->IsBlacklisted());
1582 } 1736 }
1583 1737
1584 } // namespace password_manager 1738 } // namespace password_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698