[M-121] Allow the model execution capability to be controlled via Finch
Adds a feature flag that allows disabling the capability check.
(cherry picked from commit 07dd11d9ca1d053277a7fb8b62930c4c07581e30)
Bug: b/319665098
Change-Id: I9cd59247fc9b2e3bbb03c58ebbdac0e629252e53
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5190990
Reviewed-by: Tarun Bansal <[email protected]>
Code-Coverage: [email protected] <[email protected]>
Commit-Queue: Tarun Bansal <[email protected]>
Commit-Queue: Raj T <[email protected]>
Cr-Original-Commit-Position: refs/heads/main@{#1246080}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5200622
Reviewed-by: Owen Min <[email protected]>
Cr-Commit-Position: refs/branch-heads/6167@{#1414}
Cr-Branched-From: 222e786949e76e342d325ea0d008b4b6273f3a89-refs/heads/main@{#1233107}
diff --git a/components/optimization_guide/core/model_execution/model_execution_features.cc b/components/optimization_guide/core/model_execution/model_execution_features.cc
index ad19f7b..79343c21 100644
--- a/components/optimization_guide/core/model_execution/model_execution_features.cc
+++ b/components/optimization_guide/core/model_execution/model_execution_features.cc
@@ -29,6 +29,10 @@
"ExperimentalAIIPHPromoRampUp",
base::FEATURE_DISABLED_BY_DEFAULT);
+BASE_FEATURE(kModelExecutionCapabilityDisable,
+ "ModelExecutionCapabilityDisable",
+ base::FEATURE_DISABLED_BY_DEFAULT);
+
const base::Feature* GetFeatureToUseToCheckSettingsVisibility(
proto::ModelExecutionFeature feature) {
switch (feature) {
diff --git a/components/optimization_guide/core/model_execution/model_execution_features.h b/components/optimization_guide/core/model_execution/model_execution_features.h
index dbe83d8..c10ced33 100644
--- a/components/optimization_guide/core/model_execution/model_execution_features.h
+++ b/components/optimization_guide/core/model_execution/model_execution_features.h
@@ -21,6 +21,9 @@
// experimental AI.
BASE_DECLARE_FEATURE(kExperimentalAIIPHPromoRampUp);
+// Feature for disabling the model execution user account capability check.
+BASE_DECLARE_FEATURE(kModelExecutionCapabilityDisable);
+
const base::Feature* GetFeatureToUseToCheckSettingsVisibility(
proto::ModelExecutionFeature feature);
diff --git a/components/optimization_guide/core/model_execution/model_execution_features_controller.cc b/components/optimization_guide/core/model_execution/model_execution_features_controller.cc
index 5f08a9cc..b93400a1 100644
--- a/components/optimization_guide/core/model_execution/model_execution_features_controller.cc
+++ b/components/optimization_guide/core/model_execution/model_execution_features_controller.cc
@@ -115,6 +115,11 @@
};
bool CanUseModelExecutionFeatures(signin::IdentityManager* identity_manager) {
+ if (base::FeatureList::IsEnabled(
+ features::internal::kModelExecutionCapabilityDisable)) {
+ // Disable the capability check and allow all model execution features.
+ return true;
+ }
if (!identity_manager) {
return false;
}
diff --git a/components/optimization_guide/core/model_execution/model_execution_features_controller_unittest.cc b/components/optimization_guide/core/model_execution/model_execution_features_controller_unittest.cc
index 45577c9f..62ee799 100644
--- a/components/optimization_guide/core/model_execution/model_execution_features_controller_unittest.cc
+++ b/components/optimization_guide/core/model_execution/model_execution_features_controller_unittest.cc
@@ -49,6 +49,16 @@
RunUntilIdle();
}
+ void EnableSignInWithoutCapability() {
+ auto account_info = identity_test_env()->MakePrimaryAccountAvailable(
+ "test_email", signin::ConsentLevel::kSignin);
+ AccountCapabilitiesTestMutator mutator(&account_info.capabilities);
+ mutator.set_can_use_model_execution_features(false);
+ signin::UpdateAccountInfoForAccount(identity_test_env_.identity_manager(),
+ account_info);
+ RunUntilIdle();
+ }
+
ModelExecutionFeaturesController* model_execution_features_controller() {
return model_execution_features_controller_.get();
}
@@ -146,4 +156,35 @@
proto::ModelExecutionFeature::MODEL_EXECUTION_FEATURE_WALLPAPER_SEARCH));
}
+TEST_F(ModelExecutionFeaturesControllerTest,
+ FeatureSettingDisabledWhenCapabilityDisabled) {
+ base::test::ScopedFeatureList scoped_feature_list;
+ scoped_feature_list.InitWithFeatures(
+ {features::internal::kComposeSettingsVisibility}, {});
+ CreateModelExecutionFeaturesController();
+ EnableSignInWithoutCapability();
+ EXPECT_FALSE(model_execution_features_controller()->IsSettingVisible(
+ proto::ModelExecutionFeature::MODEL_EXECUTION_FEATURE_COMPOSE));
+ EXPECT_FALSE(model_execution_features_controller()->IsSettingVisible(
+ proto::ModelExecutionFeature::MODEL_EXECUTION_FEATURE_TAB_ORGANIZATION));
+ EXPECT_FALSE(model_execution_features_controller()->IsSettingVisible(
+ proto::ModelExecutionFeature::MODEL_EXECUTION_FEATURE_WALLPAPER_SEARCH));
+}
+
+TEST_F(ModelExecutionFeaturesControllerTest,
+ FeatureSettingAllowedWhenCapabilityCheckDisabled) {
+ base::test::ScopedFeatureList scoped_feature_list;
+ scoped_feature_list.InitWithFeatures(
+ {features::internal::kComposeSettingsVisibility,
+ features::internal::kModelExecutionCapabilityDisable},
+ {});
+ CreateModelExecutionFeaturesController();
+ EnableSignInWithoutCapability();
+
+ EXPECT_TRUE(model_execution_features_controller()->IsSettingVisible(
+ proto::ModelExecutionFeature::MODEL_EXECUTION_FEATURE_COMPOSE));
+ EXPECT_FALSE(model_execution_features_controller()->IsSettingVisible(
+ proto::ModelExecutionFeature::MODEL_EXECUTION_FEATURE_TAB_ORGANIZATION));
+}
+
} // namespace optimization_guide