15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// found in the LICENSE file. 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/policy/network_prediction_policy_handler.h" 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/prefs/pref_value_map.h" 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "base/values.h" 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/net/prediction_options.h" 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/common/pref_names.h" 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/policy/core/browser/policy_error_map.h" 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "components/policy/core/common/policy_map.h" 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "grit/components_strings.h" 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "policy/policy_constants.h" 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace policy { 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)NetworkPredictionPolicyHandler::NetworkPredictionPolicyHandler() { 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)NetworkPredictionPolicyHandler::~NetworkPredictionPolicyHandler() { 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool NetworkPredictionPolicyHandler::CheckPolicySettings( 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const PolicyMap& policies, 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PolicyErrorMap* errors) { 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Deprecated boolean preference. 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const base::Value* network_prediction_enabled = 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) policies.GetValue(key::kDnsPrefetchingEnabled); 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // New enumerated preference. 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const base::Value* network_prediction_options = 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) policies.GetValue(key::kNetworkPredictionOptions); 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (network_prediction_enabled && 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) !network_prediction_enabled->IsType(base::Value::TYPE_BOOLEAN)) { 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) errors->AddError(key::kDnsPrefetchingEnabled, 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) IDS_POLICY_TYPE_ERROR, 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ValueTypeToString(base::Value::TYPE_BOOLEAN)); 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (network_prediction_options && 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) !network_prediction_options->IsType(base::Value::TYPE_INTEGER)) { 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) errors->AddError(key::kNetworkPredictionOptions, 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) IDS_POLICY_TYPE_ERROR, 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ValueTypeToString(base::Value::TYPE_INTEGER)); 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (network_prediction_enabled && network_prediction_options) { 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) errors->AddError(key::kDnsPrefetchingEnabled, 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) IDS_POLICY_OVERRIDDEN, 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) key::kNetworkPredictionOptions); 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return true; 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void NetworkPredictionPolicyHandler::ApplyPolicySettings( 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const PolicyMap& policies, 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PrefValueMap* prefs) { 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // If new preference is managed by policy, apply it to both preferences. 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const base::Value* network_prediction_options = 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) policies.GetValue(key::kNetworkPredictionOptions); 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int int_setting; 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (network_prediction_options && 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) network_prediction_options->GetAsInteger(&int_setting)) { 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs->SetInteger(prefs::kNetworkPredictionOptions, int_setting); 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Be conservative here and only set Enabled if policy says ALWAYS. 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs->SetBoolean( 695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs::kNetworkPredictionEnabled, 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int_setting == chrome_browser_net::NETWORK_PREDICTION_ALWAYS); 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return; 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // If deprecated preference is managed by policy, apply it to both 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // preferences. 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const base::Value* network_prediction_enabled = 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) policies.GetValue(key::kDnsPrefetchingEnabled); 785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool bool_setting; 795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (network_prediction_enabled && 805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) network_prediction_enabled->GetAsBoolean(&bool_setting)) { 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs->SetBoolean(prefs::kNetworkPredictionEnabled, bool_setting); 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Some predictive network actions, most notably prefetch, used to be 835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // hardwired never to run on cellular network. In order to retain this 845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // behavior (unless explicitly overriden by kNetworkPredictionOptions), 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // kNetworkPredictionEnabled = true is translated to 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // kNetworkPredictionOptions = WIFI_ONLY. 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs->SetInteger(prefs::kNetworkPredictionOptions, 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool_setting 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ? chrome_browser_net::NETWORK_PREDICTION_WIFI_ONLY 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) : chrome_browser_net::NETWORK_PREDICTION_NEVER); 915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 925f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 935f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace policy 95