| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/files/file_util.h" | 6 #include "base/files/file_util.h" |
| 7 #include "base/strings/stringprintf.h" | 7 #include "base/strings/stringprintf.h" |
| 8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
| 9 #include "chrome/test/base/chrome_render_view_test.h" | 9 #include "chrome/test/base/chrome_render_view_test.h" |
| 10 #include "chrome/test/base/ui_test_utils.h" | 10 #include "chrome/test/base/ui_test_utils.h" |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 using blink::WebFormElement; | 30 using blink::WebFormElement; |
| 31 using blink::WebFrame; | 31 using blink::WebFrame; |
| 32 using blink::WebLocalFrame; | 32 using blink::WebLocalFrame; |
| 33 using blink::WebInputElement; | 33 using blink::WebInputElement; |
| 34 using blink::WebString; | 34 using blink::WebString; |
| 35 using blink::WebURLRequest; | 35 using blink::WebURLRequest; |
| 36 using blink::WebVector; | 36 using blink::WebVector; |
| 37 | 37 |
| 38 namespace autofill { | 38 namespace autofill { |
| 39 | 39 |
| 40 typedef Tuple<int, autofill::FormData, autofill::FormFieldData, gfx::RectF> | 40 typedef base::Tuple<int, autofill::FormData, autofill::FormFieldData, |
| 41 AutofillQueryParam; | 41 gfx::RectF> AutofillQueryParam; |
| 42 | 42 |
| 43 class AutofillRendererTest : public ChromeRenderViewTest { | 43 class AutofillRendererTest : public ChromeRenderViewTest { |
| 44 public: | 44 public: |
| 45 AutofillRendererTest() {} | 45 AutofillRendererTest() {} |
| 46 ~AutofillRendererTest() override {} | 46 ~AutofillRendererTest() override {} |
| 47 | 47 |
| 48 protected: | 48 protected: |
| 49 void SetUp() override { | 49 void SetUp() override { |
| 50 ChromeRenderViewTest::SetUp(); | 50 ChromeRenderViewTest::SetUp(); |
| 51 | 51 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 79 " <option>Texas</option>" | 79 " <option>Texas</option>" |
| 80 " </select>" | 80 " </select>" |
| 81 "</form>"); | 81 "</form>"); |
| 82 | 82 |
| 83 // Verify that "FormsSeen" sends the expected number of fields. | 83 // Verify that "FormsSeen" sends the expected number of fields. |
| 84 const IPC::Message* message = render_thread_->sink().GetFirstMessageMatching( | 84 const IPC::Message* message = render_thread_->sink().GetFirstMessageMatching( |
| 85 AutofillHostMsg_FormsSeen::ID); | 85 AutofillHostMsg_FormsSeen::ID); |
| 86 ASSERT_NE(nullptr, message); | 86 ASSERT_NE(nullptr, message); |
| 87 AutofillHostMsg_FormsSeen::Param params; | 87 AutofillHostMsg_FormsSeen::Param params; |
| 88 AutofillHostMsg_FormsSeen::Read(message, ¶ms); | 88 AutofillHostMsg_FormsSeen::Read(message, ¶ms); |
| 89 std::vector<FormData> forms = get<0>(params); | 89 std::vector<FormData> forms = base::get<0>(params); |
| 90 ASSERT_EQ(1UL, forms.size()); | 90 ASSERT_EQ(1UL, forms.size()); |
| 91 ASSERT_EQ(4UL, forms[0].fields.size()); | 91 ASSERT_EQ(4UL, forms[0].fields.size()); |
| 92 | 92 |
| 93 FormFieldData expected; | 93 FormFieldData expected; |
| 94 | 94 |
| 95 expected.name = ASCIIToUTF16("firstname"); | 95 expected.name = ASCIIToUTF16("firstname"); |
| 96 expected.value = base::string16(); | 96 expected.value = base::string16(); |
| 97 expected.form_control_type = "text"; | 97 expected.form_control_type = "text"; |
| 98 expected.max_length = WebInputElement::defaultMaxLength(); | 98 expected.max_length = WebInputElement::defaultMaxLength(); |
| 99 EXPECT_FORM_FIELD_DATA_EQUALS(expected, forms[0].fields[0]); | 99 EXPECT_FORM_FIELD_DATA_EQUALS(expected, forms[0].fields[0]); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 "newForm.appendChild(newFirstname);" | 142 "newForm.appendChild(newFirstname);" |
| 143 "newForm.appendChild(newLastname);" | 143 "newForm.appendChild(newLastname);" |
| 144 "newForm.appendChild(newEmail);" | 144 "newForm.appendChild(newEmail);" |
| 145 "document.body.appendChild(newForm);"); | 145 "document.body.appendChild(newForm);"); |
| 146 msg_loop_.RunUntilIdle(); | 146 msg_loop_.RunUntilIdle(); |
| 147 | 147 |
| 148 message = render_thread_->sink().GetFirstMessageMatching( | 148 message = render_thread_->sink().GetFirstMessageMatching( |
| 149 AutofillHostMsg_FormsSeen::ID); | 149 AutofillHostMsg_FormsSeen::ID); |
| 150 ASSERT_NE(nullptr, message); | 150 ASSERT_NE(nullptr, message); |
| 151 AutofillHostMsg_FormsSeen::Read(message, ¶ms); | 151 AutofillHostMsg_FormsSeen::Read(message, ¶ms); |
| 152 forms = get<0>(params); | 152 forms = base::get<0>(params); |
| 153 ASSERT_EQ(1UL, forms.size()); | 153 ASSERT_EQ(1UL, forms.size()); |
| 154 ASSERT_EQ(3UL, forms[0].fields.size()); | 154 ASSERT_EQ(3UL, forms[0].fields.size()); |
| 155 | 155 |
| 156 expected.form_control_type = "text"; | 156 expected.form_control_type = "text"; |
| 157 expected.max_length = WebInputElement::defaultMaxLength(); | 157 expected.max_length = WebInputElement::defaultMaxLength(); |
| 158 | 158 |
| 159 expected.name = ASCIIToUTF16("second_firstname"); | 159 expected.name = ASCIIToUTF16("second_firstname"); |
| 160 expected.value = ASCIIToUTF16("Bob"); | 160 expected.value = ASCIIToUTF16("Bob"); |
| 161 EXPECT_FORM_FIELD_DATA_EQUALS(expected, forms[0].fields[0]); | 161 EXPECT_FORM_FIELD_DATA_EQUALS(expected, forms[0].fields[0]); |
| 162 | 162 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 174 " <input type='text' id='firstname'/>" | 174 " <input type='text' id='firstname'/>" |
| 175 " <input type='text' id='middlename'/>" | 175 " <input type='text' id='middlename'/>" |
| 176 "</form>"); | 176 "</form>"); |
| 177 | 177 |
| 178 // Verify that "FormsSeen" isn't sent, as there are too few fields. | 178 // Verify that "FormsSeen" isn't sent, as there are too few fields. |
| 179 const IPC::Message* message = render_thread_->sink().GetFirstMessageMatching( | 179 const IPC::Message* message = render_thread_->sink().GetFirstMessageMatching( |
| 180 AutofillHostMsg_FormsSeen::ID); | 180 AutofillHostMsg_FormsSeen::ID); |
| 181 ASSERT_NE(nullptr, message); | 181 ASSERT_NE(nullptr, message); |
| 182 AutofillHostMsg_FormsSeen::Param params; | 182 AutofillHostMsg_FormsSeen::Param params; |
| 183 AutofillHostMsg_FormsSeen::Read(message, ¶ms); | 183 AutofillHostMsg_FormsSeen::Read(message, ¶ms); |
| 184 const std::vector<FormData>& forms = get<0>(params); | 184 const std::vector<FormData>& forms = base::get<0>(params); |
| 185 ASSERT_EQ(0UL, forms.size()); | 185 ASSERT_EQ(0UL, forms.size()); |
| 186 } | 186 } |
| 187 | 187 |
| 188 // Regression test for [ http://crbug.com/346010 ]. | 188 // Regression test for [ http://crbug.com/346010 ]. |
| 189 TEST_F(AutofillRendererTest, DontCrashWhileAssociatingForms) { | 189 TEST_F(AutofillRendererTest, DontCrashWhileAssociatingForms) { |
| 190 LoadHTML("<form id='form'>" | 190 LoadHTML("<form id='form'>" |
| 191 "<foo id='foo'>" | 191 "<foo id='foo'>" |
| 192 "<script id='script'>" | 192 "<script id='script'>" |
| 193 "document.documentElement.appendChild(foo);" | 193 "document.documentElement.appendChild(foo);" |
| 194 "newDoc = document.implementation.createDocument(" | 194 "newDoc = document.implementation.createDocument(" |
| (...skipping 12 matching lines...) Expand all Loading... |
| 207 base::FilePath(FILE_PATH_LITERAL("autofill_noform_dynamic.html"))); | 207 base::FilePath(FILE_PATH_LITERAL("autofill_noform_dynamic.html"))); |
| 208 ASSERT_TRUE(base::ReadFileToString(test_path, &html_data)); | 208 ASSERT_TRUE(base::ReadFileToString(test_path, &html_data)); |
| 209 LoadHTML(html_data.c_str()); | 209 LoadHTML(html_data.c_str()); |
| 210 | 210 |
| 211 // Verify that "FormsSeen" sends the expected number of fields. | 211 // Verify that "FormsSeen" sends the expected number of fields. |
| 212 const IPC::Message* message = render_thread_->sink().GetFirstMessageMatching( | 212 const IPC::Message* message = render_thread_->sink().GetFirstMessageMatching( |
| 213 AutofillHostMsg_FormsSeen::ID); | 213 AutofillHostMsg_FormsSeen::ID); |
| 214 ASSERT_NE(nullptr, message); | 214 ASSERT_NE(nullptr, message); |
| 215 AutofillHostMsg_FormsSeen::Param params; | 215 AutofillHostMsg_FormsSeen::Param params; |
| 216 AutofillHostMsg_FormsSeen::Read(message, ¶ms); | 216 AutofillHostMsg_FormsSeen::Read(message, ¶ms); |
| 217 std::vector<FormData> forms = get<0>(params); | 217 std::vector<FormData> forms = base::get<0>(params); |
| 218 ASSERT_EQ(1UL, forms.size()); | 218 ASSERT_EQ(1UL, forms.size()); |
| 219 ASSERT_EQ(7UL, forms[0].fields.size()); | 219 ASSERT_EQ(7UL, forms[0].fields.size()); |
| 220 | 220 |
| 221 render_thread_->sink().ClearMessages(); | 221 render_thread_->sink().ClearMessages(); |
| 222 | 222 |
| 223 ExecuteJavaScript("AddFields()"); | 223 ExecuteJavaScript("AddFields()"); |
| 224 msg_loop_.RunUntilIdle(); | 224 msg_loop_.RunUntilIdle(); |
| 225 | 225 |
| 226 message = render_thread_->sink().GetFirstMessageMatching( | 226 message = render_thread_->sink().GetFirstMessageMatching( |
| 227 AutofillHostMsg_FormsSeen::ID); | 227 AutofillHostMsg_FormsSeen::ID); |
| 228 ASSERT_NE(nullptr, message); | 228 ASSERT_NE(nullptr, message); |
| 229 AutofillHostMsg_FormsSeen::Read(message, ¶ms); | 229 AutofillHostMsg_FormsSeen::Read(message, ¶ms); |
| 230 forms = get<0>(params); | 230 forms = base::get<0>(params); |
| 231 ASSERT_EQ(1UL, forms.size()); | 231 ASSERT_EQ(1UL, forms.size()); |
| 232 ASSERT_EQ(9UL, forms[0].fields.size()); | 232 ASSERT_EQ(9UL, forms[0].fields.size()); |
| 233 | 233 |
| 234 FormFieldData expected; | 234 FormFieldData expected; |
| 235 | 235 |
| 236 expected.name = ASCIIToUTF16("EMAIL_ADDRESS"); | 236 expected.name = ASCIIToUTF16("EMAIL_ADDRESS"); |
| 237 expected.value.clear(); | 237 expected.value.clear(); |
| 238 expected.form_control_type = "text"; | 238 expected.form_control_type = "text"; |
| 239 expected.max_length = WebInputElement::defaultMaxLength(); | 239 expected.max_length = WebInputElement::defaultMaxLength(); |
| 240 EXPECT_FORM_FIELD_DATA_EQUALS(expected, forms[0].fields[7]); | 240 EXPECT_FORM_FIELD_DATA_EQUALS(expected, forms[0].fields[7]); |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 344 }; | 344 }; |
| 345 | 345 |
| 346 TEST_F(RequestAutocompleteRendererTest, InvokingTwiceOnlyShowsOnce) { | 346 TEST_F(RequestAutocompleteRendererTest, InvokingTwiceOnlyShowsOnce) { |
| 347 // Attempting to show the requestAutocomplete dialog again should be ignored. | 347 // Attempting to show the requestAutocomplete dialog again should be ignored. |
| 348 invoking_frame_->autofillClient()->didRequestAutocomplete(invoking_form()); | 348 invoking_frame_->autofillClient()->didRequestAutocomplete(invoking_form()); |
| 349 EXPECT_FALSE(render_thread_->sink().GetFirstMessageMatching( | 349 EXPECT_FALSE(render_thread_->sink().GetFirstMessageMatching( |
| 350 AutofillHostMsg_RequestAutocomplete::ID)); | 350 AutofillHostMsg_RequestAutocomplete::ID)); |
| 351 } | 351 } |
| 352 | 352 |
| 353 } // namespace autofill | 353 } // namespace autofill |
| OLD | NEW |