Chromium Code Reviews| 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 |