Index: ios/chrome/browser/ui/payments/payment_request_coordinator.mm |
diff --git a/ios/chrome/browser/ui/payments/payment_request_coordinator.mm b/ios/chrome/browser/ui/payments/payment_request_coordinator.mm |
index c43545a58c6598f6837a6d46df9d9bf57bb9d2e5..395445dd8aa4a496b4cba9a3cc33b9f06960f5ca 100644 |
--- a/ios/chrome/browser/ui/payments/payment_request_coordinator.mm |
+++ b/ios/chrome/browser/ui/payments/payment_request_coordinator.mm |
@@ -21,14 +21,13 @@ |
#include "components/autofill/core/browser/ui/card_unmask_prompt_controller_impl.h" |
#include "components/payments/core/payment_address.h" |
#include "components/payments/core/payment_request_data_util.h" |
-#include "components/signin/core/browser/signin_manager.h" |
#include "components/strings/grit/components_strings.h" |
#include "ios/chrome/browser/application_context.h" |
#include "ios/chrome/browser/browser_state/chrome_browser_state.h" |
#include "ios/chrome/browser/payments/payment_request.h" |
#include "ios/chrome/browser/payments/payment_request_util.h" |
-#include "ios/chrome/browser/signin/signin_manager_factory.h" |
#include "ios/chrome/browser/ui/autofill/card_unmask_prompt_view_bridge.h" |
+#include "ios/chrome/browser/ui/payments/payment_request_mediator.h" |
#include "ui/base/l10n/l10n_util.h" |
#if !defined(__has_feature) || !__has_feature(objc_arc) |
@@ -44,9 +43,8 @@ using ::payments::data_util::GetPaymentAddressFromAutofillProfile; |
class PRCardUnmaskPromptViewBridge |
: public autofill::CardUnmaskPromptViewBridge { |
public: |
- explicit PRCardUnmaskPromptViewBridge( |
- autofill::CardUnmaskPromptController* controller, |
- UIViewController* base_view_controller) |
+ PRCardUnmaskPromptViewBridge(autofill::CardUnmaskPromptController* controller, |
+ UIViewController* base_view_controller) |
: autofill::CardUnmaskPromptViewBridge(controller), |
base_view_controller_(base_view_controller) {} |
@@ -73,9 +71,9 @@ class FullCardRequester |
public autofill::payments::FullCardRequest::UIDelegate, |
public base::SupportsWeakPtr<FullCardRequester> { |
public: |
- explicit FullCardRequester(PaymentRequestCoordinator* owner, |
- UIViewController* base_view_controller, |
- ios::ChromeBrowserState* browser_state) |
+ FullCardRequester(PaymentRequestCoordinator* owner, |
+ UIViewController* base_view_controller, |
+ ios::ChromeBrowserState* browser_state) |
: owner_(owner), |
base_view_controller_(base_view_controller), |
unmask_controller_(browser_state->GetPrefs(), |
@@ -91,9 +89,11 @@ class FullCardRequester |
} |
// payments::FullCardRequest::ResultDelegate: |
- void OnFullCardRequestSucceeded(const autofill::CreditCard& card, |
- const base::string16& cvc) override { |
- [owner_ fullCardRequestDidSucceedWithCard:card CVC:cvc]; |
+ void OnFullCardRequestSucceeded( |
+ const autofill::CreditCard& card, |
+ const base::string16& verificationCode) override { |
+ [owner_ fullCardRequestDidSucceedWithCard:card |
+ verificationCode:verificationCode]; |
} |
// payments::FullCardRequest::ResultDelegate: |
@@ -139,6 +139,8 @@ class FullCardRequester |
ShippingOptionSelectionCoordinator* _shippingOptionSelectionCoordinator; |
PaymentMethodSelectionCoordinator* _methodSelectionCoordinator; |
+ PaymentRequestMediator* _mediator; |
+ |
// Receiver of the full credit card details. Also displays the unmask prompt |
// UI. |
std::unique_ptr<FullCardRequester> _fullCardRequester; |
@@ -156,20 +158,16 @@ class FullCardRequester |
@synthesize delegate = _delegate; |
- (void)start { |
+ _mediator = |
+ [[PaymentRequestMediator alloc] initWithBrowserState:_browserState]; |
+ |
_viewController = [[PaymentRequestViewController alloc] |
initWithPaymentRequest:_paymentRequest]; |
[_viewController setPageFavicon:_pageFavicon]; |
[_viewController setPageTitle:_pageTitle]; |
[_viewController setPageHost:_pageHost]; |
[_viewController setDelegate:self]; |
- DCHECK(_browserState); |
- const SigninManager* signinManager = |
- ios::SigninManagerFactory::GetForBrowserStateIfExists(_browserState); |
- if (signinManager && signinManager->IsAuthenticated()) { |
- NSString* accountName = base::SysUTF8ToNSString( |
- signinManager->GetAuthenticatedAccountInfo().email); |
- [_viewController setAuthenticatedAccountName:accountName]; |
- } |
+ [_viewController setDataSource:_mediator]; |
[_viewController loadModel]; |
_navigationController = [[UINavigationController alloc] |
@@ -212,93 +210,17 @@ class FullCardRequester |
} |
- (void)fullCardRequestDidSucceedWithCard:(const autofill::CreditCard&)card |
- CVC:(const base::string16&)cvc { |
- web::PaymentResponse paymentResponse; |
- |
- // If the merchant specified the card network as part of the "basic-card" |
- // payment method, return "basic-card" as the method_name. Otherwise, return |
- // the name of the network directly. |
- std::string issuer_network = |
- autofill::data_util::GetPaymentRequestData(card.network()) |
- .basic_card_issuer_network; |
- paymentResponse.method_name = |
- _paymentRequest->basic_card_specified_networks().find(issuer_network) != |
- _paymentRequest->basic_card_specified_networks().end() |
- ? base::ASCIIToUTF16("basic-card") |
- : base::ASCIIToUTF16(issuer_network); |
- |
- // Get the billing address |
- autofill::AutofillProfile billingAddress; |
- |
- // TODO(crbug.com/714768): Make sure the billing address is set and valid |
- // before getting here. Once the bug is addressed, there will be no need to |
- // copy the address, *billing_address_ptr can be used to get the basic card |
- // response. |
- if (!card.billing_address_id().empty()) { |
- autofill::AutofillProfile* billingAddressPtr = |
- autofill::PersonalDataManager::GetProfileFromProfilesByGUID( |
- card.billing_address_id(), _paymentRequest->billing_profiles()); |
- if (billingAddressPtr) |
- billingAddress = *billingAddressPtr; |
- } |
- |
- paymentResponse.details = GetBasicCardResponseFromAutofillCreditCard( |
- card, cvc, billingAddress, |
- GetApplicationContext()->GetApplicationLocale()); |
- |
- if (_paymentRequest->request_shipping()) { |
- autofill::AutofillProfile* shippingAddress = |
- _paymentRequest->selected_shipping_profile(); |
- // TODO(crbug.com/602666): User should get here only if they have selected |
- // a shipping address. |
- DCHECK(shippingAddress); |
- paymentResponse.shipping_address = GetPaymentAddressFromAutofillProfile( |
- *shippingAddress, GetApplicationContext()->GetApplicationLocale()); |
- |
- web::PaymentShippingOption* shippingOption = |
- _paymentRequest->selected_shipping_option(); |
- DCHECK(shippingOption); |
- paymentResponse.shipping_option = shippingOption->id; |
- } |
- |
- if (_paymentRequest->request_payer_name()) { |
- autofill::AutofillProfile* contactInfo = |
- _paymentRequest->selected_contact_profile(); |
- // TODO(crbug.com/602666): User should get here only if they have selected |
- // a contact info. |
- DCHECK(contactInfo); |
- paymentResponse.payer_name = |
- contactInfo->GetInfo(autofill::AutofillType(autofill::NAME_FULL), |
- GetApplicationContext()->GetApplicationLocale()); |
- } |
- |
- if (_paymentRequest->request_payer_email()) { |
- autofill::AutofillProfile* contactInfo = |
- _paymentRequest->selected_contact_profile(); |
- // TODO(crbug.com/602666): User should get here only if they have selected |
- // a contact info. |
- DCHECK(contactInfo); |
- paymentResponse.payer_email = |
- contactInfo->GetRawInfo(autofill::EMAIL_ADDRESS); |
- } |
- |
- if (_paymentRequest->request_payer_phone()) { |
- autofill::AutofillProfile* contactInfo = |
- _paymentRequest->selected_contact_profile(); |
- // TODO(crbug.com/602666): User should get here only if they have selected |
- // a contact info. |
- DCHECK(contactInfo); |
- paymentResponse.payer_phone = |
- contactInfo->GetRawInfo(autofill::PHONE_HOME_WHOLE_NUMBER); |
- } |
- |
+ verificationCode: |
+ (const base::string16&)verificationCode { |
_viewController.view.userInteractionEnabled = NO; |
[_viewController setPending:YES]; |
[_viewController loadModel]; |
[[_viewController collectionView] reloadData]; |
[_delegate paymentRequestCoordinator:self |
- didConfirmWithPaymentResponse:paymentResponse]; |
+ didCompletePaymentRequest:_paymentRequest |
+ card:card |
+ verificationCode:verificationCode]; |
} |
- (void)updatePaymentDetails:(web::PaymentDetails)paymentDetails { |