Commit e5ecbc69 authored by Marc Treib's avatar Marc Treib Committed by Commit Bot

Update test setup for features::kEnablePasswordsAccountStorage

With password_manager::features::kEnablePasswordsAccountStorage enabled,
there will be two PasswordStore instances, a profile-scoped one and an
account-scoped one. This CL updates the setup of a few unit tests so
they instantiate the account-scoped store in addition to the
profile-scoped one. Without this change, the tests were hitting some
DCHECKs when run with kEnablePasswordsAccountStorage enabled.

Bug: 1098677
Change-Id: Ic31b5ff593139788b7ffbf8fd67a1d8edb401ff1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2332602Reviewed-by: default avatarMathias Carlen <mcarlen@chromium.org>
Reviewed-by: default avatarMohamed Amir Yosef <mamir@chromium.org>
Commit-Queue: Marc Treib <treib@chromium.org>
Cr-Commit-Position: refs/heads/master@{#795458}
parent 535cff6a
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include "chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.h" #include "chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.h"
#include "chrome/browser/extensions/api/passwords_private/passwords_private_event_router.h" #include "chrome/browser/extensions/api/passwords_private/passwords_private_event_router.h"
#include "chrome/browser/extensions/api/passwords_private/passwords_private_event_router_factory.h" #include "chrome/browser/extensions/api/passwords_private/passwords_private_event_router_factory.h"
#include "chrome/browser/password_manager/account_password_store_factory.h"
#include "chrome/browser/password_manager/chrome_password_manager_client.h" #include "chrome/browser/password_manager/chrome_password_manager_client.h"
#include "chrome/browser/password_manager/password_store_factory.h" #include "chrome/browser/password_manager/password_store_factory.h"
#include "chrome/common/extensions/api/passwords_private.h" #include "chrome/common/extensions/api/passwords_private.h"
...@@ -36,6 +37,7 @@ ...@@ -36,6 +37,7 @@
#include "components/password_manager/core/browser/password_manager_test_utils.h" #include "components/password_manager/core/browser/password_manager_test_utils.h"
#include "components/password_manager/core/browser/reauth_purpose.h" #include "components/password_manager/core/browser/reauth_purpose.h"
#include "components/password_manager/core/browser/test_password_store.h" #include "components/password_manager/core/browser/test_password_store.h"
#include "components/password_manager/core/common/password_manager_features.h"
#include "components/signin/public/base/signin_metrics.h" #include "components/signin/public/base/signin_metrics.h"
#include "content/public/browser/browser_context.h" #include "content/public/browser/browser_context.h"
#include "content/public/test/browser_task_environment.h" #include "content/public/test/browser_task_environment.h"
...@@ -76,6 +78,21 @@ scoped_refptr<TestPasswordStore> CreateAndUseTestPasswordStore( ...@@ -76,6 +78,21 @@ scoped_refptr<TestPasswordStore> CreateAndUseTestPasswordStore(
.get())); .get()));
} }
scoped_refptr<TestPasswordStore> CreateAndUseTestAccountPasswordStore(
Profile* profile) {
if (!base::FeatureList::IsEnabled(
password_manager::features::kEnablePasswordsAccountStorage)) {
return nullptr;
}
return base::WrapRefCounted(static_cast<TestPasswordStore*>(
AccountPasswordStoreFactory::GetInstance()
->SetTestingFactoryAndUse(
profile,
base::BindRepeating(&password_manager::BuildPasswordStore<
content::BrowserContext, TestPasswordStore>))
.get()));
}
class MockPasswordManagerClient : public ChromePasswordManagerClient { class MockPasswordManagerClient : public ChromePasswordManagerClient {
public: public:
// Creates the mock and attaches it to |web_contents|. // Creates the mock and attaches it to |web_contents|.
...@@ -200,6 +217,8 @@ class PasswordsPrivateDelegateImplTest : public testing::Test { ...@@ -200,6 +217,8 @@ class PasswordsPrivateDelegateImplTest : public testing::Test {
extensions::TestEventRouter* event_router_ = nullptr; extensions::TestEventRouter* event_router_ = nullptr;
scoped_refptr<TestPasswordStore> store_ = scoped_refptr<TestPasswordStore> store_ =
CreateAndUseTestPasswordStore(&profile_); CreateAndUseTestPasswordStore(&profile_);
scoped_refptr<TestPasswordStore> account_store_ =
CreateAndUseTestAccountPasswordStore(&profile_);
ui::TestClipboard* test_clipboard_ = ui::TestClipboard* test_clipboard_ =
ui::TestClipboard::CreateForCurrentThread(); ui::TestClipboard::CreateForCurrentThread();
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "base/test/bind_test_util.h" #include "base/test/bind_test_util.h"
#include "base/test/scoped_feature_list.h" #include "base/test/scoped_feature_list.h"
#include "build/build_config.h" #include "build/build_config.h"
#include "chrome/browser/password_manager/account_password_store_factory.h"
#include "chrome/browser/password_manager/password_store_factory.h" #include "chrome/browser/password_manager/password_store_factory.h"
#include "chrome/browser/safe_browsing/ui_manager.h" #include "chrome/browser/safe_browsing/ui_manager.h"
#include "chrome/browser/signin/chrome_signin_client_factory.h" #include "chrome/browser/signin/chrome_signin_client_factory.h"
...@@ -211,16 +212,11 @@ class MockChromePasswordProtectionService ...@@ -211,16 +212,11 @@ class MockChromePasswordProtectionService
class ChromePasswordProtectionServiceTest class ChromePasswordProtectionServiceTest
: public ChromeRenderViewHostTestHarness { : public ChromeRenderViewHostTestHarness {
public: public:
ChromePasswordProtectionServiceTest() {} ChromePasswordProtectionServiceTest() = default;
void SetUp() override { void SetUp() override {
ChromeRenderViewHostTestHarness::SetUp(); ChromeRenderViewHostTestHarness::SetUp();
// Use MockPasswordStore to remove a possible race. Normally the
// PasswordStore does its database manipulation on the DB thread, which
// creates a possible race during navigation. Specifically the
// PasswordManager will ignore any forms in a page if the load from the
// PasswordStore has not completed.
password_store_ = password_store_ =
base::WrapRefCounted(static_cast<password_manager::MockPasswordStore*>( base::WrapRefCounted(static_cast<password_manager::MockPasswordStore*>(
PasswordStoreFactory::GetInstance() PasswordStoreFactory::GetInstance()
...@@ -231,6 +227,19 @@ class ChromePasswordProtectionServiceTest ...@@ -231,6 +227,19 @@ class ChromePasswordProtectionServiceTest
password_manager::MockPasswordStore>)) password_manager::MockPasswordStore>))
.get())); .get()));
if (base::FeatureList::IsEnabled(
password_manager::features::kEnablePasswordsAccountStorage)) {
account_password_store_ = base::WrapRefCounted(
static_cast<password_manager::MockPasswordStore*>(
AccountPasswordStoreFactory::GetInstance()
->SetTestingFactoryAndUse(
profile(),
base::BindRepeating(&password_manager::BuildPasswordStore<
content::BrowserContext,
password_manager::MockPasswordStore>))
.get()));
}
profile()->GetPrefs()->SetBoolean(prefs::kSafeBrowsingEnabled, true); profile()->GetPrefs()->SetBoolean(prefs::kSafeBrowsingEnabled, true);
profile()->GetPrefs()->SetInteger( profile()->GetPrefs()->SetInteger(
prefs::kPasswordProtectionWarningTrigger, prefs::kPasswordProtectionWarningTrigger,
...@@ -273,6 +282,8 @@ class ChromePasswordProtectionServiceTest ...@@ -273,6 +282,8 @@ class ChromePasswordProtectionServiceTest
base::RunLoop().RunUntilIdle(); base::RunLoop().RunUntilIdle();
service_.reset(); service_.reset();
request_ = nullptr; request_ = nullptr;
if (account_password_store_)
account_password_store_->ShutdownOnUIThread();
password_store_->ShutdownOnUIThread(); password_store_->ShutdownOnUIThread();
identity_test_env_profile_adaptor_.reset(); identity_test_env_profile_adaptor_.reset();
cache_manager_.reset(); cache_manager_.reset();
...@@ -387,6 +398,7 @@ class ChromePasswordProtectionServiceTest ...@@ -387,6 +398,7 @@ class ChromePasswordProtectionServiceTest
identity_test_env_profile_adaptor_; identity_test_env_profile_adaptor_;
MockSecurityEventRecorder* security_event_recorder_; MockSecurityEventRecorder* security_event_recorder_;
scoped_refptr<password_manager::MockPasswordStore> password_store_; scoped_refptr<password_manager::MockPasswordStore> password_store_;
scoped_refptr<password_manager::MockPasswordStore> account_password_store_;
// Owned by KeyedServiceFactory. // Owned by KeyedServiceFactory.
syncer::FakeUserEventService* fake_user_event_service_; syncer::FakeUserEventService* fake_user_event_service_;
#if !defined(OS_ANDROID) #if !defined(OS_ANDROID)
......
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
#include "chrome/browser/enterprise/connectors/connectors_manager.h" #include "chrome/browser/enterprise/connectors/connectors_manager.h"
#include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_factory.h" #include "chrome/browser/extensions/api/safe_browsing_private/safe_browsing_private_event_router_factory.h"
#include "chrome/browser/history/history_service_factory.h" #include "chrome/browser/history/history_service_factory.h"
#include "chrome/browser/password_manager/account_password_store_factory.h"
#include "chrome/browser/password_manager/password_store_factory.h" #include "chrome/browser/password_manager/password_store_factory.h"
#include "chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.h"
#include "chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service_factory.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service_factory.h"
...@@ -71,6 +72,7 @@ ...@@ -71,6 +72,7 @@
#include "components/keyed_service/content/browser_context_keyed_service_factory.h" #include "components/keyed_service/content/browser_context_keyed_service_factory.h"
#include "components/password_manager/core/browser/password_manager_test_utils.h" #include "components/password_manager/core/browser/password_manager_test_utils.h"
#include "components/password_manager/core/browser/test_password_store.h" #include "components/password_manager/core/browser/test_password_store.h"
#include "components/password_manager/core/common/password_manager_features.h"
#include "components/prefs/pref_service.h" #include "components/prefs/pref_service.h"
#include "components/prefs/scoped_user_pref_update.h" #include "components/prefs/scoped_user_pref_update.h"
#include "components/safe_browsing/content/web_ui/safe_browsing_ui.h" #include "components/safe_browsing/content/web_ui/safe_browsing_ui.h"
...@@ -300,6 +302,13 @@ class DownloadProtectionServiceTestBase ...@@ -300,6 +302,13 @@ class DownloadProtectionServiceTestBase
base::BindRepeating( base::BindRepeating(
&password_manager::BuildPasswordStore< &password_manager::BuildPasswordStore<
content::BrowserContext, password_manager::TestPasswordStore>)); content::BrowserContext, password_manager::TestPasswordStore>));
if (base::FeatureList::IsEnabled(
password_manager::features::kEnablePasswordsAccountStorage)) {
AccountPasswordStoreFactory::GetInstance()->SetTestingFactory(
profile(), base::BindRepeating(&password_manager::BuildPasswordStore<
content::BrowserContext,
password_manager::TestPasswordStore>));
}
// Start real threads for the IO and File threads so that the DCHECKs // Start real threads for the IO and File threads so that the DCHECKs
// to test that we're on the correct thread work. // to test that we're on the correct thread work.
......
...@@ -304,6 +304,7 @@ source_set("unit_tests") { ...@@ -304,6 +304,7 @@ source_set("unit_tests") {
"//base/test:test_support", "//base/test:test_support",
"//components/autofill/core/browser:test_support", "//components/autofill/core/browser:test_support",
"//components/password_manager/core/browser:test_support", "//components/password_manager/core/browser:test_support",
"//components/password_manager/core/common",
"//components/strings:components_strings_grit", "//components/strings:components_strings_grit",
"//components/version_info", "//components/version_info",
"//content/test:test_support", "//content/test:test_support",
......
...@@ -3,6 +3,7 @@ include_rules = [ ...@@ -3,6 +3,7 @@ include_rules = [
"+components/autofill", "+components/autofill",
"+components/google/core/common", "+components/google/core/common",
"+components/password_manager/core/browser", "+components/password_manager/core/browser",
"+components/password_manager/core/common",
"+components/version_info", "+components/version_info",
"+content/public/browser", "+content/public/browser",
"+content/public/test", "+content/public/test",
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include "components/password_manager/core/browser/password_store_consumer.h" #include "components/password_manager/core/browser/password_store_consumer.h"
#include "components/password_manager/core/browser/stub_password_manager_client.h" #include "components/password_manager/core/browser/stub_password_manager_client.h"
#include "components/password_manager/core/browser/stub_password_manager_driver.h" #include "components/password_manager/core/browser/stub_password_manager_driver.h"
#include "components/password_manager/core/common/password_manager_features.h"
#include "content/public/test/browser_task_environment.h" #include "content/public/test/browser_task_environment.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
...@@ -45,6 +46,8 @@ class MockPasswordManagerClient ...@@ -45,6 +46,8 @@ class MockPasswordManagerClient
MOCK_CONST_METHOD0(GetProfilePasswordStore, MOCK_CONST_METHOD0(GetProfilePasswordStore,
password_manager::PasswordStore*()); password_manager::PasswordStore*());
MOCK_CONST_METHOD0(GetAccountPasswordStore,
password_manager::PasswordStore*());
}; };
class MockPasswordManagerDriver class MockPasswordManagerDriver
...@@ -81,6 +84,7 @@ PasswordForm MakeSimplePasswordForm() { ...@@ -81,6 +84,7 @@ PasswordForm MakeSimplePasswordForm() {
form.username_value = ASCIIToUTF16(kFakeUsername); form.username_value = ASCIIToUTF16(kFakeUsername);
form.username_element = ASCIIToUTF16(kUsernameElement); form.username_element = ASCIIToUTF16(kUsernameElement);
form.password_element = ASCIIToUTF16(kPasswordElement); form.password_element = ASCIIToUTF16(kPasswordElement);
form.in_store = PasswordForm::Store::kProfileStore;
return form; return form;
} }
...@@ -90,6 +94,7 @@ PasswordForm MakeSimplePasswordFormWithoutUsername() { ...@@ -90,6 +94,7 @@ PasswordForm MakeSimplePasswordFormWithoutUsername() {
form.url = GURL(kFakeUrl); form.url = GURL(kFakeUrl);
form.signon_realm = form.url.GetOrigin().spec(); form.signon_realm = form.url.GetOrigin().spec();
form.password_value = ASCIIToUTF16(kFakeNewPassword); form.password_value = ASCIIToUTF16(kFakeNewPassword);
form.in_store = PasswordForm::Store::kProfileStore;
return form; return form;
} }
...@@ -103,11 +108,22 @@ class WebsiteLoginManagerImplTest : public testing::Test { ...@@ -103,11 +108,22 @@ class WebsiteLoginManagerImplTest : public testing::Test {
protected: protected:
void SetUp() override { void SetUp() override {
store_ = new password_manager::MockPasswordStore; profile_store_ = new password_manager::MockPasswordStore;
ASSERT_TRUE(store_->Init(/*prefs=*/nullptr)); ON_CALL(*profile_store_, IsAccountStore()).WillByDefault(Return(false));
ASSERT_TRUE(profile_store_->Init(/*prefs=*/nullptr));
ON_CALL(client_, GetProfilePasswordStore()) ON_CALL(client_, GetProfilePasswordStore())
.WillByDefault(Return(store_.get())); .WillByDefault(Return(profile_store_.get()));
if (base::FeatureList::IsEnabled(
password_manager::features::kEnablePasswordsAccountStorage)) {
account_store_ = new password_manager::MockPasswordStore;
ON_CALL(*account_store_, IsAccountStore()).WillByDefault(Return(true));
ASSERT_TRUE(account_store_->Init(/*prefs=*/nullptr));
ON_CALL(client_, GetAccountPasswordStore())
.WillByDefault(Return(account_store_.get()));
}
ON_CALL(driver_, GetId()).WillByDefault(Return(0)); ON_CALL(driver_, GetId()).WillByDefault(Return(0));
ON_CALL(driver_, IsMainFrame()).WillByDefault(Return(true)); ON_CALL(driver_, IsMainFrame()).WillByDefault(Return(true));
...@@ -115,10 +131,15 @@ class WebsiteLoginManagerImplTest : public testing::Test { ...@@ -115,10 +131,15 @@ class WebsiteLoginManagerImplTest : public testing::Test {
manager_ = std::make_unique<WebsiteLoginManagerImpl>(&client_, &driver_); manager_ = std::make_unique<WebsiteLoginManagerImpl>(&client_, &driver_);
} }
void TearDown() override { store_->ShutdownOnUIThread(); } void TearDown() override {
if (account_store_) {
account_store_->ShutdownOnUIThread();
}
profile_store_->ShutdownOnUIThread();
}
WebsiteLoginManagerImpl* manager() { return manager_.get(); } WebsiteLoginManagerImpl* manager() { return manager_.get(); }
password_manager::MockPasswordStore* store() { return store_.get(); } password_manager::MockPasswordStore* store() { return profile_store_.get(); }
void WaitForPasswordStore() { task_environment_.RunUntilIdle(); } void WaitForPasswordStore() { task_environment_.RunUntilIdle(); }
...@@ -126,7 +147,8 @@ class WebsiteLoginManagerImplTest : public testing::Test { ...@@ -126,7 +147,8 @@ class WebsiteLoginManagerImplTest : public testing::Test {
testing::NiceMock<MockPasswordManagerClient> client_; testing::NiceMock<MockPasswordManagerClient> client_;
MockPasswordManagerDriver driver_; MockPasswordManagerDriver driver_;
std::unique_ptr<WebsiteLoginManagerImpl> manager_; std::unique_ptr<WebsiteLoginManagerImpl> manager_;
scoped_refptr<password_manager::MockPasswordStore> store_; scoped_refptr<password_manager::MockPasswordStore> profile_store_;
scoped_refptr<password_manager::MockPasswordStore> account_store_;
content::BrowserTaskEnvironment task_environment_{ content::BrowserTaskEnvironment task_environment_{
base::test::TaskEnvironment::TimeSource::MOCK_TIME, base::test::TaskEnvironment::TimeSource::MOCK_TIME,
content::BrowserTaskEnvironment::IO_MAINLOOP}; content::BrowserTaskEnvironment::IO_MAINLOOP};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment