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

Side by Side Diff: chrome/renderer/form_manager_browsertest.cc

Issue 6033010: Support autocompletion for HTMl5 tags:"email", "month" and "tel". (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Created 9 years, 11 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "base/string_util.h" 5 #include "base/string_util.h"
6 #include "base/utf_string_conversions.h" 6 #include "base/utf_string_conversions.h"
7 #include "chrome/renderer/form_manager.h" 7 #include "chrome/renderer/form_manager.h"
8 #include "chrome/test/render_view_test.h" 8 #include "chrome/test/render_view_test.h"
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "third_party/WebKit/WebKit/chromium/public/WebDocument.h" 10 #include "third_party/WebKit/WebKit/chromium/public/WebDocument.h"
(...skipping 2826 matching lines...) Expand 10 before | Expand all | Expand 10 after
2837 // Verify that the cursor position has been updated. 2837 // Verify that the cursor position has been updated.
2838 EXPECT_EQ(0, firstname.selectionStart()); 2838 EXPECT_EQ(0, firstname.selectionStart());
2839 EXPECT_EQ(0, firstname.selectionEnd()); 2839 EXPECT_EQ(0, firstname.selectionEnd());
2840 } 2840 }
2841 2841
2842 TEST_F(FormManagerTest, ClearPreviewedFormWithNode) { 2842 TEST_F(FormManagerTest, ClearPreviewedFormWithNode) {
2843 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" 2843 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">"
2844 " <INPUT type=\"text\" id=\"firstname\" value=\"Wyatt\"/>" 2844 " <INPUT type=\"text\" id=\"firstname\" value=\"Wyatt\"/>"
2845 " <INPUT type=\"text\" id=\"lastname\"/>" 2845 " <INPUT type=\"text\" id=\"lastname\"/>"
2846 " <INPUT type=\"text\" id=\"email\"/>" 2846 " <INPUT type=\"text\" id=\"email\"/>"
2847 " <INPUT type=\"email\" id=\"email2\"/>"
2848 " <INPUT type=\"tel\" id=\"phone\"/>"
2847 " <INPUT type=\"submit\" value=\"Send\"/>" 2849 " <INPUT type=\"submit\" value=\"Send\"/>"
2848 "</FORM>"); 2850 "</FORM>");
2849 2851
2850 WebFrame* web_frame = GetMainFrame(); 2852 WebFrame* web_frame = GetMainFrame();
2851 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); 2853 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame);
2852 2854
2853 FormManager form_manager; 2855 FormManager form_manager;
2854 form_manager.ExtractForms(web_frame); 2856 form_manager.ExtractForms(web_frame);
2855 2857
2856 // Verify that we have the form. 2858 // Verify that we have the form.
2857 std::vector<FormData> forms; 2859 std::vector<FormData> forms;
2858 form_manager.GetFormsInFrame(web_frame, FormManager::REQUIRE_NONE, &forms); 2860 form_manager.GetFormsInFrame(web_frame, FormManager::REQUIRE_NONE, &forms);
2859 ASSERT_EQ(1U, forms.size()); 2861 ASSERT_EQ(1U, forms.size());
2860 2862
2861 // Set the auto-filled attribute. 2863 // Set the auto-filled attribute.
2862 WebInputElement firstname = 2864 WebInputElement firstname =
2863 web_frame->document().getElementById("firstname").to<WebInputElement>(); 2865 web_frame->document().getElementById("firstname").to<WebInputElement>();
2864 firstname.setAutofilled(true); 2866 firstname.setAutofilled(true);
2865 WebInputElement lastname = 2867 WebInputElement lastname =
2866 web_frame->document().getElementById("lastname").to<WebInputElement>(); 2868 web_frame->document().getElementById("lastname").to<WebInputElement>();
2867 lastname.setAutofilled(true); 2869 lastname.setAutofilled(true);
2868 WebInputElement email = 2870 WebInputElement email =
2869 web_frame->document().getElementById("email").to<WebInputElement>(); 2871 web_frame->document().getElementById("email").to<WebInputElement>();
2870 email.setAutofilled(true); 2872 email.setAutofilled(true);
2873 WebInputElement email2 =
2874 web_frame->document().getElementById("email2").to<WebInputElement>();
2875 email2.setAutofilled(true);
2876 WebInputElement phone =
2877 web_frame->document().getElementById("phone").to<WebInputElement>();
2878 phone.setAutofilled(true);
2871 2879
2872 // Set the suggested values on two of the elements. 2880 // Set the suggested values on two of the elements.
2873 lastname.setSuggestedValue(ASCIIToUTF16("Earp")); 2881 lastname.setSuggestedValue(ASCIIToUTF16("Earp"));
2874 email.setSuggestedValue(ASCIIToUTF16("wyatt@earp.com")); 2882 email.setSuggestedValue(ASCIIToUTF16("wyatt@earp.com"));
2883 email2.setSuggestedValue(ASCIIToUTF16("wyatt@earp.com"));
2884 phone.setSuggestedValue(ASCIIToUTF16("650-777-9999"));
2875 2885
2876 // Clear the previewed fields. 2886 // Clear the previewed fields.
2877 EXPECT_TRUE(form_manager.ClearPreviewedFormWithNode(lastname, false)); 2887 EXPECT_TRUE(form_manager.ClearPreviewedFormWithNode(lastname, false));
2878 2888
2879 // Fields with empty suggestions suggestions are not modified. 2889 // Fields with empty suggestions suggestions are not modified.
2880 EXPECT_EQ(ASCIIToUTF16("Wyatt"), firstname.value()); 2890 EXPECT_EQ(ASCIIToUTF16("Wyatt"), firstname.value());
2881 EXPECT_TRUE(firstname.suggestedValue().isEmpty()); 2891 EXPECT_TRUE(firstname.suggestedValue().isEmpty());
2882 EXPECT_TRUE(firstname.isAutofilled()); 2892 EXPECT_TRUE(firstname.isAutofilled());
2883 2893
2884 // Verify the previewed fields are cleared. 2894 // Verify the previewed fields are cleared.
2885 EXPECT_TRUE(lastname.value().isEmpty()); 2895 EXPECT_TRUE(lastname.value().isEmpty());
2886 EXPECT_TRUE(lastname.suggestedValue().isEmpty()); 2896 EXPECT_TRUE(lastname.suggestedValue().isEmpty());
2887 EXPECT_FALSE(lastname.isAutofilled()); 2897 EXPECT_FALSE(lastname.isAutofilled());
2888 EXPECT_TRUE(email.value().isEmpty()); 2898 EXPECT_TRUE(email.value().isEmpty());
2889 EXPECT_TRUE(email.suggestedValue().isEmpty()); 2899 EXPECT_TRUE(email.suggestedValue().isEmpty());
2890 EXPECT_FALSE(email.isAutofilled()); 2900 EXPECT_FALSE(email.isAutofilled());
2901 EXPECT_TRUE(email2.value().isEmpty());
2902 EXPECT_TRUE(email2.suggestedValue().isEmpty());
2903 EXPECT_FALSE(email2.isAutofilled());
2904 EXPECT_TRUE(phone.value().isEmpty());
2905 EXPECT_TRUE(phone.suggestedValue().isEmpty());
2906 EXPECT_FALSE(phone.isAutofilled());
2891 2907
2892 // Verify that the cursor position has been updated. 2908 // Verify that the cursor position has been updated.
2893 EXPECT_EQ(0, lastname.selectionStart()); 2909 EXPECT_EQ(0, lastname.selectionStart());
2894 EXPECT_EQ(0, lastname.selectionEnd()); 2910 EXPECT_EQ(0, lastname.selectionEnd());
2895 } 2911 }
2896 2912
2897 TEST_F(FormManagerTest, ClearPreviewedFormWithNonEmptyInitiatingNode) { 2913 TEST_F(FormManagerTest, ClearPreviewedFormWithNonEmptyInitiatingNode) {
2898 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" 2914 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">"
2899 " <INPUT type=\"text\" id=\"firstname\" value=\"W\"/>" 2915 " <INPUT type=\"text\" id=\"firstname\" value=\"W\"/>"
2900 " <INPUT type=\"text\" id=\"lastname\"/>" 2916 " <INPUT type=\"text\" id=\"lastname\"/>"
2901 " <INPUT type=\"text\" id=\"email\"/>" 2917 " <INPUT type=\"text\" id=\"email\"/>"
2918 " <INPUT type=\"email\" id=\"email2\"/>"
2919 " <INPUT type=\"tel\" id=\"phone\"/>"
2902 " <INPUT type=\"submit\" value=\"Send\"/>" 2920 " <INPUT type=\"submit\" value=\"Send\"/>"
2903 "</FORM>"); 2921 "</FORM>");
2904 2922
2905 WebFrame* web_frame = GetMainFrame(); 2923 WebFrame* web_frame = GetMainFrame();
2906 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); 2924 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame);
2907 2925
2908 FormManager form_manager; 2926 FormManager form_manager;
2909 form_manager.ExtractForms(web_frame); 2927 form_manager.ExtractForms(web_frame);
2910 2928
2911 // Verify that we have the form. 2929 // Verify that we have the form.
2912 std::vector<FormData> forms; 2930 std::vector<FormData> forms;
2913 form_manager.GetFormsInFrame(web_frame, FormManager::REQUIRE_NONE, &forms); 2931 form_manager.GetFormsInFrame(web_frame, FormManager::REQUIRE_NONE, &forms);
2914 ASSERT_EQ(1U, forms.size()); 2932 ASSERT_EQ(1U, forms.size());
2915 2933
2916 // Set the auto-filled attribute. 2934 // Set the auto-filled attribute.
2917 WebInputElement firstname = 2935 WebInputElement firstname =
2918 web_frame->document().getElementById("firstname").to<WebInputElement>(); 2936 web_frame->document().getElementById("firstname").to<WebInputElement>();
2919 firstname.setAutofilled(true); 2937 firstname.setAutofilled(true);
2920 WebInputElement lastname = 2938 WebInputElement lastname =
2921 web_frame->document().getElementById("lastname").to<WebInputElement>(); 2939 web_frame->document().getElementById("lastname").to<WebInputElement>();
2922 lastname.setAutofilled(true); 2940 lastname.setAutofilled(true);
2923 WebInputElement email = 2941 WebInputElement email =
2924 web_frame->document().getElementById("email").to<WebInputElement>(); 2942 web_frame->document().getElementById("email").to<WebInputElement>();
2925 email.setAutofilled(true); 2943 email.setAutofilled(true);
2944 WebInputElement email2 =
2945 web_frame->document().getElementById("email2").to<WebInputElement>();
2946 email3.setAutofilled(true);
2947 WebInputElement phone =
2948 web_frame->document().getElementById("phone").to<WebInputElement>();
2949 phone.setAutofilled(true);
2950
2926 2951
2927 // Set the suggested values on all of the elements. 2952 // Set the suggested values on all of the elements.
2928 firstname.setSuggestedValue(ASCIIToUTF16("Wyatt")); 2953 firstname.setSuggestedValue(ASCIIToUTF16("Wyatt"));
2929 lastname.setSuggestedValue(ASCIIToUTF16("Earp")); 2954 lastname.setSuggestedValue(ASCIIToUTF16("Earp"));
2930 email.setSuggestedValue(ASCIIToUTF16("wyatt@earp.com")); 2955 email.setSuggestedValue(ASCIIToUTF16("wyatt@earp.com"));
2956 email2.setSuggestedValue(ASCIIToUTF16("wyatt@earp.com"));
2957 phone.setSuggestedValue(ASCIIToUTF16("650-777-9999"));
2931 2958
2932 // Clear the previewed fields. 2959 // Clear the previewed fields.
2933 EXPECT_TRUE(form_manager.ClearPreviewedFormWithNode(firstname, false)); 2960 EXPECT_TRUE(form_manager.ClearPreviewedFormWithNode(firstname, false));
2934 2961
2935 // Fields with non-empty values are restored. 2962 // Fields with non-empty values are restored.
2936 EXPECT_EQ(ASCIIToUTF16("W"), firstname.value()); 2963 EXPECT_EQ(ASCIIToUTF16("W"), firstname.value());
2937 EXPECT_TRUE(firstname.suggestedValue().isEmpty()); 2964 EXPECT_TRUE(firstname.suggestedValue().isEmpty());
2938 EXPECT_FALSE(firstname.isAutofilled()); 2965 EXPECT_FALSE(firstname.isAutofilled());
2939 EXPECT_EQ(1, firstname.selectionStart()); 2966 EXPECT_EQ(1, firstname.selectionStart());
2940 EXPECT_EQ(1, firstname.selectionEnd()); 2967 EXPECT_EQ(1, firstname.selectionEnd());
2941 2968
2942 // Verify the previewed fields are cleared. 2969 // Verify the previewed fields are cleared.
2943 EXPECT_TRUE(lastname.value().isEmpty()); 2970 EXPECT_TRUE(lastname.value().isEmpty());
2944 EXPECT_TRUE(lastname.suggestedValue().isEmpty()); 2971 EXPECT_TRUE(lastname.suggestedValue().isEmpty());
2945 EXPECT_FALSE(lastname.isAutofilled()); 2972 EXPECT_FALSE(lastname.isAutofilled());
2946 EXPECT_TRUE(email.value().isEmpty()); 2973 EXPECT_TRUE(email.value().isEmpty());
2947 EXPECT_TRUE(email.suggestedValue().isEmpty()); 2974 EXPECT_TRUE(email.suggestedValue().isEmpty());
2948 EXPECT_FALSE(email.isAutofilled()); 2975 EXPECT_FALSE(email.isAutofilled());
2976 EXPECT_TRUE(email2.value().isEmpty());
2977 EXPECT_TRUE(email2.suggestedValue().isEmpty());
2978 EXPECT_FALSE(email2.isAutofilled());
2979 EXPECT_TRUE(phone.value().isEmpty());
2980 EXPECT_TRUE(phone.suggestedValue().isEmpty());
2981 EXPECT_FALSE(phone.isAutofilled());
2949 } 2982 }
2950 2983
2951 TEST_F(FormManagerTest, ClearPreviewedFormWithAutofilledInitiatingNode) { 2984 TEST_F(FormManagerTest, ClearPreviewedFormWithAutofilledInitiatingNode) {
2952 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" 2985 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">"
2953 " <INPUT type=\"text\" id=\"firstname\" value=\"W\"/>" 2986 " <INPUT type=\"text\" id=\"firstname\" value=\"W\"/>"
2954 " <INPUT type=\"text\" id=\"lastname\"/>" 2987 " <INPUT type=\"text\" id=\"lastname\"/>"
2955 " <INPUT type=\"text\" id=\"email\"/>" 2988 " <INPUT type=\"text\" id=\"email\"/>"
2989 " <INPUT type=\"email\" id=\"email2\"/>"
2990 " <INPUT type=\"tel\" id=\"phone\"/>"
2956 " <INPUT type=\"submit\" value=\"Send\"/>" 2991 " <INPUT type=\"submit\" value=\"Send\"/>"
2957 "</FORM>"); 2992 "</FORM>");
2958 2993
2959 WebFrame* web_frame = GetMainFrame(); 2994 WebFrame* web_frame = GetMainFrame();
2960 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); 2995 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame);
2961 2996
2962 FormManager form_manager; 2997 FormManager form_manager;
2963 form_manager.ExtractForms(web_frame); 2998 form_manager.ExtractForms(web_frame);
2964 2999
2965 // Verify that we have the form. 3000 // Verify that we have the form.
2966 std::vector<FormData> forms; 3001 std::vector<FormData> forms;
2967 form_manager.GetFormsInFrame(web_frame, FormManager::REQUIRE_NONE, &forms); 3002 form_manager.GetFormsInFrame(web_frame, FormManager::REQUIRE_NONE, &forms);
2968 ASSERT_EQ(1U, forms.size()); 3003 ASSERT_EQ(1U, forms.size());
2969 3004
2970 // Set the auto-filled attribute. 3005 // Set the auto-filled attribute.
2971 WebInputElement firstname = 3006 WebInputElement firstname =
2972 web_frame->document().getElementById("firstname").to<WebInputElement>(); 3007 web_frame->document().getElementById("firstname").to<WebInputElement>();
2973 firstname.setAutofilled(true); 3008 firstname.setAutofilled(true);
2974 WebInputElement lastname = 3009 WebInputElement lastname =
2975 web_frame->document().getElementById("lastname").to<WebInputElement>(); 3010 web_frame->document().getElementById("lastname").to<WebInputElement>();
2976 lastname.setAutofilled(true); 3011 lastname.setAutofilled(true);
2977 WebInputElement email = 3012 WebInputElement email =
2978 web_frame->document().getElementById("email").to<WebInputElement>(); 3013 web_frame->document().getElementById("email").to<WebInputElement>();
2979 email.setAutofilled(true); 3014 email.setAutofilled(true);
3015 WebInputElement email2 =
3016 web_frame->document().getElementById("email2").to<WebInputElement>();
3017 email2.setAutofilled(true);
3018 WebInputElement phone =
3019 web_frame->document().getElementById("phone").to<WebInputElement>();
3020 phone.setAutofilled(true);
2980 3021
2981 // Set the suggested values on all of the elements. 3022 // Set the suggested values on all of the elements.
2982 firstname.setSuggestedValue(ASCIIToUTF16("Wyatt")); 3023 firstname.setSuggestedValue(ASCIIToUTF16("Wyatt"));
2983 lastname.setSuggestedValue(ASCIIToUTF16("Earp")); 3024 lastname.setSuggestedValue(ASCIIToUTF16("Earp"));
2984 email.setSuggestedValue(ASCIIToUTF16("wyatt@earp.com")); 3025 email.setSuggestedValue(ASCIIToUTF16("wyatt@earp.com"));
3026 email2.setSuggestedValue(ASCIIToUTF16("wyatt@earp.com"));
3027 phone.setSuggestedValue(ASCIIToUTF16("650-777-9999"));
2985 3028
2986 // Clear the previewed fields. 3029 // Clear the previewed fields.
2987 EXPECT_TRUE(form_manager.ClearPreviewedFormWithNode(firstname, true)); 3030 EXPECT_TRUE(form_manager.ClearPreviewedFormWithNode(firstname, true));
2988 3031
2989 // Fields with non-empty values are restored. 3032 // Fields with non-empty values are restored.
2990 EXPECT_EQ(ASCIIToUTF16("W"), firstname.value()); 3033 EXPECT_EQ(ASCIIToUTF16("W"), firstname.value());
2991 EXPECT_TRUE(firstname.suggestedValue().isEmpty()); 3034 EXPECT_TRUE(firstname.suggestedValue().isEmpty());
2992 EXPECT_TRUE(firstname.isAutofilled()); 3035 EXPECT_TRUE(firstname.isAutofilled());
2993 EXPECT_EQ(1, firstname.selectionStart()); 3036 EXPECT_EQ(1, firstname.selectionStart());
2994 EXPECT_EQ(1, firstname.selectionEnd()); 3037 EXPECT_EQ(1, firstname.selectionEnd());
2995 3038
2996 // Verify the previewed fields are cleared. 3039 // Verify the previewed fields are cleared.
2997 EXPECT_TRUE(lastname.value().isEmpty()); 3040 EXPECT_TRUE(lastname.value().isEmpty());
2998 EXPECT_TRUE(lastname.suggestedValue().isEmpty()); 3041 EXPECT_TRUE(lastname.suggestedValue().isEmpty());
2999 EXPECT_FALSE(lastname.isAutofilled()); 3042 EXPECT_FALSE(lastname.isAutofilled());
3000 EXPECT_TRUE(email.value().isEmpty()); 3043 EXPECT_TRUE(email.value().isEmpty());
3001 EXPECT_TRUE(email.suggestedValue().isEmpty()); 3044 EXPECT_TRUE(email.suggestedValue().isEmpty());
3002 EXPECT_FALSE(email.isAutofilled()); 3045 EXPECT_FALSE(email.isAutofilled());
3046 EXPECT_TRUE(email2.value().isEmpty());
3047 EXPECT_TRUE(email2.suggestedValue().isEmpty());
3048 EXPECT_FALSE(email2.isAutofilled());
3049 EXPECT_TRUE(phone.value().isEmpty());
3050 EXPECT_TRUE(phone.suggestedValue().isEmpty());
3051 EXPECT_FALSE(phone.isAutofilled());
3003 } 3052 }
3004 3053
3005 TEST_F(FormManagerTest, FormWithNodeIsAutoFilled) { 3054 TEST_F(FormManagerTest, FormWithNodeIsAutoFilled) {
3006 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">" 3055 LoadHTML("<FORM name=\"TestForm\" action=\"http://buh.com\" method=\"post\">"
3007 " <INPUT type=\"text\" id=\"firstname\" value=\"Wyatt\"/>" 3056 " <INPUT type=\"text\" id=\"firstname\" value=\"Wyatt\"/>"
3008 " <INPUT type=\"text\" id=\"lastname\"/>" 3057 " <INPUT type=\"text\" id=\"lastname\"/>"
3009 " <INPUT type=\"text\" id=\"email\"/>" 3058 " <INPUT type=\"text\" id=\"email\"/>"
3059 " <INPUT type=\"email\" id=\"email2\"/>"
3060 " <INPUT type=\"tel\" id=\"phone\"/>"
3010 " <INPUT type=\"submit\" value=\"Send\"/>" 3061 " <INPUT type=\"submit\" value=\"Send\"/>"
3011 "</FORM>"); 3062 "</FORM>");
3012 3063
3013 WebFrame* web_frame = GetMainFrame(); 3064 WebFrame* web_frame = GetMainFrame();
3014 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame); 3065 ASSERT_NE(static_cast<WebFrame*>(NULL), web_frame);
3015 3066
3016 FormManager form_manager; 3067 FormManager form_manager;
3017 form_manager.ExtractForms(web_frame); 3068 form_manager.ExtractForms(web_frame);
3018 3069
3019 // Verify that we have the form. 3070 // Verify that we have the form.
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
3204 EXPECT_TRUE(fields[3].StrictlyEqualsHack( 3255 EXPECT_TRUE(fields[3].StrictlyEqualsHack(
3205 FormField(string16(), 3256 FormField(string16(),
3206 ASCIIToUTF16("reply-send"), 3257 ASCIIToUTF16("reply-send"),
3207 string16(), 3258 string16(),
3208 ASCIIToUTF16("submit"), 3259 ASCIIToUTF16("submit"),
3209 0, 3260 0,
3210 false))); 3261 false)));
3211 } 3262 }
3212 3263
3213 } // namespace 3264 } // namespace
OLDNEW
« chrome/renderer/form_manager.cc ('K') | « chrome/renderer/form_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698