diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index c7083a099f5268..b0069adaf07f45 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json @@ -4435,6 +4435,11 @@ "owners": ["bwwilliams", "guiperez", "bling-flags@google.com"], "expiry_milestone": 120 }, + { + "name": "ios-password-bottom-sheet", + "owners": ["veronguyen", "sugoi", "tmartino", "bling-integrations-team@google.com"], + "expiry_milestone": 117 + }, { "name": "ios-password-checkup", "owners": ["noemies", "eic", "bling-integrations-team@google.com"], diff --git a/components/password_manager/core/common/password_manager_features.cc b/components/password_manager/core/common/password_manager_features.cc index a18261e6c648ab..eed108918fe34d 100644 --- a/components/password_manager/core/common/password_manager_features.cc +++ b/components/password_manager/core/common/password_manager_features.cc @@ -114,6 +114,13 @@ BASE_FEATURE(kIOSPasswordCheckup, BASE_FEATURE(kIOSShowPasswordStorageInSaveInfobar, "IOSShowPasswordStorageInSaveInfobar", base::FEATURE_DISABLED_BY_DEFAULT); + +// Enables password bottom sheet to be displayed (on iOS) when a user is +// signed-in and taps on a username or password field on a website that has at +// least one credential saved in their password manager. +BASE_FEATURE(kIOSPasswordBottomSheet, + "IOSPasswordBottomSheet", + base::FEATURE_DISABLED_BY_DEFAULT); #endif // IS_IOS // Enables memory mapping the word lists used in the zxcvbn library employed diff --git a/components/password_manager/core/common/password_manager_features.h b/components/password_manager/core/common/password_manager_features.h index 83fa4d5868519f..0c3a7436978aa1 100644 --- a/components/password_manager/core/common/password_manager_features.h +++ b/components/password_manager/core/common/password_manager_features.h @@ -44,6 +44,7 @@ BASE_DECLARE_FEATURE(kIOSPasswordUISplit); BASE_DECLARE_FEATURE(kIOSPasswordManagerCrossOriginIframeSupport); BASE_DECLARE_FEATURE(kIOSPasswordCheckup); BASE_DECLARE_FEATURE(kIOSShowPasswordStorageInSaveInfobar); +BASE_DECLARE_FEATURE(kIOSPasswordBottomSheet); #endif // IS_IOS #if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) // Desktop BASE_DECLARE_FEATURE(kMemoryMapWeaknessCheckDictionaries); diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm index 4117379b9f4e81..f69780fb6fa333 100644 --- a/ios/chrome/browser/flags/about_flags.mm +++ b/ios/chrome/browser/flags/about_flags.mm @@ -1099,6 +1099,10 @@ flags_ui::kOsIos, FEATURE_VALUE_TYPE(password_manager::features:: kIOSPasswordManagerCrossOriginIframeSupport)}, + {"ios-password-bottom-sheet", + flag_descriptions::kIOSPasswordBottomSheetName, + flag_descriptions::kIOSPasswordBottomSheetDescription, flags_ui::kOsIos, + FEATURE_VALUE_TYPE(password_manager::features::kIOSPasswordBottomSheet)}, {"ios-new-tab-page-retention", flag_descriptions::kNewTabPageRetentionName, flag_descriptions::kNewTabPageRetentionDescription, flags_ui::kOsIos, FEATURE_WITH_PARAMS_VALUE_TYPE(ntp_tiles::kNewTabPageRetention, diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc index 815be5a770fb99..c48aba3fa8b262 100644 --- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc +++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc @@ -506,6 +506,10 @@ const char kIOSPasswordManagerCrossOriginIframeSupportName[] = const char kIOSPasswordManagerCrossOriginIframeSupportDescription[] = "Enables password saving and filling in cross-origin iframes on IOS."; +const char kIOSPasswordBottomSheetName[] = "IOS Password Manager Bottom Sheet"; +const char kIOSPasswordBottomSheetDescription[] = + "Enables the display of the password bottom sheet on IOS."; + const char kNewTabPageRetentionName[] = "New tab page features that target new users"; const char kNewTabPageRetentionDescription[] = diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h index a769b47219f6b7..99c0bef862c1b4 100644 --- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h +++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h @@ -440,6 +440,10 @@ extern const char kIOSPasswordUISplitDescription[]; extern const char kIOSPasswordManagerCrossOriginIframeSupportName[]; extern const char kIOSPasswordManagerCrossOriginIframeSupportDescription[]; +// Title and description for the flag to enable password bottom sheet on IOS. +extern const char kIOSPasswordBottomSheetName[]; +extern const char kIOSPasswordBottomSheetDescription[]; + // Title and description of the flag to enable client side new tab page // experiments aimed at improving user retention. extern const char kNewTabPageRetentionName[]; diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index e4d4ad1fb8aafa..d709455d61685c 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json @@ -6452,6 +6452,21 @@ ] } ], + "IOSPasswordBottomSheet": [ + { + "platforms": [ + "ios" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "IOSPasswordBottomSheet" + ] + } + ] + } + ], "IOSPasswordManagerCrossOriginIframeSupport": [ { "platforms": [