blob: 60490d35a770a4974e23fd2ed8edd214b198654a [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_PUBLIC_COMMON_FEATURE_POLICY_POLICY_VALUE_H_
#define THIRD_PARTY_BLINK_PUBLIC_COMMON_FEATURE_POLICY_POLICY_VALUE_H_
#include "base/macros.h"
#include "third_party/blink/public/common/common_export.h"
#include "third_party/blink/public/mojom/feature_policy/policy_value.mojom-shared.h"
namespace blink {
// ListValue (PolicyValue)
// ----------------------
// PolicyValue is a union of types (int / double / set<int> / bool ) that can be
// used to specify the parameter of a policy.
// TODO(crbug.com/1119481): Add the following types: enum, inc/dec int, inc
// double, set.
class BLINK_COMMON_EXPORT PolicyValue {
public:
PolicyValue();
static PolicyValue CreateBool(bool);
static PolicyValue CreateDecDouble(double);
static PolicyValue CreateEnum(int32_t);
// A 'max' PolicyValue is the most permissive value for the policy.
static PolicyValue CreateMaxPolicyValue(mojom::PolicyValueType type);
// A 'min' PolicyValue is the most restrictive value for the policy.
static PolicyValue CreateMinPolicyValue(mojom::PolicyValueType type);
mojom::PolicyValueType Type() const { return type_; }
void SetType(mojom::PolicyValueType type) { type_ = type; }
// PolicyValue getters.
// Note the getters also DCHECKs that the type is correct.
bool BoolValue() const;
double DoubleValue() const;
int32_t IntValue() const;
// PolicyValue setters.
// Note the getters also DCHECKs that the type is correct.
void SetBoolValue(bool bool_value);
void SetDoubleValue(double double_value);
void SetIntValue(int32_t int_value);
// Operater overrides
PolicyValue& operator=(const PolicyValue& rhs);
void SetToMax();
void SetToMin();
// Test whether this policy value is compatible with required policy value.
// Note: a.IsCompatibleWith(b) == true does not necessary indicate
// b.IsCompatibleWith(a) == false, because not all policy value types support
// strictness comparison, e.g. enum.
bool IsCompatibleWith(const PolicyValue& required) const;
private:
explicit PolicyValue(bool bool_value);
PolicyValue(int32_t int_value, mojom::PolicyValueType type);
PolicyValue(double double_value, mojom::PolicyValueType type);
mojom::PolicyValueType type_;
bool bool_value_ = false;
double double_value_ = 0.0;
int32_t int_value_ = -1;
};
bool BLINK_COMMON_EXPORT operator==(const PolicyValue& lhs,
const PolicyValue& rhs);
bool BLINK_COMMON_EXPORT operator!=(const PolicyValue& lhs,
const PolicyValue& rhs);
} // namespace blink
#endif // THIRD_PARTY_BLINK_PUBLIC_COMMON_FEATURE_POLICY_POLICY_VALUE_H_