blob: ba887e7e7cb123e7ee8c3f081a533cb01b7fd504 [file] [log] [blame]
// Copyright 2025 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_PROXY_CONFIG_PROXY_OVERRIDE_RULES_POLICY_HANDLER_H_
#define COMPONENTS_PROXY_CONFIG_PROXY_OVERRIDE_RULES_POLICY_HANDLER_H_
#include "base/values.h"
#include "components/policy/core/browser/configuration_policy_handler.h"
#include "components/proxy_config/proxy_config_export.h"
namespace proxy_config {
class PROXY_CONFIG_EXPORT ProxyOverrideRulesPolicyHandler
: public policy::SchemaValidatingPolicyHandler {
public:
explicit ProxyOverrideRulesPolicyHandler(policy::Schema schema);
~ProxyOverrideRulesPolicyHandler() override;
// policy::CloudOnlyPolicyHandler:
bool CheckPolicySettings(const policy::PolicyMap& policies,
policy::PolicyErrorMap* errors) override;
void ApplyPolicySettings(const policy::PolicyMap& policies,
PrefValueMap* prefs) override;
private:
// Helpers that parse the provided `value`s and checks that they are coherent
// with the policy's expected formats. These functions are called after the
// basic schema validation done in `CheckPolicySettings`. Returns false if the
// passed `value` should result in its rule not being valid overall.
bool CheckRule(const base::Value::Dict& value,
policy::PolicyErrorPath error_path,
policy::PolicyErrorMap* errors);
bool CheckDestinations(const base::Value& value,
policy::PolicyErrorPath error_path,
policy::PolicyErrorMap* errors);
bool CheckProxyList(const base::Value& value,
policy::PolicyErrorPath error_path,
policy::PolicyErrorMap* errors);
bool CheckConditions(const base::Value& value,
policy::PolicyErrorPath error_path,
policy::PolicyErrorMap* errors);
bool CheckConditionEntry(const base::Value& value,
policy::PolicyErrorPath error_path,
policy::PolicyErrorMap* errors);
// Helper to populate errors in chrome://policy. No-op if `errors` is null.
void AddError(int message_id,
policy::PolicyErrorPath error_path,
policy::PolicyErrorMap* errors);
void AddError(int message_id,
const std::string& parameter,
policy::PolicyErrorPath error_path,
policy::PolicyErrorMap* errors);
};
} // namespace proxy_config
#endif // COMPONENTS_PROXY_CONFIG_PROXY_OVERRIDE_RULES_POLICY_HANDLER_H_