diff options
author | dgwallinga@chromium.org <dgwallinga@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-30 21:33:08 +0000 |
---|---|---|
committer | dgwallinga@chromium.org <dgwallinga@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-30 21:33:08 +0000 |
commit | 17b6be77f10220c35d5eda624a8d4570ea4bdfbc (patch) | |
tree | 3507ab64be5f535faa677529f80aab9195a7256b /chrome/renderer | |
parent | e7bd97ddcf62efc9f737c537cd0e92f1712d400f (diff) | |
download | chromium_src-17b6be77f10220c35d5eda624a8d4570ea4bdfbc.zip chromium_src-17b6be77f10220c35d5eda624a8d4570ea4bdfbc.tar.gz chromium_src-17b6be77f10220c35d5eda624a8d4570ea4bdfbc.tar.bz2 |
Requery the autofill server when forms and input fields are dynamically added.
BUG=224802
Review URL: https://chromiumcodereview.appspot.com/13264002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@197479 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r-- | chrome/renderer/autofill/autofill_renderer_browsertest.cc | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/chrome/renderer/autofill/autofill_renderer_browsertest.cc b/chrome/renderer/autofill/autofill_renderer_browsertest.cc index c09c4c2..c2b57b2 100644 --- a/chrome/renderer/autofill/autofill_renderer_browsertest.cc +++ b/chrome/renderer/autofill/autofill_renderer_browsertest.cc @@ -125,6 +125,61 @@ TEST_F(ChromeRenderViewTest, SendForms) { EXPECT_FORM_FIELD_DATA_EQUALS(expected, form2.fields[2]); } +TEST_F(ChromeRenderViewTest, SendDynamicForms) { + // Don't want any delay for form state sync changes. This will still post a + // message so updates will get coalesced, but as soon as we spin the message + // loop, it will generate an update. + SendContentStateImmediately(); + + LoadHTML("<form method=\"POST\" id=\"testform\">" + " <input type=\"text\" id=\"firstname\"/>" + " <input type=\"text\" id=\"middlename\"/>" + " <input type=\"text\" id=\"lastname\" autoComplete=\"off\"/>" + " <input type=\"hidden\" id=\"email\"/>" + " <select id=\"state\"/>" + " <option>?</option>" + " <option>California</option>" + " <option>Texas</option>" + " </select>" + "</form>"); + + // Verify that "FormsSeen" sends the expected number of fields. + const IPC::Message* message = render_thread_->sink().GetFirstMessageMatching( + AutofillHostMsg_FormsSeen::ID); + ASSERT_NE(static_cast<IPC::Message*>(NULL), message); + AutofillHostMsg_FormsSeen::Param params; + AutofillHostMsg_FormsSeen::Read(message, ¶ms); + const std::vector<FormData>& forms = params.a; + ASSERT_EQ(1UL, forms.size()); + ASSERT_EQ(4UL, forms[0].fields.size()); + + autofill_agent_->OnAutocheckoutSupported(); + render_thread_->sink().ClearMessages(); + ExecuteJavaScript("var newInput=document.createElement(\"input\");" + "newInput.setAttribute(\"type\",\"text\");" + "newInput.setAttribute(\"id\", \"telephone\");" + "document.getElementById(\"testform\")" + ".appendChild(newInput);"); + msg_loop_.RunUntilIdle(); + + // Verify that FormsSeen is present with the new field. + const IPC::Message* message2 = render_thread_->sink().GetFirstMessageMatching( + AutofillHostMsg_FormsSeen::ID); + ASSERT_NE(static_cast<IPC::Message*>(NULL), message2); + AutofillHostMsg_FormsSeen::Read(message2, ¶ms); + const std::vector<FormData>& new_forms = params.a; + ASSERT_EQ(1UL, new_forms.size()); + ASSERT_EQ(5UL, new_forms[0].fields.size()); + + FormFieldData expected; + + expected.name = ASCIIToUTF16("telephone"); + expected.value = string16(); + expected.form_control_type = "text"; + expected.max_length = WebInputElement::defaultMaxLength(); + EXPECT_FORM_FIELD_DATA_EQUALS(expected, forms[0].fields[4]); +} + TEST_F(ChromeRenderViewTest, FillFormElement) { // Don't want any delay for form state sync changes. This will still post a // message so updates will get coalesced, but as soon as we spin the message |