Index: chrome/renderer/autofill/password_generation_manager_browsertest.cc |
diff --git a/chrome/renderer/autofill/password_generation_manager_browsertest.cc b/chrome/renderer/autofill/password_generation_manager_browsertest.cc |
index 86bc1b7b7eb05d71deb172b751ff6f53e66d54da..98eedc6519ff9e2ca3f6ba24ec3055f095597635 100644 |
--- a/chrome/renderer/autofill/password_generation_manager_browsertest.cc |
+++ b/chrome/renderer/autofill/password_generation_manager_browsertest.cc |
@@ -10,6 +10,7 @@ |
#include "chrome/test/base/chrome_render_view_test.h" |
#include "components/autofill/content/renderer/password_generation_manager.h" |
#include "components/autofill/core/common/autofill_messages.h" |
+#include "components/autofill/core/common/form_data.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "third_party/WebKit/public/platform/WebString.h" |
#include "third_party/WebKit/public/web/WebDocument.h" |
@@ -38,6 +39,10 @@ class TestPasswordGenerationManager : public PasswordGenerationManager { |
return messages_.get(); |
} |
+ void ClearMessages() { |
+ messages_.clear(); |
+ } |
+ |
protected: |
virtual bool ShouldAnalyzeDocument(const WebKit::WebDocument& document) const |
OVERRIDE { |
@@ -74,6 +79,7 @@ class PasswordGenerationManagerTest : public ChromeRenderViewTest { |
} |
void SimulateClickOnDecoration(WebKit::WebInputElement* input_element) { |
+ generation_manager_->ClearMessages(); |
WebKit::WebElement decoration = |
input_element->decorationElementFor(generation_manager_.get()); |
decoration.simulateClick(); |
@@ -85,6 +91,11 @@ class PasswordGenerationManagerTest : public ChromeRenderViewTest { |
return decoration.hasNonEmptyBoundingBox(); |
} |
+ void SetPasswordGenerationEnabledMessage(void) { |
+ AutofillMsg_PasswordGenerationEnabled msg(0, true); |
+ generation_manager_->OnMessageReceived(msg); |
+ } |
+ |
void SetNotBlacklistedMessage(const char* form_str) { |
content::PasswordForm form; |
form.origin = |
@@ -93,6 +104,33 @@ class PasswordGenerationManagerTest : public ChromeRenderViewTest { |
generation_manager_->OnMessageReceived(msg); |
} |
+ void SetAccountCreationFormsDetectedMessage(const char* form_str) { |
+ autofill::FormData form; |
+ form.origin = |
+ GURL(base::StringPrintf("data:text/html;charset=utf-8,%s", form_str)); |
+ std::vector<autofill::FormData> forms; |
+ forms.push_back(form); |
+ AutofillMsg_AccountCreationFormsDetected msg(0, forms); |
+ generation_manager_->OnMessageReceived(msg); |
+ } |
+ |
+ void ExpectPasswordGenerationIconShown(const char* element_id, bool shown) { |
+ WebDocument document = GetMainFrame()->document(); |
+ WebElement element = |
+ document.getElementById(WebString::fromUTF8(element_id)); |
+ ASSERT_FALSE(element.isNull()); |
+ WebInputElement target_element = element.to<WebInputElement>(); |
+ if (shown) { |
+ EXPECT_TRUE(DecorationIsVisible(&target_element)); |
+ SimulateClickOnDecoration(&target_element); |
+ EXPECT_EQ(1u, generation_manager_->messages().size()); |
+ EXPECT_EQ(AutofillHostMsg_ShowPasswordGenerationPopup::ID, |
+ generation_manager_->messages()[0]->type()); |
+ } else { |
+ EXPECT_FALSE(DecorationIsVisible(&target_element)); |
+ } |
+ } |
+ |
protected: |
scoped_ptr<TestPasswordGenerationManager> generation_manager_; |
@@ -134,66 +172,42 @@ const char kInvalidActionAccountCreationFormHTML[] = |
"</FORM>"; |
TEST_F(PasswordGenerationManagerTest, DetectionTest) { |
+ // Don't shown the icon for non account creation forms. |
LoadHTML(kSigninFormHTML); |
- |
- WebDocument document = GetMainFrame()->document(); |
- WebElement element = |
- document.getElementById(WebString::fromUTF8("password")); |
- ASSERT_FALSE(element.isNull()); |
- WebInputElement password_element = element.to<WebInputElement>(); |
- EXPECT_FALSE(DecorationIsVisible(&password_element)); |
- |
- LoadHTML(kAccountCreationFormHTML); |
+ ExpectPasswordGenerationIconShown("password", false); |
// We don't show the decoration yet because the feature isn't enabled. |
- document = GetMainFrame()->document(); |
- element = document.getElementById(WebString::fromUTF8("first_password")); |
- ASSERT_FALSE(element.isNull()); |
- WebInputElement first_password_element = element.to<WebInputElement>(); |
- EXPECT_FALSE(DecorationIsVisible(&first_password_element)); |
+ LoadHTML(kAccountCreationFormHTML); |
+ ExpectPasswordGenerationIconShown("first_password", false); |
// Pretend like password generation was enabled. |
- AutofillMsg_PasswordGenerationEnabled msg(0, true); |
- generation_manager_->OnMessageReceived(msg); |
+ SetPasswordGenerationEnabledMessage(); |
+ // Pretend like We have received message indicating site is not blacklisted, |
+ // and we have received message indicating the form is classified as |
+ // ACCOUNT_CREATION_FORM form Autofill server. We should show the icon. |
LoadHTML(kAccountCreationFormHTML); |
- |
- // Pretend like we have received message indicating site is not blacklisted. |
SetNotBlacklistedMessage(kAccountCreationFormHTML); |
- |
- document = GetMainFrame()->document(); |
- element = document.getElementById(WebString::fromUTF8("first_password")); |
- ASSERT_FALSE(element.isNull()); |
- first_password_element = element.to<WebInputElement>(); |
- EXPECT_TRUE(DecorationIsVisible(&first_password_element)); |
- SimulateClickOnDecoration(&first_password_element); |
- EXPECT_EQ(1u, generation_manager_->messages().size()); |
- EXPECT_EQ(AutofillHostMsg_ShowPasswordGenerationPopup::ID, |
- generation_manager_->messages()[0]->type()); |
+ SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML); |
+ ExpectPasswordGenerationIconShown("first_password", true); |
// This doesn't trigger because hidden password fields are ignored. |
LoadHTML(kHiddenPasswordAccountCreationFormHTML); |
- SetNotBlacklistedMessage(kAccountCreationFormHTML); |
- document = GetMainFrame()->document(); |
- element = document.getElementById(WebString::fromUTF8("first_password")); |
- ASSERT_FALSE(element.isNull()); |
- first_password_element = element.to<WebInputElement>(); |
- EXPECT_FALSE(DecorationIsVisible(&first_password_element)); |
+ SetNotBlacklistedMessage(kHiddenPasswordAccountCreationFormHTML); |
+ SetAccountCreationFormsDetectedMessage( |
+ kHiddenPasswordAccountCreationFormHTML); |
+ ExpectPasswordGenerationIconShown("first_password", false); |
// This doesn't trigger because the form action is invalid. |
LoadHTML(kInvalidActionAccountCreationFormHTML); |
- SetNotBlacklistedMessage(kAccountCreationFormHTML); |
- document = GetMainFrame()->document(); |
- element = document.getElementById(WebString::fromUTF8("first_password")); |
- ASSERT_FALSE(element.isNull()); |
- first_password_element = element.to<WebInputElement>(); |
- EXPECT_FALSE(DecorationIsVisible(&first_password_element)); |
+ SetNotBlacklistedMessage(kInvalidActionAccountCreationFormHTML); |
+ SetAccountCreationFormsDetectedMessage(kInvalidActionAccountCreationFormHTML); |
+ ExpectPasswordGenerationIconShown("first_password", false); |
} |
TEST_F(PasswordGenerationManagerTest, FillTest) { |
// Make sure that we are enabled before loading HTML. |
- AutofillMsg_PasswordGenerationEnabled enabled_msg(0, true); |
- generation_manager_->OnMessageReceived(enabled_msg); |
+ SetPasswordGenerationEnabledMessage(); |
LoadHTML(kAccountCreationFormHTML); |
WebDocument document = GetMainFrame()->document(); |
@@ -229,57 +243,53 @@ TEST_F(PasswordGenerationManagerTest, FillTest) { |
TEST_F(PasswordGenerationManagerTest, BlacklistedTest) { |
// Make sure password generation is enabled. |
- AutofillMsg_PasswordGenerationEnabled enabled_msg(0, true); |
- generation_manager_->OnMessageReceived(enabled_msg); |
+ SetPasswordGenerationEnabledMessage(); |
// Did not receive not blacklisted message. Don't show password generation |
// icon. |
LoadHTML(kAccountCreationFormHTML); |
- WebDocument document = GetMainFrame()->document(); |
- WebElement element = |
- document.getElementById(WebString::fromUTF8("first_password")); |
- ASSERT_FALSE(element.isNull()); |
- WebInputElement first_password_element = element.to<WebInputElement>(); |
- EXPECT_FALSE(DecorationIsVisible(&first_password_element)); |
+ SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML); |
+ ExpectPasswordGenerationIconShown("first_password", false); |
// Receive one not blacklisted message for non account creation form. Don't |
// show password generation icon. |
LoadHTML(kAccountCreationFormHTML); |
SetNotBlacklistedMessage(kSigninFormHTML); |
- document = GetMainFrame()->document(); |
- element = document.getElementById(WebString::fromUTF8("first_password")); |
- ASSERT_FALSE(element.isNull()); |
- first_password_element = element.to<WebInputElement>(); |
- EXPECT_FALSE(DecorationIsVisible(&first_password_element)); |
+ SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML); |
+ ExpectPasswordGenerationIconShown("first_password", false); |
// Receive one not blackliste message for account creation form. Show password |
// generation icon. |
LoadHTML(kAccountCreationFormHTML); |
SetNotBlacklistedMessage(kAccountCreationFormHTML); |
- document = GetMainFrame()->document(); |
- element = document.getElementById(WebString::fromUTF8("first_password")); |
- ASSERT_FALSE(element.isNull()); |
- first_password_element = element.to<WebInputElement>(); |
- EXPECT_TRUE(DecorationIsVisible(&first_password_element)); |
- SimulateClickOnDecoration(&first_password_element); |
- EXPECT_EQ(1u, generation_manager_->messages().size()); |
- EXPECT_EQ(AutofillHostMsg_ShowPasswordGenerationPopup::ID, |
- generation_manager_->messages()[0]->type()); |
+ SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML); |
+ ExpectPasswordGenerationIconShown("first_password", true); |
// Receive two not blacklisted messages, one is for account creation form and |
// the other is not. Show password generation icon. |
LoadHTML(kAccountCreationFormHTML); |
SetNotBlacklistedMessage(kAccountCreationFormHTML); |
SetNotBlacklistedMessage(kSigninFormHTML); |
- document = GetMainFrame()->document(); |
- element = document.getElementById(WebString::fromUTF8("first_password")); |
- ASSERT_FALSE(element.isNull()); |
- first_password_element = element.to<WebInputElement>(); |
- EXPECT_TRUE(DecorationIsVisible(&first_password_element)); |
- SimulateClickOnDecoration(&first_password_element); |
- EXPECT_EQ(2u, generation_manager_->messages().size()); |
- EXPECT_EQ(AutofillHostMsg_ShowPasswordGenerationPopup::ID, |
- generation_manager_->messages()[1]->type()); |
+ SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML); |
+ ExpectPasswordGenerationIconShown("first_password", true); |
+} |
+ |
+TEST_F(PasswordGenerationManagerTest, AccountCreationFormsDetectedTest) { |
+ // Make sure password generation is enabled. |
+ SetPasswordGenerationEnabledMessage(); |
+ |
+ // Did not receive account creation forms detected messege. Don't show |
+ // password generation icon. |
+ LoadHTML(kAccountCreationFormHTML); |
+ SetNotBlacklistedMessage(kAccountCreationFormHTML); |
+ ExpectPasswordGenerationIconShown("first_password", false); |
+ |
+ // Receive the account creation forms detected message. Show password |
+ // generation icon. |
+ LoadHTML(kAccountCreationFormHTML); |
+ SetNotBlacklistedMessage(kAccountCreationFormHTML); |
+ SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML); |
+ ExpectPasswordGenerationIconShown("first_password", true); |
} |
} // namespace autofill |