Create feature kMostVisitedTilesImprovedSuggestions with a client side
finch trial.

This feature exists for an M109 iOS-only experiment to test better
default MVT suggestions based on Bling usage data.

This flag is checked against in PopularSites::GetPopularSitesURL(...)
and overrides the popular sites URL with
suggested_sites_US_2023q1_mvt_experiment_arm1.json or
suggested_sites_US_2023q1_mvt_experiment_arm2.json depending on the
experimental arm, if any.

NOTE: This change should be reviewed alongside cl/486703603, which adds
IOSPopularSitesImprovedSuggestions to the synthetic trials.

Change-Id: I5ddd28c22bbbab2803efc4a36d2839a9fe609e25
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3995350
Reviewed-by: Tibor Goldschwendt <[email protected]>
Reviewed-by: Chris Lu <[email protected]>
Commit-Queue: Benjamin Williams <[email protected]>
Reviewed-by: Sylvain Defresne <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1071145}
diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm
index 773438f..7eeab25 100644
--- a/ios/chrome/browser/flags/about_flags.mm
+++ b/ios/chrome/browser/flags/about_flags.mm
@@ -39,6 +39,7 @@
 #import "components/flags_ui/flags_storage.h"
 #import "components/flags_ui/flags_ui_switches.h"
 #import "components/invalidation/impl/invalidation_switches.h"
+#import "components/ntp_tiles/features.h"
 #import "components/ntp_tiles/switches.h"
 #import "components/omnibox/browser/omnibox_field_trial.h"
 #import "components/omnibox/common/omnibox_features.h"
@@ -85,6 +86,7 @@
 #import "ios/chrome/browser/ui/first_run/trending_queries_field_trial.h"
 #import "ios/chrome/browser/ui/fullscreen/fullscreen_features.h"
 #import "ios/chrome/browser/ui/keyboard/features.h"
+#import "ios/chrome/browser/ui/ntp/field_trial_constants.h"
 #import "ios/chrome/browser/ui/ntp/new_tab_page_feature.h"
 #import "ios/chrome/browser/ui/omnibox/omnibox_ui_features.h"
 #import "ios/chrome/browser/ui/open_in/features.h"
@@ -576,6 +578,13 @@
     {{"minimal", kIOSNewPostRestoreExperienceMinimal,
       std::size(kIOSNewPostRestoreExperienceMinimal), nullptr}};
 
+const FeatureEntry::FeatureParam kIOSPopularSitesExcludePopularApps[] = {
+    {ntp_tiles::kIOSPopularSitesExcludePopularAppsParam, "true"}};
+const FeatureEntry::FeatureVariation
+    kIOSPopularSitesImprovedSuggestionsVariations[] = {
+        {"(Exclude popular apps)", kIOSPopularSitesExcludePopularApps,
+         std::size(kIOSPopularSitesExcludePopularApps), nullptr}};
+
 const FeatureEntry::FeatureParam kEnableExperienceKitMapsWithSrp[] = {
     {kExperienceKitMapsVariationName, kEnableExperienceKitMapsVariationSrp}};
 const FeatureEntry::FeatureVariation kEnableExperienceKitMapsVariations[] = {
@@ -1145,6 +1154,15 @@
      flags_ui::kOsIos,
      FEATURE_VALUE_TYPE(password_manager::features::
                             kIOSPasswordManagerCrossOriginIframeSupport)},
+    {"ios-popular-sites-improved-suggestions",
+     flag_descriptions::kIOSPopularSitesImprovedSuggestionsName,
+     flag_descriptions::kIOSPopularSitesImprovedSuggestionsDescription,
+     flags_ui::kOsIos,
+     FEATURE_WITH_PARAMS_VALUE_TYPE(
+         ntp_tiles::kIOSPopularSitesImprovedSuggestions,
+         kIOSPopularSitesImprovedSuggestionsVariations,
+         field_trial_constants::
+             kIOSPopularSitesImprovedSuggestionsFieldTrialName)},
     {"omnibox-adaptive-suggestions-count",
      flag_descriptions::kAdaptiveSuggestionsCountName,
      flag_descriptions::kAdaptiveSuggestionsCountDescription, flags_ui::kOsIos,