1 // Copyright 2020 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "system_features_disable_list_policy_handler.h" 6 7 #include "ash/public/cpp/ash_pref_names.h" 8 #include "base/logging.h" 9 #include "base/metrics/histogram_functions.h" 10 #include "base/values.h" 11 #include "components/policy/core/common/policy_pref_names.h" 12 #include "components/policy/policy_constants.h" 13 #include "components/prefs/pref_registry_simple.h" 14 15 namespace policy { 16 17 const char kCameraFeature[] = "camera"; 18 const char kBrowserSettingsFeature[] = "browser_settings"; 19 const char kOsSettingsFeature[] = "os_settings"; 20 const char kScanningFeature[] = "scanning"; 21 22 const char kSystemFeaturesDisableListHistogram[] = 23 "Enterprise.SystemFeaturesDisableList"; 24 SystemFeaturesDisableListPolicyHandler()25SystemFeaturesDisableListPolicyHandler::SystemFeaturesDisableListPolicyHandler() 26 : policy::ListPolicyHandler(key::kSystemFeaturesDisableList, 27 base::Value::Type::STRING) {} 28 29 SystemFeaturesDisableListPolicyHandler:: 30 ~SystemFeaturesDisableListPolicyHandler() = default; 31 RegisterPrefs(PrefRegistrySimple * registry)32void SystemFeaturesDisableListPolicyHandler::RegisterPrefs( 33 PrefRegistrySimple* registry) { 34 registry->RegisterListPref(policy_prefs::kSystemFeaturesDisableList); 35 } 36 ApplyList(base::Value filtered_list,PrefValueMap * prefs)37void SystemFeaturesDisableListPolicyHandler::ApplyList( 38 base::Value filtered_list, 39 PrefValueMap* prefs) { 40 DCHECK(filtered_list.is_list()); 41 42 base::Value enums_list(base::Value::Type::LIST); 43 bool os_settings_enabled = true; 44 45 base::Value* old_list = nullptr; 46 prefs->GetValue(policy_prefs::kSystemFeaturesDisableList, &old_list); 47 48 for (const auto& element : filtered_list.GetList()) { 49 SystemFeature feature = ConvertToEnum(element.GetString()); 50 enums_list.Append(feature); 51 if (feature == SystemFeature::OS_SETTINGS) 52 os_settings_enabled = false; 53 54 if (!old_list || 55 !base::Contains(old_list->GetList(), base::Value(feature))) { 56 base::UmaHistogramEnumeration(kSystemFeaturesDisableListHistogram, 57 feature); 58 } 59 } 60 61 prefs->SetValue(policy_prefs::kSystemFeaturesDisableList, 62 std::move(enums_list)); 63 prefs->SetBoolean(ash::prefs::kOsSettingsEnabled, os_settings_enabled); 64 } 65 ConvertToEnum(const std::string & system_feature)66SystemFeature SystemFeaturesDisableListPolicyHandler::ConvertToEnum( 67 const std::string& system_feature) { 68 if (system_feature == kCameraFeature) 69 return SystemFeature::CAMERA; 70 if (system_feature == kOsSettingsFeature) 71 return SystemFeature::OS_SETTINGS; 72 if (system_feature == kBrowserSettingsFeature) 73 return SystemFeature::BROWSER_SETTINGS; 74 if (system_feature == kScanningFeature) 75 return SystemFeature::SCANNING; 76 77 LOG(ERROR) << "Unsupported system feature: " << system_feature; 78 return UNKNOWN_SYSTEM_FEATURE; 79 } 80 81 } // namespace policy 82