| Index: chrome/browser/policy/configuration_policy_handler.cc
|
| diff --git a/chrome/browser/policy/configuration_policy_handler.cc b/chrome/browser/policy/configuration_policy_handler.cc
|
| index 0bae4da6b38e7c2ec1ca63c3208773e560bd6c93..3e71c13c40b2ccbab0d29d2306f370fd79a777d1 100644
|
| --- a/chrome/browser/policy/configuration_policy_handler.cc
|
| +++ b/chrome/browser/policy/configuration_policy_handler.cc
|
| @@ -964,48 +964,111 @@ void JavascriptPolicyHandler::ApplyPolicySettings(const PolicyMap& policies,
|
| // RestoreOnStartupPolicyHandler implementation --------------------------------
|
|
|
| RestoreOnStartupPolicyHandler::RestoreOnStartupPolicyHandler()
|
| - : SimplePolicyHandler(key::kRestoreOnStartup,
|
| - prefs::kRestoreOnStartup,
|
| - Value::TYPE_INTEGER) {
|
| + : TypeCheckingPolicyHandler(key::kRestoreOnStartup,
|
| + Value::TYPE_INTEGER) {
|
| }
|
|
|
| RestoreOnStartupPolicyHandler::~RestoreOnStartupPolicyHandler() {
|
| }
|
|
|
| +void RestoreOnStartupPolicyHandler::ApplyPolicySettings(
|
| + const PolicyMap& policies,
|
| + PrefValueMap* prefs) {
|
| + const Value* restore_on_startup_value = policies.GetValue(policy_name());
|
| + if (restore_on_startup_value) {
|
| + int restore_on_startup;
|
| + if (!restore_on_startup_value->GetAsInteger(&restore_on_startup))
|
| + return;
|
| +
|
| + if (restore_on_startup == SessionStartupPref::kPrefValueHomePage)
|
| + ApplyPolicySettingsFromHomePage(policies, prefs);
|
| + else
|
| + prefs->SetInteger(prefs::kRestoreOnStartup, restore_on_startup);
|
| + }
|
| +}
|
| +
|
| +void RestoreOnStartupPolicyHandler::ApplyPolicySettingsFromHomePage(
|
| + const PolicyMap& policies,
|
| + PrefValueMap* prefs) {
|
| + const base::Value* homepage_is_new_tab_page_value =
|
| + policies.GetValue(key::kHomepageIsNewTabPage);
|
| + if (!homepage_is_new_tab_page_value) {
|
| + // The policy is enforcing 'open the homepage on startup' but not
|
| + // enforcing what the homepage should be. Don't set any prefs.
|
| + return;
|
| + }
|
| +
|
| + bool homepage_is_new_tab_page;
|
| + if (!homepage_is_new_tab_page_value->GetAsBoolean(&homepage_is_new_tab_page))
|
| + return;
|
| +
|
| + if (homepage_is_new_tab_page) {
|
| + prefs->SetInteger(prefs::kRestoreOnStartup,
|
| + SessionStartupPref::kPrefValueNewTab);
|
| + } else {
|
| + const base::Value* homepage_value =
|
| + policies.GetValue(key::kHomepageLocation);
|
| + if (!homepage_value || !homepage_value->IsType(base::Value::TYPE_STRING)) {
|
| + // The policy is enforcing 'open the homepage on startup' but not
|
| + // enforcing what the homepage should be. Don't set any prefs.
|
| + return;
|
| + }
|
| + ListValue* url_list = new ListValue();
|
| + url_list->Append(homepage_value->DeepCopy());
|
| + prefs->SetInteger(prefs::kRestoreOnStartup,
|
| + SessionStartupPref::kPrefValueURLs);
|
| + prefs->SetValue(prefs::kURLsToRestoreOnStartup, url_list);
|
| + }
|
| +}
|
| +
|
| bool RestoreOnStartupPolicyHandler::CheckPolicySettings(
|
| const PolicyMap& policies,
|
| PolicyErrorMap* errors) {
|
| - if (!SimplePolicyHandler::CheckPolicySettings(policies, errors))
|
| + if (!TypeCheckingPolicyHandler::CheckPolicySettings(policies, errors))
|
| return false;
|
|
|
| - // If the restore urls at start up 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* restore_policy = policies.GetValue(key::kRestoreOnStartup);
|
|
|
| if (restore_policy) {
|
| int restore_value;
|
| - if (restore_policy->GetAsInteger(&restore_value) &&
|
| - SessionStartupPref::PrefValueToType(restore_value) ==
|
| - SessionStartupPref::LAST) {
|
| -
|
| - const base::Value* cookies_policy =
|
| - policies.GetValue(key::kCookiesSessionOnlyForUrls);
|
| - const base::ListValue *cookies_value;
|
| - if (cookies_policy && cookies_policy->GetAsList(&cookies_value) &&
|
| - !cookies_value->empty()) {
|
| - errors->AddError(key::kCookiesSessionOnlyForUrls,
|
| - IDS_POLICY_OVERRIDDEN,
|
| - key::kRestoreOnStartup);
|
| - }
|
| -
|
| - const base::Value* exit_policy =
|
| - policies.GetValue(key::kClearSiteDataOnExit);
|
| - bool exit_value;
|
| - if (exit_policy && exit_policy->GetAsBoolean(&exit_value) && exit_value) {
|
| - errors->AddError(key::kClearSiteDataOnExit,
|
| - IDS_POLICY_OVERRIDDEN,
|
| - key::kRestoreOnStartup);
|
| + if (restore_policy->GetAsInteger(&restore_value)) {
|
| + switch (restore_value) {
|
| + case SessionStartupPref::kPrefValueHomePage:
|
| + // TODO(tbreisacher): AddError indicating this value is deprecated.
|
| + break;
|
| + case SessionStartupPref::kPrefValueLast: {
|
| + // 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);
|
| + const base::ListValue *cookies_value;
|
| + if (cookies_policy && cookies_policy->GetAsList(&cookies_value) &&
|
| + !cookies_value->empty()) {
|
| + errors->AddError(key::kCookiesSessionOnlyForUrls,
|
| + IDS_POLICY_OVERRIDDEN,
|
| + key::kRestoreOnStartup);
|
| + }
|
| +
|
| + const base::Value* exit_policy =
|
| + policies.GetValue(key::kClearSiteDataOnExit);
|
| + bool exit_value;
|
| + if (exit_policy &&
|
| + exit_policy->GetAsBoolean(&exit_value) && exit_value) {
|
| + errors->AddError(key::kClearSiteDataOnExit,
|
| + 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::IntToString(restore_value));
|
| }
|
| }
|
| }
|
|
|