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