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

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

Powered by Google App Engine
This is Rietveld 408576698