[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