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

Side by Side Diff: chrome/browser/chromeos/login/saml/saml_browsertest.cc

Issue 1954453002: Skip the SAML confirm password screen when a single password is scraped (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: xiyuan's comment Created 4 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
« no previous file with comments | « no previous file | chrome/browser/resources/gaia_auth_host/authenticator.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <cstring> 5 #include <cstring>
6 #include <memory> 6 #include <memory>
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after
489 } 489 }
490 490
491 // Tests the single password scraped flow. 491 // Tests the single password scraped flow.
492 IN_PROC_BROWSER_TEST_F(SamlTest, ScrapedSingle) { 492 IN_PROC_BROWSER_TEST_F(SamlTest, ScrapedSingle) {
493 fake_saml_idp()->SetLoginHTMLTemplate("saml_login.html"); 493 fake_saml_idp()->SetLoginHTMLTemplate("saml_login.html");
494 StartSamlAndWaitForIdpPageLoad(kFirstSAMLUserEmail); 494 StartSamlAndWaitForIdpPageLoad(kFirstSAMLUserEmail);
495 495
496 // Fill-in the SAML IdP form and submit. 496 // Fill-in the SAML IdP form and submit.
497 SetSignFormField("Email", "fake_user"); 497 SetSignFormField("Email", "fake_user");
498 SetSignFormField("Password", "fake_password"); 498 SetSignFormField("Password", "fake_password");
499 ExecuteJsInSigninFrame("document.getElementById('Submit').click();");
500 499
501 // Lands on confirm password screen. 500 // Scraping a single password should finish the login and start the session.
502 OobeScreenWaiter(OobeScreen::SCREEN_CONFIRM_PASSWORD).Wait();
503
504 // Entering an unknown password should go back to the confirm password screen.
505 SendConfirmPassword("wrong_password");
506 OobeScreenWaiter(OobeScreen::SCREEN_CONFIRM_PASSWORD).Wait();
507
508 // Entering a known password should finish login and start session.
509 content::WindowedNotificationObserver session_start_waiter( 501 content::WindowedNotificationObserver session_start_waiter(
510 chrome::NOTIFICATION_SESSION_STARTED, 502 chrome::NOTIFICATION_SESSION_STARTED,
511 content::NotificationService::AllSources()); 503 content::NotificationService::AllSources());
512 SendConfirmPassword("fake_password"); 504 ExecuteJsInSigninFrame("document.getElementById('Submit').click();");
513 session_start_waiter.Wait(); 505 session_start_waiter.Wait();
514 } 506 }
515 507
516 // Tests password scraping from a dynamically created password field. 508 // Tests password scraping from a dynamically created password field.
517 IN_PROC_BROWSER_TEST_F(SamlTest, ScrapedDynamic) { 509 IN_PROC_BROWSER_TEST_F(SamlTest, ScrapedDynamic) {
518 fake_saml_idp()->SetLoginHTMLTemplate("saml_login.html"); 510 fake_saml_idp()->SetLoginHTMLTemplate("saml_login.html");
519 StartSamlAndWaitForIdpPageLoad(kFirstSAMLUserEmail); 511 StartSamlAndWaitForIdpPageLoad(kFirstSAMLUserEmail);
520 512
521 ExecuteJsInSigninFrame( 513 ExecuteJsInSigninFrame(
522 "(function() {" 514 "(function() {"
523 "var newPassInput = document.createElement('input');" 515 "var newPassInput = document.createElement('input');"
524 "newPassInput.id = 'DynamicallyCreatedPassword';" 516 "newPassInput.id = 'DynamicallyCreatedPassword';"
525 "newPassInput.type = 'password';" 517 "newPassInput.type = 'password';"
526 "newPassInput.name = 'Password';" 518 "newPassInput.name = 'Password';"
527 "document.forms[0].appendChild(newPassInput);" 519 "document.forms[0].appendChild(newPassInput);"
528 "})();"); 520 "})();");
529 521
530 // Fill-in the SAML IdP form and submit. 522 // Fill-in the SAML IdP form and submit.
531 SetSignFormField("Email", "fake_user"); 523 SetSignFormField("Email", "fake_user");
532 SetSignFormField("DynamicallyCreatedPassword", "fake_password"); 524 SetSignFormField("DynamicallyCreatedPassword", "fake_password");
533 ExecuteJsInSigninFrame("document.getElementById('Submit').click();");
534 525
535 // Lands on confirm password screen. 526 // Scraping a single password should finish the login and start the session.
536 OobeScreenWaiter(OobeScreen::SCREEN_CONFIRM_PASSWORD).Wait();
537
538 // Entering an unknown password should go back to the confirm password screen.
539 SendConfirmPassword("wrong_password");
540 OobeScreenWaiter(OobeScreen::SCREEN_CONFIRM_PASSWORD).Wait();
541
542 // Entering a known password should finish login and start session.
543 content::WindowedNotificationObserver session_start_waiter( 527 content::WindowedNotificationObserver session_start_waiter(
544 chrome::NOTIFICATION_SESSION_STARTED, 528 chrome::NOTIFICATION_SESSION_STARTED,
545 content::NotificationService::AllSources()); 529 content::NotificationService::AllSources());
546 SendConfirmPassword("fake_password"); 530 ExecuteJsInSigninFrame("document.getElementById('Submit').click();");
547 session_start_waiter.Wait(); 531 session_start_waiter.Wait();
548 } 532 }
549 533
550 // Tests the multiple password scraped flow. 534 // Tests the multiple password scraped flow.
551 IN_PROC_BROWSER_TEST_F(SamlTest, ScrapedMultiple) { 535 IN_PROC_BROWSER_TEST_F(SamlTest, ScrapedMultiple) {
552 fake_saml_idp()->SetLoginHTMLTemplate("saml_login_two_passwords.html"); 536 fake_saml_idp()->SetLoginHTMLTemplate("saml_login_two_passwords.html");
553 537
554 StartSamlAndWaitForIdpPageLoad(kFirstSAMLUserEmail); 538 StartSamlAndWaitForIdpPageLoad(kFirstSAMLUserEmail);
555 539
556 SetSignFormField("Email", "fake_user"); 540 SetSignFormField("Email", "fake_user");
557 SetSignFormField("Password", "fake_password"); 541 SetSignFormField("Password", "fake_password");
558 SetSignFormField("Password1", "password1"); 542 SetSignFormField("Password1", "password1");
559 ExecuteJsInSigninFrame("document.getElementById('Submit').click();"); 543 ExecuteJsInSigninFrame("document.getElementById('Submit').click();");
560 544
545 // Lands on confirm password screen.
546 OobeScreenWaiter(OobeScreen::SCREEN_CONFIRM_PASSWORD).Wait();
547
548 // Entering an unknown password should go back to the confirm password screen.
549 SendConfirmPassword("wrong_password");
561 OobeScreenWaiter(OobeScreen::SCREEN_CONFIRM_PASSWORD).Wait(); 550 OobeScreenWaiter(OobeScreen::SCREEN_CONFIRM_PASSWORD).Wait();
562 551
563 // Either scraped password should be able to sign-in. 552 // Either scraped password should be able to sign-in.
564 content::WindowedNotificationObserver session_start_waiter( 553 content::WindowedNotificationObserver session_start_waiter(
565 chrome::NOTIFICATION_SESSION_STARTED, 554 chrome::NOTIFICATION_SESSION_STARTED,
566 content::NotificationService::AllSources()); 555 content::NotificationService::AllSources());
567 SendConfirmPassword("password1"); 556 SendConfirmPassword("password1");
568 session_start_waiter.Wait(); 557 session_start_waiter.Wait();
569 } 558 }
570 559
(...skipping 16 matching lines...) Expand all
587 IN_PROC_BROWSER_TEST_F(SamlTest, UseAutenticatedUserEmailAddress) { 576 IN_PROC_BROWSER_TEST_F(SamlTest, UseAutenticatedUserEmailAddress) {
588 fake_saml_idp()->SetLoginHTMLTemplate("saml_login.html"); 577 fake_saml_idp()->SetLoginHTMLTemplate("saml_login.html");
589 // Type |bob@example.com| into the GAIA login form. 578 // Type |bob@example.com| into the GAIA login form.
590 StartSamlAndWaitForIdpPageLoad(kSecondSAMLUserEmail); 579 StartSamlAndWaitForIdpPageLoad(kSecondSAMLUserEmail);
591 580
592 // Authenticate as alice@example.com via SAML (the |Email| provided here is 581 // Authenticate as alice@example.com via SAML (the |Email| provided here is
593 // irrelevant - the authenticated user's e-mail address that FakeGAIA 582 // irrelevant - the authenticated user's e-mail address that FakeGAIA
594 // reports was set via |SetFakeMergeSessionParams|. 583 // reports was set via |SetFakeMergeSessionParams|.
595 SetSignFormField("Email", "fake_user"); 584 SetSignFormField("Email", "fake_user");
596 SetSignFormField("Password", "fake_password"); 585 SetSignFormField("Password", "fake_password");
597 ExecuteJsInSigninFrame("document.getElementById('Submit').click();");
598
599 OobeScreenWaiter(OobeScreen::SCREEN_CONFIRM_PASSWORD).Wait();
600 586
601 content::WindowedNotificationObserver session_start_waiter( 587 content::WindowedNotificationObserver session_start_waiter(
602 chrome::NOTIFICATION_SESSION_STARTED, 588 chrome::NOTIFICATION_SESSION_STARTED,
603 content::NotificationService::AllSources()); 589 content::NotificationService::AllSources());
604 SendConfirmPassword("fake_password"); 590 ExecuteJsInSigninFrame("document.getElementById('Submit').click();");
605 session_start_waiter.Wait(); 591 session_start_waiter.Wait();
592
606 const user_manager::User* user = 593 const user_manager::User* user =
607 user_manager::UserManager::Get()->GetActiveUser(); 594 user_manager::UserManager::Get()->GetActiveUser();
608 ASSERT_TRUE(user); 595 ASSERT_TRUE(user);
609 EXPECT_EQ(kFirstSAMLUserEmail, user->email()); 596 EXPECT_EQ(kFirstSAMLUserEmail, user->email());
610 } 597 }
611 598
612 // Verifies that if the authenticated user's e-mail address cannot be retrieved, 599 // Verifies that if the authenticated user's e-mail address cannot be retrieved,
613 // an error message is shown. 600 // an error message is shown.
614 IN_PROC_BROWSER_TEST_F(SamlTest, FailToRetrieveAutenticatedUserEmailAddress) { 601 IN_PROC_BROWSER_TEST_F(SamlTest, FailToRetrieveAutenticatedUserEmailAddress) {
615 fake_saml_idp()->SetLoginHTMLTemplate("saml_login.html"); 602 fake_saml_idp()->SetLoginHTMLTemplate("saml_login.html");
616 StartSamlAndWaitForIdpPageLoad(kFirstSAMLUserEmail); 603 StartSamlAndWaitForIdpPageLoad(kFirstSAMLUserEmail);
617 604
618 fake_gaia_->SetFakeMergeSessionParams("", kTestAuthSIDCookie1, 605 fake_gaia_->SetFakeMergeSessionParams("", kTestAuthSIDCookie1,
619 kTestAuthLSIDCookie1); 606 kTestAuthLSIDCookie1);
620 SetSignFormField("Email", "fake_user"); 607 SetSignFormField("Email", "fake_user");
621 SetSignFormField("Password", "fake_password"); 608 SetSignFormField("Password", "fake_password");
622 ExecuteJsInSigninFrame("document.getElementById('Submit').click();"); 609 ExecuteJsInSigninFrame("document.getElementById('Submit').click();");
623 610
624 EXPECT_EQ(l10n_util::GetStringUTF8(IDS_LOGIN_FATAL_ERROR_NO_ACCOUNT_DETAILS), 611 EXPECT_EQ(l10n_util::GetStringUTF8(IDS_LOGIN_FATAL_ERROR_NO_ACCOUNT_DETAILS),
625 WaitForAndGetFatalErrorMessage()); 612 WaitForAndGetFatalErrorMessage());
626 } 613 }
627 614
628 // Tests the password confirm flow: show error on the first failure and 615 // Tests the password confirm flow when more than one password is scraped: show
629 // fatal error on the second failure. 616 // error on the first failure and fatal error on the second failure.
630 IN_PROC_BROWSER_TEST_F(SamlTest, PasswordConfirmFlow) { 617 IN_PROC_BROWSER_TEST_F(SamlTest, PasswordConfirmFlow) {
631 fake_saml_idp()->SetLoginHTMLTemplate("saml_login.html"); 618 fake_saml_idp()->SetLoginHTMLTemplate("saml_login_two_passwords.html");
632 StartSamlAndWaitForIdpPageLoad(kFirstSAMLUserEmail); 619 StartSamlAndWaitForIdpPageLoad(kFirstSAMLUserEmail);
633 620
634 // Fill-in the SAML IdP form and submit. 621 // Fill-in the SAML IdP form and submit.
635 SetSignFormField("Email", "fake_user"); 622 SetSignFormField("Email", "fake_user");
636 SetSignFormField("Password", "fake_password"); 623 SetSignFormField("Password", "fake_password");
624 SetSignFormField("Password1", "password1");
637 ExecuteJsInSigninFrame("document.getElementById('Submit').click();"); 625 ExecuteJsInSigninFrame("document.getElementById('Submit').click();");
638 626
639 // Lands on confirm password screen with no error message. 627 // Lands on confirm password screen with no error message.
640 OobeScreenWaiter(OobeScreen::SCREEN_CONFIRM_PASSWORD).Wait(); 628 OobeScreenWaiter(OobeScreen::SCREEN_CONFIRM_PASSWORD).Wait();
641 JsExpect("!$('saml-confirm-password').$.passwordInput.isInvalid"); 629 JsExpect("!$('saml-confirm-password').$.passwordInput.isInvalid");
642 630
643 // Enter an unknown password for the first time should go back to confirm 631 // Enter an unknown password for the first time should go back to confirm
644 // password screen with error message. 632 // password screen with error message.
645 SendConfirmPassword("wrong_password"); 633 SendConfirmPassword("wrong_password");
646 OobeScreenWaiter(OobeScreen::SCREEN_CONFIRM_PASSWORD).Wait(); 634 OobeScreenWaiter(OobeScreen::SCREEN_CONFIRM_PASSWORD).Wait();
(...skipping 478 matching lines...) Expand 10 before | Expand all | Expand 10 after
1125 void SAMLPolicyTest::LogInWithSAML(const std::string& user_id, 1113 void SAMLPolicyTest::LogInWithSAML(const std::string& user_id,
1126 const std::string& auth_sid_cookie, 1114 const std::string& auth_sid_cookie,
1127 const std::string& auth_lsid_cookie) { 1115 const std::string& auth_lsid_cookie) {
1128 fake_saml_idp()->SetLoginHTMLTemplate("saml_login.html"); 1116 fake_saml_idp()->SetLoginHTMLTemplate("saml_login.html");
1129 StartSamlAndWaitForIdpPageLoad(user_id); 1117 StartSamlAndWaitForIdpPageLoad(user_id);
1130 1118
1131 fake_gaia_->SetFakeMergeSessionParams(user_id, auth_sid_cookie, 1119 fake_gaia_->SetFakeMergeSessionParams(user_id, auth_sid_cookie,
1132 auth_lsid_cookie); 1120 auth_lsid_cookie);
1133 SetSignFormField("Email", "fake_user"); 1121 SetSignFormField("Email", "fake_user");
1134 SetSignFormField("Password", "fake_password"); 1122 SetSignFormField("Password", "fake_password");
1135 ExecuteJsInSigninFrame("document.getElementById('Submit').click();");
1136 1123
1137 OobeScreenWaiter(OobeScreen::SCREEN_CONFIRM_PASSWORD).Wait(); 1124 // Scraping a single password should finish the login right away.
1138
1139 content::WindowedNotificationObserver session_start_waiter( 1125 content::WindowedNotificationObserver session_start_waiter(
1140 chrome::NOTIFICATION_SESSION_STARTED, 1126 chrome::NOTIFICATION_SESSION_STARTED,
1141 content::NotificationService::AllSources()); 1127 content::NotificationService::AllSources());
1142 SendConfirmPassword("fake_password"); 1128 ExecuteJsInSigninFrame("document.getElementById('Submit').click();");
1143 session_start_waiter.Wait(); 1129 session_start_waiter.Wait();
1144 } 1130 }
1145 1131
1146 std::string SAMLPolicyTest::GetCookieValue(const std::string& name) { 1132 std::string SAMLPolicyTest::GetCookieValue(const std::string& name) {
1147 for (net::CookieList::const_iterator it = cookie_list_.begin(); 1133 for (net::CookieList::const_iterator it = cookie_list_.begin();
1148 it != cookie_list_.end(); ++it) { 1134 it != cookie_list_.end(); ++it) {
1149 if (it->Name() == name) 1135 if (it->Name() == name)
1150 return it->Value(); 1136 return it->Value();
1151 } 1137 }
1152 return std::string(); 1138 return std::string();
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
1350 fake_gaia_->SetFakeMergeSessionParams( 1336 fake_gaia_->SetFakeMergeSessionParams(
1351 kFirstSAMLUserEmail, kTestAuthSIDCookie1, kTestAuthLSIDCookie1); 1337 kFirstSAMLUserEmail, kTestAuthSIDCookie1, kTestAuthLSIDCookie1);
1352 SetLoginBehaviorPolicyToSAMLInterstitial(); 1338 SetLoginBehaviorPolicyToSAMLInterstitial();
1353 WaitForSigninScreen(); 1339 WaitForSigninScreen();
1354 1340
1355 ShowSAMLInterstitial(); 1341 ShowSAMLInterstitial();
1356 ClickNextOnSAMLInterstitialPage(); 1342 ClickNextOnSAMLInterstitialPage();
1357 1343
1358 SetSignFormField("Email", "fake_user"); 1344 SetSignFormField("Email", "fake_user");
1359 SetSignFormField("Password", "fake_password"); 1345 SetSignFormField("Password", "fake_password");
1360 ExecuteJsInSigninFrame("document.getElementById('Submit').click();");
1361 1346
1347 // Scraping one password should finish login.
1362 content::WindowedNotificationObserver session_start_waiter( 1348 content::WindowedNotificationObserver session_start_waiter(
1363 chrome::NOTIFICATION_SESSION_STARTED, 1349 chrome::NOTIFICATION_SESSION_STARTED,
1364 content::NotificationService::AllSources()); 1350 content::NotificationService::AllSources());
1365 1351 ExecuteJsInSigninFrame("document.getElementById('Submit').click();");
1366 OobeScreenWaiter(OobeScreen::SCREEN_CONFIRM_PASSWORD).Wait();
1367 SendConfirmPassword("fake_password");
1368 // Login should finish login and a session should start.
1369 session_start_waiter.Wait(); 1352 session_start_waiter.Wait();
1370 } 1353 }
1371 1354
1372 } // namespace chromeos 1355 } // namespace chromeos
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/resources/gaia_auth_host/authenticator.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698