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

Side by Side Diff: chrome/browser/password_manager/password_manager_browsertest.cc

Issue 1012853002: [Password Manager] Use successful XHR submission as a signal for password saving (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comments Created 5 years, 9 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/test/data/password/password_xhr_submit.html » ('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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 <string> 5 #include <string>
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/metrics/histogram_samples.h" 8 #include "base/metrics/histogram_samples.h"
9 #include "base/metrics/statistics_recorder.h" 9 #include "base/metrics/statistics_recorder.h"
10 #include "base/path_service.h" 10 #include "base/path_service.h"
(...skipping 724 matching lines...) Expand 10 before | Expand all | Expand 10 after
735 std::string fill_and_navigate = 735 std::string fill_and_navigate =
736 "document.getElementById('signup_username_field').value = 'temp';" 736 "document.getElementById('signup_username_field').value = 'temp';"
737 "document.getElementById('signup_password_field').value = 'random';" 737 "document.getElementById('signup_password_field').value = 'random';"
738 "document.getElementById('confirmation_password_field').value = 'random';" 738 "document.getElementById('confirmation_password_field').value = 'random';"
739 "send_xhr()"; 739 "send_xhr()";
740 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_navigate)); 740 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_navigate));
741 observer.Wait(); 741 observer.Wait();
742 EXPECT_TRUE(prompt_observer->IsShowingPrompt()); 742 EXPECT_TRUE(prompt_observer->IsShowingPrompt());
743 } 743 }
744 744
745 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest,
746 PromptForXHRSubmitWithoutNavigation) {
747 NavigateToFile("/password/password_xhr_submit.html");
748
749 // Need to pay attention for a message that XHR has finished since there
750 // is no navigation to wait for.
751 content::DOMMessageQueue message_queue;
752
753 // Verify that if XHR without navigation occurs and the form has been filled
754 // out we try and save the password. Note that in general the submission
755 // doesn't need to be via form.submit(), but for testing purposes it's
756 // necessary since we otherwise ignore changes made to the value of these
757 // fields by script.
758 scoped_ptr<PromptObserver> prompt_observer(
759 PromptObserver::Create(WebContents()));
760 std::string fill_and_submit =
761 "navigate = false;"
762 "document.getElementById('username_field').value = 'temp';"
763 "document.getElementById('password_field').value = 'random';"
764 "document.getElementById('submit_button').click();";
765 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit));
766 std::string message;
767 while (message_queue.WaitForMessage(&message)) {
768 if (message == "\"XHR_FINISHED\"")
769 break;
770 }
771
772 EXPECT_TRUE(prompt_observer->IsShowingPrompt());
773 }
774
775 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest,
776 PromptForXHRSubmitWithoutNavigation_SignupForm) {
777 NavigateToFile("/password/password_xhr_submit.html");
778
779 // Need to pay attention for a message that XHR has finished since there
780 // is no navigation to wait for.
781 content::DOMMessageQueue message_queue;
782
783 // Verify that if XHR without navigation occurs and the form has been filled
784 // out we try and save the password. Note that in general the submission
785 // doesn't need to be via form.submit(), but for testing purposes it's
786 // necessary since we otherwise ignore changes made to the value of these
787 // fields by script.
788 scoped_ptr<PromptObserver> prompt_observer(
789 PromptObserver::Create(WebContents()));
790 std::string fill_and_submit =
791 "navigate = false;"
792 "document.getElementById('signup_username_field').value = 'temp';"
793 "document.getElementById('signup_password_field').value = 'random';"
794 "document.getElementById('confirmation_password_field').value = 'random';"
795 "document.getElementById('signup_submit_button').click();";
796 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit));
797 std::string message;
798 while (message_queue.WaitForMessage(&message)) {
799 if (message == "\"XHR_FINISHED\"")
800 break;
801 }
802
803 EXPECT_TRUE(prompt_observer->IsShowingPrompt());
804 }
805
806 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest,
807 NoPromptForXHRSubmitWithoutNavigationWithUnfilledForm) {
808 NavigateToFile("/password/password_xhr_submit.html");
809
810 // Need to pay attention for a message that XHR has finished since there
811 // is no navigation to wait for.
812 content::DOMMessageQueue message_queue;
813
814 // Verify that if XHR without navigation occurs and the form has NOT been
815 // filled out we don't prompt.
816 scoped_ptr<PromptObserver> prompt_observer(
817 PromptObserver::Create(WebContents()));
818 std::string fill_and_submit =
819 "navigate = false;"
820 "document.getElementById('username_field').value = 'temp';"
821 "document.getElementById('submit_button').click();";
822 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit));
823 std::string message;
824 while (message_queue.WaitForMessage(&message)) {
825 if (message == "\"XHR_FINISHED\"")
826 break;
827 }
828
829 EXPECT_FALSE(prompt_observer->IsShowingPrompt());
830 }
831
832 IN_PROC_BROWSER_TEST_F(
833 PasswordManagerBrowserTest,
834 NoPromptForXHRSubmitWithoutNavigationWithUnfilledForm_SignupForm) {
835 NavigateToFile("/password/password_xhr_submit.html");
836
837 // Need to pay attention for a message that XHR has finished since there
838 // is no navigation to wait for.
839 content::DOMMessageQueue message_queue;
840
841 // Verify that if XHR without navigation occurs and the form has NOT been
842 // filled out we don't prompt.
843 scoped_ptr<PromptObserver> prompt_observer(
844 PromptObserver::Create(WebContents()));
845 std::string fill_and_submit =
846 "navigate = false;"
847 "document.getElementById('signup_username_field').value = 'temp';"
848 "document.getElementById('signup_submit_button').click();";
849 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit));
850 std::string message;
851 while (message_queue.WaitForMessage(&message)) {
852 if (message == "\"XHR_FINISHED\"")
853 break;
854 }
855
856 EXPECT_FALSE(prompt_observer->IsShowingPrompt());
857 }
858
745 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, NoPromptIfLinkClicked) { 859 IN_PROC_BROWSER_TEST_F(PasswordManagerBrowserTest, NoPromptIfLinkClicked) {
746 NavigateToFile("/password/password_form.html"); 860 NavigateToFile("/password/password_form.html");
747 861
748 // Verify that if the user takes a direct action to leave the page, we don't 862 // Verify that if the user takes a direct action to leave the page, we don't
749 // prompt to save the password even if the form is already filled out. 863 // prompt to save the password even if the form is already filled out.
750 NavigationObserver observer(WebContents()); 864 NavigationObserver observer(WebContents());
751 scoped_ptr<PromptObserver> prompt_observer( 865 scoped_ptr<PromptObserver> prompt_observer(
752 PromptObserver::Create(WebContents())); 866 PromptObserver::Create(WebContents()));
753 std::string fill_and_click_link = 867 std::string fill_and_click_link =
754 "document.getElementById('username_field').value = 'temp';" 868 "document.getElementById('username_field').value = 'temp';"
(...skipping 898 matching lines...) Expand 10 before | Expand all | Expand 10 after
1653 "document.getElementById('username_field').value = 'username';" 1767 "document.getElementById('username_field').value = 'username';"
1654 "document.getElementById('password_field').value = 'mypass';" 1768 "document.getElementById('password_field').value = 'mypass';"
1655 "document.getElementById('confirm_field').value = 'mypass';" 1769 "document.getElementById('confirm_field').value = 'mypass';"
1656 "document.getElementById('security_answer').value = 'hometown';" 1770 "document.getElementById('security_answer').value = 'hometown';"
1657 "document.getElementById('SSN').value = '1234';" 1771 "document.getElementById('SSN').value = '1234';"
1658 "document.getElementById('testform').submit();"; 1772 "document.getElementById('testform').submit();";
1659 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit)); 1773 ASSERT_TRUE(content::ExecuteScript(RenderViewHost(), fill_and_submit));
1660 observer.Wait(); 1774 observer.Wait();
1661 EXPECT_TRUE(prompt_observer->IsShowingPrompt()); 1775 EXPECT_TRUE(prompt_observer->IsShowingPrompt());
1662 } 1776 }
OLDNEW
« no previous file with comments | « no previous file | chrome/test/data/password/password_xhr_submit.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698