Commit 7c9df671 authored by Chris Lu's avatar Chris Lu Committed by Commit Bot

[ios] Create SaveCard Overlay Modal configs

Bug: 1071914
Change-Id: Ifcec136f6297da09582e978ac587f397a8830f71
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2246985
Commit-Queue: Chris Lu <thegreenfrog@chromium.org>
Auto-Submit: Chris Lu <thegreenfrog@chromium.org>
Reviewed-by: default avatarSergio Collazos <sczs@chromium.org>
Cr-Commit-Position: refs/heads/master@{#778563}
parent e189e0df
...@@ -6,9 +6,11 @@ ...@@ -6,9 +6,11 @@
#import "ios/chrome/browser/infobars/infobar_ios.h" #import "ios/chrome/browser/infobars/infobar_ios.h"
#import "ios/chrome/browser/overlays/public/infobar_banner/confirm_infobar_banner_overlay_request_config.h" #import "ios/chrome/browser/overlays/public/infobar_banner/confirm_infobar_banner_overlay_request_config.h"
#import "ios/chrome/browser/overlays/public/infobar_banner/save_card_infobar_banner_overlay_request_config.h"
#import "ios/chrome/browser/overlays/public/infobar_banner/save_password_infobar_banner_overlay.h" #import "ios/chrome/browser/overlays/public/infobar_banner/save_password_infobar_banner_overlay.h"
#import "ios/chrome/browser/overlays/public/infobar_banner/translate_infobar_banner_overlay_request_config.h" #import "ios/chrome/browser/overlays/public/infobar_banner/translate_infobar_banner_overlay_request_config.h"
#import "ios/chrome/browser/overlays/public/infobar_modal/password_infobar_modal_overlay_request_config.h" #import "ios/chrome/browser/overlays/public/infobar_modal/password_infobar_modal_overlay_request_config.h"
#import "ios/chrome/browser/overlays/public/infobar_modal/save_card_infobar_modal_overlay_request_config.h"
#import "ios/chrome/browser/overlays/public/infobar_modal/translate_infobar_modal_overlay_request_config.h" #import "ios/chrome/browser/overlays/public/infobar_modal/translate_infobar_modal_overlay_request_config.h"
#if !defined(__has_feature) || !__has_feature(objc_arc) #if !defined(__has_feature) || !__has_feature(objc_arc)
...@@ -19,6 +21,8 @@ using infobars::InfoBar; ...@@ -19,6 +21,8 @@ using infobars::InfoBar;
using translate_infobar_overlays::TranslateBannerRequestConfig; using translate_infobar_overlays::TranslateBannerRequestConfig;
using translate_infobar_overlays::TranslateModalRequestConfig; using translate_infobar_overlays::TranslateModalRequestConfig;
using confirm_infobar_overlays::ConfirmBannerRequestConfig; using confirm_infobar_overlays::ConfirmBannerRequestConfig;
using save_card_infobar_overlays::SaveCardBannerRequestConfig;
using save_card_infobar_overlays::SaveCardModalRequestConfig;
InfobarOverlayRequestFactoryImpl::InfobarOverlayRequestFactoryImpl() { InfobarOverlayRequestFactoryImpl::InfobarOverlayRequestFactoryImpl() {
// Create the factory helpers for the supported infobar types. // Create the factory helpers for the supported infobar types.
...@@ -36,6 +40,10 @@ InfobarOverlayRequestFactoryImpl::InfobarOverlayRequestFactoryImpl() { ...@@ -36,6 +40,10 @@ InfobarOverlayRequestFactoryImpl::InfobarOverlayRequestFactoryImpl() {
CreateFactory<ConfirmBannerRequestConfig>(), CreateFactory<ConfirmBannerRequestConfig>(),
/*detail_sheet_factory=*/nullptr, /*detail_sheet_factory=*/nullptr,
/*modal_factory=*/nullptr); /*modal_factory=*/nullptr);
SetUpFactories(InfobarType::kInfobarTypeSaveCard,
CreateFactory<SaveCardBannerRequestConfig>(),
/*detail_sheet_factory=*/nullptr,
CreateFactory<SaveCardModalRequestConfig>());
} }
InfobarOverlayRequestFactoryImpl::~InfobarOverlayRequestFactoryImpl() = default; InfobarOverlayRequestFactoryImpl::~InfobarOverlayRequestFactoryImpl() = default;
......
...@@ -10,6 +10,10 @@ source_set("infobar_modal") { ...@@ -10,6 +10,10 @@ source_set("infobar_modal") {
"password_infobar_modal_overlay_request_config.mm", "password_infobar_modal_overlay_request_config.mm",
"password_infobar_modal_overlay_responses.h", "password_infobar_modal_overlay_responses.h",
"password_infobar_modal_overlay_responses.mm", "password_infobar_modal_overlay_responses.mm",
"save_card_infobar_modal_overlay_request_config.h",
"save_card_infobar_modal_overlay_request_config.mm",
"save_card_infobar_modal_overlay_responses.h",
"save_card_infobar_modal_overlay_responses.mm",
"translate_infobar_modal_overlay_request_config.h", "translate_infobar_modal_overlay_request_config.h",
"translate_infobar_modal_overlay_request_config.mm", "translate_infobar_modal_overlay_request_config.mm",
"translate_infobar_modal_overlay_responses.h", "translate_infobar_modal_overlay_responses.h",
...@@ -20,10 +24,12 @@ source_set("infobar_modal") { ...@@ -20,10 +24,12 @@ source_set("infobar_modal") {
deps = [ deps = [
"//base", "//base",
"//components/autofill/core/browser",
"//components/translate/core/browser", "//components/translate/core/browser",
"//ios/chrome/browser/infobars", "//ios/chrome/browser/infobars",
"//ios/chrome/browser/overlays", "//ios/chrome/browser/overlays",
"//ios/chrome/browser/overlays/public/common/infobars", "//ios/chrome/browser/overlays/public/common/infobars",
"//ios/chrome/browser/passwords:infobar_delegates", "//ios/chrome/browser/passwords:infobar_delegates",
"//ios/chrome/browser/ui/autofill:autofill_message",
] ]
} }
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_CHROME_BROWSER_OVERLAYS_PUBLIC_INFOBAR_MODAL_SAVE_CARD_INFOBAR_MODAL_OVERLAY_REQUEST_CONFIG_H_
#define IOS_CHROME_BROWSER_OVERLAYS_PUBLIC_INFOBAR_MODAL_SAVE_CARD_INFOBAR_MODAL_OVERLAY_REQUEST_CONFIG_H_
#include "ios/chrome/browser/overlays/public/overlay_request_config.h"
#include "components/autofill/core/browser/payments/legal_message_line.h"
class InfoBarIOS;
@class SaveCardMessageWithLinks;
namespace autofill {
class AutofillSaveCardInfoBarDelegateMobile;
}
namespace save_card_infobar_overlays {
// Configuration object for OverlayRequests for the modal UI for an infobar with
// a AutofillSaveCardInfoBarDelegateMobile.
class SaveCardModalRequestConfig
: public OverlayRequestConfig<SaveCardModalRequestConfig> {
public:
~SaveCardModalRequestConfig() override;
// The card holder name of the card.
base::string16 cardholder_name() const { return cardholder_name_; }
// The expiration month of the card.
base::string16 expiration_date_month() const {
return expiration_date_month_;
}
// The expiration year of the card.
base::string16 expiration_date_year() const { return expiration_date_year_; }
// The last four digits of the card.
base::string16 card_last_four_digits() const {
return card_last_four_digits_;
}
// The resource ID for the icon that identifies the issuer of the card.
int issuer_icon_id() const { return issuer_icon_id_; }
// The legal disclaimer shown at the bottom of the modal.
NSArray<SaveCardMessageWithLinks*>* legal_message_lines() const {
return legal_message_lines_;
}
// Whether the current card is already saved.
bool current_card_saved() const { return current_card_saved_; }
// Whether the action is an upload or a local save.
bool should_upload_credentials() const { return should_upload_credentials_; }
private:
OVERLAY_USER_DATA_SETUP(SaveCardModalRequestConfig);
explicit SaveCardModalRequestConfig(InfoBarIOS* infobar);
// OverlayUserData:
void CreateAuxiliaryData(base::SupportsUserData* user_data) override;
// Return an array of UI SaveCardMessageWithLinks model objects for
// |delegate|'s legal_message_lines_.
NSMutableArray<SaveCardMessageWithLinks*>* LegalMessagesForModal(
autofill::AutofillSaveCardInfoBarDelegateMobile* delegate);
// The InfoBar causing this modal.
InfoBarIOS* infobar_ = nullptr;
// Configuration data extracted from |infobar_|'s save card delegate.
base::string16 cardholder_name_;
base::string16 expiration_date_month_;
base::string16 expiration_date_year_;
base::string16 card_last_four_digits_;
int issuer_icon_id_;
NSArray<SaveCardMessageWithLinks*>* legal_message_lines_;
bool current_card_saved_ = false;
bool should_upload_credentials_ = false;
};
} // namespace save_card_infobar_overlays
#endif // IOS_CHROME_BROWSER_OVERLAYS_PUBLIC_INFOBAR_MODAL_SAVE_CARD_INFOBAR_MODAL_OVERLAY_REQUEST_CONFIG_H_
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/chrome/browser/overlays/public/infobar_modal/save_card_infobar_modal_overlay_request_config.h"
#include "base/check.h"
#include "base/strings/sys_string_conversions.h"
#include "components/autofill/core/browser/payments/autofill_save_card_infobar_delegate_mobile.h"
#include "ios/chrome/browser/infobars/infobar_ios.h"
#import "ios/chrome/browser/overlays/public/common/infobars/infobar_overlay_request_config.h"
#import "ios/chrome/browser/ui/autofill/save_card_message_with_links.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
namespace save_card_infobar_overlays {
OVERLAY_USER_DATA_SETUP_IMPL(SaveCardModalRequestConfig);
SaveCardModalRequestConfig::SaveCardModalRequestConfig(InfoBarIOS* infobar)
: infobar_(infobar) {
DCHECK(infobar_);
autofill::AutofillSaveCardInfoBarDelegateMobile* delegate =
static_cast<autofill::AutofillSaveCardInfoBarDelegateMobile*>(
infobar_->delegate());
cardholder_name_ = delegate->cardholder_name();
expiration_date_month_ = delegate->expiration_date_month();
expiration_date_year_ = delegate->expiration_date_year();
card_last_four_digits_ = delegate->card_last_four_digits();
issuer_icon_id_ = delegate->issuer_icon_id();
legal_message_lines_ = LegalMessagesForModal(delegate);
current_card_saved_ = infobar->accepted();
should_upload_credentials_ = delegate->upload();
}
SaveCardModalRequestConfig::~SaveCardModalRequestConfig() = default;
void SaveCardModalRequestConfig::CreateAuxiliaryData(
base::SupportsUserData* user_data) {
InfobarOverlayRequestConfig::CreateForUserData(user_data, infobar_,
InfobarOverlayType::kModal);
}
NSMutableArray<SaveCardMessageWithLinks*>*
SaveCardModalRequestConfig::LegalMessagesForModal(
autofill::AutofillSaveCardInfoBarDelegateMobile* delegate) {
NSMutableArray<SaveCardMessageWithLinks*>* legalMessages =
[[NSMutableArray alloc] init];
// Only display legal Messages if the card is being uploaded and there are
// any.
if (delegate->upload() && !delegate->legal_message_lines().empty()) {
for (const auto& line : delegate->legal_message_lines()) {
SaveCardMessageWithLinks* message =
[[SaveCardMessageWithLinks alloc] init];
message.messageText = base::SysUTF16ToNSString(line.text());
NSMutableArray* linkRanges = [[NSMutableArray alloc] init];
std::vector<GURL> linkURLs;
for (const auto& link : line.links()) {
[linkRanges addObject:[NSValue valueWithRange:link.range.ToNSRange()]];
linkURLs.push_back(link.url);
}
message.linkRanges = linkRanges;
message.linkURLs = linkURLs;
[legalMessages addObject:message];
}
}
return legalMessages;
}
} // namespace save_card_infobar_overlays
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_CHROME_BROWSER_OVERLAYS_PUBLIC_INFOBAR_MODAL_SAVE_CARD_INFOBAR_MODAL_OVERLAY_RESPONSES_H_
#define IOS_CHROME_BROWSER_OVERLAYS_PUBLIC_INFOBAR_MODAL_SAVE_CARD_INFOBAR_MODAL_OVERLAY_RESPONSES_H_
#import <Foundation/Foundation.h>
#include "ios/chrome/browser/overlays/public/overlay_response_info.h"
#include "url/gurl.h"
namespace save_card_infobar_overlays {
// Main action response config for Save Card that passes the information of a
// card to be saved.
class SaveCardMainAction : public OverlayResponseInfo<SaveCardMainAction> {
public:
~SaveCardMainAction() override;
// The cardholder name of the card to be saved.
NSString* cardholder_name() const { return cardholder_name_; }
// The expiration month of the card to be saved.
NSString* expiration_month() const { return expiration_month_; }
// The expiration year of the card to be saved.
NSString* expiration_year() const { return expiration_year_; }
private:
OVERLAY_USER_DATA_SETUP(SaveCardMainAction);
SaveCardMainAction(NSString* cardholder_name,
NSString* expiration_month,
NSString* expiration_year);
NSString* cardholder_name_ = nil;
NSString* expiration_month_ = nil;
NSString* expiration_year_ = nil;
};
// Response config to load a URL tapped in the modal.
class SaveCardLoadURL : public OverlayResponseInfo<SaveCardLoadURL> {
public:
~SaveCardLoadURL() override;
const GURL& link_url() const { return link_url_; }
private:
OVERLAY_USER_DATA_SETUP(SaveCardLoadURL);
SaveCardLoadURL(const GURL& link_url);
GURL link_url_;
};
} // namespace save_card_infobar_overlays
#endif // IOS_CHROME_BROWSER_OVERLAYS_PUBLIC_INFOBAR_MODAL_SAVE_CARD_INFOBAR_MODAL_OVERLAY_RESPONSES_H_
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/chrome/browser/overlays/public/infobar_modal/save_card_infobar_modal_overlay_responses.h"
#include "url/gurl.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
namespace save_card_infobar_overlays {
#pragma mark - SaveCardMainAction
OVERLAY_USER_DATA_SETUP_IMPL(SaveCardMainAction);
SaveCardMainAction::SaveCardMainAction(NSString* cardholder_name,
NSString* expiration_month,
NSString* expiration_year)
: cardholder_name_(cardholder_name),
expiration_month_(expiration_month),
expiration_year_(expiration_year) {}
SaveCardMainAction::~SaveCardMainAction() = default;
#pragma mark - SaveCardLoadURL
OVERLAY_USER_DATA_SETUP_IMPL(SaveCardLoadURL);
SaveCardLoadURL::SaveCardLoadURL(const GURL& link_url) : link_url_(link_url) {}
SaveCardLoadURL::~SaveCardLoadURL() = default;
} // namespace save_card_infobar_overlays
...@@ -51,7 +51,6 @@ class SaveCardInfobarBannerOverlayMediatorTest : public PlatformTest { ...@@ -51,7 +51,6 @@ class SaveCardInfobarBannerOverlayMediatorTest : public PlatformTest {
// Tests that a SaveCardInfobarBannerOverlayMediator correctly sets up its // Tests that a SaveCardInfobarBannerOverlayMediator correctly sets up its
// consumer. // consumer.
TEST_F(SaveCardInfobarBannerOverlayMediatorTest, SetUpConsumer) { TEST_F(SaveCardInfobarBannerOverlayMediatorTest, SetUpConsumer) {
// Create an InfoBarIOS with a ConfirmInfoBarDelegate.
autofill::CreditCard credit_card(base::GenerateGUID(), autofill::CreditCard credit_card(base::GenerateGUID(),
"https://www.example.com/"); "https://www.example.com/");
std::unique_ptr<PrefService> prefs = autofill::test::PrefServiceForTesting(); std::unique_ptr<PrefService> prefs = autofill::test::PrefServiceForTesting();
......
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