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

Unified Diff: chrome/browser/password_manager/password_generation_manager_unittest.cc

Issue 23432002: Generate passwords only for forms that autofill server marks as account creation forms. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address llya's nits and fix a bug in form structure unit test. Created 7 years, 3 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
Index: chrome/browser/password_manager/password_generation_manager_unittest.cc
diff --git a/chrome/browser/password_manager/password_generation_manager_unittest.cc b/chrome/browser/password_manager/password_generation_manager_unittest.cc
index 22f20509b4193d10dc2fa2f48c55561ca7f752ba..bf81c24d695ff1d9a95c71909e89ea4092a1abf9 100644
--- a/chrome/browser/password_manager/password_generation_manager_unittest.cc
+++ b/chrome/browser/password_manager/password_generation_manager_unittest.cc
@@ -5,6 +5,7 @@
#include <vector>
#include "base/prefs/pref_service.h"
+#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/password_manager/password_generation_manager.h"
#include "chrome/browser/password_manager/password_manager.h"
#include "chrome/browser/password_manager/password_manager_delegate_impl.h"
@@ -13,8 +14,28 @@
#include "chrome/common/pref_names.h"
#include "chrome/test/base/chrome_render_view_host_test_harness.h"
#include "chrome/test/base/testing_profile.h"
+#include "components/autofill/content/browser/autocheckout_page_meta_data.h"
+#include "components/autofill/core/browser/autofill_field.h"
+#include "components/autofill/core/browser/autofill_metrics.h"
+#include "components/autofill/core/browser/form_structure.h"
+#include "components/autofill/core/common/form_data.h"
+#include "components/autofill/core/common/form_field_data.h"
#include "content/public/test/test_browser_thread.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
+
+namespace {
+
+// Unlike the base AutofillMetrics, exposes copy and assignment constructors,
+// which are handy for briefer test code. The AutofillMetrics class is
+// stateless, so this is safe.
+class TestAutofillMetrics : public autofill::AutofillMetrics {
+ public:
+ TestAutofillMetrics() {}
+ virtual ~TestAutofillMetrics() {}
+};
+
+} // anonymous namespace
class TestPasswordGenerationManager : public PasswordGenerationManager {
public:
@@ -27,16 +48,32 @@ class TestPasswordGenerationManager : public PasswordGenerationManager {
sent_states_.push_back(enabled);
}
+ virtual void SendAccountCreationFormsToRenderer(
+ content::RenderViewHost* host,
+ const std::vector<autofill::FormData>& forms) OVERRIDE {
+ sent_account_creation_forms_.insert(
+ sent_account_creation_forms_.begin(), forms.begin(), forms.end());
+ }
+
const std::vector<bool>& GetSentStates() {
return sent_states_;
}
+ const std::vector<autofill::FormData>& GetSentAccountCreationForms() {
+ return sent_account_creation_forms_;
+ }
+
void ClearSentStates() {
sent_states_.clear();
}
+ void ClearSentAccountCreationForms() {
+ sent_account_creation_forms_.clear();
+ }
+
private:
std::vector<bool> sent_states_;
+ std::vector<autofill::FormData> sent_account_creation_forms_;
DISALLOW_COPY_AND_ASSIGN(TestPasswordGenerationManager);
};
@@ -59,6 +96,11 @@ class PasswordGenerationManagerTest : public ChromeRenderViewHostTestHarness {
password_generation_manager_->UpdateState(NULL, new_renderer);
}
+ void DetectAccountCreationForms(
+ const std::vector<autofill::FormStructure*>& forms) {
+ password_generation_manager_->DetectAccountCreationForms(forms);
+ }
+
scoped_ptr<TestPasswordGenerationManager> password_generation_manager_;
};
@@ -180,6 +222,58 @@ TEST_F(PasswordGenerationManagerTest, UpdatePasswordSyncState) {
password_generation_manager_->ClearSentStates();
}
+TEST_F(PasswordGenerationManagerTest, DetectAccountCreationForms) {
+ autofill::FormData login_form;
+ login_form.origin = GURL("http://www.yahoo.com/login/");
+ autofill::FormFieldData username;
+ username.label = ASCIIToUTF16("username");
+ username.name = ASCIIToUTF16("login");
+ username.form_control_type = "text";
+ login_form.fields.push_back(username);
+ autofill::FormFieldData password;
+ password.label = ASCIIToUTF16("password");
+ password.name = ASCIIToUTF16("password");
+ password.form_control_type = "password";
+ login_form.fields.push_back(password);
+ autofill::FormStructure form1(login_form, std::string());
+ std::vector<autofill::FormStructure*> forms;
+ forms.push_back(&form1);
+ autofill::FormData account_creation_form;
+ account_creation_form.origin = GURL("http://accounts.yahoo.com/");
+ account_creation_form.fields.push_back(username);
+ account_creation_form.fields.push_back(password);
+ autofill::FormFieldData confirm_password;
+ confirm_password.label = ASCIIToUTF16("confirm_password");
+ confirm_password.name = ASCIIToUTF16("password");
+ confirm_password.form_control_type = "password";
+ account_creation_form.fields.push_back(confirm_password);
+ autofill::FormStructure form2(account_creation_form, std::string());
+ forms.push_back(&form2);
+
+ // Simulate the server response to set the field types.
+ autofill::AutocheckoutPageMetaData page_meta_data;
+ const char* const kServerResponse =
+ "<autofillqueryresponse>"
+ "<field autofilltype=\"9\" />"
+ "<field autofilltype=\"75\" />"
+ "<field autofilltype=\"9\" />"
+ "<field autofilltype=\"76\" />"
+ "<field autofilltype=\"75\" />"
+ "</autofillqueryresponse>";
+ autofill::FormStructure::ParseQueryResponse(
+ kServerResponse,
+ forms,
+ &page_meta_data,
+ TestAutofillMetrics());
+
+ DetectAccountCreationForms(forms);
+ EXPECT_EQ(1u,
+ password_generation_manager_->GetSentAccountCreationForms().size());
+ EXPECT_EQ(
+ GURL("http://accounts.yahoo.com/"),
+ password_generation_manager_->GetSentAccountCreationForms()[0].origin);
+}
+
TEST_F(IncognitoPasswordGenerationManagerTest,
UpdatePasswordSyncStateIncognito) {
// Disable password manager by going incognito, and enable syncing. The

Powered by Google App Engine
This is Rietveld 408576698