11e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 21e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 31e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// found in the LICENSE file. 41e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 51e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chrome/browser/profiles/incognito_mode_policy_handler.h" 61e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/logging.h" 81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/prefs/pref_value_map.h" 91e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/strings/string_number_conversions.h" 101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/values.h" 111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chrome/browser/prefs/incognito_mode_prefs.h" 121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chrome/common/pref_names.h" 13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/browser/policy_error_map.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_map.h" 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "grit/components_strings.h" 161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "policy/policy_constants.h" 171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)namespace policy { 191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)IncognitoModePolicyHandler::IncognitoModePolicyHandler() {} 211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)IncognitoModePolicyHandler::~IncognitoModePolicyHandler() {} 231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)bool IncognitoModePolicyHandler::CheckPolicySettings(const PolicyMap& policies, 251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) PolicyErrorMap* errors) { 261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) int int_value = IncognitoModePrefs::ENABLED; 271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const base::Value* availability = 281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) policies.GetValue(key::kIncognitoModeAvailability); 291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (availability) { 311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (availability->GetAsInteger(&int_value)) { 321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) IncognitoModePrefs::Availability availability_enum_value; 331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (!IncognitoModePrefs::IntToAvailability(int_value, 341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) &availability_enum_value)) { 351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) errors->AddError(key::kIncognitoModeAvailability, 361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) IDS_POLICY_OUT_OF_RANGE_ERROR, 371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::IntToString(int_value)); 381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return false; 391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } else { 411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) errors->AddError(key::kIncognitoModeAvailability, 421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) IDS_POLICY_TYPE_ERROR, 431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ValueTypeToString(base::Value::TYPE_INTEGER)); 441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return false; 451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } else { 471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const base::Value* deprecated_enabled = 481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) policies.GetValue(key::kIncognitoEnabled); 491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (deprecated_enabled && 501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) !deprecated_enabled->IsType(base::Value::TYPE_BOOLEAN)) { 511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) errors->AddError(key::kIncognitoEnabled, 521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) IDS_POLICY_TYPE_ERROR, 531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ValueTypeToString(base::Value::TYPE_BOOLEAN)); 541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return false; 551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return true; 581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void IncognitoModePolicyHandler::ApplyPolicySettings(const PolicyMap& policies, 611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) PrefValueMap* prefs) { 621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const base::Value* availability = 631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) policies.GetValue(key::kIncognitoModeAvailability); 641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const base::Value* deprecated_enabled = 651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) policies.GetValue(key::kIncognitoEnabled); 661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (availability) { 671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) int int_value = IncognitoModePrefs::ENABLED; 681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) IncognitoModePrefs::Availability availability_enum_value; 691e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (availability->GetAsInteger(&int_value) && 701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) IncognitoModePrefs::IntToAvailability(int_value, 711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) &availability_enum_value)) { 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs->SetInteger(prefs::kIncognitoModeAvailability, 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) availability_enum_value); 741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } else { 751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) NOTREACHED(); 761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } else if (deprecated_enabled) { 781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // If kIncognitoModeAvailability is not specified, check the obsolete 791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // kIncognitoEnabled. 801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) bool enabled = true; 811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (deprecated_enabled->GetAsBoolean(&enabled)) { 821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs->SetInteger( 831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) prefs::kIncognitoModeAvailability, 841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) enabled ? IncognitoModePrefs::ENABLED : IncognitoModePrefs::DISABLED); 851e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } else { 861e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) NOTREACHED(); 871e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 881e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 891e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 901e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 911e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} // namespace policy 92