Add RenderDocument flag to about:flags

Bug: 936696
Change-Id: Iab187eafacbdb864bb2f26a6ff0a58b2f3589f99
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4607738
Reviewed-by: Fergal Daly <[email protected]>
Commit-Queue: Rakina Zata Amni <[email protected]>
Auto-Submit: Rakina Zata Amni <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1157423}
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 9fb46877..6a3b1ad 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -2800,6 +2800,20 @@
      std::size(kBackForwardCache_ForceCaching), nullptr},
 };
 
+const FeatureEntry::FeatureParam kRenderDocument_Subframe[] = {
+    {"level", "subframe"}};
+const FeatureEntry::FeatureParam kRenderDocument_AllFrames[] = {
+    {"level", "all-frames"}};
+
+const FeatureEntry::FeatureVariation kRenderDocumentVariations[] = {
+    {"Swap RenderFrameHosts on same-site navigations from subframes and "
+     "crashed frames (experimental)",
+     kRenderDocument_Subframe, std::size(kRenderDocument_Subframe), nullptr},
+    {"Swap RenderFrameHosts on same-site navigations from any frame "
+     "(experimental)",
+     kRenderDocument_AllFrames, std::size(kRenderDocument_AllFrames), nullptr},
+};
+
 #if BUILDFLAG(IS_ANDROID)
 const FeatureEntry::Choice kWebOtpBackendChoices[] = {
     {flags_ui::kGenericExperimentChoiceDefault, "", ""},
@@ -10476,6 +10490,12 @@
      FEATURE_VALUE_TYPE(ash::features::kBatterySaverAlwaysOn)},
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
+    {"render-document", flag_descriptions::kRenderDocumentName,
+     flag_descriptions::kRenderDocumentDescription, kOsAll,
+     FEATURE_WITH_PARAMS_VALUE_TYPE(features::kRenderDocument,
+                                    kRenderDocumentVariations,
+                                    "RenderDocument")},
+
     // NOTE: Adding a new flag requires adding a corresponding entry to enum
     // "LoginCustomFlags" in tools/metrics/histograms/enums.xml. See "Flag
     // Histograms" in tools/metrics/histograms/README.md (run the
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index 1796ac31..28bacb1 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -6661,6 +6661,11 @@
     "expiry_milestone": 118
   },
   {
+    "name": "render-document",
+    "owners": [ "rakina" ],
+    "expiry_milestone": 120
+  },
+  {
     "name": "replace-sync-promos-with-sign-in-promos",
     "owners": [ "treib", "mastiz", "[email protected]", "[email protected]", "[email protected]", "chrome-signin-team"],
     "expiry_milestone": 119
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 90c196d..c3f82061 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -2821,6 +2821,10 @@
 const char kPwaUpdateDialogForAppIconDescription[] =
     "Enable a confirmation dialog that shows up when a PWA changes its icon";
 
+const char kRenderDocumentName[] = "Enable RenderDocument";
+const char kRenderDocumentDescription[] =
+    "Enable swapping RenderFrameHosts on same-site navigations";
+
 const char kQuicName[] = "Experimental QUIC protocol";
 const char kQuicDescription[] = "Enable experimental QUIC protocol support.";
 
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 7e79537..7e3abf2 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -1582,6 +1582,9 @@
 extern const char kPwaUpdateDialogForAppIconName[];
 extern const char kPwaUpdateDialogForAppIconDescription[];
 
+extern const char kRenderDocumentName[];
+extern const char kRenderDocumentDescription[];
+
 extern const char kQuicName[];
 extern const char kQuicDescription[];