[iOS][Passwords] Add google account disclaimer to the footer

This CL adds disclaimer claiming that the password would be added to the
google account in both cases of signed-in and non signed-in in the add
credential VC.

Mocks: https://docs.google.com/presentation/d/1X79wp1xX9QTwCiqnHingswAfaiwmdysNTI7VZ313IJA/edit?resourcekey=0--WwLl01uAB8RlH1aIixU6A#slide=id.ge35bd19155_0_262

Bug: 1226006
Change-Id: Ie71a42dd7402696058832365d965aa659db704a6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3250910
Commit-Queue: Vidhan Jain <[email protected]>
Reviewed-by: Jérôme <[email protected]>
Reviewed-by: Gauthier Ambard <[email protected]>
Cr-Commit-Position: refs/heads/main@{#945048}
diff --git a/ios/chrome/app/strings/ios_chromium_strings.grd b/ios/chrome/app/strings/ios_chromium_strings.grd
index 71c7ffd..bf64321e 100644
--- a/ios/chrome/app/strings/ios_chromium_strings.grd
+++ b/ios/chrome/app/strings/ios_chromium_strings.grd
@@ -484,6 +484,9 @@
       <message name="IDS_IOS_GOOGLE_SERVICES_SETTINGS_ALLOW_SIGNIN_TEXT" desc="Feature title in the Google services Settings for the user to enable/disable Chrome express sign-in from the web [iOS only]">
         Allow Chromium Sign-in
       </message>
+      <message name="IDS_IOS_SETTINGS_ADD_PASSWORD_FOOTER" desc="Disclaimer telling users what will happen to their passwords">
+        Your password will be saved in your Account (<ph name="EMAIL">$1<ex>[email protected]</ex></ph>).
+      </message>
     </messages>
   </release>
 </grit>
diff --git a/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_SETTINGS_ADD_PASSWORD_FOOTER.png.sha1 b/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_SETTINGS_ADD_PASSWORD_FOOTER.png.sha1
new file mode 100644
index 0000000..bbe93b8f
--- /dev/null
+++ b/ios/chrome/app/strings/ios_chromium_strings_grd/IDS_IOS_SETTINGS_ADD_PASSWORD_FOOTER.png.sha1
@@ -0,0 +1 @@
+28a8bd63cda9102951be672241e045ff00368b61
\ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_google_chrome_strings.grd b/ios/chrome/app/strings/ios_google_chrome_strings.grd
index bd46fbd..016abd5 100644
--- a/ios/chrome/app/strings/ios_google_chrome_strings.grd
+++ b/ios/chrome/app/strings/ios_google_chrome_strings.grd
@@ -484,6 +484,9 @@
       <message name="IDS_IOS_GOOGLE_SERVICES_SETTINGS_ALLOW_SIGNIN_TEXT" desc="Feature title in the Google services Settings for the user to enable/disable Chrome express sign-in from the web [iOS only]">
         Allow Chrome Sign-in
       </message>
+      <message name="IDS_IOS_SETTINGS_ADD_PASSWORD_FOOTER" desc="Disclaimer telling users what will happen to their passwords">
+        Your password will be saved in your Google Account (<ph name="EMAIL">$1<ex>[email protected]</ex></ph>).
+      </message>
     </messages>
   </release>
 </grit>
diff --git a/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_SETTINGS_ADD_PASSWORD_FOOTER.png.sha1 b/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_SETTINGS_ADD_PASSWORD_FOOTER.png.sha1
new file mode 100644
index 0000000..bbe93b8f
--- /dev/null
+++ b/ios/chrome/app/strings/ios_google_chrome_strings_grd/IDS_IOS_SETTINGS_ADD_PASSWORD_FOOTER.png.sha1
@@ -0,0 +1 @@
+28a8bd63cda9102951be672241e045ff00368b61
\ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd
index 309e10e..03923245 100644
--- a/ios/chrome/app/strings/ios_strings.grd
+++ b/ios/chrome/app/strings/ios_strings.grd
@@ -1898,6 +1898,9 @@
       <message name="IDS_IOS_SETTINGS_PASSWORDS_DUPLICATE_SECTION_ALERT_DESCRIPTION_WITHOUT_USERNAME" desc="Text shown alerting the user that a similar credential exists with the same website combination when adding a new credential [iOS only]">
         You already saved a password for <ph name="WEBSITE">$1<ex>twitter.com</ex></ph>
       </message>
+      <message name="IDS_IOS_SETTINGS_ADD_PASSWORD_FOOTER_NON_SYNCING" desc="Disclaimer telling non-syncing users what will happen to their passwords">
+        Your password will be saved to your device.
+      </message>
       <message name="IDS_IOS_LEAK_CHECK_SWITCH" desc="Title for the switch toggling whether Chrome should check that entered credentials have been part of a leak.">
         Warn you if passwords are exposed in a data breach
       </message>
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SETTINGS_ADD_PASSWORD_FOOTER_NON_SYNCING.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SETTINGS_ADD_PASSWORD_FOOTER_NON_SYNCING.png.sha1
new file mode 100644
index 0000000..e32f4a3
--- /dev/null
+++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_SETTINGS_ADD_PASSWORD_FOOTER_NON_SYNCING.png.sha1
@@ -0,0 +1 @@
+9af821bb86c86503565ca21c6365e2b886df82bc
\ No newline at end of file
diff --git a/ios/chrome/browser/ui/settings/password/password_details/BUILD.gn b/ios/chrome/browser/ui/settings/password/password_details/BUILD.gn
index f8c8343..aa46dc83 100644
--- a/ios/chrome/browser/ui/settings/password/password_details/BUILD.gn
+++ b/ios/chrome/browser/ui/settings/password/password_details/BUILD.gn
@@ -28,6 +28,8 @@
     "//ios/chrome/browser",
     "//ios/chrome/browser/main:public",
     "//ios/chrome/browser/passwords",
+    "//ios/chrome/browser/signin",
+    "//ios/chrome/browser/sync",
     "//ios/chrome/browser/ui:feature_flags",
     "//ios/chrome/browser/ui/alert_coordinator",
     "//ios/chrome/browser/ui/commands",
diff --git a/ios/chrome/browser/ui/settings/password/password_details/add_password_coordinator.mm b/ios/chrome/browser/ui/settings/password/password_details/add_password_coordinator.mm
index a41230e..4631ec9 100644
--- a/ios/chrome/browser/ui/settings/password/password_details/add_password_coordinator.mm
+++ b/ios/chrome/browser/ui/settings/password/password_details/add_password_coordinator.mm
@@ -9,6 +9,10 @@
 #include "base/strings/sys_string_conversions.h"
 #include "components/strings/grit/components_strings.h"
 #import "ios/chrome/browser/main/browser.h"
+#import "ios/chrome/browser/signin/authentication_service.h"
+#import "ios/chrome/browser/signin/authentication_service_factory.h"
+#import "ios/chrome/browser/sync/sync_setup_service.h"
+#import "ios/chrome/browser/sync/sync_setup_service_factory.h"
 #import "ios/chrome/browser/ui/alert_coordinator/alert_coordinator.h"
 #import "ios/chrome/browser/ui/commands/application_commands.h"
 #import "ios/chrome/browser/ui/commands/command_dispatcher.h"
@@ -74,8 +78,25 @@
 }
 
 - (void)start {
+  AuthenticationService* authenticationService =
+      AuthenticationServiceFactory::GetForBrowserState(
+          self.browser->GetBrowserState());
+  DCHECK(authenticationService);
+  NSString* syncingUserEmail = nil;
+  ChromeIdentity* chromeIdentity =
+      authenticationService->GetPrimaryIdentity(signin::ConsentLevel::kSync);
+  if (chromeIdentity) {
+    SyncSetupService* syncSetupService =
+        SyncSetupServiceFactory::GetForBrowserState(
+            self.browser->GetBrowserState());
+    if (syncSetupService->IsDataTypeActive(syncer::PASSWORDS)) {
+      syncingUserEmail = chromeIdentity.userEmail;
+    }
+  }
+
   self.viewController = [[PasswordDetailsTableViewController alloc]
-      initWithCredentialType:CredentialTypeNew];
+      initWithCredentialType:CredentialTypeNew
+            syncingUserEmail:syncingUserEmail];
 
   self.mediator = [[AddPasswordMediator alloc] initWithDelegate:self
                                            passwordCheckManager:_manager];
diff --git a/ios/chrome/browser/ui/settings/password/password_details/password_details_coordinator.mm b/ios/chrome/browser/ui/settings/password/password_details/password_details_coordinator.mm
index 2b69de9..3ca6a0a4 100644
--- a/ios/chrome/browser/ui/settings/password/password_details/password_details_coordinator.mm
+++ b/ios/chrome/browser/ui/settings/password/password_details/password_details_coordinator.mm
@@ -98,7 +98,8 @@
 
 - (void)start {
   self.viewController = [[PasswordDetailsTableViewController alloc]
-      initWithCredentialType:_credentialType];
+      initWithCredentialType:_credentialType
+            syncingUserEmail:nil];
 
   self.mediator = [[PasswordDetailsMediator alloc] initWithPassword:_password
                                                passwordCheckManager:_manager];
diff --git a/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller.h b/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller.h
index 7c3ed35..a250e8d 100644
--- a/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller.h
+++ b/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller.h
@@ -29,7 +29,10 @@
                                        PasswordDetailsConsumer>
 
 // The designated initializer.
+// |syncingUserEmail| stores the user email if the user is authenticated amd
+// syncing passwords.
 - (instancetype)initWithCredentialType:(CredentialType)credentialType
+                      syncingUserEmail:(NSString*)syncingUserEmail
     NS_DESIGNATED_INITIALIZER;
 
 - (instancetype)initWithStyle:(UITableViewStyle)style NS_UNAVAILABLE;
diff --git a/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller.mm b/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller.mm
index 134d694..6772344 100644
--- a/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller.mm
+++ b/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller.mm
@@ -121,13 +121,17 @@
 // If YES, the password details are shown without requiring any authentication.
 @property(nonatomic, assign) BOOL showPasswordWithoutAuth;
 
+// Stores the user email if the user is authenticated amd syncing passwords.
+@property(nonatomic, readonly) NSString* syncingUserEmail;
+
 @end
 
 @implementation PasswordDetailsTableViewController
 
 #pragma mark - ViewController Life Cycle.
 
-- (instancetype)initWithCredentialType:(CredentialType)credentialType {
+- (instancetype)initWithCredentialType:(CredentialType)credentialType
+                      syncingUserEmail:(NSString*)syncingUserEmail {
   self = [super initWithStyle:ChromeTableViewStyle()];
   if (self) {
     _credentialType = credentialType;
@@ -135,6 +139,7 @@
     _shouldEnableSave = NO;
     _showPasswordWithoutAuth = NO;
     _isTLDMissingMessageShown = NO;
+    _syncingUserEmail = syncingUserEmail;
   }
   return self;
 }
@@ -453,7 +458,11 @@
 - (TableViewLinkHeaderFooterItem*)footerItem {
   TableViewLinkHeaderFooterItem* item =
       [[TableViewLinkHeaderFooterItem alloc] initWithType:ItemTypeFooter];
-  item.text = l10n_util::GetNSString(IDS_IOS_SETTINGS_ADD_PASSWORD_DESCRIPTION);
+  item.text =
+      [NSString stringWithFormat:@"%@\n\n%@",
+                                 l10n_util::GetNSString(
+                                     IDS_IOS_SETTINGS_ADD_PASSWORD_DESCRIPTION),
+                                 [self footerText]];
   return item;
 }
 
@@ -467,6 +476,17 @@
   return item;
 }
 
+- (NSString*)footerText {
+  if (self.syncingUserEmail) {
+    return l10n_util::GetNSStringF(
+        IDS_IOS_SETTINGS_ADD_PASSWORD_FOOTER,
+        base::SysNSStringToUTF16(self.syncingUserEmail));
+  }
+
+  return l10n_util::GetNSString(
+      IDS_IOS_SETTINGS_ADD_PASSWORD_FOOTER_NON_SYNCING);
+}
+
 #pragma mark - UITableViewDelegate
 
 - (void)tableView:(UITableView*)tableView
diff --git a/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller_unittest.mm
index 1f8d42c..a928162 100644
--- a/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller_unittest.mm
+++ b/ios/chrome/browser/ui/settings/password/password_details/password_details_table_view_controller_unittest.mm
@@ -165,13 +165,13 @@
     reauthentication_module_ = [[MockReauthenticationModule alloc] init];
     reauthentication_module_.expectedResult = ReauthenticationResult::kSuccess;
     snack_bar_ = [[FakeSnackbarImplementation alloc] init];
-    credential_type_ = CredentialTypeRegular;
   }
 
   ChromeTableViewController* InstantiateController() override {
     PasswordDetailsTableViewController* controller =
         [[PasswordDetailsTableViewController alloc]
-            initWithCredentialType:credential_type_];
+            initWithCredentialType:credential_type_
+                  syncingUserEmail:syncing_user_email_];
     controller.handler = handler_;
     controller.delegate = delegate_;
     controller.reauthModule = reauthentication_module_;
@@ -262,12 +262,17 @@
     credential_type_ = credentialType;
   }
 
+  void SetUserSyncingEmail(NSString* syncing_user_email) {
+    syncing_user_email_ = syncing_user_email;
+  }
+
  private:
   id snack_bar_;
-  FakePasswordDetailsHandler* handler_;
-  FakePasswordDetailsDelegate* delegate_;
-  MockReauthenticationModule* reauthentication_module_;
-  CredentialType credential_type_;
+  FakePasswordDetailsHandler* handler_ = nil;
+  FakePasswordDetailsDelegate* delegate_ = nil;
+  MockReauthenticationModule* reauthentication_module_ = nil;
+  CredentialType credential_type_ = CredentialTypeRegular;
+  NSString* syncing_user_email_ = nil;
 };
 
 // Tests that password is displayed properly.
@@ -617,7 +622,13 @@
   EXPECT_EQ(0, NumberOfItemsInSection(1));
   EXPECT_EQ(2, NumberOfItemsInSection(2));
   CheckSectionFooter(
-      l10n_util::GetNSString(IDS_IOS_SETTINGS_ADD_PASSWORD_DESCRIPTION), 3);
+      [NSString
+          stringWithFormat:
+              @"%@\n\n%@",
+              l10n_util::GetNSString(IDS_IOS_SETTINGS_ADD_PASSWORD_DESCRIPTION),
+              l10n_util::GetNSString(
+                  IDS_IOS_SETTINGS_ADD_PASSWORD_FOOTER_NON_SYNCING)],
+      3);
 }
 
 // Tests the layout of the view controller when adding a new credential with
@@ -644,3 +655,26 @@
   EXPECT_EQ(2, NumberOfItemsInSection(2));
   EXPECT_EQ(2, NumberOfItemsInSection(3));
 }
+
+// Tests the footer text of the view controller when adding a new credential and
+// the user syncing email address is provided.
+TEST_F(PasswordDetailsTableViewControllerTest, TestFooterTextWithSyncingEmail) {
+  base::test::ScopedFeatureList scoped_feature_list;
+  scoped_feature_list.InitAndEnableFeature(
+      password_manager::features::kSupportForAddPasswordsInSettings);
+  SetCredentialType(CredentialTypeNew);
+  SetUserSyncingEmail(@"[email protected]");
+
+  PasswordDetailsTableViewController* passwords_controller =
+      static_cast<PasswordDetailsTableViewController*>(controller());
+  [passwords_controller loadModel];
+
+  CheckSectionFooter(
+      [NSString stringWithFormat:@"%@\n\n%@",
+                                 l10n_util::GetNSString(
+                                     IDS_IOS_SETTINGS_ADD_PASSWORD_DESCRIPTION),
+                                 l10n_util::GetNSStringF(
+                                     IDS_IOS_SETTINGS_ADD_PASSWORD_FOOTER,
+                                     u"[email protected]")],
+      3);
+}