blob: 02156a0745545a9f9521f9f64a8a5a33e8a1a372 [file] [log] [blame]
// 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_