| Index: chrome/renderer/autofill/password_generation_agent_browsertest.cc
|
| diff --git a/chrome/renderer/autofill/password_generation_agent_browsertest.cc b/chrome/renderer/autofill/password_generation_agent_browsertest.cc
|
| index 35eae491ecb4ef11908e0757102af02f032b30b4..60bdaa3efa8a9c77e86dc2d7997968038f342b55 100644
|
| --- a/chrome/renderer/autofill/password_generation_agent_browsertest.cc
|
| +++ b/chrome/renderer/autofill/password_generation_agent_browsertest.cc
|
| @@ -58,7 +58,6 @@ class PasswordGenerationAgentTest : public ChromeRenderViewTest {
|
| WebElement element =
|
| document.getElementById(WebString::fromUTF8(element_id));
|
| ASSERT_FALSE(element.isNull());
|
| - WebInputElement target_element = element.to<WebInputElement>();
|
| ExecuteJavaScript(
|
| base::StringPrintf("document.getElementById('%s').focus();",
|
| element_id).c_str());
|
| @@ -256,4 +255,79 @@ TEST_F(PasswordGenerationAgentTest, AccountCreationFormsDetectedTest) {
|
| ExpectPasswordGenerationAvailable("first_password", true);
|
| }
|
|
|
| +TEST_F(PasswordGenerationAgentTest, MaximumOfferSize) {
|
| + LoadHTML(kAccountCreationFormHTML);
|
| + SetNotBlacklistedMessage(kAccountCreationFormHTML);
|
| + SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML);
|
| + ExpectPasswordGenerationAvailable("first_password", true);
|
| +
|
| + WebDocument document = GetMainFrame()->document();
|
| + WebElement element =
|
| + document.getElementById(WebString::fromUTF8("first_password"));
|
| + ASSERT_FALSE(element.isNull());
|
| + WebInputElement first_password_element = element.to<WebInputElement>();
|
| +
|
| + // Make a password just under maximum offer size.
|
| + first_password_element.setValue(
|
| + base::ASCIIToUTF16(
|
| + std::string(password_generation_->kMaximumOfferSize - 1, 'a')));
|
| + // Cast to WebAutofillClient where textFieldDidChange() is public.
|
| + static_cast<blink::WebAutofillClient*>(autofill_agent_)->textFieldDidChange(
|
| + first_password_element);
|
| + // textFieldDidChange posts a task, so we need to wait until it's been
|
| + // processed.
|
| + base::MessageLoop::current()->RunUntilIdle();
|
| + // There should now be a message to show the UI.
|
| + ASSERT_EQ(1u, password_generation_->messages().size());
|
| + EXPECT_EQ(AutofillHostMsg_ShowPasswordGenerationPopup::ID,
|
| + password_generation_->messages()[0]->type());
|
| + password_generation_->clear_messages();
|
| +
|
| + // Simulate a user typing a password just over maximum offer size.
|
| + first_password_element.setValue(
|
| + base::ASCIIToUTF16(
|
| + std::string(password_generation_->kMaximumOfferSize + 1, 'a')));
|
| + // Cast to WebAutofillClient where textFieldDidChange() is public.
|
| + static_cast<blink::WebAutofillClient*>(autofill_agent_)->textFieldDidChange(
|
| + first_password_element);
|
| + // textFieldDidChange posts a task, so we need to wait until it's been
|
| + // processed.
|
| + base::MessageLoop::current()->RunUntilIdle();
|
| + // There should now be a message to hide the UI.
|
| + ASSERT_EQ(1u, password_generation_->messages().size());
|
| + EXPECT_EQ(AutofillHostMsg_HidePasswordGenerationPopup::ID,
|
| + password_generation_->messages()[0]->type());
|
| + password_generation_->clear_messages();
|
| +
|
| + // Simulate the user deleting characters. The generation popup should be shown
|
| + // again.
|
| + first_password_element.setValue(
|
| + base::ASCIIToUTF16(
|
| + std::string(password_generation_->kMaximumOfferSize, 'a')));
|
| + // Cast to WebAutofillClient where textFieldDidChange() is public.
|
| + static_cast<blink::WebAutofillClient*>(autofill_agent_)->textFieldDidChange(
|
| + first_password_element);
|
| + // textFieldDidChange posts a task, so we need to wait until it's been
|
| + // processed.
|
| + base::MessageLoop::current()->RunUntilIdle();
|
| + // There should now be a message to show the UI.
|
| + ASSERT_EQ(1u, password_generation_->messages().size());
|
| + EXPECT_EQ(AutofillHostMsg_ShowPasswordGenerationPopup::ID,
|
| + password_generation_->messages()[0]->type());
|
| + password_generation_->clear_messages();
|
| +
|
| + // Change focus. Bubble should be hidden, but that is handled by AutofilAgent,
|
| + // so no messages are sent.
|
| + ExecuteJavaScript("document.getElementById('username').focus();");
|
| + EXPECT_EQ(0u, password_generation_->messages().size());
|
| + password_generation_->clear_messages();
|
| +
|
| + // Focusing the password field will bring up the generation UI again.
|
| + ExecuteJavaScript("document.getElementById('first_password').focus();");
|
| + EXPECT_EQ(1u, password_generation_->messages().size());
|
| + EXPECT_EQ(AutofillHostMsg_ShowPasswordGenerationPopup::ID,
|
| + password_generation_->messages()[0]->type());
|
| + password_generation_->clear_messages();
|
| +}
|
| +
|
| } // namespace autofill
|
|
|