// Copyright 2023 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef NET_CERT_INTERNAL_TRUST_STORE_FEATURES_H_ #define NET_CERT_INTERNAL_TRUST_STORE_FEATURES_H_ #include "base/feature_list.h" #include "net/base/net_export.h" namespace net { // Returns true when platform TrustStore implementations should enforce // constraints encoded into X.509 certificate trust anchors. // When disabled, platform TrustStore implementations will not enforce anchor // constraints (other than expiry). // Has no effect if using a platform CertVerifyProc implementation. // TODO(https://crbug.com/1406103): remove this a few milestones after the // trust anchor constraints enforcement has been launched on all relevant // platforms. // Should only be called after base::Features have been resolved. Note that // using ScopedFeatureList to override this won't work properly in unittests, // use ScopedLocalAnchorConstraintsEnforcementForTesting instead. Using // ScopedFeatureList in browser_tests is fine. // It is safe to call this function on any thread. NET_EXPORT bool IsLocalAnchorConstraintsEnforcementEnabled(); // Override the feature flag. Don't call this without consulting // net/cert/OWNERS. // It is safe to call this function on any thread. NET_EXPORT void SetLocalAnchorConstraintsEnforcementEnabled(bool enabled); // Temporarily change the SetLocalAnchorConstraintsEnforcementEnabled value, // resetting to the original value when destructed. class NET_EXPORT ScopedLocalAnchorConstraintsEnforcementForTesting { public: explicit ScopedLocalAnchorConstraintsEnforcementForTesting(bool enabled) : previous_value_(IsLocalAnchorConstraintsEnforcementEnabled()) { SetLocalAnchorConstraintsEnforcementEnabled(enabled); } ~ScopedLocalAnchorConstraintsEnforcementForTesting() { SetLocalAnchorConstraintsEnforcementEnabled(previous_value_); } private: const bool previous_value_; }; namespace features { // Most code should not check this feature flag directly, instead use // IsLocalAnchorConstraintsEnforcementEnabled(). NET_EXPORT BASE_DECLARE_FEATURE(kEnforceLocalAnchorConstraints); } // namespace features } // namespace net #endif // NET_CERT_INTERNAL_TRUST_STORE_FEATURES_H_