48 lines
1.6 KiB
Java
48 lines
1.6 KiB
Java
// Copyright 2022 The Chromium Authors
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
package org.chromium.base;
|
|
|
|
/**
|
|
* Flags of this type are un-cached flags that may be called before native,
|
|
* but not primarily. They have good default values to use before native is loaded,
|
|
* and will switch to using the native value once native is loaded.
|
|
* These flags replace code like:
|
|
* if (FeatureList.isInitialized() && SomeFeatureMap.isEnabled(featureName))
|
|
* or
|
|
* if (!FeatureList.isInitialized() || SomeFeatureMap.isEnabled(featureName)).
|
|
*/
|
|
public class MutableFlagWithSafeDefault extends Flag {
|
|
private final boolean mDefaultValue;
|
|
private final FeatureMap mFeatureMap;
|
|
private Boolean mInMemoryCachedValue;
|
|
|
|
public MutableFlagWithSafeDefault(
|
|
FeatureMap featureMap, String featureName, boolean defaultValue) {
|
|
super(featureName);
|
|
mFeatureMap = featureMap;
|
|
mDefaultValue = defaultValue;
|
|
}
|
|
|
|
@Override
|
|
public boolean isEnabled() {
|
|
if (mInMemoryCachedValue != null) return mInMemoryCachedValue;
|
|
if (FeatureList.hasTestFeature(mFeatureName)) {
|
|
return mFeatureMap.isEnabledInNative(mFeatureName);
|
|
}
|
|
|
|
if (FeatureList.isNativeInitialized()) {
|
|
mInMemoryCachedValue = mFeatureMap.isEnabledInNative(mFeatureName);
|
|
return mInMemoryCachedValue;
|
|
}
|
|
|
|
return mDefaultValue;
|
|
}
|
|
|
|
@Override
|
|
protected void clearInMemoryCachedValueForTesting() {
|
|
mInMemoryCachedValue = null;
|
|
}
|
|
}
|