blob: 23003b258cf4d731c80f12851d037e8b531d1716 [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/preloading/preloading_prefs.h"
#include "chrome/browser/battery/battery_saver.h"
#include "chrome/browser/data_saver/data_saver.h"
#include "chrome/browser/prefetch/pref_names.h"
#include "components/pref_registry/pref_registry_syncable.h"
#include "components/prefs/pref_service.h"
#include "content/public/browser/preloading.h"
namespace prefetch {
void RegisterPredictionOptionsProfilePrefs(
user_prefs::PrefRegistrySyncable* registry) {
registry->RegisterIntegerPref(
prefs::kNetworkPredictionOptions,
static_cast<int>(NetworkPredictionOptions::kDefault),
user_prefs::PrefRegistrySyncable::SYNCABLE_PREF);
}
PreloadPagesState GetPreloadPagesState(const PrefService& prefs) {
NetworkPredictionOptions network_prediction_options =
static_cast<NetworkPredictionOptions>(
prefs.GetInteger(prefs::kNetworkPredictionOptions));
switch (network_prediction_options) {
case NetworkPredictionOptions::kExtended:
return PreloadPagesState::kExtendedPreloading;
case NetworkPredictionOptions::kStandard:
case NetworkPredictionOptions::kWifiOnlyDeprecated:
return PreloadPagesState::kStandardPreloading;
default:
// This is what will be used if the enterprise policy sets an invalid
// value. Also, if a new value is added in the future and the enterprise
// policy sets this value, old versions of Chrome will use this path.
return PreloadPagesState::kNoPreloading;
}
}
void SetPreloadPagesState(PrefService* prefs, PreloadPagesState state) {
DCHECK(prefs);
NetworkPredictionOptions value;
switch (state) {
case PreloadPagesState::kExtendedPreloading:
value = NetworkPredictionOptions::kExtended;
break;
case PreloadPagesState::kStandardPreloading:
value = NetworkPredictionOptions::kStandard;
break;
case PreloadPagesState::kNoPreloading:
value = NetworkPredictionOptions::kDisabled;
break;
default:
NOTREACHED() << "invalid PreloadPageState: " << static_cast<int>(state);
}
prefs->SetInteger(prefs::kNetworkPredictionOptions, static_cast<int>(value));
}
content::PreloadingEligibility IsSomePreloadingEnabled(
const PrefService& prefs) {
// Arrange the results roughly in order of decreasing transience.
if (GetPreloadPagesState(prefs) == PreloadPagesState::kNoPreloading) {
return content::PreloadingEligibility::kPreloadingDisabled;
}
if (data_saver::IsDataSaverEnabled()) {
return content::PreloadingEligibility::kDataSaverEnabled;
}
if (battery::IsBatterySaverEnabled()) {
return content::PreloadingEligibility::kBatterySaverEnabled;
}
return content::PreloadingEligibility::kEligible;
}
} // namespace prefetch