Commit 73c81f24 authored by David Jean's avatar David Jean Committed by Commit Bot

[ios] Plug in obj-c credit card object in manual fill.

Also added use of cell utils in manual_fill_card_cell.

Bug: 845472
Change-Id: Ie015a2335c3cfe37f34620e2efb1447b8429d3c1
Reviewed-on: https://chromium-review.googlesource.com/c/1335550
Commit-Queue: David Jean <djean@chromium.org>
Reviewed-by: default avatarJavier Ernesto Flores Robles <javierrobles@chromium.org>
Cr-Commit-Position: refs/heads/master@{#608355}
parent eaf11202
...@@ -5,11 +5,9 @@ ...@@ -5,11 +5,9 @@
#import "ios/chrome/browser/ui/autofill/manual_fill/card_coordinator.h" #import "ios/chrome/browser/ui/autofill/manual_fill/card_coordinator.h"
#include "base/memory/ref_counted.h" #include "base/memory/ref_counted.h"
#include "base/strings/sys_string_conversions.h"
#include "components/autofill/core/browser/credit_card.h" #include "components/autofill/core/browser/credit_card.h"
#include "components/autofill/core/browser/personal_data_manager.h" #include "components/autofill/core/browser/personal_data_manager.h"
#include "components/autofill/ios/browser/autofill_driver_ios.h" #include "components/autofill/ios/browser/autofill_driver_ios.h"
#include "components/keyed_service/core/service_access_type.h"
#include "ios/chrome/browser/autofill/personal_data_manager_factory.h" #include "ios/chrome/browser/autofill/personal_data_manager_factory.h"
#import "ios/chrome/browser/ui/autofill/manual_fill/card_list_delegate.h" #import "ios/chrome/browser/ui/autofill/manual_fill/card_list_delegate.h"
#import "ios/chrome/browser/ui/autofill/manual_fill/card_mediator.h" #import "ios/chrome/browser/ui/autofill/manual_fill/card_mediator.h"
...@@ -66,6 +64,10 @@ initWithBaseViewController:(UIViewController*)viewController ...@@ -66,6 +64,10 @@ initWithBaseViewController:(UIViewController*)viewController
std::vector<autofill::CreditCard*> cards = std::vector<autofill::CreditCard*> cards =
personalDataManager->GetCreditCardsToSuggest(true); personalDataManager->GetCreditCardsToSuggest(true);
// TODO(crbug.com/845472): add observer using
// PersonalDataManagerObserverBridge and refresh data when personal data
// changes. Applies to addresses too.
_cardMediator = [[ManualFillCardMediator alloc] initWithCards:cards]; _cardMediator = [[ManualFillCardMediator alloc] initWithCards:cards];
_cardMediator.navigationDelegate = self; _cardMediator.navigationDelegate = self;
_cardMediator.contentDelegate = self.manualFillInjectionHandler; _cardMediator.contentDelegate = self.manualFillInjectionHandler;
...@@ -94,13 +96,17 @@ initWithBaseViewController:(UIViewController*)viewController ...@@ -94,13 +96,17 @@ initWithBaseViewController:(UIViewController*)viewController
}]; }];
} }
- (void)requestFullCreditCard:(const autofill::CreditCard&)card { - (void)requestFullCreditCard:(ManualFillCreditCard*)card {
__weak __typeof(self) weakSelf = self; __weak __typeof(self) weakSelf = self;
// TODO(crbug.com/845472): resolve potential weak card here either using __weak ManualFillCreditCard* weakCard = card;
// std::unique or an Obj-C Creditcard object as proposed in another TODO.
autofill::CreditCard cardCopy = card;
[self dismissIfNecessaryThenDoCompletion:^{ [self dismissIfNecessaryThenDoCompletion:^{
[weakSelf.cardRequester requestFullCreditCard:cardCopy if (!weakSelf)
return;
const autofill::CreditCard* autofillCreditCard =
[weakSelf.cardMediator findCreditCardfromGUID:weakCard.GUID];
if (!autofillCreditCard)
return;
[weakSelf.cardRequester requestFullCreditCard:*autofillCreditCard
withBaseViewController:weakSelf.baseViewController]; withBaseViewController:weakSelf.baseViewController];
}]; }];
} }
......
...@@ -5,9 +5,7 @@ ...@@ -5,9 +5,7 @@
#ifndef IOS_CHROME_BROWSER_UI_AUTOFILL_MANUAL_FILL_CARD_LIST_DELEGATE_H_ #ifndef IOS_CHROME_BROWSER_UI_AUTOFILL_MANUAL_FILL_CARD_LIST_DELEGATE_H_
#define IOS_CHROME_BROWSER_UI_AUTOFILL_MANUAL_FILL_CARD_LIST_DELEGATE_H_ #define IOS_CHROME_BROWSER_UI_AUTOFILL_MANUAL_FILL_CARD_LIST_DELEGATE_H_
namespace autofill { #import "ios/chrome/browser/ui/autofill/manual_fill/credit_card.h"
class CreditCard;
} // namespace autofill
// Delegate for actions in manual fallback's cards list. // Delegate for actions in manual fallback's cards list.
@protocol CardListDelegate @protocol CardListDelegate
...@@ -16,7 +14,7 @@ class CreditCard; ...@@ -16,7 +14,7 @@ class CreditCard;
- (void)openCardSettings; - (void)openCardSettings;
// Open credit card unlock, through CVC, prompt. // Open credit card unlock, through CVC, prompt.
- (void)requestFullCreditCard:(const autofill::CreditCard&)card; - (void)requestFullCreditCard:(ManualFillCreditCard*)card;
@end @end
......
...@@ -45,6 +45,9 @@ extern NSString* const OtherCardsAccessibilityIdentifier; ...@@ -45,6 +45,9 @@ extern NSString* const OtherCardsAccessibilityIdentifier;
// Unavailable. Use |initWithCards:|. // Unavailable. Use |initWithCards:|.
- (instancetype)init NS_UNAVAILABLE; - (instancetype)init NS_UNAVAILABLE;
// Finds the original autofill::CreditCard from given |GUID|.
- (const autofill::CreditCard*)findCreditCardfromGUID:(NSString*)GUID;
@end @end
#endif // IOS_CHROME_BROWSER_UI_AUTOFILL_MANUAL_FILL_CARD_MEDIATOR_H_ #endif // IOS_CHROME_BROWSER_UI_AUTOFILL_MANUAL_FILL_CARD_MEDIATOR_H_
...@@ -8,11 +8,14 @@ ...@@ -8,11 +8,14 @@
#include "base/metrics/user_metrics.h" #include "base/metrics/user_metrics.h"
#include "base/strings/sys_string_conversions.h" #include "base/strings/sys_string_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "components/autofill/core/browser/autofill_manager.h" #include "components/autofill/core/browser/autofill_manager.h"
#include "components/autofill/core/browser/credit_card.h" #include "components/autofill/core/browser/credit_card.h"
#import "ios/chrome/browser/ui/autofill/manual_fill/action_cell.h" #import "ios/chrome/browser/ui/autofill/manual_fill/action_cell.h"
#import "ios/chrome/browser/ui/autofill/manual_fill/card_consumer.h" #import "ios/chrome/browser/ui/autofill/manual_fill/card_consumer.h"
#import "ios/chrome/browser/ui/autofill/manual_fill/card_list_delegate.h" #import "ios/chrome/browser/ui/autofill/manual_fill/card_list_delegate.h"
#import "ios/chrome/browser/ui/autofill/manual_fill/credit_card.h"
#import "ios/chrome/browser/ui/autofill/manual_fill/credit_card_form.h"
#import "ios/chrome/browser/ui/autofill/manual_fill/full_card_request_result_delegate_bridge.h" #import "ios/chrome/browser/ui/autofill/manual_fill/full_card_request_result_delegate_bridge.h"
#import "ios/chrome/browser/ui/autofill/manual_fill/manual_fill_card_cell.h" #import "ios/chrome/browser/ui/autofill/manual_fill/manual_fill_card_cell.h"
#import "ios/chrome/browser/ui/autofill/manual_fill/manual_fill_content_delegate.h" #import "ios/chrome/browser/ui/autofill/manual_fill/manual_fill_content_delegate.h"
...@@ -65,6 +68,16 @@ NSString* const ManageCardsAccessibilityIdentifier = ...@@ -65,6 +68,16 @@ NSString* const ManageCardsAccessibilityIdentifier =
[self postActionsToConsumer]; [self postActionsToConsumer];
} }
- (const autofill::CreditCard*)findCreditCardfromGUID:(NSString*)GUID {
for (autofill::CreditCard* card : self.cards) {
NSString* cppGUID =
base::SysUTF16ToNSString(base::ASCIIToUTF16(card->guid()));
if ([cppGUID isEqualToString:GUID])
return card;
}
return nil;
}
#pragma mark - Private #pragma mark - Private
// Posts the cards to the consumer. // Posts the cards to the consumer.
...@@ -76,9 +89,10 @@ NSString* const ManageCardsAccessibilityIdentifier = ...@@ -76,9 +89,10 @@ NSString* const ManageCardsAccessibilityIdentifier =
NSMutableArray* items = NSMutableArray* items =
[[NSMutableArray alloc] initWithCapacity:self.cards.size()]; [[NSMutableArray alloc] initWithCapacity:self.cards.size()];
for (autofill::CreditCard* card : self.cards) { for (autofill::CreditCard* card : self.cards) {
// TODO(crbug.com/845472): create a pure objc object instead. ManualFillCreditCard* manualFillCreditCard =
[[ManualFillCreditCard alloc] initWithCreditCard:*card];
auto item = auto item =
[[ManualFillCardItem alloc] initWithCreditCard:*card [[ManualFillCardItem alloc] initWithCreditCard:manualFillCreditCard
contentDelegate:self.contentDelegate contentDelegate:self.contentDelegate
navigationDelegate:self.navigationDelegate]; navigationDelegate:self.navigationDelegate];
[items addObject:item]; [items addObject:item];
...@@ -110,16 +124,18 @@ NSString* const ManageCardsAccessibilityIdentifier = ...@@ -110,16 +124,18 @@ NSString* const ManageCardsAccessibilityIdentifier =
- (void)onFullCardRequestSucceeded:(const autofill::CreditCard&)card { - (void)onFullCardRequestSucceeded:(const autofill::CreditCard&)card {
// Credit card are not shown as 'Secure'. // Credit card are not shown as 'Secure'.
NSString* cardNumber = ManualFillCreditCard* manualFillCreditCard =
base::SysUTF16ToNSString(autofill::CreditCard::StripSeparators( [[ManualFillCreditCard alloc] initWithCreditCard:card];
card.GetRawInfo(autofill::CREDIT_CARD_NUMBER))); // Don't replace the locked card with the unlocked one, so the user will
// have to unlock it again, if needed.
// TODO(crbug.com/845472): update userDidPickContent to have an isHttps // TODO(crbug.com/845472): update userDidPickContent to have an isHttps
// parameter. // parameter.
[self.contentDelegate userDidPickContent:cardNumber isSecure:NO]; [self.contentDelegate userDidPickContent:manualFillCreditCard.number
isSecure:NO];
} }
- (void)onFullCardRequestFailed { - (void)onFullCardRequestFailed {
// TODO(crbug.com/845472): handle failure to unlock card. // This is called on user cancelling, so there's nothing to do here.
} }
@end @end
...@@ -25,9 +25,11 @@ ...@@ -25,9 +25,11 @@
base::SysUTF16ToNSString(base::ASCIIToUTF16(creditCard.bank_name())); base::SysUTF16ToNSString(base::ASCIIToUTF16(creditCard.bank_name()));
NSString* cardHolder = autofill::GetCreditCardName( NSString* cardHolder = autofill::GetCreditCardName(
creditCard, GetApplicationContext()->GetApplicationLocale()); creditCard, GetApplicationContext()->GetApplicationLocale());
NSString* number = NSString* number = nil;
base::SysUTF16ToNSString(autofill::CreditCard::StripSeparators( if (creditCard.record_type() != autofill::CreditCard::MASKED_SERVER_CARD) {
creditCard.GetRawInfo(autofill::CREDIT_CARD_NUMBER))); number = base::SysUTF16ToNSString(autofill::CreditCard::StripSeparators(
creditCard.GetRawInfo(autofill::CREDIT_CARD_NUMBER)));
}
// Unicode characters used in card number: // Unicode characters used in card number:
// - 0x0020 - Space. // - 0x0020 - Space.
......
...@@ -87,7 +87,7 @@ TEST_F(ManualFillCreditCardFormAutofilliOSTest, CreationObfuscated) { ...@@ -87,7 +87,7 @@ TEST_F(ManualFillCreditCardFormAutofilliOSTest, CreationObfuscated) {
EXPECT_TRUE([GUID isEqualToString:manualFillCard.GUID]); EXPECT_TRUE([GUID isEqualToString:manualFillCard.GUID]);
EXPECT_TRUE([@"Visa" isEqualToString:manualFillCard.network]); EXPECT_TRUE([@"Visa" isEqualToString:manualFillCard.network]);
EXPECT_TRUE([bankName isEqualToString:manualFillCard.bankName]); EXPECT_TRUE([bankName isEqualToString:manualFillCard.bankName]);
EXPECT_TRUE([number isEqualToString:manualFillCard.number]); EXPECT_FALSE(manualFillCard.number);
EXPECT_TRUE([manualFillCard.obfuscatedNumber containsString:@"1234"]); EXPECT_TRUE([manualFillCard.obfuscatedNumber containsString:@"1234"]);
EXPECT_FALSE([manualFillCard.obfuscatedNumber containsString:@"4321"]); EXPECT_FALSE([manualFillCard.obfuscatedNumber containsString:@"4321"]);
EXPECT_TRUE([cardHolder isEqualToString:manualFillCard.cardHolder]); EXPECT_TRUE([cardHolder isEqualToString:manualFillCard.cardHolder]);
......
...@@ -7,19 +7,16 @@ ...@@ -7,19 +7,16 @@
#import <UIKit/UIKit.h> #import <UIKit/UIKit.h>
#import "ios/chrome/browser/ui/autofill/manual_fill/credit_card.h"
#import "ios/chrome/browser/ui/table_view/cells/table_view_item.h" #import "ios/chrome/browser/ui/table_view/cells/table_view_item.h"
namespace autofill {
class CreditCard;
} // namespace autofill
@protocol CardListDelegate; @protocol CardListDelegate;
@protocol ManualFillContentDelegate; @protocol ManualFillContentDelegate;
// Wrapper to show card cells in a ChromeTableViewController. // Wrapper to show card cells in a ChromeTableViewController.
@interface ManualFillCardItem : TableViewItem @interface ManualFillCardItem : TableViewItem
- (instancetype)initWithCreditCard:(const autofill::CreditCard&)card - (instancetype)initWithCreditCard:(ManualFillCreditCard*)card
contentDelegate: contentDelegate:
(id<ManualFillContentDelegate>)contentDelegate (id<ManualFillContentDelegate>)contentDelegate
navigationDelegate:(id<CardListDelegate>)navigationDelegate navigationDelegate:(id<CardListDelegate>)navigationDelegate
...@@ -34,7 +31,7 @@ class CreditCard; ...@@ -34,7 +31,7 @@ class CreditCard;
@interface ManualFillCardCell : UITableViewCell @interface ManualFillCardCell : UITableViewCell
// Updates the cell with credit card and the |delegate| to be notified. // Updates the cell with credit card and the |delegate| to be notified.
- (void)setUpWithCreditCard:(const autofill::CreditCard&)card - (void)setUpWithCreditCard:(ManualFillCreditCard*)card
contentDelegate:(id<ManualFillContentDelegate>)contentDelegate contentDelegate:(id<ManualFillContentDelegate>)contentDelegate
navigationDelegate:(id<CardListDelegate>)navigationDelegate; navigationDelegate:(id<CardListDelegate>)navigationDelegate;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment