1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_NET_PREDICTION_OPTIONS_H_
6#define CHROME_BROWSER_NET_PREDICTION_OPTIONS_H_
7
8namespace user_prefs {
9class PrefRegistrySyncable;
10}
11
12class PrefService;
13class ProfileIOData;
14
15namespace chrome_browser_net {
16
17// Enum describing when to allow network predictions based on connection type.
18// The numerical value is stored in the prefs file, therefore the same enum
19// with the same order must be used by the platform-dependent components.
20enum NetworkPredictionOptions {
21  NETWORK_PREDICTION_ALWAYS,
22  NETWORK_PREDICTION_WIFI_ONLY,
23  NETWORK_PREDICTION_NEVER,
24  NETWORK_PREDICTION_DEFAULT = NETWORK_PREDICTION_WIFI_ONLY,
25};
26
27void RegisterPredictionOptionsProfilePrefs(
28    user_prefs::PrefRegistrySyncable* registry);
29
30// Migrate prefs::kNetworkPredictionEnabled user setting (if exists) to
31// prefs::kNetworkPredictionOptions (if does not have user setting).
32void MigrateNetworkPredictionUserPrefs(PrefService* pref_service);
33
34// The following two global functions determine whether prefetching
35// and prerendering are enabled, based on preferences and network type.
36
37// To be executed on the IO thread only.
38bool CanPrefetchAndPrerenderIO(ProfileIOData* profile_io_data);
39
40// To be executed on the UI thread only.
41bool CanPrefetchAndPrerenderUI(PrefService* prefs);
42
43// The following two global functions determine whether TCP preconnect
44// and DNS preresolution are enabled, based on preferences.
45
46// To be executed on the IO thread only.
47bool CanPreresolveAndPreconnectIO(ProfileIOData* profile_io_data);
48
49// To be executed on the UI thread only.
50bool CanPreresolveAndPreconnectUI(PrefService* prefs);
51
52}  // namespace chrome_browser_net
53
54#endif  // CHROME_BROWSER_NET_PREDICTION_OPTIONS_H_
55