| 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> |
| 6 |
| 5 #include "base/bind.h" | 7 #include "base/bind.h" |
| 6 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 7 #include "base/callback.h" | 9 #include "base/callback.h" |
| 8 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| 9 #include "base/files/file_path.h" | 11 #include "base/files/file_path.h" |
| 10 #include "base/files/file_util.h" | 12 #include "base/files/file_util.h" |
| 13 #include "base/files/scoped_temp_dir.h" |
| 11 #include "base/location.h" | 14 #include "base/location.h" |
| 15 #include "base/macros.h" |
| 12 #include "base/memory/ref_counted.h" | 16 #include "base/memory/ref_counted.h" |
| 13 #include "base/memory/scoped_ptr.h" | 17 #include "base/memory/scoped_ptr.h" |
| 14 #include "base/path_service.h" | 18 #include "base/path_service.h" |
| 15 #include "base/run_loop.h" | 19 #include "base/run_loop.h" |
| 16 #include "base/strings/string16.h" | 20 #include "base/strings/string16.h" |
| 17 #include "base/strings/string_util.h" | 21 #include "base/strings/string_util.h" |
| 18 #include "base/strings/stringprintf.h" | 22 #include "base/strings/stringprintf.h" |
| 19 #include "base/strings/utf_string_conversions.h" | 23 #include "base/strings/utf_string_conversions.h" |
| 20 #include "base/values.h" | 24 #include "base/values.h" |
| 21 #include "chrome/browser/chrome_notification_types.h" | 25 #include "chrome/browser/chrome_notification_types.h" |
| 22 #include "chrome/browser/chromeos/login/existing_user_controller.h" | 26 #include "chrome/browser/chromeos/login/existing_user_controller.h" |
| 23 #include "chrome/browser/chromeos/login/test/https_forwarder.h" | 27 #include "chrome/browser/chromeos/login/test/https_forwarder.h" |
| 24 #include "chrome/browser/chromeos/login/test/oobe_screen_waiter.h" | 28 #include "chrome/browser/chromeos/login/test/oobe_screen_waiter.h" |
| 25 #include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" | 29 #include "chrome/browser/chromeos/login/ui/login_display_host_impl.h" |
| 26 #include "chrome/browser/chromeos/login/ui/webui_login_display.h" | 30 #include "chrome/browser/chromeos/login/ui/webui_login_display.h" |
| 27 #include "chrome/browser/chromeos/login/wizard_controller.h" | 31 #include "chrome/browser/chromeos/login/wizard_controller.h" |
| 28 #include "chrome/browser/chromeos/policy/device_policy_builder.h" | 32 #include "chrome/browser/chromeos/policy/device_policy_builder.h" |
| 29 #include "chrome/browser/chromeos/policy/device_policy_cros_browser_test.h" | 33 #include "chrome/browser/chromeos/policy/device_policy_cros_browser_test.h" |
| 30 #include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h" | 34 #include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h" |
| 31 #include "chrome/browser/chromeos/profiles/profile_helper.h" | 35 #include "chrome/browser/chromeos/profiles/profile_helper.h" |
| 32 #include "chrome/browser/chromeos/settings/cros_settings.h" | 36 #include "chrome/browser/chromeos/settings/cros_settings.h" |
| 33 #include "chrome/browser/lifetime/application_lifetime.h" | 37 #include "chrome/browser/lifetime/application_lifetime.h" |
| 38 #include "chrome/browser/policy/test/local_policy_test_server.h" |
| 34 #include "chrome/browser/profiles/profile.h" | 39 #include "chrome/browser/profiles/profile.h" |
| 35 #include "chrome/browser/ui/webui/signin/inline_login_ui.h" | 40 #include "chrome/browser/ui/webui/signin/inline_login_ui.h" |
| 36 #include "chrome/common/chrome_paths.h" | 41 #include "chrome/common/chrome_paths.h" |
| 37 #include "chrome/common/chrome_switches.h" | 42 #include "chrome/common/chrome_switches.h" |
| 38 #include "chrome/grit/generated_resources.h" | 43 #include "chrome/grit/generated_resources.h" |
| 39 #include "chrome/test/base/in_process_browser_test.h" | 44 #include "chrome/test/base/in_process_browser_test.h" |
| 40 #include "chromeos/chromeos_switches.h" | 45 #include "chromeos/chromeos_switches.h" |
| 41 #include "chromeos/dbus/dbus_thread_manager.h" | 46 #include "chromeos/dbus/dbus_thread_manager.h" |
| 42 #include "chromeos/dbus/fake_session_manager_client.h" | 47 #include "chromeos/dbus/fake_session_manager_client.h" |
| 43 #include "chromeos/dbus/session_manager_client.h" | 48 #include "chromeos/dbus/session_manager_client.h" |
| 44 #include "chromeos/settings/cros_settings_names.h" | 49 #include "chromeos/settings/cros_settings_names.h" |
| 45 #include "components/policy/core/browser/browser_policy_connector.h" | 50 #include "components/policy/core/browser/browser_policy_connector.h" |
| 46 #include "components/policy/core/common/mock_configuration_policy_provider.h" | 51 #include "components/policy/core/common/mock_configuration_policy_provider.h" |
| 47 #include "components/policy/core/common/policy_map.h" | 52 #include "components/policy/core/common/policy_map.h" |
| 53 #include "components/policy/core/common/policy_switches.h" |
| 48 #include "components/policy/core/common/policy_types.h" | 54 #include "components/policy/core/common/policy_types.h" |
| 49 #include "components/user_manager/user.h" | 55 #include "components/user_manager/user.h" |
| 50 #include "components/user_manager/user_manager.h" | 56 #include "components/user_manager/user_manager.h" |
| 51 #include "content/public/browser/browser_thread.h" | 57 #include "content/public/browser/browser_thread.h" |
| 58 #include "content/public/browser/render_frame_host.h" |
| 52 #include "content/public/browser/web_contents.h" | 59 #include "content/public/browser/web_contents.h" |
| 60 #include "content/public/browser/web_contents_observer.h" |
| 53 #include "content/public/test/browser_test_utils.h" | 61 #include "content/public/test/browser_test_utils.h" |
| 54 #include "content/public/test/test_utils.h" | 62 #include "content/public/test/test_utils.h" |
| 55 #include "google_apis/gaia/fake_gaia.h" | 63 #include "google_apis/gaia/fake_gaia.h" |
| 64 #include "google_apis/gaia/gaia_constants.h" |
| 56 #include "google_apis/gaia/gaia_switches.h" | 65 #include "google_apis/gaia/gaia_switches.h" |
| 66 #include "google_apis/gaia/gaia_urls.h" |
| 57 #include "net/base/url_util.h" | 67 #include "net/base/url_util.h" |
| 58 #include "net/cookies/canonical_cookie.h" | 68 #include "net/cookies/canonical_cookie.h" |
| 59 #include "net/cookies/cookie_monster.h" | 69 #include "net/cookies/cookie_monster.h" |
| 60 #include "net/cookies/cookie_store.h" | 70 #include "net/cookies/cookie_store.h" |
| 61 #include "net/dns/mock_host_resolver.h" | 71 #include "net/dns/mock_host_resolver.h" |
| 62 #include "net/test/embedded_test_server/embedded_test_server.h" | 72 #include "net/test/embedded_test_server/embedded_test_server.h" |
| 63 #include "net/test/embedded_test_server/http_request.h" | 73 #include "net/test/embedded_test_server/http_request.h" |
| 64 #include "net/test/embedded_test_server/http_response.h" | 74 #include "net/test/embedded_test_server/http_response.h" |
| 65 #include "net/url_request/url_request_context.h" | 75 #include "net/url_request/url_request_context.h" |
| 66 #include "net/url_request/url_request_context_getter.h" | 76 #include "net/url_request/url_request_context_getter.h" |
| (...skipping 29 matching lines...) Expand all Loading... |
| 96 const char kHTTPSAMLUserEmail[] = "carol@example.com"; | 106 const char kHTTPSAMLUserEmail[] = "carol@example.com"; |
| 97 const char kNonSAMLUserEmail[] = "dan@example.com"; | 107 const char kNonSAMLUserEmail[] = "dan@example.com"; |
| 98 const char kDifferentDomainSAMLUserEmail[] = "eve@example.test"; | 108 const char kDifferentDomainSAMLUserEmail[] = "eve@example.test"; |
| 99 | 109 |
| 100 const char kSAMLIdPCookieName[] = "saml"; | 110 const char kSAMLIdPCookieName[] = "saml"; |
| 101 const char kSAMLIdPCookieValue1[] = "value-1"; | 111 const char kSAMLIdPCookieValue1[] = "value-1"; |
| 102 const char kSAMLIdPCookieValue2[] = "value-2"; | 112 const char kSAMLIdPCookieValue2[] = "value-2"; |
| 103 | 113 |
| 104 const char kRelayState[] = "RelayState"; | 114 const char kRelayState[] = "RelayState"; |
| 105 | 115 |
| 116 const char kTestUserinfoToken[] = "fake-userinfo-token"; |
| 117 const char kTestRefreshToken[] = "fake-refresh-token"; |
| 118 const char kPolicy[] = "{\"managed_users\": [\"*\"]}"; |
| 119 |
| 106 // FakeSamlIdp serves IdP auth form and the form submission. The form is | 120 // FakeSamlIdp serves IdP auth form and the form submission. The form is |
| 107 // served with the template's RelayState placeholder expanded to the real | 121 // served with the template's RelayState placeholder expanded to the real |
| 108 // RelayState parameter from request. The form submission redirects back to | 122 // RelayState parameter from request. The form submission redirects back to |
| 109 // FakeGaia with the same RelayState. | 123 // FakeGaia with the same RelayState. |
| 110 class FakeSamlIdp { | 124 class FakeSamlIdp { |
| 111 public: | 125 public: |
| 112 FakeSamlIdp(); | 126 FakeSamlIdp(); |
| 113 ~FakeSamlIdp(); | 127 ~FakeSamlIdp(); |
| 114 | 128 |
| 115 void SetUp(const std::string& base_path, const GURL& gaia_url); | 129 void SetUp(const std::string& base_path, const GURL& gaia_url); |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 235 http_response->set_content(response_html); | 249 http_response->set_content(response_html); |
| 236 http_response->set_content_type("text/html"); | 250 http_response->set_content_type("text/html"); |
| 237 | 251 |
| 238 return http_response.Pass(); | 252 return http_response.Pass(); |
| 239 } | 253 } |
| 240 | 254 |
| 241 } // namespace | 255 } // namespace |
| 242 | 256 |
| 243 class SamlTest : public InProcessBrowserTest { | 257 class SamlTest : public InProcessBrowserTest { |
| 244 public: | 258 public: |
| 245 SamlTest() : saml_load_injected_(false) {} | 259 SamlTest() : gaia_frame_parent_("signin-frame"), saml_load_injected_(false) {} |
| 246 virtual ~SamlTest() {} | 260 virtual ~SamlTest() {} |
| 247 | 261 |
| 248 virtual void SetUp() override { | 262 virtual void SetUp() override { |
| 249 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); | 263 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); |
| 250 | 264 |
| 251 // Start the GAIA https wrapper here so that the GAIA URLs can be pointed at | 265 // Start the GAIA https wrapper here so that the GAIA URLs can be pointed at |
| 252 // it in SetUpCommandLine(). | 266 // it in SetUpCommandLine(). |
| 253 gaia_https_forwarder_.reset( | 267 gaia_https_forwarder_.reset( |
| 254 new HTTPSForwarder(embedded_test_server()->base_url())); | 268 new HTTPSForwarder(embedded_test_server()->base_url())); |
| 255 ASSERT_TRUE(gaia_https_forwarder_->Start()); | 269 ASSERT_TRUE(gaia_https_forwarder_->Start()); |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 333 WizardController* wizard_controller = | 347 WizardController* wizard_controller = |
| 334 WizardController::default_controller(); | 348 WizardController::default_controller(); |
| 335 if (wizard_controller) { | 349 if (wizard_controller) { |
| 336 WizardController::SkipPostLoginScreensForTesting(); | 350 WizardController::SkipPostLoginScreensForTesting(); |
| 337 wizard_controller->SkipToLoginForTesting(LoginScreenContext()); | 351 wizard_controller->SkipToLoginForTesting(LoginScreenContext()); |
| 338 } | 352 } |
| 339 | 353 |
| 340 login_screen_load_observer_->Wait(); | 354 login_screen_load_observer_->Wait(); |
| 341 } | 355 } |
| 342 | 356 |
| 343 void StartSamlAndWaitForIdpPageLoad(const std::string& gaia_email) { | 357 virtual void StartSamlAndWaitForIdpPageLoad(const std::string& gaia_email) { |
| 344 WaitForSigninScreen(); | 358 WaitForSigninScreen(); |
| 345 | 359 |
| 346 if (!saml_load_injected_) { | 360 if (!saml_load_injected_) { |
| 347 saml_load_injected_ = true; | 361 saml_load_injected_ = true; |
| 348 | 362 |
| 349 ASSERT_TRUE(content::ExecuteScript( | 363 ASSERT_TRUE(content::ExecuteScript( |
| 350 GetLoginUI()->GetWebContents(), | 364 GetLoginUI()->GetWebContents(), |
| 351 "$('gaia-signin').gaiaAuthHost_.addEventListener('authFlowChange'," | 365 "$('gaia-signin').gaiaAuthHost_.addEventListener('authFlowChange'," |
| 352 "function() {" | 366 "function() {" |
| 353 "window.domAutomationController.setAutomationId(0);" | 367 "window.domAutomationController.setAutomationId(0);" |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 408 } | 422 } |
| 409 | 423 |
| 410 content::WebUI* GetLoginUI() { | 424 content::WebUI* GetLoginUI() { |
| 411 return static_cast<LoginDisplayHostImpl*>( | 425 return static_cast<LoginDisplayHostImpl*>( |
| 412 LoginDisplayHostImpl::default_host())->GetOobeUI()->web_ui(); | 426 LoginDisplayHostImpl::default_host())->GetOobeUI()->web_ui(); |
| 413 } | 427 } |
| 414 | 428 |
| 415 // Executes JavaScript code in the auth iframe hosted by gaia_auth extension. | 429 // Executes JavaScript code in the auth iframe hosted by gaia_auth extension. |
| 416 void ExecuteJsInSigninFrame(const std::string& js) { | 430 void ExecuteJsInSigninFrame(const std::string& js) { |
| 417 content::RenderFrameHost* frame = InlineLoginUI::GetAuthIframe( | 431 content::RenderFrameHost* frame = InlineLoginUI::GetAuthIframe( |
| 418 GetLoginUI()->GetWebContents(), GURL(), "signin-frame"); | 432 GetLoginUI()->GetWebContents(), GURL(), gaia_frame_parent_); |
| 419 ASSERT_TRUE(content::ExecuteScript(frame, js)); | 433 ASSERT_TRUE(content::ExecuteScript(frame, js)); |
| 420 } | 434 } |
| 421 | 435 |
| 422 FakeSamlIdp* fake_saml_idp() { return &fake_saml_idp_; } | 436 FakeSamlIdp* fake_saml_idp() { return &fake_saml_idp_; } |
| 423 | 437 |
| 424 protected: | 438 protected: |
| 425 scoped_ptr<content::WindowedNotificationObserver> login_screen_load_observer_; | 439 scoped_ptr<content::WindowedNotificationObserver> login_screen_load_observer_; |
| 426 FakeGaia fake_gaia_; | 440 FakeGaia fake_gaia_; |
| 427 | 441 |
| 442 std::string gaia_frame_parent_; |
| 443 |
| 444 scoped_ptr<HTTPSForwarder> gaia_https_forwarder_; |
| 445 scoped_ptr<HTTPSForwarder> saml_https_forwarder_; |
| 446 |
| 428 private: | 447 private: |
| 429 FakeSamlIdp fake_saml_idp_; | 448 FakeSamlIdp fake_saml_idp_; |
| 430 scoped_ptr<HTTPSForwarder> gaia_https_forwarder_; | |
| 431 scoped_ptr<HTTPSForwarder> saml_https_forwarder_; | |
| 432 | 449 |
| 433 bool saml_load_injected_; | 450 bool saml_load_injected_; |
| 434 | 451 |
| 435 DISALLOW_COPY_AND_ASSIGN(SamlTest); | 452 DISALLOW_COPY_AND_ASSIGN(SamlTest); |
| 436 }; | 453 }; |
| 437 | 454 |
| 438 // Tests that signin frame should have 'saml' class and 'cancel' button is | 455 // Tests that signin frame should have 'saml' class and 'cancel' button is |
| 439 // visible when SAML IdP page is loaded. And 'cancel' button goes back to | 456 // visible when SAML IdP page is loaded. And 'cancel' button goes back to |
| 440 // gaia on clicking. | 457 // gaia on clicking. |
| 441 IN_PROC_BROWSER_TEST_F(SamlTest, SamlUI) { | 458 IN_PROC_BROWSER_TEST_F(SamlTest, SamlUI) { |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 632 | 649 |
| 633 WaitForSigninScreen(); | 650 WaitForSigninScreen(); |
| 634 GetLoginDisplay()->ShowSigninScreenForCreds(kFirstSAMLUserEmail, ""); | 651 GetLoginDisplay()->ShowSigninScreenForCreds(kFirstSAMLUserEmail, ""); |
| 635 | 652 |
| 636 EXPECT_EQ(l10n_util::GetStringFUTF8( | 653 EXPECT_EQ(l10n_util::GetStringFUTF8( |
| 637 IDS_LOGIN_FATAL_ERROR_TEXT_INSECURE_URL, | 654 IDS_LOGIN_FATAL_ERROR_TEXT_INSECURE_URL, |
| 638 base::UTF8ToUTF16(url.spec())), | 655 base::UTF8ToUTF16(url.spec())), |
| 639 WaitForAndGetFatalErrorMessage()); | 656 WaitForAndGetFatalErrorMessage()); |
| 640 } | 657 } |
| 641 | 658 |
| 659 class SAMLEnrollmentTest : public SamlTest, |
| 660 public content::WebContentsObserver { |
| 661 public: |
| 662 SAMLEnrollmentTest(); |
| 663 ~SAMLEnrollmentTest() override; |
| 664 |
| 665 // SamlTest: |
| 666 void SetUp() override; |
| 667 void SetUpCommandLine(CommandLine* command_line) override; |
| 668 void SetUpOnMainThread() override; |
| 669 void StartSamlAndWaitForIdpPageLoad(const std::string& gaia_email) override; |
| 670 |
| 671 // content::WebContentsObserver: |
| 672 void RenderFrameCreated(content::RenderFrameHost* render_frame_host) override; |
| 673 void DidFinishLoad(content::RenderFrameHost* render_frame_host, |
| 674 const GURL& validated_url) override; |
| 675 |
| 676 void WaitForEnrollmentSuccess(); |
| 677 |
| 678 private: |
| 679 scoped_ptr<policy::LocalPolicyTestServer> test_server_; |
| 680 base::ScopedTempDir temp_dir_; |
| 681 |
| 682 scoped_ptr<base::RunLoop> run_loop_; |
| 683 content::RenderFrameHost* auth_frame_; |
| 684 |
| 685 DISALLOW_COPY_AND_ASSIGN(SAMLEnrollmentTest); |
| 686 }; |
| 687 |
| 688 SAMLEnrollmentTest::SAMLEnrollmentTest() : auth_frame_(nullptr) { |
| 689 gaia_frame_parent_ = "oauth-enroll-signin-frame"; |
| 690 } |
| 691 |
| 692 SAMLEnrollmentTest::~SAMLEnrollmentTest() { |
| 693 } |
| 694 |
| 695 void SAMLEnrollmentTest::SetUp() { |
| 696 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
| 697 const base::FilePath policy_file = |
| 698 temp_dir_.path().AppendASCII("policy.json"); |
| 699 ASSERT_EQ(static_cast<int>(strlen(kPolicy)), |
| 700 base::WriteFile(policy_file, kPolicy, strlen(kPolicy))); |
| 701 |
| 702 test_server_.reset(new policy::LocalPolicyTestServer(policy_file)); |
| 703 ASSERT_TRUE(test_server_->Start()); |
| 704 |
| 705 SamlTest::SetUp(); |
| 706 } |
| 707 |
| 708 void SAMLEnrollmentTest::SetUpCommandLine(CommandLine* command_line) { |
| 709 command_line->AppendSwitchASCII(policy::switches::kDeviceManagementUrl, |
| 710 test_server_->GetServiceURL().spec()); |
| 711 command_line->AppendSwitch(policy::switches::kDisablePolicyKeyVerification); |
| 712 command_line->AppendSwitch(switches::kEnterpriseEnrollmentSkipRobotAuth); |
| 713 |
| 714 SamlTest::SetUpCommandLine(command_line); |
| 715 } |
| 716 |
| 717 void SAMLEnrollmentTest::SetUpOnMainThread() { |
| 718 Observe(GetLoginUI()->GetWebContents()); |
| 719 |
| 720 FakeGaia::AccessTokenInfo token_info; |
| 721 token_info.token = kTestUserinfoToken; |
| 722 token_info.scopes.insert(GaiaConstants::kDeviceManagementServiceOAuth); |
| 723 token_info.scopes.insert(GaiaConstants::kOAuthWrapBridgeUserInfoScope); |
| 724 token_info.audience = GaiaUrls::GetInstance()->oauth2_chrome_client_id(); |
| 725 token_info.email = kFirstSAMLUserEmail; |
| 726 fake_gaia_.IssueOAuthToken(kTestRefreshToken, token_info); |
| 727 |
| 728 SamlTest::SetUpOnMainThread(); |
| 729 } |
| 730 |
| 731 void SAMLEnrollmentTest::StartSamlAndWaitForIdpPageLoad( |
| 732 const std::string& gaia_email) { |
| 733 WaitForSigninScreen(); |
| 734 run_loop_.reset(new base::RunLoop); |
| 735 ExistingUserController::current_controller()->OnStartEnterpriseEnrollment(); |
| 736 run_loop_->Run(); |
| 737 |
| 738 SetSignFormField("Email", gaia_email); |
| 739 |
| 740 run_loop_.reset(new base::RunLoop); |
| 741 ExecuteJsInSigninFrame("document.getElementById('signIn').click();"); |
| 742 run_loop_->Run(); |
| 743 } |
| 744 |
| 745 void SAMLEnrollmentTest::RenderFrameCreated( |
| 746 content::RenderFrameHost* render_frame_host) { |
| 747 content::RenderFrameHost* parent = render_frame_host->GetParent(); |
| 748 if (!parent || parent->GetFrameName() != gaia_frame_parent_) |
| 749 return; |
| 750 |
| 751 // The GAIA extension created the iframe in which the login form will be |
| 752 // shown. Now wait for the login form to finish loading. |
| 753 auth_frame_ = render_frame_host; |
| 754 Observe(content::WebContents::FromRenderFrameHost(auth_frame_)); |
| 755 } |
| 756 |
| 757 void SAMLEnrollmentTest::DidFinishLoad( |
| 758 content::RenderFrameHost* render_frame_host, |
| 759 const GURL& validated_url) { |
| 760 if (render_frame_host != auth_frame_) |
| 761 return; |
| 762 |
| 763 const GURL origin = validated_url.GetOrigin(); |
| 764 if (origin != gaia_https_forwarder_->GetURL("") && |
| 765 origin != saml_https_forwarder_->GetURL("")) { |
| 766 return; |
| 767 } |
| 768 |
| 769 // The GAIA or SAML IdP login form finished loading. |
| 770 if (run_loop_) |
| 771 run_loop_->Quit(); |
| 772 } |
| 773 |
| 774 // Waits until the class |oauth-enroll-state-success| becomes set for the |
| 775 // enrollment screen, indicating enrollment success. |
| 776 void SAMLEnrollmentTest::WaitForEnrollmentSuccess() { |
| 777 bool done = false; |
| 778 ASSERT_TRUE(content::ExecuteScriptAndExtractBool( |
| 779 GetLoginUI()->GetWebContents(), |
| 780 "var enrollmentScreen = document.getElementById('oauth-enrollment');" |
| 781 "function SendReplyIfEnrollmentDone() {" |
| 782 " if (!enrollmentScreen.classList.contains(" |
| 783 " 'oauth-enroll-state-success')) {" |
| 784 " return false;" |
| 785 " }" |
| 786 " domAutomationController.send(true);" |
| 787 " observer.disconnect();" |
| 788 " return true;" |
| 789 "}" |
| 790 "var observer = new MutationObserver(SendReplyIfEnrollmentDone);" |
| 791 "if (!SendReplyIfEnrollmentDone()) {" |
| 792 " var options = { attributes: true, attributeFilter: [ 'class' ] };" |
| 793 " observer.observe(enrollmentScreen, options);" |
| 794 "}", |
| 795 &done)); |
| 796 } |
| 797 |
| 798 IN_PROC_BROWSER_TEST_F(SAMLEnrollmentTest, WithoutCredentialsPassingAPI) { |
| 799 fake_saml_idp()->SetLoginHTMLTemplate("saml_login.html"); |
| 800 StartSamlAndWaitForIdpPageLoad(kFirstSAMLUserEmail); |
| 801 |
| 802 // Fill-in the SAML IdP form and submit. |
| 803 SetSignFormField("Email", "fake_user"); |
| 804 SetSignFormField("Password", "fake_password"); |
| 805 ExecuteJsInSigninFrame("document.getElementById('Submit').click();"); |
| 806 |
| 807 WaitForEnrollmentSuccess(); |
| 808 } |
| 809 |
| 810 IN_PROC_BROWSER_TEST_F(SAMLEnrollmentTest, WithCredentialsPassingAPI) { |
| 811 fake_saml_idp()->SetLoginHTMLTemplate("saml_api_login.html"); |
| 812 fake_saml_idp()->SetLoginAuthHTMLTemplate("saml_api_login_auth.html"); |
| 813 StartSamlAndWaitForIdpPageLoad(kFirstSAMLUserEmail); |
| 814 |
| 815 // Fill-in the SAML IdP form and submit. |
| 816 SetSignFormField("Email", "fake_user"); |
| 817 SetSignFormField("Password", "fake_password"); |
| 818 ExecuteJsInSigninFrame("document.getElementById('Submit').click();"); |
| 819 |
| 820 WaitForEnrollmentSuccess(); |
| 821 } |
| 822 |
| 642 class SAMLPolicyTest : public SamlTest { | 823 class SAMLPolicyTest : public SamlTest { |
| 643 public: | 824 public: |
| 644 SAMLPolicyTest(); | 825 SAMLPolicyTest(); |
| 645 virtual ~SAMLPolicyTest(); | 826 virtual ~SAMLPolicyTest(); |
| 646 | 827 |
| 647 // SamlTest: | 828 // SamlTest: |
| 648 virtual void SetUpInProcessBrowserTestFixture() override; | 829 virtual void SetUpInProcessBrowserTestFixture() override; |
| 649 virtual void SetUpOnMainThread() override; | 830 virtual void SetUpOnMainThread() override; |
| 650 | 831 |
| 651 void SetSAMLOfflineSigninTimeLimitPolicy(int limit); | 832 void SetSAMLOfflineSigninTimeLimitPolicy(int limit); |
| (...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 953 kTestAuthSIDCookie1, | 1134 kTestAuthSIDCookie1, |
| 954 kTestAuthLSIDCookie1); | 1135 kTestAuthLSIDCookie1); |
| 955 | 1136 |
| 956 GetCookies(); | 1137 GetCookies(); |
| 957 EXPECT_EQ(kTestAuthSIDCookie1, GetCookieValue(kGAIASIDCookieName)); | 1138 EXPECT_EQ(kTestAuthSIDCookie1, GetCookieValue(kGAIASIDCookieName)); |
| 958 EXPECT_EQ(kTestAuthLSIDCookie1, GetCookieValue(kGAIALSIDCookieName)); | 1139 EXPECT_EQ(kTestAuthLSIDCookie1, GetCookieValue(kGAIALSIDCookieName)); |
| 959 EXPECT_EQ(kSAMLIdPCookieValue1, GetCookieValue(kSAMLIdPCookieName)); | 1140 EXPECT_EQ(kSAMLIdPCookieValue1, GetCookieValue(kSAMLIdPCookieName)); |
| 960 } | 1141 } |
| 961 | 1142 |
| 962 } // namespace chromeos | 1143 } // namespace chromeos |
| OLD | NEW |