diff options
Diffstat (limited to 'chromium/components/password_manager')
9 files changed, 37 insertions, 21 deletions
diff --git a/chromium/components/password_manager/core/browser/credentials_filter.h b/chromium/components/password_manager/core/browser/credentials_filter.h index aec30291a22..03bce524158 100644 --- a/chromium/components/password_manager/core/browser/credentials_filter.h +++ b/chromium/components/password_manager/core/browser/credentials_filter.h @@ -25,7 +25,8 @@ class CredentialsFilter { std::vector<std::unique_ptr<autofill::PasswordForm>> results) const = 0; // Should |form| be offered to be saved? - virtual bool ShouldSave(const autofill::PasswordForm& form) const = 0; + virtual bool ShouldSave(const autofill::PasswordForm& form, + const GURL& main_frame_url) const = 0; // Call this if the form associated with |form_manager| was filled, and the // subsequent sign-in looked like a success. diff --git a/chromium/components/password_manager/core/browser/form_fetcher_impl_unittest.cc b/chromium/components/password_manager/core/browser/form_fetcher_impl_unittest.cc index d0975d27457..d07e911f86d 100644 --- a/chromium/components/password_manager/core/browser/form_fetcher_impl_unittest.cc +++ b/chromium/components/password_manager/core/browser/form_fetcher_impl_unittest.cc @@ -78,12 +78,13 @@ class NameFilter : public StubCredentialsFilter { std::vector<std::unique_ptr<PasswordForm>> FilterResults( std::vector<std::unique_ptr<PasswordForm>> results) const override { base::EraseIf(results, [this](const std::unique_ptr<PasswordForm>& form) { - return !ShouldSave(*form); + return !ShouldSave(*form, form->origin); }); return results; } - bool ShouldSave(const PasswordForm& form) const override { + bool ShouldSave(const PasswordForm& form, + const GURL& main_frame_url) const override { return form.username_value != name_; } diff --git a/chromium/components/password_manager/core/browser/password_manager.cc b/chromium/components/password_manager/core/browser/password_manager.cc index c4beff277c1..cd1133eac35 100644 --- a/chromium/components/password_manager/core/browser/password_manager.cc +++ b/chromium/components/password_manager/core/browser/password_manager.cc @@ -848,7 +848,8 @@ void PasswordManager::OnLoginSuccessful() { DCHECK(provisional_save_manager_->submitted_form()); if (!client_->GetStoreResultFilter()->ShouldSave( - *provisional_save_manager_->submitted_form())) { + *provisional_save_manager_->submitted_form(), + client_->GetMainFrameURL())) { #if defined(SYNC_PASSWORD_REUSE_DETECTION_ENABLED) // When |username_value| is empty, it's not clear whether the submitted // credentials are really sync credentials. Don't save sync password hash diff --git a/chromium/components/password_manager/core/browser/password_manager_unittest.cc b/chromium/components/password_manager/core/browser/password_manager_unittest.cc index ac1a60eaab9..5c09f502787 100644 --- a/chromium/components/password_manager/core/browser/password_manager_unittest.cc +++ b/chromium/components/password_manager/core/browser/password_manager_unittest.cc @@ -48,7 +48,9 @@ namespace { class MockStoreResultFilter : public StubCredentialsFilter { public: - MOCK_CONST_METHOD1(ShouldSave, bool(const autofill::PasswordForm& form)); + MOCK_CONST_METHOD2(ShouldSave, + bool(const autofill::PasswordForm& form, + const GURL& main_frame_url)); MOCK_CONST_METHOD1(ReportFormLoginSuccess, void(const PasswordFormManager& form_manager)); }; @@ -59,7 +61,7 @@ class MockPasswordManagerClient : public StubPasswordManagerClient { EXPECT_CALL(*this, GetStoreResultFilter()) .Times(AnyNumber()) .WillRepeatedly(Return(&filter_)); - ON_CALL(filter_, ShouldSave(_)).WillByDefault(Return(true)); + ON_CALL(filter_, ShouldSave(_, _)).WillByDefault(Return(true)); } MOCK_CONST_METHOD0(IsSavingAndFillingEnabledForCurrentPage, bool()); @@ -98,7 +100,7 @@ class MockPasswordManagerClient : public StubPasswordManagerClient { } void FilterAllResultsForSaving() { - EXPECT_CALL(filter_, ShouldSave(_)).WillRepeatedly(Return(false)); + EXPECT_CALL(filter_, ShouldSave(_, _)).WillRepeatedly(Return(false)); } private: @@ -807,7 +809,7 @@ TEST_F(PasswordManagerTest, ReportFormLoginSuccessAndShouldSaveCalled) { PasswordForm submitted_form = observed_form; submitted_form.preferred = true; - EXPECT_CALL(*client_.GetStoreResultFilter(), ShouldSave(submitted_form)); + EXPECT_CALL(*client_.GetStoreResultFilter(), ShouldSave(submitted_form, _)); EXPECT_CALL(*store_, UpdateLogin(_)); observed.clear(); manager()->OnPasswordFormsParsed(&driver_, observed); diff --git a/chromium/components/password_manager/core/browser/stub_credentials_filter.cc b/chromium/components/password_manager/core/browser/stub_credentials_filter.cc index 8782cc324f9..233e4d92f70 100644 --- a/chromium/components/password_manager/core/browser/stub_credentials_filter.cc +++ b/chromium/components/password_manager/core/browser/stub_credentials_filter.cc @@ -17,8 +17,8 @@ StubCredentialsFilter::FilterResults( return results; } -bool StubCredentialsFilter::ShouldSave( - const autofill::PasswordForm& form) const { +bool StubCredentialsFilter::ShouldSave(const autofill::PasswordForm& form, + const GURL& main_frame_url) const { return true; } diff --git a/chromium/components/password_manager/core/browser/stub_credentials_filter.h b/chromium/components/password_manager/core/browser/stub_credentials_filter.h index 03fcd34c671..09fc10f40f2 100644 --- a/chromium/components/password_manager/core/browser/stub_credentials_filter.h +++ b/chromium/components/password_manager/core/browser/stub_credentials_filter.h @@ -22,7 +22,8 @@ class StubCredentialsFilter : public CredentialsFilter { std::vector<std::unique_ptr<autofill::PasswordForm>> FilterResults( std::vector<std::unique_ptr<autofill::PasswordForm>> results) const override; - bool ShouldSave(const autofill::PasswordForm& form) const override; + bool ShouldSave(const autofill::PasswordForm& form, + const GURL& main_frame_url) const override; void ReportFormLoginSuccess( const PasswordFormManager& form_manager) const override; diff --git a/chromium/components/password_manager/sync/browser/sync_credentials_filter.cc b/chromium/components/password_manager/sync/browser/sync_credentials_filter.cc index ce09894033d..73300eeaabe 100644 --- a/chromium/components/password_manager/sync/browser/sync_credentials_filter.cc +++ b/chromium/components/password_manager/sync/browser/sync_credentials_filter.cc @@ -14,6 +14,7 @@ #include "components/password_manager/core/browser/password_manager_util.h" #include "components/password_manager/core/common/password_manager_features.h" #include "components/password_manager/sync/browser/password_sync_util.h" +#include "google_apis/gaia/gaia_auth_util.h" #include "google_apis/gaia/gaia_urls.h" #include "net/base/url_util.h" @@ -64,7 +65,7 @@ std::vector<std::unique_ptr<PasswordForm>> SyncCredentialsFilter::FilterResults( auto begin_of_removed = std::partition(results.begin(), results.end(), [this](const std::unique_ptr<PasswordForm>& form) { - return ShouldSave(*form); + return ShouldSave(*form, form->origin); }); UMA_HISTOGRAM_BOOLEAN("PasswordManager.SyncCredentialFiltered", @@ -75,11 +76,12 @@ std::vector<std::unique_ptr<PasswordForm>> SyncCredentialsFilter::FilterResults( return results; } -bool SyncCredentialsFilter::ShouldSave( - const autofill::PasswordForm& form) const { - return !sync_util::IsSyncAccountCredential( - form, sync_service_factory_function_.Run(), - signin_manager_factory_function_.Run()); +bool SyncCredentialsFilter::ShouldSave(const autofill::PasswordForm& form, + const GURL& main_frame_url) const { + return !gaia::ShouldSkipSavePasswordForGaiaURL(main_frame_url) && + !sync_util::IsSyncAccountCredential( + form, sync_service_factory_function_.Run(), + signin_manager_factory_function_.Run()); } void SyncCredentialsFilter::ReportFormLoginSuccess( diff --git a/chromium/components/password_manager/sync/browser/sync_credentials_filter.h b/chromium/components/password_manager/sync/browser/sync_credentials_filter.h index ecabd5e0ae4..9a40d511e62 100644 --- a/chromium/components/password_manager/sync/browser/sync_credentials_filter.h +++ b/chromium/components/password_manager/sync/browser/sync_credentials_filter.h @@ -43,7 +43,8 @@ class SyncCredentialsFilter : public CredentialsFilter { std::vector<std::unique_ptr<autofill::PasswordForm>> FilterResults( std::vector<std::unique_ptr<autofill::PasswordForm>> results) const override; - bool ShouldSave(const autofill::PasswordForm& form) const override; + bool ShouldSave(const autofill::PasswordForm& form, + const GURL& main_frame_url) const override; void ReportFormLoginSuccess( const PasswordFormManager& form_manager) const override; diff --git a/chromium/components/password_manager/sync/browser/sync_credentials_filter_unittest.cc b/chromium/components/password_manager/sync/browser/sync_credentials_filter_unittest.cc index a6a3759f930..0e4b743e4ba 100644 --- a/chromium/components/password_manager/sync/browser/sync_credentials_filter_unittest.cc +++ b/chromium/components/password_manager/sync/browser/sync_credentials_filter_unittest.cc @@ -28,6 +28,7 @@ #include "components/password_manager/core/browser/stub_password_manager_driver.h" #include "components/password_manager/core/common/password_manager_features.h" #include "components/password_manager/sync/browser/sync_username_test_base.h" +#include "google_apis/gaia/gaia_urls.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -339,7 +340,7 @@ TEST_F(CredentialsFilterTest, ShouldSave_NotSyncCredential) { ASSERT_NE("user@example.org", signin_manager()->GetAuthenticatedAccountInfo().email); SetSyncingPasswords(true); - EXPECT_TRUE(filter_.ShouldSave(form)); + EXPECT_TRUE(filter_.ShouldSave(form, GURL("https://example.org"))); } TEST_F(CredentialsFilterTest, ShouldSave_SyncCredential) { @@ -347,7 +348,7 @@ TEST_F(CredentialsFilterTest, ShouldSave_SyncCredential) { FakeSigninAs("user@example.org"); SetSyncingPasswords(true); - EXPECT_FALSE(filter_.ShouldSave(form)); + EXPECT_FALSE(filter_.ShouldSave(form, GURL("https://example.org"))); } TEST_F(CredentialsFilterTest, ShouldSave_SyncCredential_NotSyncingPasswords) { @@ -355,7 +356,13 @@ TEST_F(CredentialsFilterTest, ShouldSave_SyncCredential_NotSyncingPasswords) { FakeSigninAs("user@example.org"); SetSyncingPasswords(false); - EXPECT_TRUE(filter_.ShouldSave(form)); + EXPECT_TRUE(filter_.ShouldSave(form, GURL("https://example.org"))); +} + +TEST_F(CredentialsFilterTest, ShouldSave_ChomeSigninURLForDice) { + PasswordForm form = SimpleGaiaForm("user@gmail.com"); + EXPECT_FALSE(filter_.ShouldSave( + form, GaiaUrls::GetInstance()->signin_chrome_sync_dice())); } TEST_F(CredentialsFilterTest, ShouldFilterOneForm) { |