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

Unified Diff: chrome/browser/ui/passwords/password_manager_presenter_unittest.cc

Issue 1589483002: [Password Manager] Implements entries sorting and duplicates omitting on chrome://settings/passwords (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Mistype in a comment Created 4 years, 9 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/browser/ui/passwords/password_manager_presenter.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/passwords/password_manager_presenter_unittest.cc
diff --git a/chrome/browser/ui/passwords/password_manager_presenter_unittest.cc b/chrome/browser/ui/passwords/password_manager_presenter_unittest.cc
index e8a82078f5262e6d872948d1874f9405ebc8d778..bde87b03271340ffd31b0ce5516cd2fc8a8cab02 100644
--- a/chrome/browser/ui/passwords/password_manager_presenter_unittest.cc
+++ b/chrome/browser/ui/passwords/password_manager_presenter_unittest.cc
@@ -23,6 +23,18 @@ using base::ASCIIToUTF16;
using testing::Eq;
using testing::Property;
+namespace {
+
+struct SortEntry {
+ const char* const origin;
+ const char* const username;
+ const char* const password;
+ const char* const affiliated_web_realm;
+ const int expected_position;
+};
+
+} // namespace
+
class MockPasswordUIView : public PasswordUIView {
public:
explicit MockPasswordUIView(Profile* profile)
@@ -75,6 +87,9 @@ class PasswordManagerPresenterTest : public testing::Test {
void AddPasswordException(const GURL& origin);
void UpdateLists();
MockPasswordUIView* GetUIController() { return mock_controller_.get(); }
+ void SortAndCheckPositions(const SortEntry test_entries[],
+ size_t number_of_entries,
+ bool username_and_password_in_key);
private:
content::TestBrowserThreadBundle thread_bundle_;
@@ -110,6 +125,53 @@ void PasswordManagerPresenterTest::UpdateLists() {
mock_controller_->GetPasswordManagerPresenter()->SetPasswordExceptionList();
}
+void PasswordManagerPresenterTest::SortAndCheckPositions(
+ const SortEntry test_entries[],
+ size_t number_of_entries,
+ bool username_and_password_in_key) {
+ std::vector<scoped_ptr<autofill::PasswordForm>> list;
+ size_t expected_number_of_unique_entries = 0;
+ for (size_t i = 0; i < number_of_entries; i++) {
+ const SortEntry& entry = test_entries[i];
+ scoped_ptr<autofill::PasswordForm> form(new autofill::PasswordForm());
+ form->signon_realm = entry.origin;
+ form->origin = GURL(base::ASCIIToUTF16(entry.origin));
+ if (username_and_password_in_key) {
+ form->username_value = base::ASCIIToUTF16(entry.username);
+ form->password_value = base::ASCIIToUTF16(entry.password);
+ }
+ if (entry.affiliated_web_realm)
+ form->affiliated_web_realm = entry.affiliated_web_realm;
+ list.push_back(std::move(form));
+ if (entry.expected_position >= 0)
+ expected_number_of_unique_entries++;
+ }
+
+ DuplicatesMap duplicates;
+ std::string languages;
+ mock_controller_->GetPasswordManagerPresenter()->SortEntriesAndHideDuplicates(
+ languages, &list, &duplicates, username_and_password_in_key);
+
+ ASSERT_EQ(expected_number_of_unique_entries, list.size());
+ ASSERT_EQ(number_of_entries - expected_number_of_unique_entries,
+ duplicates.size());
+ for (size_t i = 0; i < number_of_entries; i++) {
+ const SortEntry& entry = test_entries[i];
+ if (entry.expected_position >= 0) {
+ SCOPED_TRACE(testing::Message("position in sorted list: ")
+ << entry.expected_position);
+ EXPECT_EQ(GURL(base::ASCIIToUTF16(entry.origin)),
+ list[entry.expected_position]->origin);
+ if (username_and_password_in_key) {
+ EXPECT_EQ(base::ASCIIToUTF16(entry.username),
+ list[entry.expected_position]->username_value);
+ EXPECT_EQ(base::ASCIIToUTF16(entry.password),
+ list[entry.expected_position]->password_value);
+ }
+ }
+ }
+}
+
namespace {
TEST_F(PasswordManagerPresenterTest, UIControllerIsCalled) {
@@ -165,4 +227,65 @@ TEST_F(PasswordManagerPresenterTest, UIControllerIsCalled) {
UpdateLists();
}
+TEST_F(PasswordManagerPresenterTest, Sorting_DifferentOrigins) {
+ const SortEntry test_cases[] = {
+ {"http://example-b.com", "user_a", "pwd", nullptr, 2},
+ {"http://example-a.com", "user_a1", "pwd", nullptr, 0},
+ {"http://example-a.com", "user_a2", "pwd", nullptr, 1},
+ {"http://example-c.com", "user_a", "pwd", nullptr, 3}};
+ SortAndCheckPositions(test_cases, arraysize(test_cases), true);
+}
+
+TEST_F(PasswordManagerPresenterTest, Sorting_DifferentUsernames) {
+ const SortEntry test_cases[] = {
+ {"http://example.com", "user_a", "pwd", nullptr, 0},
+ {"http://example.com", "user_c", "pwd", nullptr, 2},
+ {"http://example.com", "user_b", "pwd", nullptr, 1}};
+ SortAndCheckPositions(test_cases, arraysize(test_cases), true);
+}
+
+TEST_F(PasswordManagerPresenterTest, Sorting_DifferentPasswords) {
+ const SortEntry test_cases[] = {
+ {"http://example.com", "user_a", "1", nullptr, 0},
+ {"http://example.com", "user_a", "2", nullptr, 1},
+ {"http://example.com", "user_a", "3", nullptr, 2}};
+ SortAndCheckPositions(test_cases, arraysize(test_cases), true);
+}
+
+TEST_F(PasswordManagerPresenterTest, Sorting_HideDuplicates) {
+ const SortEntry test_cases[] = {
+ {"http://example.com", "user_a", "pwd", nullptr, 0},
+ // Different username.
+ {"http://example.com", "user_b", "pwd", nullptr, 2},
+ // Different password.
+ {"http://example.com", "user_a", "secret", nullptr, 1},
+ // Different origin.
+ {"http://sub1.example.com", "user_a", "pwd", nullptr, 3},
+ {"http://example.com", "user_a", "pwd", nullptr, -1} // Hide it.
+ };
+ SortAndCheckPositions(test_cases, arraysize(test_cases), true);
+}
+
+TEST_F(PasswordManagerPresenterTest, Sorting_DontUseUsernameAndPasswordInKey) {
+ const SortEntry test_cases[] = {
+ {"http://example-b.com", nullptr, nullptr, nullptr, 1},
+ {"http://example-a.com", nullptr, nullptr, nullptr, 0},
+ {"http://example-a.com", nullptr, nullptr, nullptr, -1}, // Hide it.
+ {"http://example-c.com", nullptr, nullptr, nullptr, 2}};
+ SortAndCheckPositions(test_cases, arraysize(test_cases), false);
+}
+
+TEST_F(PasswordManagerPresenterTest, Sorting_AndroidCredentials) {
+ const SortEntry test_cases[] = {
+ {"https://alpha.com", "user", "secret", nullptr, 0},
+ {"android://hash@com.alpha", "user", "secret", "https://alpha.com", 1},
+ {"android://hash@com.alpha", "user", "secret", "https://alpha.com", -1},
+ {"android://hash@com.alpha", "user", "secret", nullptr, 2},
+
+ {"android://hash@com.betta.android", "user", "secret",
+ "https://betta.com", 3},
+ {"android://hash@com.betta.android", "user", "secret", nullptr, 4}};
+ SortAndCheckPositions(test_cases, arraysize(test_cases), true);
+}
+
} // namespace
« no previous file with comments | « chrome/browser/ui/passwords/password_manager_presenter.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698