// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/profiles/incognito_mode_policy_handler.h" #include "base/logging.h" #include "base/prefs/pref_value_map.h" #include "base/strings/string_number_conversions.h" #include "base/values.h" #include "chrome/browser/policy/policy_error_map.h" #include "chrome/browser/policy/policy_map.h" #include "chrome/browser/prefs/incognito_mode_prefs.h" #include "chrome/common/pref_names.h" #include "grit/generated_resources.h" #include "policy/policy_constants.h" namespace policy { IncognitoModePolicyHandler::IncognitoModePolicyHandler() {} IncognitoModePolicyHandler::~IncognitoModePolicyHandler() {} bool IncognitoModePolicyHandler::CheckPolicySettings(const PolicyMap& policies, PolicyErrorMap* errors) { int int_value = IncognitoModePrefs::ENABLED; const base::Value* availability = policies.GetValue(key::kIncognitoModeAvailability); if (availability) { if (availability->GetAsInteger(&int_value)) { IncognitoModePrefs::Availability availability_enum_value; if (!IncognitoModePrefs::IntToAvailability(int_value, &availability_enum_value)) { errors->AddError(key::kIncognitoModeAvailability, IDS_POLICY_OUT_OF_RANGE_ERROR, base::IntToString(int_value)); return false; } } else { errors->AddError(key::kIncognitoModeAvailability, IDS_POLICY_TYPE_ERROR, ValueTypeToString(base::Value::TYPE_INTEGER)); return false; } } else { const base::Value* deprecated_enabled = policies.GetValue(key::kIncognitoEnabled); if (deprecated_enabled && !deprecated_enabled->IsType(base::Value::TYPE_BOOLEAN)) { errors->AddError(key::kIncognitoEnabled, IDS_POLICY_TYPE_ERROR, ValueTypeToString(base::Value::TYPE_BOOLEAN)); return false; } } return true; } void IncognitoModePolicyHandler::ApplyPolicySettings(const PolicyMap& policies, PrefValueMap* prefs) { const base::Value* availability = policies.GetValue(key::kIncognitoModeAvailability); const base::Value* deprecated_enabled = policies.GetValue(key::kIncognitoEnabled); if (availability) { int int_value = IncognitoModePrefs::ENABLED; IncognitoModePrefs::Availability availability_enum_value; if (availability->GetAsInteger(&int_value) && IncognitoModePrefs::IntToAvailability(int_value, &availability_enum_value)) { prefs->SetValue(prefs::kIncognitoModeAvailability, base::Value::CreateIntegerValue(availability_enum_value)); } else { NOTREACHED(); } } else if (deprecated_enabled) { // If kIncognitoModeAvailability is not specified, check the obsolete // kIncognitoEnabled. bool enabled = true; if (deprecated_enabled->GetAsBoolean(&enabled)) { prefs->SetInteger( prefs::kIncognitoModeAvailability, enabled ? IncognitoModePrefs::ENABLED : IncognitoModePrefs::DISABLED); } else { NOTREACHED(); } } } } // namespace policy