Commit 41c0c590 authored by Robin Lewis's avatar Robin Lewis Committed by Commit Bot

Create GCPW root key at installation.

This would otherwise be created once a user logs in. This reduces friction if the admin wants to set registry entries before anyone has signed in.

Bug: 1047460
Change-Id: I035717a3c46513a23540f9b19274841b5eff3667
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2031872Reviewed-by: default avatarTien Mai <tienmai@chromium.org>
Commit-Queue: Robin Lewis <wrlewis@google.com>
Cr-Commit-Position: refs/heads/master@{#737447}
parent f3495948
......@@ -28,6 +28,7 @@
#include "chrome/credential_provider/common/gcp_strings.h"
#include "chrome/credential_provider/gaiacp/gcp_utils.h"
#include "chrome/credential_provider/gaiacp/logging.h"
#include "chrome/credential_provider/gaiacp/reg_utils.h"
#include "chrome/installer/util/delete_after_reboot_helper.h"
namespace credential_provider {
......@@ -239,6 +240,12 @@ HRESULT DoInstall(const base::FilePath& installer_path,
// through.
}
hr = WriteCredentialProviderRegistryValues();
if (FAILED(hr)) {
LOGFN(ERROR) << "WriteCredentialProviderRegistryValues failed hr="
<< putHR(hr);
}
return S_OK;
}
......@@ -380,4 +387,18 @@ HRESULT WriteUninstallRegistryValues(const base::FilePath& setup_exe) {
return HRESULT_FROM_WIN32(status);
}
HRESULT WriteCredentialProviderRegistryValues() {
base::win::RegKey key;
LONG status = key.Create(HKEY_LOCAL_MACHINE, kGcpRootKeyName,
KEY_SET_VALUE | KEY_WOW64_32KEY);
if (status != ERROR_SUCCESS) {
HRESULT hr = HRESULT_FROM_WIN32(status);
LOGFN(ERROR) << "Unable to create " << kGcpRootKeyName
<< " hr=" << putHR(hr);
return hr;
}
return HRESULT_FROM_WIN32(status);
}
} // namespace credential_provider
......@@ -62,6 +62,9 @@ int EnableStatsCollection(const base::CommandLine& cmdline);
// ClientState key in support of uninstallation by the MSI wrapper.
HRESULT WriteUninstallRegistryValues(const base::FilePath& setup_exe);
// Writes the registry entries Credential Provider uses at runtime.
HRESULT WriteCredentialProviderRegistryValues();
} // namespace credential_provider
#endif // CHROME_CREDENTIAL_PROVIDER_SETUP_SETUP_LIB_H_
......@@ -34,6 +34,7 @@
#include "chrome/credential_provider/gaiacp/gaia_credential_provider.h"
#include "chrome/credential_provider/gaiacp/gaia_credential_provider_i.h"
#include "chrome/credential_provider/gaiacp/gcp_utils.h"
#include "chrome/credential_provider/gaiacp/reg_utils.h"
#include "chrome/credential_provider/setup/setup_lib.h"
#include "chrome/credential_provider/test/gcp_fakes.h"
#include "testing/gtest/include/gtest/gtest.h"
......@@ -54,6 +55,7 @@ class GcpSetupTest : public ::testing::Test {
void ExpectCredentialProviderToBeRegistered(
bool registered,
const base::string16& product_version);
void ExpectRequiredRegistryEntriesToBePresent();
base::FilePath installed_path_for_version(
const base::string16& product_version) {
......@@ -176,6 +178,11 @@ void GcpSetupTest::ExpectCredentialProviderToBeRegistered(
}
}
void GcpSetupTest::ExpectRequiredRegistryEntriesToBePresent() {
base::win::RegKey key(HKEY_LOCAL_MACHINE, kGcpRootKeyName, KEY_READ);
EXPECT_TRUE(key.Valid());
}
void GcpSetupTest::SetUp() {
ASSERT_TRUE(SUCCEEDED(
CoInitializeEx(nullptr, COINIT_MULTITHREADED | COINIT_DISABLE_OLE1DDE)));
......@@ -230,6 +237,7 @@ TEST_F(GcpSetupTest, DoInstall) {
DoInstall(module_path(), product_version(), fakes_for_testing()));
ExpectAllFilesToExist(true, product_version());
ExpectCredentialProviderToBeRegistered(true, product_version());
ExpectRequiredRegistryEntriesToBePresent();
EXPECT_FALSE(
fake_os_user_manager()->GetUserInfo(kDefaultGaiaAccountName).sid.empty());
......@@ -504,6 +512,20 @@ TEST_F(GcpSetupTest, WriteUninstallStrings) {
expected_uninstall_arguments.GetCommandLineString());
}
TEST_F(GcpSetupTest, WriteCredentialProviderRegistryValues) {
// Verify keys don't exist.
base::win::RegKey key;
ASSERT_NE(ERROR_SUCCESS, key.Open(HKEY_LOCAL_MACHINE, kGcpRootKeyName,
KEY_ALL_ACCESS | KEY_WOW64_32KEY));
// Write GCPW registry keys.
ASSERT_EQ(S_OK, WriteCredentialProviderRegistryValues());
// Verify keys were created.
ASSERT_EQ(ERROR_SUCCESS, key.Open(HKEY_LOCAL_MACHINE, kGcpRootKeyName,
KEY_ALL_ACCESS | KEY_WOW64_32KEY));
}
TEST_F(GcpSetupTest, DoInstallWritesUninstallStrings) {
logging::ResetEventSourceForTesting();
......
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