Add feature flag for StAMP and send the corresponding capabilities
when the feature is enabled.

Change-Id: I06b03df2d002f502319995dccf50dd6651c36389
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3134314
Reviewed-by: Dan H <[email protected]>
Commit-Queue: Jonathan Freed <[email protected]>
Cr-Commit-Position: refs/heads/main@{#918161}
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 88430e2..9a9cbdd 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -4010,6 +4010,9 @@
     {"feed-interactive-refresh", flag_descriptions::kFeedInteractiveRefreshName,
      flag_descriptions::kFeedInteractiveRefreshDescription, kOsAndroid,
      FEATURE_VALUE_TYPE(feed::kFeedInteractiveRefresh)},
+    {"feed-stamp", flag_descriptions::kFeedStampName,
+     flag_descriptions::kFeedStampDescription, kOsAndroid,
+     FEATURE_VALUE_TYPE(feed::kFeedStamp)},
     {"feed-v2-hearts", flag_descriptions::kInterestFeedV2HeartsName,
      flag_descriptions::kInterestFeedV2HeartsDescription, kOsAndroid,
      FEATURE_VALUE_TYPE(feed::kInterestFeedV2Hearts)},
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index ab4ce74..88e2be76 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -3120,6 +3120,11 @@
     "expiry_milestone": 95
   },
   {
+    "name": "feed-stamp",
+    "owners": [ "//chrome/android/feed/OWNERS", "[email protected]" ],
+    "expiry_milestone": 100
+  },
+  {
     "name": "feed-v2-autoplay",
     "owners": [ "//chrome/android/feed/OWNERS", "[email protected]" ],
     "expiry_milestone": 97
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 5eca69a..d595dcf 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -3117,6 +3117,9 @@
 const char kFeedInteractiveRefreshDescription[] =
     "Enables refreshing feeds triggered by the users.";
 
+const char kFeedStampName[] = "StAMP cards in the feed";
+const char kFeedStampDescription[] = "Enables StAMP cards in the feed.";
+
 const char kFillingPasswordsFromAnyOriginName[] =
     "Filling passwords from any origin";
 const char kFillingPasswordsFromAnyOriginDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index c4c9cc5..5b4ecaa 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -1788,6 +1788,9 @@
 extern const char kFeedInteractiveRefreshName[];
 extern const char kFeedInteractiveRefreshDescription[];
 
+extern const char kFeedStampName[];
+extern const char kFeedStampDescription[];
+
 extern const char kFillingPasswordsFromAnyOriginName[];
 extern const char kFillingPasswordsFromAnyOriginDescription[];
 
diff --git a/components/feed/core/proto/v2/wire/capability.proto b/components/feed/core/proto/v2/wire/capability.proto
index 8e17cd2..3df0122 100644
--- a/components/feed/core/proto/v2/wire/capability.proto
+++ b/components/feed/core/proto/v2/wire/capability.proto
@@ -30,6 +30,9 @@
   LOTTIE_ANIMATIONS = 37;
   LONG_PRESS_CARD_MENU = 38;
   PREFETCH_METADATA = 43;
+  SILK_AMP_OPEN_COMMAND = 44;
+  AMP_STORY_PLAYER = 47;
+  AMP_GROUP_DATASTORE = 48;
   MATERIAL_NEXT_BASELINE = 60;
   MATERIAL_NEXT_GOOGLE_SANS = 61;
   CONTENT_LIFETIME = 64;
diff --git a/components/feed/core/v2/proto_util.cc b/components/feed/core/v2/proto_util.cc
index 8214d394..222714f3 100644
--- a/components/feed/core/v2/proto_util.cc
+++ b/components/feed/core/v2/proto_util.cc
@@ -144,6 +144,14 @@
         feedwire::Capability::OPEN_VIDEO_COMMAND);
   }
 
+  if (base::FeatureList::IsEnabled(kFeedStamp)) {
+    feed_request.add_client_capability(
+        feedwire::Capability::SILK_AMP_OPEN_COMMAND);
+    feed_request.add_client_capability(feedwire::Capability::AMP_STORY_PLAYER);
+    feed_request.add_client_capability(
+        feedwire::Capability::AMP_GROUP_DATASTORE);
+  }
+
   *feed_request.mutable_client_info() = CreateClientInfo(request_metadata);
   feedwire::FeedQuery& query = *feed_request.mutable_feed_query();
   query.set_reason(request_reason);
diff --git a/components/feed/core/v2/proto_util_unittest.cc b/components/feed/core/v2/proto_util_unittest.cc
index 940992b..19fcd4a 100644
--- a/components/feed/core/v2/proto_util_unittest.cc
+++ b/components/feed/core/v2/proto_util_unittest.cc
@@ -168,5 +168,23 @@
               testing::Contains(feedwire::Capability::OPEN_VIDEO_COMMAND));
 }
 
+TEST(ProtoUtilTest, StampEnabled) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitWithFeatures({kFeedStamp}, {});
+  feedwire::FeedRequest request =
+      CreateFeedQueryRefreshRequest(kForYouStream,
+                                    feedwire::FeedQuery::MANUAL_REFRESH,
+                                    /*request_metadata=*/{},
+                                    /*consistency_token=*/std::string())
+          .feed_request();
+
+  ASSERT_THAT(request.client_capability(),
+              testing::Contains(feedwire::Capability::SILK_AMP_OPEN_COMMAND));
+  ASSERT_THAT(request.client_capability(),
+              testing::Contains(feedwire::Capability::AMP_STORY_PLAYER));
+  ASSERT_THAT(request.client_capability(),
+              testing::Contains(feedwire::Capability::AMP_GROUP_DATASTORE));
+}
+
 }  // namespace
 }  // namespace feed
diff --git a/components/feed/feed_feature_list.cc b/components/feed/feed_feature_list.cc
index 374efcd4..609748e9 100644
--- a/components/feed/feed_feature_list.cc
+++ b/components/feed/feed_feature_list.cc
@@ -68,6 +68,7 @@
     "FeedImageMemoryCacheSizePercentage", base::FEATURE_DISABLED_BY_DEFAULT};
 const base::Feature kFeedBackToTop{"FeedBackToTop",
                                    base::FEATURE_DISABLED_BY_DEFAULT};
+const base::Feature kFeedStamp{"FeedStamp", base::FEATURE_DISABLED_BY_DEFAULT};
 
 const char kDefaultReferrerUrl[] = "https://www.google.com/";
 
diff --git a/components/feed/feed_feature_list.h b/components/feed/feed_feature_list.h
index 63fd2cc..9c7f19a 100644
--- a/components/feed/feed_feature_list.h
+++ b/components/feed/feed_feature_list.h
@@ -67,6 +67,9 @@
 // feeds quickly.
 extern const base::Feature kFeedBackToTop;
 
+// Feature that enables StAMP cards in the feed.
+extern const base::Feature kFeedStamp;
+
 std::string GetFeedReferrerUrl();
 
 }  // namespace feed
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index b7fbf45..c3debe14 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -48788,6 +48788,7 @@
   <int value="-777568290" label="FilesTransferDetails:disabled"/>
   <int value="-777126951" label="FontSrcLocalMatching:enabled"/>
   <int value="-776686417" label="SiteExplorationUi:disabled"/>
+  <int value="-775952696" label="FeedStamp:enabled"/>
   <int value="-775321548" label="UseNewDoodleApi:disabled"/>
   <int value="-773238824" label="AutoplayWhitelistSettings:disabled"/>
   <int value="-772679248" label="MojoVideoEncodeAccelerator:enabled"/>
@@ -51745,6 +51746,7 @@
   <int value="1597880096" label="FocusMode:disabled"/>
   <int value="1600850069" label="MobileIdentityConsistency:disabled"/>
   <int value="1600926040" label="TranslateCompactUI:enabled"/>
+  <int value="1601012975" label="FeedStamp:disabled"/>
   <int value="1601231448" label="VirtualKeyboardMultipaste:disabled"/>
   <int value="1601582484" label="enable-crash-reporter-for-testing"/>
   <int value="1602627012" label="OverrideSitePrefsForHrefTranslate:enabled"/>