1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
// 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
|