| // 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. |
| |
| #include "third_party/blink/public/common/feature_policy/policy_value.h" |
| |
| #include "third_party/blink/public/mojom/feature_policy/policy_value.mojom.h" |
| |
| namespace blink { |
| |
| PolicyValue::PolicyValue() : type_(mojom::PolicyValueType::kNull) {} |
| |
| // static |
| PolicyValue PolicyValue::CreateBool(bool value) { |
| return PolicyValue(value); |
| } |
| |
| // static |
| PolicyValue PolicyValue::CreateDecDouble(double value) { |
| return PolicyValue(value, mojom::PolicyValueType::kDecDouble); |
| } |
| |
| // static |
| PolicyValue PolicyValue::CreateEnum(int32_t value) { |
| return PolicyValue(value, mojom::PolicyValueType::kEnum); |
| } |
| |
| PolicyValue::PolicyValue(bool bool_value) |
| : type_(mojom::PolicyValueType::kBool), bool_value_(bool_value) {} |
| |
| PolicyValue::PolicyValue(double double_value, mojom::PolicyValueType type) |
| : type_(type), double_value_(double_value) { |
| DCHECK_EQ(type, mojom::PolicyValueType::kDecDouble); |
| } |
| |
| PolicyValue::PolicyValue(int32_t int_value, mojom::PolicyValueType type) |
| : type_(type), int_value_(int_value) { |
| DCHECK_EQ(type, mojom::PolicyValueType::kEnum); |
| } |
| |
| PolicyValue PolicyValue::CreateMaxPolicyValue(mojom::PolicyValueType type) { |
| PolicyValue value; |
| value.SetType(type); |
| value.SetToMax(); |
| return value; |
| } |
| |
| PolicyValue PolicyValue::CreateMinPolicyValue(mojom::PolicyValueType type) { |
| PolicyValue value; |
| value.SetType(type); |
| value.SetToMin(); |
| return value; |
| } |
| |
| bool PolicyValue::BoolValue() const { |
| DCHECK_EQ(type_, mojom::PolicyValueType::kBool); |
| return bool_value_; |
| } |
| |
| double PolicyValue::DoubleValue() const { |
| DCHECK_EQ(type_, mojom::PolicyValueType::kDecDouble); |
| return double_value_; |
| } |
| |
| int32_t PolicyValue::IntValue() const { |
| DCHECK_EQ(type_, mojom::PolicyValueType::kEnum); |
| return int_value_; |
| } |
| |
| void PolicyValue::SetBoolValue(bool bool_value) { |
| DCHECK_EQ(mojom::PolicyValueType::kBool, type_); |
| bool_value_ = bool_value; |
| } |
| |
| void PolicyValue::SetDoubleValue(double double_value) { |
| DCHECK_EQ(mojom::PolicyValueType::kDecDouble, type_); |
| double_value_ = double_value; |
| } |
| |
| void PolicyValue::SetIntValue(int32_t int_value) { |
| DCHECK_EQ(mojom::PolicyValueType::kEnum, type_); |
| int_value_ = int_value; |
| } |
| |
| PolicyValue& PolicyValue::operator=(const PolicyValue& rhs) { |
| if (this != &rhs) { |
| type_ = rhs.type_; |
| bool_value_ = rhs.bool_value_; |
| double_value_ = rhs.double_value_; |
| int_value_ = rhs.int_value_; |
| } |
| return *this; |
| } |
| |
| bool operator==(const PolicyValue& lhs, const PolicyValue& rhs) { |
| if (lhs.Type() != rhs.Type()) |
| return false; |
| switch (lhs.Type()) { |
| case mojom::PolicyValueType::kBool: |
| return lhs.BoolValue() == rhs.BoolValue(); |
| case mojom::PolicyValueType::kDecDouble: |
| return lhs.DoubleValue() == rhs.DoubleValue(); |
| case mojom::PolicyValueType::kEnum: |
| return lhs.IntValue() == rhs.IntValue(); |
| case mojom::PolicyValueType::kNull: |
| return true; |
| } |
| NOTREACHED(); |
| return false; |
| } |
| |
| bool operator!=(const PolicyValue& lhs, const PolicyValue& rhs) { |
| return !(lhs == rhs); |
| } |
| |
| bool PolicyValue::IsCompatibleWith(const PolicyValue& required) const { |
| DCHECK_EQ(type_, required.Type()); |
| switch (type_) { |
| case mojom::PolicyValueType::kBool: |
| return !bool_value_ || required.bool_value_; |
| case mojom::PolicyValueType::kDecDouble: |
| return double_value_ <= required.double_value_; |
| case mojom::PolicyValueType::kEnum: |
| return int_value_ == required.int_value_; |
| case mojom::PolicyValueType::kNull: |
| NOTREACHED(); |
| break; |
| } |
| return false; |
| } |
| |
| void PolicyValue::SetToMax() { |
| switch (type_) { |
| case mojom::PolicyValueType::kBool: |
| bool_value_ = true; |
| break; |
| case mojom::PolicyValueType::kDecDouble: |
| double_value_ = std::numeric_limits<double>::infinity(); |
| break; |
| default: |
| NOTREACHED(); |
| } |
| return; |
| } |
| |
| void PolicyValue::SetToMin() { |
| switch (type_) { |
| case mojom::PolicyValueType::kBool: |
| bool_value_ = false; |
| break; |
| case mojom::PolicyValueType::kDecDouble: |
| double_value_ = 0.0; |
| break; |
| default: |
| NOTREACHED(); |
| } |
| return; |
| } |
| |
| } // namespace blink |