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:

committed by
Chromium LUCI CQ

parent
980e917e69
commit
5dfc1d1476
ash
chrome/browser
ash
ui
webui
ash
lobster
tools/metrics/histograms/metadata/ash
@ -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">
|
||||
|
Reference in New Issue
Block a user