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

Side by Side Diff: components/password_manager/core/browser/password_manager_unittest.cc

Issue 2915763003: [Password Manager] Show omnibox icon and anchored prompt once user start typing password (Closed)
Patch Set: Sent For Review Created 3 years, 5 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/password_manager/core/browser/password_manager.h" 5 #include "components/password_manager/core/browser/password_manager.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 .WillRepeatedly(Return(&filter_)); 58 .WillRepeatedly(Return(&filter_));
59 ON_CALL(filter_, ShouldSave(_)).WillByDefault(Return(true)); 59 ON_CALL(filter_, ShouldSave(_)).WillByDefault(Return(true));
60 } 60 }
61 61
62 MOCK_CONST_METHOD0(IsSavingAndFillingEnabledForCurrentPage, bool()); 62 MOCK_CONST_METHOD0(IsSavingAndFillingEnabledForCurrentPage, bool());
63 MOCK_CONST_METHOD0(DidLastPageLoadEncounterSSLErrors, bool()); 63 MOCK_CONST_METHOD0(DidLastPageLoadEncounterSSLErrors, bool());
64 MOCK_CONST_METHOD0(GetPasswordStore, PasswordStore*()); 64 MOCK_CONST_METHOD0(GetPasswordStore, PasswordStore*());
65 // The code inside EXPECT_CALL for PromptUserToSaveOrUpdatePasswordPtr owns 65 // The code inside EXPECT_CALL for PromptUserToSaveOrUpdatePasswordPtr owns
66 // the PasswordFormManager* argument. 66 // the PasswordFormManager* argument.
67 MOCK_METHOD1(PromptUserToSaveOrUpdatePasswordPtr, void(PasswordFormManager*)); 67 MOCK_METHOD1(PromptUserToSaveOrUpdatePasswordPtr, void(PasswordFormManager*));
68 MOCK_METHOD2(ShowManualFallbackPtr, void(PasswordFormManager*, bool));
69 MOCK_METHOD0(HideManualFallback, void());
68 MOCK_METHOD1(NotifySuccessfulLoginWithExistingPassword, 70 MOCK_METHOD1(NotifySuccessfulLoginWithExistingPassword,
69 void(const autofill::PasswordForm&)); 71 void(const autofill::PasswordForm&));
70 MOCK_METHOD0(AutomaticPasswordSaveIndicator, void()); 72 MOCK_METHOD0(AutomaticPasswordSaveIndicator, void());
71 MOCK_METHOD0(GetPrefs, PrefService*()); 73 MOCK_METHOD0(GetPrefs, PrefService*());
72 MOCK_CONST_METHOD0(GetMainFrameURL, const GURL&()); 74 MOCK_CONST_METHOD0(GetMainFrameURL, const GURL&());
73 MOCK_METHOD0(GetDriver, PasswordManagerDriver*()); 75 MOCK_METHOD0(GetDriver, PasswordManagerDriver*());
74 MOCK_CONST_METHOD0(GetStoreResultFilter, const MockStoreResultFilter*()); 76 MOCK_CONST_METHOD0(GetStoreResultFilter, const MockStoreResultFilter*());
75 77
76 // Workaround for std::unique_ptr<> lacking a copy constructor. 78 // Workaround for std::unique_ptr<> lacking a copy constructor.
77 bool PromptUserToSaveOrUpdatePassword( 79 bool PromptUserToSaveOrUpdatePassword(
78 std::unique_ptr<PasswordFormManager> manager, 80 std::unique_ptr<PasswordFormManager> manager,
79 bool update_password) override { 81 bool update_password) override {
80 PromptUserToSaveOrUpdatePasswordPtr(manager.release()); 82 PromptUserToSaveOrUpdatePasswordPtr(manager.release());
81 return false; 83 return false;
82 } 84 }
85 void ShowManualFallback(std::unique_ptr<PasswordFormManager> manager,
86 bool is_update) override {
87 ShowManualFallbackPtr(manager.release(), is_update);
vasilii 2017/07/21 12:48:21 Memory leak here?
kolos1 2017/07/24 15:33:31 Fixed.
88 }
83 void AutomaticPasswordSave( 89 void AutomaticPasswordSave(
84 std::unique_ptr<PasswordFormManager> manager) override { 90 std::unique_ptr<PasswordFormManager> manager) override {
85 AutomaticPasswordSaveIndicator(); 91 AutomaticPasswordSaveIndicator();
86 } 92 }
87 93
88 void FilterAllResultsForSaving() { 94 void FilterAllResultsForSaving() {
89 EXPECT_CALL(filter_, ShouldSave(_)).WillRepeatedly(Return(false)); 95 EXPECT_CALL(filter_, ShouldSave(_)).WillRepeatedly(Return(false));
90 } 96 }
91 97
92 private: 98 private:
(...skipping 13 matching lines...) Expand all
106 result.push_back(base::MakeUnique<PasswordForm>(form)); 112 result.push_back(base::MakeUnique<PasswordForm>(form));
107 arg0->OnGetPasswordStoreResults(std::move(result)); 113 arg0->OnGetPasswordStoreResults(std::move(result));
108 } 114 }
109 115
110 ACTION(InvokeEmptyConsumerWithForms) { 116 ACTION(InvokeEmptyConsumerWithForms) {
111 arg0->OnGetPasswordStoreResults(std::vector<std::unique_ptr<PasswordForm>>()); 117 arg0->OnGetPasswordStoreResults(std::vector<std::unique_ptr<PasswordForm>>());
112 } 118 }
113 119
114 ACTION_P(SaveToScopedPtr, scoped) { scoped->reset(arg0); } 120 ACTION_P(SaveToScopedPtr, scoped) { scoped->reset(arg0); }
115 121
122 ACTION_P(SaveConsumerToList, list) {
123 list->push_back(arg0);
124 }
125
116 } // namespace 126 } // namespace
117 127
118 class PasswordManagerTest : public testing::Test { 128 class PasswordManagerTest : public testing::Test {
119 protected: 129 protected:
120 void SetUp() override { 130 void SetUp() override {
121 store_ = new testing::StrictMock<MockPasswordStore>; 131 store_ = new testing::StrictMock<MockPasswordStore>;
122 EXPECT_CALL(*store_, ReportMetrics(_, _)).Times(AnyNumber()); 132 EXPECT_CALL(*store_, ReportMetrics(_, _)).Times(AnyNumber());
123 EXPECT_CALL(*store_, GetLoginsForSameOrganizationName(_, _)) 133 EXPECT_CALL(*store_, GetLoginsForSameOrganizationName(_, _))
124 .Times(AnyNumber()); 134 .Times(AnyNumber());
125 CHECK(store_->Init(syncer::SyncableService::StartSyncFlare(), nullptr)); 135 CHECK(store_->Init(syncer::SyncableService::StartSyncFlare(), nullptr));
(...skipping 1672 matching lines...) Expand 10 before | Expand all | Expand 10 after
1798 std::unique_ptr<PasswordFormManager> form_manager_to_save; 1808 std::unique_ptr<PasswordFormManager> form_manager_to_save;
1799 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_)) 1809 EXPECT_CALL(client_, PromptUserToSaveOrUpdatePasswordPtr(_))
1800 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_manager_to_save))); 1810 .WillOnce(WithArg<0>(SaveToScopedPtr(&form_manager_to_save)));
1801 1811
1802 OnPasswordFormSubmitted(form); 1812 OnPasswordFormSubmitted(form);
1803 observed.clear(); 1813 observed.clear();
1804 manager()->OnPasswordFormsRendered(&driver_, observed, true); 1814 manager()->OnPasswordFormsRendered(&driver_, observed, true);
1805 } 1815 }
1806 #endif 1816 #endif
1807 1817
1818 TEST_F(PasswordManagerTest, ManualFallbackForSaving) {
1819 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage())
1820 .WillRepeatedly(Return(true));
1821
1822 std::vector<PasswordForm> observed;
1823 PasswordForm form(MakeSimpleForm());
1824 observed.push_back(form);
1825 PasswordForm stored_form = form;
1826 stored_form.password_value = ASCIIToUTF16("old_password");
1827 EXPECT_CALL(*store_, GetLogins(_, _))
1828 .WillRepeatedly(WithArg<1>(InvokeConsumer(stored_form)));
vasilii 2017/07/21 12:48:21 I'm concerned if it happens more than once. Is it
kolos1 2017/07/24 15:33:30 Yes, it is called twice. In tests above, WillRepe
vasilii 2017/07/25 11:17:46 Why is it called twice if the form is only one?
kolos1 2017/07/26 13:40:57 Investigated the case. Here it is called once actu
1829 EXPECT_CALL(driver_, FillPasswordForm(_)).Times(2);
1830 manager()->OnPasswordFormsParsed(&driver_, observed);
1831 manager()->OnPasswordFormsRendered(&driver_, observed, true);
1832
1833 // The username of the stored form is the same, there should be update bubble.
1834 EXPECT_CALL(client_, ShowManualFallbackPtr(_, true));
vasilii 2017/07/21 12:48:21 Why don't we check anything about the form being p
kolos1 2017/07/24 15:33:31 Added some checks.
1835 manager()->ShowManualFallback(&driver_, form);
1836
1837 // The username of the stored form is different, there should be save bubble.
1838 PasswordForm new_form = form;
1839 new_form.username_value = ASCIIToUTF16("another_username");
1840 EXPECT_CALL(client_, ShowManualFallbackPtr(_, false));
1841 manager()->ShowManualFallback(&driver_, new_form);
1842
1843 // Hide the manual fallback.
1844 EXPECT_CALL(client_, HideManualFallback());
1845 manager()->HideManualFallback();
1846 }
1847
1848 // Tests that the manual fallback for saving isn't shown if there is no response
1849 // from the password storage. When crbug.com/741537 is fixed, change this test.
1850 TEST_F(PasswordManagerTest, ManualFallbackForSaving_SlowBackend) {
1851 EXPECT_CALL(client_, IsSavingAndFillingEnabledForCurrentPage())
1852 .WillRepeatedly(Return(true));
1853
1854 std::vector<PasswordForm> observed;
1855 PasswordForm form(MakeSimpleForm());
1856 observed.push_back(form);
1857 std::vector<PasswordStoreConsumer*> consumers;
1858 EXPECT_CALL(*store_, GetLogins(_, _))
1859 .WillRepeatedly(WithArg<1>(SaveConsumerToList(&consumers)));
1860 manager()->OnPasswordFormsParsed(&driver_, observed);
1861 manager()->OnPasswordFormsRendered(&driver_, observed, true);
1862
1863 // There is no response from the store. Don't show the fallback.
1864 EXPECT_CALL(client_, ShowManualFallbackPtr(_, _)).Times(0);
1865 manager()->ShowManualFallback(&driver_, form);
1866
1867 // The storage responded. The fallback can be shown.
1868 EXPECT_CALL(client_, ShowManualFallbackPtr(_, false));
vasilii 2017/07/21 12:48:21 Move down to ShowManualFallback. Do I understand r
kolos1 2017/07/24 15:33:31 Good point. Done.
1869 for (PasswordStoreConsumer* consumer : consumers) {
1870 ASSERT_TRUE(consumer);
1871 consumer->OnGetPasswordStoreResults(
1872 std::vector<std::unique_ptr<PasswordForm>>());
1873 }
1874 manager()->ShowManualFallback(&driver_, form);
1875 }
1876
1808 } // namespace password_manager 1877 } // namespace password_manager
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698