0

lobster: add policy check

Currently, the policy does not effectively disable the feature.

This CL adds a policy pref check into the lobster system state provider.

Bug: b:383213184
Change-Id: I62925ce464f1e2d1912872c505932423381713f1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6384478
Reviewed-by: Sam McNally <sammc@chromium.org>
Commit-Queue: Chuong Ho <hdchuong@chromium.org>
Reviewed-by: Jun Ishiguro <junis@google.com>
Cr-Commit-Position: refs/heads/main@{#1437864}
This commit is contained in:
Chuong Ho
2025-03-25 17:49:10 -07:00
committed by Chromium LUCI CQ
parent 980e917e69
commit 5dfc1d1476
7 changed files with 68 additions and 2 deletions

@ -54,6 +54,8 @@ void RecordLobsterBlockedReason(LobsterSystemCheck failed_reason) {
case LobsterSystemCheck::kUnsupportedFormFactor:
RecordLobsterState(LobsterMetricState::kBlockedByFormFactor);
return;
case LobsterSystemCheck::kUnsupportedPolicy:
RecordLobsterState(LobsterMetricState::kBlockedByPolicy);
}
}

@ -54,7 +54,8 @@ enum class ASH_PUBLIC_EXPORT LobsterSystemCheck {
kUnsupportedHardware,
kUnsupportedInKioskMode, // In Kiosk mode.
kUnsupportedFormFactor,
kMaxValue = kUnsupportedFormFactor,
kUnsupportedPolicy,
kMaxValue = kUnsupportedPolicy,
};
enum class ASH_PUBLIC_EXPORT LobsterErrorCode {

@ -115,7 +115,10 @@ enum class LobsterMetricState {
// recorded when the feature is blocked when in unsupported form factors, i.e.
// tablet mode.
kBlockedByFormFactor = 42,
kMaxValue = kBlockedByFormFactor,
// recorded when the feature is blocked when in unsupported form factors, i.e.
// tablet mode.
kBlockedByPolicy = 43,
kMaxValue = kBlockedByPolicy,
};
} // namespace ash

@ -182,6 +182,12 @@ ash::LobsterSystemState LobsterSystemStateProviderImpl::GetSystemState(
system_state.failed_checks.Put(ash::LobsterSystemCheck::kInvalidInputField);
}
if (pref_->GetInteger(ash::prefs::kLobsterEnterprisePolicySettings) ==
base::to_underlying(ash::LobsterEnterprisePolicyValue::kDisabled)) {
system_state.status = ash::LobsterStatus::kBlocked;
system_state.failed_checks.Put(ash::LobsterSystemCheck::kUnsupportedPolicy);
}
if (!pref_->GetBoolean(ash::prefs::kLobsterEnabled)) {
system_state.status = ash::LobsterStatus::kBlocked;
system_state.failed_checks.Put(ash::LobsterSystemCheck::kSettingsOff);

@ -124,6 +124,10 @@ class LobsterSystemStateProviderImplBaseTest : public testing::Test {
ash::prefs::kOrcaConsentStatus,
static_cast<int>(chromeos::editor_menu::EditorConsentStatus::kUnset));
pref_.registry()->RegisterBooleanPref(ash::prefs::kLobsterEnabled, true);
pref_.registry()->RegisterIntegerPref(
ash::prefs::kLobsterEnterprisePolicySettings,
base::to_underlying(
ash::LobsterEnterprisePolicyValue::kAllowedWithModelImprovement));
}
void SetUpEligibleHardware() {
@ -177,6 +181,12 @@ class LobsterSystemStateProviderImplBaseTest : public testing::Test {
: display::TabletState::kInClamshellMode);
}
void SetPolicyValue(
ash::LobsterEnterprisePolicyValue enterprise_policy_value) {
pref_.SetInteger(ash::prefs::kLobsterEnterprisePolicySettings,
base::to_underlying(enterprise_policy_value));
}
ash::LobsterSystemState GetSystemState(
const ash::LobsterTextInputContext& text_input_context) {
return system_state_provider_.GetSystemState(text_input_context);
@ -452,4 +462,45 @@ TEST_P(LobsterSystemStateProviderImplTabletModeTest,
std::get<1>(GetParam()));
}
class LobsterSystemStateProviderImplEnterprisePolicyTest
: public LobsterSystemStateProviderImplBaseTest,
public ::testing::WithParamInterface<std::tuple<
/*enterprise_policy_value=*/ash::LobsterEnterprisePolicyValue,
/*expected_lobster_status=*/ash::LobsterStatus>> {
public:
void SetUp() override {
SetUpEligibleHardware();
SetConsentStatus(chromeos::editor_menu::EditorConsentStatus::kApproved);
SetSettingsToggle(/*enabled=*/true);
SetOnlineStatus(true);
SetActiveIme("xkb:us::eng");
SetCountryCode("au");
SetAccountCapabilityValue(true);
SetTabletModeState(/*is_in_tablet_mode=*/false);
SetPolicyValue(std::get<0>(GetParam()));
}
};
INSTANTIATE_TEST_SUITE_P(
,
LobsterSystemStateProviderImplEnterprisePolicyTest,
testing::Values(
std::make_tuple(/*enterprise_policy_value=*/ash::
LobsterEnterprisePolicyValue::kDisabled,
ash::LobsterStatus::kBlocked),
std::make_tuple(
/*enterprise_policy_value=*/ash::LobsterEnterprisePolicyValue::
kAllowedWithModelImprovement,
ash::LobsterStatus::kEnabled),
std::make_tuple(
/*enterprise_policy_value=*/ash::LobsterEnterprisePolicyValue::
kAllowedWithoutModelImprovement,
ash::LobsterStatus::kEnabled)));
TEST_P(LobsterSystemStateProviderImplEnterprisePolicyTest,
ChecksTheSystemStateStatus) {
EXPECT_EQ(GetSystemState(GetValidTextInputContext()).status,
std::get<1>(GetParam()));
}
} // namespace

@ -159,6 +159,7 @@ struct EnumTraits<lobster::mojom::WebUIMetricEvent, ash::LobsterMetricState> {
case ash::LobsterMetricState::kBlockedByHardware:
case ash::LobsterMetricState::kBlockedByKioskMode:
case ash::LobsterMetricState::kBlockedByFormFactor:
case ash::LobsterMetricState::kBlockedByPolicy:
return lobster::mojom::WebUIMetricEvent::kUnknown;
}
}

@ -1349,6 +1349,8 @@ ash/webui/personalization_app/mojom/personalization_app.mojom -->
<int value="39" label="Blocked by feature flag restrictions"/>
<int value="40" label="Blocked by unsupported hardware"/>
<int value="41" label="Blocked by Kiosk mode"/>
<int value="42" label="Blocked by form factor"/>
<int value="43" label="Blocked by policy"/>
</enum>
<enum name="LockScreenUserClickTarget">