blob: 14d0cc547ddfee4611d3312e3edacfbb44439dff [file] [log] [blame]
// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/sessions/restore_on_startup_policy_handler.h"
#include "base/strings/string_number_conversions.h"
#include "base/values.h"
#include "chrome/browser/prefs/session_startup_pref.h"
#include "chrome/common/pref_names.h"
#include "components/policy/core/browser/policy_error_map.h"
#include "components/policy/core/common/policy_map.h"
#include "components/policy/policy_constants.h"
#include "components/prefs/pref_value_map.h"
#include "components/strings/grit/components_strings.h"
namespace policy {
RestoreOnStartupPolicyHandler::RestoreOnStartupPolicyHandler()
: TypeCheckingPolicyHandler(key::kRestoreOnStartup,
base::Value::Type::INTEGER) {}
RestoreOnStartupPolicyHandler::~RestoreOnStartupPolicyHandler() = default;
void RestoreOnStartupPolicyHandler::ApplyPolicySettings(
const PolicyMap& policies,
PrefValueMap* prefs) {
const base::Value* restore_on_startup_value =
policies.GetValue(policy_name(), base::Value::Type::INTEGER);
if (restore_on_startup_value) {
prefs->SetInteger(prefs::kRestoreOnStartup,
restore_on_startup_value->GetInt());
}
}
bool RestoreOnStartupPolicyHandler::CheckPolicySettings(
const PolicyMap& policies,
PolicyErrorMap* errors) {
if (!TypeCheckingPolicyHandler::CheckPolicySettings(policies, errors))
return false;
const base::Value* restore_policy =
policies.GetValue(key::kRestoreOnStartup, base::Value::Type::INTEGER);
if (restore_policy) {
switch (restore_policy->GetInt()) {
case 0: // Deprecated kPrefValueHomePage.
errors->AddError(policy_name(), IDS_POLICY_VALUE_DEPRECATED);
break;
case SessionStartupPref::kPrefValueLast:
case SessionStartupPref::kPrefValueLastAndURLs: {
// If the "restore last session" policy is set, session cookies are
// treated as permanent cookies and site data needed to restore the
// session is not cleared so we have to warn the user in that case.
const base::Value* cookies_policy = policies.GetValue(
key::kCookiesSessionOnlyForUrls, base::Value::Type::LIST);
if (cookies_policy && !cookies_policy->GetList().empty()) {
errors->AddError(key::kCookiesSessionOnlyForUrls,
IDS_POLICY_OVERRIDDEN,
key::kRestoreOnStartup);
}
break;
}
case SessionStartupPref::kPrefValueURLs:
case SessionStartupPref::kPrefValueNewTab:
// No error
break;
default:
errors->AddError(policy_name(), IDS_POLICY_OUT_OF_RANGE_ERROR,
base::NumberToString(restore_policy->GetInt()));
}
}
return true;
}
} // namespace policy