borealis: add flag for storage ballooning

Adding a flag that will enable storage ballooning for Borealis. This
will involve setting up the disk image in a different way and enabling
other disk functionality. This flag takes precedence over the existing
disk flag.

Bug: b/232862990
Change-Id: I1cad04bf49dae935ec5665e22b38485cda26840e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3747442
Reviewed-by: Chloe Pelling <[email protected]>
Auto-Submit: Daniel Ng <[email protected]>
Commit-Queue: Chloe Pelling <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1021042}
diff --git a/ash/constants/ash_features.cc b/ash/constants/ash_features.cc
index caf60f23..9d201726 100644
--- a/ash/constants/ash_features.cc
+++ b/ash/constants/ash_features.cc
@@ -259,6 +259,11 @@
 const base::Feature kBorealisLinuxMode{"BorealisLinuxMode",
                                        base::FEATURE_DISABLED_BY_DEFAULT};
 
+// Enable storage ballooning for Borealis. This takes precedence over
+// kBorealisDiskManagement.
+const base::Feature kBorealisStorageBallooning{
+    "BorealisStorageBallooning", base::FEATURE_DISABLED_BY_DEFAULT};
+
 // Enable TermsOfServiceURL policy for managed users.
 // https://crbug.com/1221342
 const base::Feature kManagedTermsOfService{"ManagedTermsOfService",
diff --git a/ash/constants/ash_features.h b/ash/constants/ash_features.h
index 1c9e76f..8eacb301 100644
--- a/ash/constants/ash_features.h
+++ b/ash/constants/ash_features.h
@@ -113,6 +113,8 @@
 COMPONENT_EXPORT(ASH_CONSTANTS)
 extern const base::Feature kBorealisPermitted;
 COMPONENT_EXPORT(ASH_CONSTANTS)
+extern const base::Feature kBorealisStorageBallooning;
+COMPONENT_EXPORT(ASH_CONSTANTS)
 extern const base::Feature kCalendarView;
 COMPONENT_EXPORT(ASH_CONSTANTS)
 extern const base::Feature kCalendarModelDebugMode;
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 9db63b1..4b22a6d 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -2646,6 +2646,8 @@
 // This differs slightly from its symbol's name since "enabled" is used
 // internally to refer to whether borealis is installed or not.
 constexpr char kBorealisPermittedInternalName[] = "borealis-enabled";
+constexpr char kBorealisStorageBallooningInternalName[] =
+    "borealis-storage-ballooning";
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
 #if BUILDFLAG(IS_CHROMEOS_ASH)
@@ -7997,6 +7999,10 @@
     {kBorealisPermittedInternalName, flag_descriptions::kBorealisPermittedName,
      flag_descriptions::kBorealisPermittedDescription, kOsCrOS,
      FEATURE_VALUE_TYPE(ash::features::kBorealisPermitted)},
+    {kBorealisStorageBallooningInternalName,
+     flag_descriptions::kBorealisStorageBallooningName,
+     flag_descriptions::kBorealisStorageBallooningDescription, kOsCrOS,
+     FEATURE_VALUE_TYPE(ash::features::kBorealisStorageBallooning)},
 #endif  // BUILDFLAG(IS_CHROMEOS_ASH)
 
     {"https-only-mode-setting", flag_descriptions::kHttpsOnlyModeName,
@@ -8832,6 +8838,10 @@
     return !base::FeatureList::IsEnabled(features::kBorealis);
   }
 
+  if (!strcmp(kBorealisStorageBallooningInternalName, entry.internal_name)) {
+    return !base::FeatureList::IsEnabled(features::kBorealis);
+  }
+
   // Only show wallpaper fast refresh flag if channel is one of
   // Dev/Canary/Unknown.
   if (!strcmp(kWallpaperFastRefreshInternalName, entry.internal_name)) {
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json
index 34518c9..914b5e1 100644
--- a/chrome/browser/flag-metadata.json
+++ b/chrome/browser/flag-metadata.json
@@ -688,6 +688,11 @@
     "expiry_milestone": 110
   },
   {
+    "name": "borealis-storage-ballooning",
+    "owners": [ "danielng" ],
+    "expiry_milestone": 110
+  },
+  {
     "name": "broker-file-operations-on-disk-cache-in-network-service",
     "owners": [ "yhirano", "network-service-dev" ],
     "expiry_milestone": 120
diff --git a/chrome/browser/flag_descriptions.cc b/chrome/browser/flag_descriptions.cc
index 9e823db..0427f5d2 100644
--- a/chrome/browser/flag_descriptions.cc
+++ b/chrome/browser/flag_descriptions.cc
@@ -603,6 +603,11 @@
     "other reasons, including: administrator settings, device hardware "
     "capabilities, or other security measures.";
 
+const char kBorealisStorageBallooningName[] = "Borealis Storage Ballooning";
+const char kBorealisStorageBallooningDescription[] =
+    "Enables storage balloning for Borealis. This takes precedence over the "
+    "other Borealis Disk management flag.";
+
 const char kBypassAppBannerEngagementChecksName[] =
     "Bypass user engagement checks";
 const char kBypassAppBannerEngagementChecksDescription[] =
diff --git a/chrome/browser/flag_descriptions.h b/chrome/browser/flag_descriptions.h
index 25ad924c..f36b6d27 100644
--- a/chrome/browser/flag_descriptions.h
+++ b/chrome/browser/flag_descriptions.h
@@ -324,6 +324,9 @@
 extern const char kBorealisPermittedName[];
 extern const char kBorealisPermittedDescription[];
 
+extern const char kBorealisStorageBallooningName[];
+extern const char kBorealisStorageBallooningDescription[];
+
 extern const char kBypassAppBannerEngagementChecksName[];
 extern const char kBypassAppBannerEngagementChecksDescription[];
 
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index 974948ba..3bd1220 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -59924,6 +59924,7 @@
   <int value="988781221" label="SyncSetupFriendlySettings:disabled"/>
   <int value="988981463" label="ImageCaptureAPI:enabled"/>
   <int value="989062160" label="ModuleScriptsImportMetaUrl:enabled"/>
+  <int value="989740984" label="BorealisStorageBallooning:enabled"/>
   <int value="990380525"
       label="AutofillRationalizeStreetAddressAndAddressLine:enabled"/>
   <int value="991462028"
@@ -60213,6 +60214,7 @@
   <int value="1168226627" label="OmniboxMaxZeroSuggestMatches:enabled"/>
   <int value="1169418814" label="ManualFallbacksFilling:enabled"/>
   <int value="1170030686" label="BookmarkBottomSheet:enabled"/>
+  <int value="1172226600" label="BorealisStorageBallooning:disabled"/>
   <int value="1173244409" label="AutofillUseMobileLabelDisambiguation:enabled"/>
   <int value="1174088940" label="enable-wasm"/>
   <int value="1176183341" label="SearchHistoryLink:enabled"/>