1// Copyright 2018 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#import "ios/web_view/internal/autofill/cwv_credit_card_internal.h" 6 7#include "base/strings/sys_string_conversions.h" 8#include "components/autofill/core/browser/data_model/credit_card.h" 9#include "ios/web_view/internal/app/application_context.h" 10#import "ios/web_view/internal/utils/nsobject_description_utils.h" 11#include "ui/base/resource/resource_bundle.h" 12 13#if !defined(__has_feature) || !__has_feature(objc_arc) 14#error "This file requires ARC support." 15#endif 16 17@interface CWVCreditCard () 18 19// Gets |value| for |type| from |_internalCard|. 20- (NSString*)valueForType:(autofill::ServerFieldType)type; 21 22@end 23 24@implementation CWVCreditCard { 25 autofill::CreditCard _internalCard; 26} 27 28- (instancetype)initWithCreditCard:(const autofill::CreditCard&)creditCard { 29 self = [super init]; 30 if (self) { 31 _internalCard = creditCard; 32 } 33 return self; 34} 35 36#pragma mark - Public Methods 37 38- (NSString*)cardHolderFullName { 39 return [self valueForType:autofill::CREDIT_CARD_NAME_FULL]; 40} 41 42- (NSString*)cardNumber { 43 return [self valueForType:autofill::CREDIT_CARD_NUMBER]; 44} 45 46- (NSString*)networkName { 47 return [self valueForType:autofill::CREDIT_CARD_TYPE]; 48} 49 50- (UIImage*)networkIcon { 51 int resourceID = 52 autofill::CreditCard::IconResourceId(_internalCard.network()); 53 return ui::ResourceBundle::GetSharedInstance() 54 .GetNativeImageNamed(resourceID) 55 .ToUIImage(); 56} 57 58- (NSString*)expirationMonth { 59 return [self valueForType:autofill::CREDIT_CARD_EXP_MONTH]; 60} 61 62- (NSString*)expirationYear { 63 return [self valueForType:autofill::CREDIT_CARD_EXP_4_DIGIT_YEAR]; 64} 65 66- (NSString*)bankName { 67 return base::SysUTF8ToNSString(_internalCard.bank_name()); 68} 69 70#pragma mark - NSObject 71 72- (NSString*)debugDescription { 73 NSString* debugDescription = [super debugDescription]; 74 return [debugDescription 75 stringByAppendingFormat:@"\n%@", CWVPropertiesDescription(self)]; 76} 77 78#pragma mark - Internal 79 80- (autofill::CreditCard*)internalCard { 81 return &_internalCard; 82} 83 84#pragma mark - Private Methods 85 86- (NSString*)valueForType:(autofill::ServerFieldType)type { 87 const std::string& locale = 88 ios_web_view::ApplicationContext::GetInstance()->GetApplicationLocale(); 89 return base::SysUTF16ToNSString(_internalCard.GetInfo(type, locale)); 90} 91 92@end 93