| // Copyright 2018 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_POLICY_DEVELOPER_TOOLS_POLICY_HANDLER_H_ | 
 | #define CHROME_BROWSER_POLICY_DEVELOPER_TOOLS_POLICY_HANDLER_H_ | 
 |  | 
 | #include "chrome/browser/policy/extension_developer_mode_policy_handler.h" | 
 | #include "components/policy/core/browser/configuration_policy_handler.h" | 
 | #include "extensions/buildflags/buildflags.h" | 
 |  | 
 | class Profile; | 
 |  | 
 | namespace user_prefs { | 
 | class PrefRegistrySyncable; | 
 | } | 
 |  | 
 | namespace policy { | 
 |  | 
 | // Handles the DeveloperToolsDisabled and DeveloperToolsAvailability policies. | 
 | // Controls the managed values of the prefs |kDevToolsAvailability| and | 
 | // |kExtensionsUIDeveloperMode|. | 
 | class DeveloperToolsPolicyHandler : public ConfigurationPolicyHandler { | 
 |  public: | 
 |   DeveloperToolsPolicyHandler(); | 
 |   DeveloperToolsPolicyHandler(const DeveloperToolsPolicyHandler&) = delete; | 
 |   DeveloperToolsPolicyHandler& operator=(const DeveloperToolsPolicyHandler&) = | 
 |       delete; | 
 |   ~DeveloperToolsPolicyHandler() override; | 
 |  | 
 |   // Developer tools availability as set by policy. The values must match the | 
 |   // 'DeveloperToolsAvailability' policy definition. | 
 |   enum class Availability { | 
 |     // Default: Developer tools are allowed, except for policy-installed | 
 |     // extensions and, if this is a managed profile, component extensions. | 
 |     kDisallowedForForceInstalledExtensions = 0, | 
 |     // Developer tools allowed in all contexts. | 
 |     kAllowed = 1, | 
 |     // Developer tools disallowed in all contexts. | 
 |     kDisallowed = 2, | 
 |     // Maximal valid value for range checking. | 
 |     kMaxValue = kDisallowed | 
 |   }; | 
 |  | 
 |   // ConfigurationPolicyHandler methods: | 
 |   bool CheckPolicySettings(const policy::PolicyMap& policies, | 
 |                            policy::PolicyErrorMap* errors) override; | 
 |   void ApplyPolicySettings(const PolicyMap& policies, | 
 |                            PrefValueMap* prefs) override; | 
 |  | 
 |   // Registers the pref for policy-set developer tools availability in | 
 |   // |registry|. | 
 |   static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); | 
 |  | 
 |   // Returns the effective developer tools availability for the profile. | 
 |   static Availability GetEffectiveAvailability(Profile* profile); | 
 |  | 
 |  private: | 
 | #if BUILDFLAG(ENABLE_EXTENSIONS) | 
 |   // This instance should only be used for calling IsValidPolicySet() and not | 
 |   // for applying the policy settings. The latter is done by the instance which | 
 |   // is added in `ConfigurationPolicyHandlerList`. | 
 |   ExtensionDeveloperModePolicyHandler extension_developer_mode_policy_handler_; | 
 | #endif  // BUILDFLAG(ENABLE_EXTENSIONS) | 
 | }; | 
 |  | 
 | }  // namespace policy | 
 |  | 
 | #endif  // CHROME_BROWSER_POLICY_DEVELOPER_TOOLS_POLICY_HANDLER_H_ |