blob: 125b88beb05cc2736059115c408153e21a71d245 [file] [log] [blame]
// Copyright 2021 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/renderer/platform/back_forward_cache_utils.h"
#include "base/feature_list.h"
#include "base/metrics/field_trial_params.h"
#include "third_party/blink/public/common/features.h"
#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
namespace blink {
bool IsInflightNetworkRequestBackForwardCacheSupportEnabled() {
// Note that the call to RuntimeEnabledFeatures::BackForwardCacheEnabled()
// must be done first to ensure we will never call
// base::FeatureList::IsEnabled(features::kLoadingTasksUnfreezable) when
// back-forward cache is not enabled. This is important because IsEnabled()
// might trigger activation of the current user in BackForwardCache's field
// trial group even though it shouldn't (e.g. when BackForwardCache is
// disabled due to low RAM), lowering the back-forward cache hit rate.
// TODO(rakina): Remove BackForwardCache from RuntimeEnabledFeatures and move
// features::kBackForwardCache and BackForwardCacheMemoryControls from
// content/ to blink/public, so that we can combine this check with the checks
// in content/.
return RuntimeEnabledFeatures::BackForwardCacheEnabled() &&
base::FeatureList::IsEnabled(features::kLoadingTasksUnfreezable);
}
bool IsFreezeWhileKeepActiveBackForwardCacheSupportEnabled() {
// Similar to in IsInflightNetworkRequestBackForwardCacheSupportEnabled(), the
// call to RuntimeEnabledFeatures::BackForwardCacheEnabled() must be done
// first.
return RuntimeEnabledFeatures::BackForwardCacheEnabled() &&
base::FeatureList::IsEnabled(features::kFreezeWhileKeepActive);
}
int GetLoadingTasksUnfreezableParamAsInt(const std::string& param_name,
int default_value) {
if (!IsInflightNetworkRequestBackForwardCacheSupportEnabled())
return default_value;
return base::GetFieldTrialParamByFeatureAsInt(
blink::features::kLoadingTasksUnfreezable, param_name, default_value);
}
} // namespace blink