Index: ios/chrome/browser/ui/settings/password_details_collection_view_controller.mm |
diff --git a/ios/chrome/browser/ui/settings/password_details_collection_view_controller.mm b/ios/chrome/browser/ui/settings/password_details_collection_view_controller.mm |
index d03a5fc61a153b7904983aa324ae33848bfe7571..220fce7ffe874ce369e369803e71b4dbef08e4cc 100644 |
--- a/ios/chrome/browser/ui/settings/password_details_collection_view_controller.mm |
+++ b/ios/chrome/browser/ui/settings/password_details_collection_view_controller.mm |
@@ -32,12 +32,15 @@ |
namespace { |
typedef NS_ENUM(NSInteger, SectionIdentifier) { |
- SectionIdentifierUsername = kSectionIdentifierEnumZero, |
+ SectionIdentifierSite = kSectionIdentifierEnumZero, |
+ SectionIdentifierUsername, |
SectionIdentifierPassword, |
}; |
typedef NS_ENUM(NSInteger, ItemType) { |
ItemTypeHeader = kItemTypeEnumZero, |
+ ItemTypeSite, |
+ ItemTypeCopySite, |
ItemTypeUsername, |
ItemTypeCopyUsername, |
ItemTypePassword, |
@@ -53,6 +56,8 @@ typedef NS_ENUM(NSInteger, ItemType) { |
NSString* _username; |
// The saved password. |
NSString* _password; |
+ // The origin site of the saved credential. |
+ NSString* _site; |
// Whether the password is shown in plain text form or in obscured form. |
BOOL _plainTextPasswordShown; |
// The password form. |
@@ -88,6 +93,7 @@ reauthenticationModule:(id<ReauthenticationProtocol>)reauthenticationModule |
_passwordForm = passwordForm; |
_username = [username copy]; |
_password = [password copy]; |
+ _site = base::SysUTF8ToNSString(_passwordForm.origin.spec()); |
self.title = |
[PasswordDetailsCollectionViewController simplifyOrigin:origin]; |
NSNotificationCenter* defaultCenter = [NSNotificationCenter defaultCenter]; |
@@ -119,6 +125,19 @@ reauthenticationModule:(id<ReauthenticationProtocol>)reauthenticationModule |
[super loadModel]; |
CollectionViewModel* model = self.collectionViewModel; |
+ [model addSectionWithIdentifier:SectionIdentifierSite]; |
+ CollectionViewTextItem* siteHeader = |
+ [[CollectionViewTextItem alloc] initWithType:ItemTypeHeader]; |
+ siteHeader.text = l10n_util::GetNSString(IDS_IOS_SHOW_PASSWORD_VIEW_SITE); |
+ [model setHeader:siteHeader forSectionWithIdentifier:SectionIdentifierSite]; |
+ PasswordDetailsItem* siteItem = |
+ [[PasswordDetailsItem alloc] initWithType:ItemTypeSite]; |
+ siteItem.text = _site; |
+ siteItem.showingText = YES; |
+ [model addItem:siteItem toSectionWithIdentifier:SectionIdentifierSite]; |
+ [model addItem:[self siteCopyButtonItem] |
+ toSectionWithIdentifier:SectionIdentifierSite]; |
+ |
[model addSectionWithIdentifier:SectionIdentifierUsername]; |
CollectionViewTextItem* usernameHeader = |
[[CollectionViewTextItem alloc] initWithType:ItemTypeHeader]; |
@@ -166,6 +185,23 @@ reauthenticationModule:(id<ReauthenticationProtocol>)reauthenticationModule |
#pragma mark - Items |
+- (CollectionViewItem*)siteCopyButtonItem { |
+ CollectionViewTextItem* item = |
+ [[CollectionViewTextItem alloc] initWithType:ItemTypeCopySite]; |
+ item.text = l10n_util::GetNSString(IDS_IOS_SETTINGS_SITE_COPY_BUTTON); |
+ item.textColor = [[MDCPalette cr_bluePalette] tint500]; |
+ // Accessibility label adds the header to the text, so that accessibility |
+ // users do not have to rely on the visual grouping to understand which part |
+ // of the credential is being copied. |
+ item.accessibilityLabel = [NSString |
+ stringWithFormat:@"%@: %@", |
+ l10n_util::GetNSString(IDS_IOS_SHOW_PASSWORD_VIEW_SITE), |
+ l10n_util::GetNSString( |
+ IDS_IOS_SETTINGS_SITE_COPY_BUTTON)]; |
+ item.accessibilityTraits |= UIAccessibilityTraitButton; |
+ return item; |
+} |
+ |
- (CollectionViewItem*)usernameCopyButtonItem { |
CollectionViewTextItem* item = |
[[CollectionViewTextItem alloc] initWithType:ItemTypeCopyUsername]; |
@@ -222,6 +258,13 @@ reauthenticationModule:(id<ReauthenticationProtocol>)reauthenticationModule |
#pragma mark - Actions |
+- (void)copySite { |
+ UIPasteboard* generalPasteboard = [UIPasteboard generalPasteboard]; |
+ generalPasteboard.string = _site; |
+ [self showCopyResultToast:l10n_util::GetNSString( |
+ IDS_IOS_SETTINGS_SITE_WAS_COPIED_MESSAGE)]; |
+} |
+ |
- (void)copyUsername { |
UIPasteboard* generalPasteboard = [UIPasteboard generalPasteboard]; |
generalPasteboard.string = _username; |
@@ -349,6 +392,9 @@ reauthenticationModule:(id<ReauthenticationProtocol>)reauthenticationModule |
NSInteger itemType = |
[self.collectionViewModel itemTypeForIndexPath:indexPath]; |
switch (itemType) { |
+ case ItemTypeCopySite: |
+ [self copySite]; |
+ break; |
case ItemTypeCopyUsername: |
[self copyUsername]; |
break; |