Add new certificateProvider extension API.
[chromium-blink-merge.git] / chrome / browser / policy / network_prediction_policy_handler.cc
blobdd8fa7f11f567ebd81b58f10390c9ec8efea1cfb
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.
5 #include "chrome/browser/policy/network_prediction_policy_handler.h"
7 #include "base/prefs/pref_value_map.h"
8 #include "base/values.h"
9 #include "chrome/browser/net/prediction_options.h"
10 #include "chrome/common/pref_names.h"
11 #include "components/policy/core/browser/policy_error_map.h"
12 #include "components/policy/core/common/policy_map.h"
13 #include "grit/components_strings.h"
14 #include "policy/policy_constants.h"
16 namespace policy {
18 NetworkPredictionPolicyHandler::NetworkPredictionPolicyHandler() {
21 NetworkPredictionPolicyHandler::~NetworkPredictionPolicyHandler() {
24 bool NetworkPredictionPolicyHandler::CheckPolicySettings(
25 const PolicyMap& policies,
26 PolicyErrorMap* errors) {
27 // Deprecated boolean preference.
28 const base::Value* network_prediction_enabled =
29 policies.GetValue(key::kDnsPrefetchingEnabled);
30 // New enumerated preference.
31 const base::Value* network_prediction_options =
32 policies.GetValue(key::kNetworkPredictionOptions);
34 if (network_prediction_enabled &&
35 !network_prediction_enabled->IsType(base::Value::TYPE_BOOLEAN)) {
36 errors->AddError(key::kDnsPrefetchingEnabled,
37 IDS_POLICY_TYPE_ERROR,
38 ValueTypeToString(base::Value::TYPE_BOOLEAN));
41 if (network_prediction_options &&
42 !network_prediction_options->IsType(base::Value::TYPE_INTEGER)) {
43 errors->AddError(key::kNetworkPredictionOptions,
44 IDS_POLICY_TYPE_ERROR,
45 ValueTypeToString(base::Value::TYPE_INTEGER));
48 if (network_prediction_enabled && network_prediction_options) {
49 errors->AddError(key::kDnsPrefetchingEnabled,
50 IDS_POLICY_OVERRIDDEN,
51 key::kNetworkPredictionOptions);
54 return true;
57 void NetworkPredictionPolicyHandler::ApplyPolicySettings(
58 const PolicyMap& policies,
59 PrefValueMap* prefs) {
60 // If new preference is managed by policy, apply it to both preferences.
61 const base::Value* network_prediction_options =
62 policies.GetValue(key::kNetworkPredictionOptions);
63 int int_setting;
64 if (network_prediction_options &&
65 network_prediction_options->GetAsInteger(&int_setting)) {
66 prefs->SetInteger(prefs::kNetworkPredictionOptions, int_setting);
67 // Be conservative here and only set Enabled if policy says ALWAYS.
68 prefs->SetBoolean(
69 prefs::kNetworkPredictionEnabled,
70 int_setting == chrome_browser_net::NETWORK_PREDICTION_ALWAYS);
71 return;
74 // If deprecated preference is managed by policy, apply it to both
75 // preferences.
76 const base::Value* network_prediction_enabled =
77 policies.GetValue(key::kDnsPrefetchingEnabled);
78 bool bool_setting;
79 if (network_prediction_enabled &&
80 network_prediction_enabled->GetAsBoolean(&bool_setting)) {
81 prefs->SetBoolean(prefs::kNetworkPredictionEnabled, bool_setting);
82 // Some predictive network actions, most notably prefetch, used to be
83 // hardwired never to run on cellular network. In order to retain this
84 // behavior (unless explicitly overriden by kNetworkPredictionOptions),
85 // kNetworkPredictionEnabled = true is translated to
86 // kNetworkPredictionOptions = WIFI_ONLY.
87 prefs->SetInteger(prefs::kNetworkPredictionOptions,
88 bool_setting
89 ? chrome_browser_net::NETWORK_PREDICTION_WIFI_ONLY
90 : chrome_browser_net::NETWORK_PREDICTION_NEVER);
94 } // namespace policy