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..180f50d06513877fbcf99acb09577c2f619e2dab 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<GURL>& origins) OVERRIDE { |
+ sent_account_creation_forms_.insert( |
+ sent_account_creation_forms_.begin(), origins.begin(), origins.end()); |
+ } |
+ |
const std::vector<bool>& GetSentStates() { |
return sent_states_; |
} |
+ const std::vector<GURL>& 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<GURL> 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,57 @@ 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 = |
Ilya Sherman
2013/09/03 23:58:01
nit: "char *" -> "char*"
zysxqn
2013/09/04 17:26:20
Done.
|
+ "<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]); |
+} |
+ |
TEST_F(IncognitoPasswordGenerationManagerTest, |
UpdatePasswordSyncStateIncognito) { |
// Disable password manager by going incognito, and enable syncing. The |