Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3289)

Unified Diff: chrome/renderer/autofill/password_generation_agent_browsertest.cc

Issue 151503006: Re-land r248110 with ASAN error fixed. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Punctuation Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/chrome_tests_unit.gypi ('k') | chrome/renderer/chrome_content_renderer_client.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 b39c06e96d8c08b254c2a59d05928a908226f8c1..5e24681838981707bb71daa80a6b6ec1ee25aca7 100644
--- a/chrome/renderer/autofill/password_generation_agent_browsertest.cc
+++ b/chrome/renderer/autofill/password_generation_agent_browsertest.cc
@@ -5,11 +5,11 @@
#include <string.h>
#include "base/memory/scoped_ptr.h"
-#include "base/memory/scoped_vector.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/test/base/chrome_render_view_test.h"
#include "components/autofill/content/common/autofill_messages.h"
-#include "components/autofill/content/renderer/password_generation_agent.h"
+#include "components/autofill/content/renderer/autofill_agent.h"
+#include "components/autofill/content/renderer/test_password_generation_agent.h"
#include "components/autofill/core/common/form_data.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/WebKit/public/platform/WebString.h"
@@ -24,79 +24,21 @@ using blink::WebString;
namespace autofill {
-class TestPasswordGenerationAgent : public PasswordGenerationAgent {
- public:
- explicit TestPasswordGenerationAgent(content::RenderView* view)
- : PasswordGenerationAgent(view) {}
- virtual ~TestPasswordGenerationAgent() {}
-
- // Make this public
- virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE {
- return PasswordGenerationAgent::OnMessageReceived(message);
- }
-
- const std::vector<IPC::Message*>& messages() {
- return messages_.get();
- }
-
- void ClearMessages() {
- messages_.clear();
- }
-
- protected:
- virtual bool ShouldAnalyzeDocument(const blink::WebDocument& document) const
- OVERRIDE {
- return true;
- }
-
- virtual bool Send(IPC::Message* message) OVERRIDE {
- messages_.push_back(message);
- return true;
- }
-
- private:
- ScopedVector<IPC::Message> messages_;
-
- DISALLOW_COPY_AND_ASSIGN(TestPasswordGenerationAgent);
-};
-
class PasswordGenerationAgentTest : public ChromeRenderViewTest {
public:
PasswordGenerationAgentTest() {}
- virtual void SetUp() {
- // We don't actually create a PasswordGenerationAgent during
- // ChromeRenderViewTest::SetUp because it's behind a flag. Since we want
- // to use a test manager anyway, we just create our own.
- ChromeRenderViewTest::SetUp();
- generation_manager_.reset(new TestPasswordGenerationAgent(view_));
- }
-
virtual void TearDown() {
LoadHTML("");
- generation_manager_.reset();
ChromeRenderViewTest::TearDown();
}
- void SimulateClickOnDecoration(blink::WebInputElement* input_element) {
- generation_manager_->ClearMessages();
- blink::WebElement decoration =
- input_element->decorationElementFor(generation_manager_.get());
- decoration.simulateClick();
- }
-
- bool DecorationIsVisible(blink::WebInputElement* input_element) {
- blink::WebElement decoration =
- input_element->decorationElementFor(generation_manager_.get());
- return decoration.hasNonEmptyBoundingBox();
- }
-
void SetNotBlacklistedMessage(const char* form_str) {
autofill::PasswordForm form;
form.origin =
GURL(base::StringPrintf("data:text/html;charset=utf-8,%s", form_str));
AutofillMsg_FormNotBlacklisted msg(0, form);
- generation_manager_->OnMessageReceived(msg);
+ password_generation_->OnMessageReceived(msg);
}
void SetAccountCreationFormsDetectedMessage(const char* form_str) {
@@ -106,29 +48,29 @@ class PasswordGenerationAgentTest : public ChromeRenderViewTest {
std::vector<autofill::FormData> forms;
forms.push_back(form);
AutofillMsg_AccountCreationFormsDetected msg(0, forms);
- generation_manager_->OnMessageReceived(msg);
+ password_generation_->OnMessageReceived(msg);
}
- void ExpectPasswordGenerationIconShown(const char* element_id, bool shown) {
+ void ExpectPasswordGenerationAvailable(const char* element_id,
+ bool available) {
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());
+ ExecuteJavaScript(
+ base::StringPrintf("document.getElementById('%s').focus();",
+ element_id).c_str());
+ if (available) {
+ ASSERT_EQ(1u, password_generation_->messages().size());
EXPECT_EQ(AutofillHostMsg_ShowPasswordGenerationPopup::ID,
- generation_manager_->messages()[0]->type());
+ password_generation_->messages()[0]->type());
} else {
- EXPECT_FALSE(DecorationIsVisible(&target_element));
+ EXPECT_EQ(0u, password_generation_->messages().size());
}
+ password_generation_->clear_messages();
}
- protected:
- scoped_ptr<TestPasswordGenerationAgent> generation_manager_;
-
private:
DISALLOW_COPY_AND_ASSIGN(PasswordGenerationAgentTest);
};
@@ -169,11 +111,11 @@ const char kInvalidActionAccountCreationFormHTML[] =
TEST_F(PasswordGenerationAgentTest, DetectionTest) {
// Don't shown the icon for non account creation forms.
LoadHTML(kSigninFormHTML);
- ExpectPasswordGenerationIconShown("password", false);
+ ExpectPasswordGenerationAvailable("password", false);
// We don't show the decoration yet because the feature isn't enabled.
LoadHTML(kAccountCreationFormHTML);
- ExpectPasswordGenerationIconShown("first_password", false);
+ ExpectPasswordGenerationAvailable("first_password", false);
// Pretend like We have received message indicating site is not blacklisted,
// and we have received message indicating the form is classified as
@@ -181,20 +123,20 @@ TEST_F(PasswordGenerationAgentTest, DetectionTest) {
LoadHTML(kAccountCreationFormHTML);
SetNotBlacklistedMessage(kAccountCreationFormHTML);
SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML);
- ExpectPasswordGenerationIconShown("first_password", true);
+ ExpectPasswordGenerationAvailable("first_password", true);
// This doesn't trigger because hidden password fields are ignored.
LoadHTML(kHiddenPasswordAccountCreationFormHTML);
SetNotBlacklistedMessage(kHiddenPasswordAccountCreationFormHTML);
SetAccountCreationFormsDetectedMessage(
kHiddenPasswordAccountCreationFormHTML);
- ExpectPasswordGenerationIconShown("first_password", false);
+ ExpectPasswordGenerationAvailable("first_password", false);
// This doesn't trigger because the form action is invalid.
LoadHTML(kInvalidActionAccountCreationFormHTML);
SetNotBlacklistedMessage(kInvalidActionAccountCreationFormHTML);
SetAccountCreationFormsDetectedMessage(kInvalidActionAccountCreationFormHTML);
- ExpectPasswordGenerationIconShown("first_password", false);
+ ExpectPasswordGenerationAvailable("first_password", false);
}
TEST_F(PasswordGenerationAgentTest, FillTest) {
@@ -216,7 +158,7 @@ TEST_F(PasswordGenerationAgentTest, FillTest) {
base::string16 password = base::ASCIIToUTF16("random_password");
AutofillMsg_GeneratedPasswordAccepted msg(0, password);
- generation_manager_->OnMessageReceived(msg);
+ password_generation_->OnMessageReceived(msg);
// Password fields are filled out and set as being autofilled.
EXPECT_EQ(password, first_password_element.value());
@@ -232,26 +174,62 @@ TEST_F(PasswordGenerationAgentTest, FillTest) {
EXPECT_EQ(element, document.focusedNode());
}
+TEST_F(PasswordGenerationAgentTest, EditingTest) {
+ LoadHTML(kAccountCreationFormHTML);
+ SetNotBlacklistedMessage(kAccountCreationFormHTML);
+ SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML);
+
+ WebDocument document = GetMainFrame()->document();
+ WebElement element =
+ document.getElementById(WebString::fromUTF8("first_password"));
+ ASSERT_FALSE(element.isNull());
+ WebInputElement first_password_element = element.to<WebInputElement>();
+ element = document.getElementById(WebString::fromUTF8("second_password"));
+ ASSERT_FALSE(element.isNull());
+ WebInputElement second_password_element = element.to<WebInputElement>();
+
+ base::string16 password = base::ASCIIToUTF16("random_password");
+ AutofillMsg_GeneratedPasswordAccepted msg(0, password);
+ password_generation_->OnMessageReceived(msg);
+
+ // Passwords start out the same.
+ EXPECT_EQ(password, first_password_element.value());
+ EXPECT_EQ(password, second_password_element.value());
+
+ // After editing the first field they are still the same.
+ base::string16 edited_password = base::ASCIIToUTF16("edited_password");
+ first_password_element.setValue(edited_password);
+ // 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();
+
+ EXPECT_EQ(edited_password, first_password_element.value());
+ EXPECT_EQ(edited_password, second_password_element.value());
+}
+
TEST_F(PasswordGenerationAgentTest, BlacklistedTest) {
// Did not receive not blacklisted message. Don't show password generation
// icon.
LoadHTML(kAccountCreationFormHTML);
SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML);
- ExpectPasswordGenerationIconShown("first_password", false);
+ ExpectPasswordGenerationAvailable("first_password", false);
// Receive one not blacklisted message for non account creation form. Don't
// show password generation icon.
LoadHTML(kAccountCreationFormHTML);
SetNotBlacklistedMessage(kSigninFormHTML);
SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML);
- ExpectPasswordGenerationIconShown("first_password", false);
+ ExpectPasswordGenerationAvailable("first_password", false);
// Receive one not blackliste message for account creation form. Show password
// generation icon.
LoadHTML(kAccountCreationFormHTML);
SetNotBlacklistedMessage(kAccountCreationFormHTML);
SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML);
- ExpectPasswordGenerationIconShown("first_password", true);
+ ExpectPasswordGenerationAvailable("first_password", true);
// Receive two not blacklisted messages, one is for account creation form and
// the other is not. Show password generation icon.
@@ -259,7 +237,7 @@ TEST_F(PasswordGenerationAgentTest, BlacklistedTest) {
SetNotBlacklistedMessage(kAccountCreationFormHTML);
SetNotBlacklistedMessage(kSigninFormHTML);
SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML);
- ExpectPasswordGenerationIconShown("first_password", true);
+ ExpectPasswordGenerationAvailable("first_password", true);
}
TEST_F(PasswordGenerationAgentTest, AccountCreationFormsDetectedTest) {
@@ -267,14 +245,14 @@ TEST_F(PasswordGenerationAgentTest, AccountCreationFormsDetectedTest) {
// password generation icon.
LoadHTML(kAccountCreationFormHTML);
SetNotBlacklistedMessage(kAccountCreationFormHTML);
- ExpectPasswordGenerationIconShown("first_password", false);
+ ExpectPasswordGenerationAvailable("first_password", false);
// Receive the account creation forms detected message. Show password
// generation icon.
LoadHTML(kAccountCreationFormHTML);
SetNotBlacklistedMessage(kAccountCreationFormHTML);
SetAccountCreationFormsDetectedMessage(kAccountCreationFormHTML);
- ExpectPasswordGenerationIconShown("first_password", true);
+ ExpectPasswordGenerationAvailable("first_password", true);
}
} // namespace autofill
« no previous file with comments | « chrome/chrome_tests_unit.gypi ('k') | chrome/renderer/chrome_content_renderer_client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698