| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |