Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <tuple> | 5 #include <tuple> |
| 6 | 6 |
| 7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
| 8 #include "base/time/time.h" | 8 #include "base/time/time.h" |
| 9 #include "build/build_config.h" | 9 #include "build/build_config.h" |
| 10 #include "chrome/test/base/chrome_render_view_test.h" | 10 #include "chrome/test/base/chrome_render_view_test.h" |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 42 AutofillHostMsg_WillSubmitForm::ID); | 42 AutofillHostMsg_WillSubmitForm::ID); |
| 43 const IPC::Message* submitted_message = | 43 const IPC::Message* submitted_message = |
| 44 render_thread->sink().GetFirstMessageMatching( | 44 render_thread->sink().GetFirstMessageMatching( |
| 45 AutofillHostMsg_FormSubmitted::ID); | 45 AutofillHostMsg_FormSubmitted::ID); |
| 46 ASSERT_TRUE(will_submit_message != NULL); | 46 ASSERT_TRUE(will_submit_message != NULL); |
| 47 ASSERT_EQ(expect_submitted_message, submitted_message != NULL); | 47 ASSERT_EQ(expect_submitted_message, submitted_message != NULL); |
| 48 | 48 |
| 49 // The tuple also includes a timestamp, which is ignored. | 49 // The tuple also includes a timestamp, which is ignored. |
| 50 std::tuple<FormData, base::TimeTicks> will_submit_forms; | 50 std::tuple<FormData, base::TimeTicks> will_submit_forms; |
| 51 AutofillHostMsg_WillSubmitForm::Read(will_submit_message, &will_submit_forms); | 51 AutofillHostMsg_WillSubmitForm::Read(will_submit_message, &will_submit_forms); |
| 52 ASSERT_EQ(2U, std::get<0>(will_submit_forms).fields.size()); | 52 ASSERT_LE(2U, std::get<0>(will_submit_forms).fields.size()); |
| 53 | 53 |
| 54 FormFieldData& will_submit_form_field = | 54 FormFieldData& will_submit_form_field = |
| 55 std::get<0>(will_submit_forms).fields[0]; | 55 std::get<0>(will_submit_forms).fields[0]; |
| 56 EXPECT_EQ(WebString("fname"), will_submit_form_field.name); | 56 EXPECT_EQ(WebString("fname"), will_submit_form_field.name); |
| 57 EXPECT_EQ(WebString(base::UTF8ToUTF16(fname)), will_submit_form_field.value); | 57 EXPECT_EQ(WebString(base::UTF8ToUTF16(fname)), will_submit_form_field.value); |
| 58 will_submit_form_field = std::get<0>(will_submit_forms).fields[1]; | 58 will_submit_form_field = std::get<0>(will_submit_forms).fields[1]; |
| 59 EXPECT_EQ(WebString("lname"), will_submit_form_field.name); | 59 EXPECT_EQ(WebString("lname"), will_submit_form_field.name); |
| 60 EXPECT_EQ(WebString(base::UTF8ToUTF16(lname)), will_submit_form_field.value); | 60 EXPECT_EQ(WebString(base::UTF8ToUTF16(lname)), will_submit_form_field.value); |
| 61 | 61 |
| 62 if (expect_submitted_message) { | 62 if (expect_submitted_message) { |
| 63 std::tuple<FormData> submitted_forms; | 63 std::tuple<FormData> submitted_forms; |
| 64 AutofillHostMsg_FormSubmitted::Read(submitted_message, &submitted_forms); | 64 AutofillHostMsg_FormSubmitted::Read(submitted_message, &submitted_forms); |
| 65 ASSERT_EQ(2U, std::get<0>(submitted_forms).fields.size()); | 65 ASSERT_LE(2U, std::get<0>(submitted_forms).fields.size()); |
|
Mathieu
2016/06/21 18:04:07
wouldn't this pass if there were 0 messages detect
tmartino
2016/06/21 23:38:30
You're reading it backwards...I did too the first
| |
| 66 | 66 |
| 67 FormFieldData& submitted_field = std::get<0>(submitted_forms).fields[0]; | 67 FormFieldData& submitted_field = std::get<0>(submitted_forms).fields[0]; |
| 68 EXPECT_EQ(WebString("fname"), submitted_field.name); | 68 EXPECT_EQ(WebString("fname"), submitted_field.name); |
| 69 EXPECT_EQ(WebString(base::UTF8ToUTF16(fname)), submitted_field.value); | 69 EXPECT_EQ(WebString(base::UTF8ToUTF16(fname)), submitted_field.value); |
| 70 submitted_field = std::get<0>(submitted_forms).fields[1]; | 70 submitted_field = std::get<0>(submitted_forms).fields[1]; |
| 71 EXPECT_EQ(WebString("lname"), submitted_field.name); | 71 EXPECT_EQ(WebString("lname"), submitted_field.name); |
| 72 EXPECT_EQ(WebString(base::UTF8ToUTF16(lname)), submitted_field.value); | 72 EXPECT_EQ(WebString(base::UTF8ToUTF16(lname)), submitted_field.value); |
| 73 } | 73 } |
| 74 } | 74 } |
| 75 | 75 |
| (...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 383 // Form still visible. | 383 // Form still visible. |
| 384 | 384 |
| 385 // Simulate an Ajax request completing. | 385 // Simulate an Ajax request completing. |
| 386 static_cast<blink::WebAutofillClient*>(autofill_agent_)->ajaxSucceeded(); | 386 static_cast<blink::WebAutofillClient*>(autofill_agent_)->ajaxSucceeded(); |
| 387 ProcessPendingMessages(); | 387 ProcessPendingMessages(); |
| 388 | 388 |
| 389 // No submission messages sent. | 389 // No submission messages sent. |
| 390 VerifyNoSubmitMessagesReceived(render_thread_.get()); | 390 VerifyNoSubmitMessagesReceived(render_thread_.get()); |
| 391 } | 391 } |
| 392 | 392 |
| 393 // Tests that completing an Ajax request without a form present will still | |
| 394 // trigger submission, if all the inputs the user has modified disappear. | |
| 395 TEST_F(FormAutocompleteTest, AjaxSucceeded_FormlessElements) { | |
| 396 // Load a "form." Note that kRequiredFieldsForUpload fields are required | |
| 397 // for the formless logic to trigger, so we add a throwaway third field. | |
| 398 LoadHTML( | |
| 399 "<head><title>Checkout</title></head>" | |
| 400 "<input name='fname' id='fname'/>" | |
| 401 "<input name='lname' value='Puckett'/>" | |
| 402 "<input name='number' value='34'/>"); | |
| 403 | |
| 404 // Simulate user input. | |
| 405 WebDocument document = GetMainFrame()->document(); | |
| 406 WebElement element = document.getElementById(WebString::fromUTF8("fname")); | |
| 407 ASSERT_FALSE(element.isNull()); | |
| 408 WebInputElement fname_element = element.to<WebInputElement>(); | |
| 409 SimulateUserInputChangeForElement(&fname_element, std::string("Kirby")); | |
| 410 | |
| 411 // Remove element from view. | |
| 412 ExecuteJavaScriptForTests( | |
| 413 "var element = document.getElementById('fname');" | |
| 414 "element.style.display = 'none';"); | |
| 415 | |
| 416 // Simulate AJAX request. | |
| 417 static_cast<blink::WebAutofillClient*>(autofill_agent_)->ajaxSucceeded(); | |
| 418 ProcessPendingMessages(); | |
| 419 | |
| 420 VerifyReceivedRendererMessages(render_thread_.get(), "Kirby", "Puckett", | |
| 421 /* expect_submitted_message = */ true); | |
| 422 } | |
| 423 | |
| 393 // Test that a FocusNoLongerOnForm message is sent if focus goes from an | 424 // Test that a FocusNoLongerOnForm message is sent if focus goes from an |
| 394 // interacted form to an element outside the form. | 425 // interacted form to an element outside the form. |
| 395 TEST_F(FormAutocompleteTest, | 426 TEST_F(FormAutocompleteTest, |
| 396 InteractedFormNoLongerFocused_FocusNoLongerOnForm) { | 427 InteractedFormNoLongerFocused_FocusNoLongerOnForm) { |
| 397 // Load a form. | 428 // Load a form. |
| 398 LoadHTML( | 429 LoadHTML( |
| 399 "<html><input type='text' id='different'/>" | 430 "<html><input type='text' id='different'/>" |
| 400 "<form id='myForm' action='http://example.com/blade.php'>" | 431 "<form id='myForm' action='http://example.com/blade.php'>" |
| 401 "<input name='fname' id='fname' value='Bob'/>" | 432 "<input name='fname' id='fname' value='Bob'/>" |
| 402 "<input name='lname' value='Deckard'/><input type=submit></form></html>"); | 433 "<input name='lname' value='Deckard'/><input type=submit></form></html>"); |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 507 | 538 |
| 508 // Submit the form. | 539 // Submit the form. |
| 509 ExecuteJavaScriptForTests("document.getElementById('myForm').submit();"); | 540 ExecuteJavaScriptForTests("document.getElementById('myForm').submit();"); |
| 510 ProcessPendingMessages(); | 541 ProcessPendingMessages(); |
| 511 | 542 |
| 512 VerifyReceivedRendererMessages(render_thread_.get(), "Rick", "Deckard", | 543 VerifyReceivedRendererMessages(render_thread_.get(), "Rick", "Deckard", |
| 513 true /* expect_submitted_message */); | 544 true /* expect_submitted_message */); |
| 514 } | 545 } |
| 515 | 546 |
| 516 } // namespace autofill | 547 } // namespace autofill |
| OLD | NEW |