blob: b7d368ffc52733090c76ae55a98100751cfb7a82 [file] [log] [blame]
// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_ASH_ARC_POLICY_ARC_POLICY_UTIL_H_
#define CHROME_BROWSER_ASH_ARC_POLICY_ARC_POLICY_UTIL_H_
#include <stdint.h>
#include <map>
#include <set>
#include <string>
#include "base/values.h"
class Profile;
namespace arc {
namespace policy_util {
constexpr char kArcPolicyKeyAccountTypesWithManagementDisabled[] =
"accountTypesWithManagementDisabled";
constexpr char kArcPolicyKeyAlwaysOnVpnPackage[] = "alwaysOnVpnPackage";
constexpr char kArcPolicyKeyApplications[] = "applications";
constexpr char kArcPolicyKeyAvailableAppSetPolicyDeprecated[] =
"availableAppSetPolicy";
constexpr char kArcPolicyKeyComplianceRules[] = "complianceRules";
constexpr char kArcPolicyKeyInstallUnknownSourcesDisabled[] =
"installUnknownSourcesDisabled";
constexpr char kArcPolicyKeyMaintenanceWindow[] = "maintenanceWindow";
constexpr char kArcPolicyKeyModifyAccountsDisabled[] = "modifyAccountsDisabled";
constexpr char kArcPolicyKeyPermissionGrants[] = "permissionGrants";
constexpr char kArcPolicyKeyPermittedAccessibilityServices[] =
"permittedAccessibilityServices";
constexpr char kArcPolicyKeyPlayStoreMode[] = "playStoreMode";
constexpr char kArcPolicyKeyShortSupportMessage[] = "shortSupportMessage";
constexpr char kArcPolicyKeyStatusReportingSettings[] =
"statusReportingSettings";
constexpr char kArcPolicyKeyWorkAccountAppWhitelistDeprecated[] =
"workAccountAppWhitelist";
constexpr char kArcPolicyKeyGuid[] = "guid";
constexpr char kArcPolicyKeyApkCacheEnabled[] = "apkCacheEnabled";
constexpr char kArcPolicyKeyMountPhysicalMediaDisabled[] =
"mountPhysicalMediaDisabled";
constexpr char kArcPolicyKeyDebuggingFeaturesDisabled[] =
"debuggingFeaturesDisabled";
constexpr char kArcPolicyKeyCameraDisabled[] = "cameraDisabled";
constexpr char kArcPolicyKeyPrintingDisabled[] = "printingDisabled";
constexpr char kArcPolicyKeyScreenCaptureDisabled[] = "screenCaptureDisabled";
constexpr char kArcPolicyKeyShareLocationDisabled[] = "shareLocationDisabled";
constexpr char kArcPolicyKeyUnmuteMicrophoneDisabled[] =
"unmuteMicrophoneDisabled";
constexpr char kArcPolicyKeySetWallpaperDisabled[] = "setWallpaperDisabled";
constexpr char kArcPolicyKeyVpnConfigDisabled[] = "vpnConfigDisabled";
constexpr char kArcPolicyKeyPrivateKeySelectionEnabled[] =
"privateKeySelectionEnabled";
constexpr char kArcPolicyKeyChoosePrivateKeyRules[] = "choosePrivateKeyRules";
constexpr char kArcPolicyKeyCredentialsConfigDisabled[] =
"credentialsConfigDisabled";
constexpr char kArcPolicyKeyCaCerts[] = "caCerts";
constexpr char kArcPolicyKeyRequiredKeyPairs[] = "requiredKeyPairs";
constexpr char kArcPolicyKeyDpsInteractionsDisabled[] =
"dpsInteractionsDisabled";
constexpr char kArcPolicyKeyEnabledSystemAppPackageNames[] =
"enabledSystemAppPackageNames";
// An app's install type specified by the policy.
// See google3/wireless/android/enterprise/clouddps/proto/schema.proto.
// These values are logged to UMA. Entries should not be renumbered and
// numeric values should never be reused. Please keep in sync with
// "AppInstallType" in src/tools/metrics/histograms/enums.xml.
enum class InstallType {
kUnknown = 0,
kOptional = 1,
kRequired = 2,
kPreload = 3,
kForceInstalled = 4,
kBlocked = 5,
kAvailable = 6,
kRequiredForSetup = 7,
kKiosk = 8,
kMaxValue = kKiosk,
};
// A sub policy key inside ArcPolicy object.
// These values are logged to UMA. Entries should not be renumbered and
// numeric values should never be reused. Please keep in sync with
// "ArcPolicyKey" in src/tools/metrics/histograms/enums.xml.
enum class ArcPolicyKey {
kUnknown = 0,
kAccountTypesWithManagementDisabled = 1,
kAlwaysOnVpnPackage = 2,
kApplications = 3,
kAvailableAppSetPolicyDeprecated = 4,
kComplianceRules = 5,
kInstallUnknownSourcesDisabled = 6,
kMaintenanceWindow = 7,
kModifyAccountsDisabled = 8,
kPermissionGrants = 9,
kPermittedAccessibilityServices = 10,
kPlayStoreMode = 11,
kShortSupportMessage = 12,
kStatusReportingSettings = 13,
kWorkAccountAppWhitelistDeprecated = 14,
kApkCacheEnabled = 15,
kDebuggingFeaturesDisabled = 16,
kCameraDisabled = 17,
kPrintingDisabled = 18,
kScreenCaptureDisabled = 19,
kShareLocationDisabled = 20,
kUnmuteMicrophoneDisabled = 21,
kSetWallpaperDisabled = 22,
kVpnConfigDisabled = 23,
kPrivateKeySelectionEnabled = 24,
kChoosePrivateKeyRules = 25,
kCredentialsConfigDisabled = 26,
kCaCerts = 27,
kRequiredKeyPairs = 28,
kEnabledSystemAppPackageNames = 29,
kMaxValue = kEnabledSystemAppPackageNames,
};
// Returns true if the account is managed. Otherwise false.
bool IsAccountManaged(const Profile* profile);
// Returns true if ARC is disabled by --enterprise-disable-arc flag.
bool IsArcDisabledForEnterprise();
// Returns set of packages requested to install from |arc_policy|. |arc_policy|
// has JSON blob format, see
// https://cloud.google.com/docs/chrome-enterprise/policies/?policy=ArcPolicy
std::set<std::string> GetRequestedPackagesFromArcPolicy(
const std::string& arc_policy);
// Records metrics about the policy e.g. keys, install types, etc.
void RecordPolicyMetrics(const std::string& arc_policy);
// Maps an app install type to all packages within the policy that have this
// install type.
std::map<std::string, std::set<std::string>> CreateInstallTypeMap(
const base::Value& dict);
// Converts a string to its corresponding InstallType enum.
InstallType GetInstallTypeEnumFromString(const std::string& install_type);
// Converts a string to its corresponding ArcPolicyKey enum.
std::optional<ArcPolicyKey> GetPolicyKeyFromString(
const std::string& policy_key);
// Parses policy JSON string to a dictionary.
std::optional<base::Value> ParsePolicyJson(const std::string& arc_policy);
} // namespace policy_util
} // namespace arc
#endif // CHROME_BROWSER_ASH_ARC_POLICY_ARC_POLICY_UTIL_H_