Commit d5227511 authored by gogerald's avatar gogerald Committed by Commit Bot

[Autofill] Add browser tests for GetElementFormAndFieldData

Bug: 806868
Change-Id: I1325c8eaa46460ff93f2750d9ba600bf7b9fcda8
Reviewed-on: https://chromium-review.googlesource.com/1236923
Commit-Queue: Ganggui Tang <gogerald@chromium.org>
Reviewed-by: default avatarSebastien Seguin-Gagnon <sebsg@chromium.org>
Cr-Commit-Position: refs/heads/master@{#593053}
parent 3eba7fd0
......@@ -140,6 +140,35 @@ class ContentAutofillDriverBrowserTest : public InProcessBrowserTest,
}
}
void GetElementFormAndFieldData(const std::vector<std::string>& selectors,
size_t expected_form_size) {
base::RunLoop run_loop;
ContentAutofillDriverFactory::FromWebContents(web_contents())
->DriverForFrame(web_contents()->GetMainFrame())
->GetAutofillAgent()
->GetElementFormAndFieldData(
selectors,
base::BindOnce(
&ContentAutofillDriverBrowserTest::OnGetElementFormAndFieldData,
base::Unretained(this), run_loop.QuitClosure(),
expected_form_size));
run_loop.Run();
}
void OnGetElementFormAndFieldData(const base::Closure& done_callback,
size_t expected_form_size,
const autofill::FormData& form_data,
const autofill::FormFieldData& form_field) {
done_callback.Run();
if (expected_form_size) {
ASSERT_EQ(form_data.fields.size(), expected_form_size);
ASSERT_FALSE(form_field.label.empty());
} else {
ASSERT_EQ(form_data.fields.size(), expected_form_size);
ASSERT_TRUE(form_field.label.empty());
}
}
protected:
base::Closure web_contents_hidden_callback_;
base::Closure nav_entry_committed_callback_;
......@@ -226,4 +255,31 @@ IN_PROC_BROWSER_TEST_F(ContentAutofillDriverBrowserTest,
nav_entry_committed_callback_.Reset();
}
IN_PROC_BROWSER_TEST_F(ContentAutofillDriverBrowserTest,
GetElementFormAndFieldData) {
ui_test_utils::NavigateToURL(
browser(), embedded_test_server()->GetURL(
"/autofill/autofill_assistant_test_form.html"));
std::vector<std::string> selectors;
selectors.emplace_back("#testformone");
selectors.emplace_back("#NAME_FIRST");
GetElementFormAndFieldData(selectors, /*expected_form_size=*/9u);
selectors.clear();
selectors.emplace_back("#testformtwo");
selectors.emplace_back("#NAME_FIRST");
GetElementFormAndFieldData(selectors, /*expected_form_size=*/7u);
// Multiple corresponding form fields.
selectors.clear();
selectors.emplace_back("#NAME_FIRST");
GetElementFormAndFieldData(selectors, /*expected_form_size=*/0u);
// No corresponding form field.
selectors.clear();
selectors.emplace_back("#whatever");
GetElementFormAndFieldData(selectors, /*expected_form_size=*/0u);
}
} // namespace autofill
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<!-- Autofill generic test form. -->
<html>
<head>
<title>Autofill Test Form</title>
</head>
<body>
<h3>Autofill Test Form</h3>
<form name="testformone" method="post" id="testformone">
<p>
<label for="firstname">First Name:</label> <input type="text" id="NAME_FIRST"><br>
<label for="lastname">Last Name:</label> <input type="text" id="NAME_LAST"><br>
<label for="address">Address:</label> <input type="text" id="ADDRESS_HOME_LINE1"><br>
<label for="city">City:</label> <input type="text" id="ADDRESS_HOME_CITY" ><br>
<label for="state">State:</label> <input type="text" id="ADDRESS_HOME_STATE" ><br>
<label for="zip">Zip:</label> <input type="text" id="ADDRESS_HOME_ZIP" ><br>
<label for="country">Country:</label> <input type="text" id="ADDRESS_HOME_COUNTRY" ><br>
<label for="email">Email:</label> <input type="text" id="EMAIL_ADDRESS"><br>
<label for="phone">Phone:</label> <input type="text" id="PHONE_HOME_WHOLE_NUMBER"><br>
<input type="submit" value="send"> <input type="reset">
</p>
</form>
<form name="testformtwo" method="post" id="testformtwo">
<p>
<label for="firstname">First Name:</label> <input type="text" id="NAME_FIRST"><br>
<label for="lastname">Last Name:</label> <input type="text" id="NAME_LAST"><br>
<label for="address">Address:</label> <input type="text" id="ADDRESS_HOME_LINE1"><br>
<label for="city">City:</label> <input type="text" id="ADDRESS_HOME_CITY" ><br>
<label for="state">State:</label> <input type="text" id="ADDRESS_HOME_STATE" ><br>
<label for="zip">Zip:</label> <input type="text" id="ADDRESS_HOME_ZIP" ><br>
<label for="country">Country:</label> <input type="text" id="ADDRESS_HOME_COUNTRY" ><br>
<input type="submit" value="send"> <input type="reset">
</p>
</form>
</body>
</html>
......@@ -706,8 +706,9 @@ blink::WebElement AutofillAgent::FindUniqueWebElement(
// Query shadow DOM if necessary.
if (elements.size() == 0 && !query_element.ShadowRoot().IsNull()) {
elements = query_element.ShadowRoot().QuerySelectorAll(
blink::WebString::FromUTF8(selectors[i]));
// TODO(806868): Query shadow dom when Autofill is available for forms in
// shadow DOM (crbug.com/746593).
return blink::WebElement();
}
// Return an empty element if there are multiple matching elements.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment