Commit ca3e0258 authored by Toby Huang's avatar Toby Huang Committed by Commit Bot

Prevent regular users from affecting supervised user UMA metrics

ChromeManagementAPIDelegate::EnableExtension() is shared by both
regular and supervised users. This function calls
SupervisedUserService::AddOrUpdateExtensionApproval() which triggers
the kSupervisedUserApprovedExtensions syncable pref and the
SupervisedUsers.Extensions UMA histogram. Place guards in
AddOrUpdateExtensionApproval() and RemoveExtensionApproval() to only
permit supervised users.

Bug: 1073722
Change-Id: I16d73056d1002ce33d68705e7ceed3f6f961c9df
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2162134Reviewed-by: default avatarDevlin <rdevlin.cronin@chromium.org>
Reviewed-by: default avatarDan S <danan@chromium.org>
Commit-Queue: Toby Huang <tobyhuang@chromium.org>
Cr-Commit-Position: refs/heads/master@{#762054}
parent f07d07eb
......@@ -2822,6 +2822,26 @@ TEST_F(ExtensionServiceTestSupervised, ExtensionsLiteThemesAllowed) {
EXPECT_TRUE(registry()->enabled_extensions().Contains(id));
}
// Tests that regular users are not affecting supervised user UMA metrics.
TEST_F(ExtensionServiceTestSupervised,
RegularUsersNotAffectingSupervisedUserMetrics) {
InitServices(/*profile_is_supervised=*/false);
base::HistogramTester histogram_tester;
base::FilePath path = data_dir().AppendASCII("good.crx");
const Extension* extension = InstallCRX(path, INSTALL_NEW);
ASSERT_TRUE(extension);
supervised_user_service()->AddOrUpdateExtensionApproval(*extension);
histogram_tester.ExpectTotalCount("SupervisedUsers.Extensions", 0);
supervised_user_service()->RemoveExtensionApproval(*extension);
histogram_tester.ExpectTotalCount("SupervisedUsers.Extensions", 0);
}
#endif // BUILDFLAG(ENABLE_SUPERVISED_USERS)
// Tests sync behavior in the case of an item that starts out as an app and gets
......
......@@ -342,6 +342,8 @@ void SupervisedUserService::SetPrimaryPermissionCreatorForTest(
#if BUILDFLAG(ENABLE_EXTENSIONS)
void SupervisedUserService::AddOrUpdateExtensionApproval(
const extensions::Extension& extension) {
if (!active_)
return;
auto it = approved_extensions_map_.find(extension.id());
bool has_key = it != approved_extensions_map_.end();
ApprovedExtensionChange change_type = has_key
......@@ -358,6 +360,8 @@ void SupervisedUserService::AddOrUpdateExtensionApproval(
void SupervisedUserService::RemoveExtensionApproval(
const extensions::Extension& extension) {
if (!active_)
return;
UpdateApprovedExtension(extension.id(), extension.VersionString(),
ApprovedExtensionChange::kRemove);
}
......
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