diff --git a/chrome/browser/profiles/guest_mode_policy_handler.cc b/chrome/browser/profiles/guest_mode_policy_handler.cc index 2b3622170f79..9f17bce3173d 100644 --- a/chrome/browser/profiles/guest_mode_policy_handler.cc +++ b/chrome/browser/profiles/guest_mode_policy_handler.cc @@ -32,8 +32,10 @@ void GuestModePolicyHandler::ApplyPolicySettings(const PolicyMap& policies, const base::Value* browser_signin_value = policies.GetValue(key::kBrowserSignin); int int_browser_signin_value; - if (browser_signin_value && - browser_signin_value->GetAsInteger(&int_browser_signin_value) && + bool is_browser_signin_policy_set = + (browser_signin_value && + browser_signin_value->GetAsInteger(&int_browser_signin_value)); + if (is_browser_signin_policy_set && static_cast(int_browser_signin_value) == BrowserSigninMode::kForced) { prefs->SetBoolean(prefs::kBrowserGuestModeEnabled, false); @@ -43,7 +45,7 @@ void GuestModePolicyHandler::ApplyPolicySettings(const PolicyMap& policies, const base::Value* force_signin_value = policies.GetValue(key::kForceBrowserSignin); bool is_force_signin_enabled; - if (force_signin_value && + if (!is_browser_signin_policy_set && force_signin_value && force_signin_value->GetAsBoolean(&is_force_signin_enabled) && is_force_signin_enabled) { prefs->SetBoolean(prefs::kBrowserGuestModeEnabled, false); diff --git a/chrome/browser/profiles/guest_mode_policy_handler_unittest.cc b/chrome/browser/profiles/guest_mode_policy_handler_unittest.cc index d8f8b3d9285a..ea21775536eb 100644 --- a/chrome/browser/profiles/guest_mode_policy_handler_unittest.cc +++ b/chrome/browser/profiles/guest_mode_policy_handler_unittest.cc @@ -5,6 +5,7 @@ #include "chrome/browser/profiles/guest_mode_policy_handler.h" #include "base/values.h" +#include "chrome/browser/policy/browser_signin_policy_handler.h" #include "chrome/common/pref_names.h" #include "components/policy/core/common/policy_map.h" #include "components/policy/policy_constants.h" @@ -85,4 +86,39 @@ TEST_F(GuestModePolicyHandlerTest, GuestModeSet) { EXPECT_FALSE(value); } +TEST_F(GuestModePolicyHandlerTest, GuestModeDisabledWhenBrowserSigninIsForced) { + SetUpPolicy(key::kBrowserSignin, + static_cast(BrowserSigninMode::kForced)); + handler_.ApplyPolicySettings(policies_, &prefs_); + bool value = true; + EXPECT_TRUE(prefs_.GetBoolean(prefs::kBrowserGuestModeEnabled, &value)); + EXPECT_FALSE(value); +} + +TEST_F(GuestModePolicyHandlerTest, + GuestModeIsNotSetWhenBrowserSigninIsNotForced) { + bool value = false; + SetUpPolicy(key::kBrowserSignin, + static_cast(BrowserSigninMode::kEnabled)); + handler_.ApplyPolicySettings(policies_, &prefs_); + EXPECT_FALSE(prefs_.GetBoolean(prefs::kBrowserGuestModeEnabled, &value)); + + SetUpPolicy(key::kBrowserSignin, + static_cast(BrowserSigninMode::kDisabled)); + handler_.ApplyPolicySettings(policies_, &prefs_); + EXPECT_FALSE(prefs_.GetBoolean(prefs::kBrowserGuestModeEnabled, &value)); + + // Invalid format + SetUpPolicy(key::kBrowserSignin, false); + handler_.ApplyPolicySettings(policies_, &prefs_); + EXPECT_FALSE(prefs_.GetBoolean(prefs::kBrowserGuestModeEnabled, &value)); + + // Even with forceBrowserSignin enable. + SetUpPolicy(key::kBrowserSignin, + static_cast(BrowserSigninMode::kEnabled)); + SetUpPolicy(key::kForceBrowserSignin, true); + handler_.ApplyPolicySettings(policies_, &prefs_); + EXPECT_FALSE(prefs_.GetBoolean(prefs::kBrowserGuestModeEnabled, &value)); +} + } // namespace policy