| Index: chrome/browser/extensions/api/enterprise_platform_keys_private/enterprise_platform_keys_private_api_unittest.cc
|
| diff --git a/chrome/browser/extensions/api/enterprise_platform_keys_private/enterprise_platform_keys_private_api_unittest.cc b/chrome/browser/extensions/api/enterprise_platform_keys_private/enterprise_platform_keys_private_api_unittest.cc
|
| index daefe0cc445ee57a458e5dea9fd1365f7b133e50..01494f642ad35d1a5f59f2671f6c08f45be21589 100644
|
| --- a/chrome/browser/extensions/api/enterprise_platform_keys_private/enterprise_platform_keys_private_api_unittest.cc
|
| +++ b/chrome/browser/extensions/api/enterprise_platform_keys_private/enterprise_platform_keys_private_api_unittest.cc
|
| @@ -13,11 +13,13 @@
|
| #include "base/values.h"
|
| #include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h"
|
| #include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h"
|
| +#include "chrome/browser/chromeos/profiles/profile_helper.h"
|
| #include "chrome/browser/chromeos/settings/scoped_cros_settings_test_helper.h"
|
| #include "chrome/browser/chromeos/settings/stub_install_attributes.h"
|
| #include "chrome/browser/extensions/extension_function_test_utils.h"
|
| #include "chrome/browser/signin/signin_manager_factory.h"
|
| #include "chrome/browser/ui/browser.h"
|
| +#include "chrome/common/chrome_constants.h"
|
| #include "chrome/common/pref_names.h"
|
| #include "chrome/test/base/browser_with_test_window_test.h"
|
| #include "chrome/test/base/testing_browser_process.h"
|
| @@ -33,6 +35,7 @@
|
| #include "components/prefs/pref_service.h"
|
| #include "components/signin/core/account_id/account_id.h"
|
| #include "components/signin/core/browser/signin_manager.h"
|
| +#include "extensions/common/extension_builder.h"
|
| #include "extensions/common/test_util.h"
|
| #include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| @@ -148,13 +151,19 @@ void GetCertificateCallbackFalse(
|
| }
|
|
|
| class EPKPChallengeKeyTestBase : public BrowserWithTestWindowTest {
|
| + public:
|
| + enum class ProfileType { USER_PROFILE, SIGNIN_PROFILE };
|
| +
|
| protected:
|
| - EPKPChallengeKeyTestBase()
|
| + explicit EPKPChallengeKeyTestBase(ProfileType profile_type)
|
| : settings_helper_(false),
|
| - extension_(test_util::CreateEmptyExtension()),
|
| profile_manager_(TestingBrowserProcess::GetGlobal()),
|
| + profile_type_(profile_type),
|
| fake_user_manager_(new chromeos::FakeChromeUserManager),
|
| user_manager_enabler_(fake_user_manager_) {
|
| + // Create the extension.
|
| + extension_ = CreateExtension();
|
| +
|
| // Set up the default behavior of mocks.
|
| ON_CALL(mock_cryptohome_client_, TpmAttestationDoesKeyExist(_, _, _, _))
|
| .WillByDefault(WithArgs<3>(Invoke(FakeBoolDBusMethod(
|
| @@ -180,21 +189,28 @@ class EPKPChallengeKeyTestBase : public BrowserWithTestWindowTest {
|
| ASSERT_TRUE(profile_manager_.SetUp());
|
|
|
| BrowserWithTestWindowTest::SetUp();
|
| -
|
| - // Set the user preferences.
|
| - prefs_ = browser()->profile()->GetPrefs();
|
| - base::ListValue whitelist;
|
| - whitelist.AppendString(extension_->id());
|
| - prefs_->Set(prefs::kAttestationExtensionWhitelist, whitelist);
|
| -
|
| - SetAuthenticatedUser();
|
| + if (profile_type_ == ProfileType::USER_PROFILE) {
|
| + // Set the user preferences.
|
| + prefs_ = browser()->profile()->GetPrefs();
|
| + base::ListValue whitelist;
|
| + whitelist.AppendString(extension_->id());
|
| + prefs_->Set(prefs::kAttestationExtensionWhitelist, whitelist);
|
| +
|
| + SetAuthenticatedUser();
|
| + }
|
| }
|
|
|
| // This will be called by BrowserWithTestWindowTest::SetUp();
|
| TestingProfile* CreateProfile() override {
|
| - fake_user_manager_->AddUserWithAffiliation(
|
| - AccountId::FromUserEmail(kUserEmail), true);
|
| - return profile_manager_.CreateTestingProfile(kUserEmail);
|
| + switch (profile_type_) {
|
| + case ProfileType::USER_PROFILE:
|
| + fake_user_manager_->AddUserWithAffiliation(
|
| + AccountId::FromUserEmail(kUserEmail), true);
|
| + return profile_manager_.CreateTestingProfile(kUserEmail);
|
| +
|
| + case ProfileType::SIGNIN_PROFILE:
|
| + return profile_manager_.CreateTestingProfile(chrome::kInitialProfile);
|
| + }
|
| }
|
|
|
| void DestroyProfile(TestingProfile* profile) override {
|
| @@ -214,21 +230,37 @@ class EPKPChallengeKeyTestBase : public BrowserWithTestWindowTest {
|
| NiceMock<cryptohome::MockAsyncMethodCaller> mock_async_method_caller_;
|
| NiceMock<chromeos::attestation::MockAttestationFlow> mock_attestation_flow_;
|
| chromeos::ScopedCrosSettingsTestHelper settings_helper_;
|
| - scoped_refptr<extensions::Extension> extension_;
|
| + scoped_refptr<Extension> extension_;
|
| chromeos::StubInstallAttributes stub_install_attributes_;
|
| TestingProfileManager profile_manager_;
|
| + ProfileType profile_type_;
|
| // fake_user_manager_ is owned by user_manager_enabler_.
|
| chromeos::FakeChromeUserManager* fake_user_manager_;
|
| chromeos::ScopedUserManagerEnabler user_manager_enabler_;
|
| PrefService* prefs_ = nullptr;
|
| +
|
| + private:
|
| + scoped_refptr<Extension> CreateExtension() {
|
| + switch (profile_type_) {
|
| + case ProfileType::USER_PROFILE:
|
| + return test_util::CreateEmptyExtension();
|
| +
|
| + case ProfileType::SIGNIN_PROFILE:
|
| + return test_util::BuildApp(ExtensionBuilder())
|
| + .SetLocation(Manifest::Location::EXTERNAL_POLICY)
|
| + .Build();
|
| + }
|
| + }
|
| };
|
|
|
| class EPKPChallengeMachineKeyTest : public EPKPChallengeKeyTestBase {
|
| protected:
|
| static const char kArgs[];
|
|
|
| - EPKPChallengeMachineKeyTest()
|
| - : impl_(&mock_cryptohome_client_,
|
| + explicit EPKPChallengeMachineKeyTest(
|
| + ProfileType profile_type = ProfileType::USER_PROFILE)
|
| + : EPKPChallengeKeyTestBase(profile_type),
|
| + impl_(&mock_cryptohome_client_,
|
| &mock_async_method_caller_,
|
| &mock_attestation_flow_,
|
| &stub_install_attributes_),
|
| @@ -316,7 +348,35 @@ TEST_F(EPKPChallengeMachineKeyTest, KeyExists) {
|
| EXPECT_TRUE(utils::RunFunction(func_.get(), kArgs, browser(), utils::NONE));
|
| }
|
|
|
| -TEST_F(EPKPChallengeMachineKeyTest, Success) {
|
| +TEST_F(EPKPChallengeMachineKeyTest, AttestationNotPrepared) {
|
| + EXPECT_CALL(mock_cryptohome_client_, TpmAttestationIsPrepared(_))
|
| + .WillRepeatedly(Invoke(
|
| + FakeBoolDBusMethod(chromeos::DBUS_METHOD_CALL_SUCCESS, false)));
|
| +
|
| + EXPECT_EQ(GetCertificateError(kResetRequired),
|
| + utils::RunFunctionAndReturnError(func_.get(), kArgs, browser()));
|
| +}
|
| +
|
| +TEST_F(EPKPChallengeMachineKeyTest, AttestationPreparedDbusFailed) {
|
| + EXPECT_CALL(mock_cryptohome_client_, TpmAttestationIsPrepared(_))
|
| + .WillRepeatedly(
|
| + Invoke(FakeBoolDBusMethod(chromeos::DBUS_METHOD_CALL_FAILURE, true)));
|
| +
|
| + EXPECT_EQ(GetCertificateError(kDBusError),
|
| + utils::RunFunctionAndReturnError(func_.get(), kArgs, browser()));
|
| +}
|
| +
|
| +// Tests the API with all profiles types as determined by the test parameter.
|
| +class EPKPChallengeMachineKeyAllProfilesTest
|
| + : public EPKPChallengeMachineKeyTest,
|
| + public ::testing::WithParamInterface<
|
| + EPKPChallengeKeyTestBase::ProfileType> {
|
| + protected:
|
| + EPKPChallengeMachineKeyAllProfilesTest()
|
| + : EPKPChallengeMachineKeyTest(GetParam()) {}
|
| +};
|
| +
|
| +TEST_P(EPKPChallengeMachineKeyAllProfilesTest, Success) {
|
| // GetCertificate must be called exactly once.
|
| EXPECT_CALL(mock_attestation_flow_,
|
| GetCertificate(
|
| @@ -339,30 +399,19 @@ TEST_F(EPKPChallengeMachineKeyTest, Success) {
|
| EXPECT_EQ("cmVzcG9uc2U=" /* Base64 encoding of 'response' */, response);
|
| }
|
|
|
| -TEST_F(EPKPChallengeMachineKeyTest, AttestationNotPrepared) {
|
| - EXPECT_CALL(mock_cryptohome_client_, TpmAttestationIsPrepared(_))
|
| - .WillRepeatedly(Invoke(FakeBoolDBusMethod(
|
| - chromeos::DBUS_METHOD_CALL_SUCCESS, false)));
|
| -
|
| - EXPECT_EQ(GetCertificateError(kResetRequired),
|
| - utils::RunFunctionAndReturnError(func_.get(), kArgs, browser()));
|
| -}
|
| -
|
| -TEST_F(EPKPChallengeMachineKeyTest, AttestationPreparedDbusFailed) {
|
| - EXPECT_CALL(mock_cryptohome_client_, TpmAttestationIsPrepared(_))
|
| - .WillRepeatedly(Invoke(FakeBoolDBusMethod(
|
| - chromeos::DBUS_METHOD_CALL_FAILURE, true)));
|
| -
|
| - EXPECT_EQ(GetCertificateError(kDBusError),
|
| - utils::RunFunctionAndReturnError(func_.get(), kArgs, browser()));
|
| -}
|
| +INSTANTIATE_TEST_CASE_P(
|
| + AllProfiles,
|
| + EPKPChallengeMachineKeyAllProfilesTest,
|
| + ::testing::Values(EPKPChallengeKeyTestBase::ProfileType::USER_PROFILE,
|
| + EPKPChallengeKeyTestBase::ProfileType::SIGNIN_PROFILE));
|
|
|
| class EPKPChallengeUserKeyTest : public EPKPChallengeKeyTestBase {
|
| protected:
|
| static const char kArgs[];
|
|
|
| EPKPChallengeUserKeyTest()
|
| - : impl_(&mock_cryptohome_client_,
|
| + : EPKPChallengeKeyTestBase(ProfileType::USER_PROFILE),
|
| + impl_(&mock_cryptohome_client_,
|
| &mock_async_method_caller_,
|
| &mock_attestation_flow_,
|
| &stub_install_attributes_),
|
|
|