Home | History | Annotate | Download | only in policy
      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 #include "chrome/browser/policy/network_prediction_policy_handler.h"
      6 
      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"
     15 
     16 namespace policy {
     17 
     18 NetworkPredictionPolicyHandler::NetworkPredictionPolicyHandler() {
     19 }
     20 
     21 NetworkPredictionPolicyHandler::~NetworkPredictionPolicyHandler() {
     22 }
     23 
     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);
     33 
     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));
     39   }
     40 
     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));
     46   }
     47 
     48   if (network_prediction_enabled && network_prediction_options) {
     49     errors->AddError(key::kDnsPrefetchingEnabled,
     50                      IDS_POLICY_OVERRIDDEN,
     51                      key::kNetworkPredictionOptions);
     52   }
     53 
     54   return true;
     55 }
     56 
     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;
     72   }
     73 
     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);
     91   }
     92 }
     93 
     94 }  // namespace policy
     95