Commit 539db617 authored by Chris Lu's avatar Chris Lu Committed by Commit Bot

[ios] Create SaveCard Overlay Banner Interaction Handlers

This change adds SaveCardInfobarBannerInteractionHandler and
SaveCardInfobarBannerOverlayRequestCallbackInstaller to handle
banner responses.

Mock delegate and InteractionHandler classes are added to allow
for testing of the added classes.

Bug: 1071914
Change-Id: I4d58b9443458946a9001aa73f6e79015e8198db6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2250896
Commit-Queue: Chris Lu <thegreenfrog@chromium.org>
Reviewed-by: default avatarSergio Collazos <sczs@chromium.org>
Cr-Commit-Position: refs/heads/master@{#780368}
parent 53a5fe6d
# 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.
source_set("save_card") {
configs += [ "//build/config/compiler:enable_arc" ]
sources = [
"save_card_infobar_banner_interaction_handler.h",
"save_card_infobar_banner_interaction_handler.mm",
"save_card_infobar_banner_overlay_request_callback_installer.h",
"save_card_infobar_banner_overlay_request_callback_installer.mm",
]
deps = [
"//base",
"//components/autofill/core/browser",
"//ios/chrome/browser/infobars",
"//ios/chrome/browser/infobars:public",
"//ios/chrome/browser/infobars/overlays",
"//ios/chrome/browser/infobars/overlays:util",
"//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers",
"//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/common",
"//ios/chrome/browser/main:public",
"//ios/chrome/browser/overlays",
"//ios/chrome/browser/overlays/public/infobar_banner",
"//ios/chrome/browser/overlays/public/infobar_modal",
"//ios/chrome/browser/web_state_list",
]
}
source_set("unit_tests") {
configs += [ "//build/config/compiler:enable_arc" ]
testonly = true
sources = [
"save_card_infobar_banner_interaction_handler_unittest.mm",
"save_card_infobar_banner_overlay_request_callback_installer_unittest.mm",
]
deps = [
":save_card",
"//base/test:test_support",
"//components/autofill/core/browser:test_support",
"//components/infobars/core:feature_flags",
"//components/prefs",
"//ios/chrome/browser/infobars",
"//ios/chrome/browser/infobars/overlays",
"//ios/chrome/browser/infobars/overlays:util",
"//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/common",
"//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/test",
"//ios/chrome/browser/infobars/test",
"//ios/chrome/browser/main:test_support",
"//ios/chrome/browser/overlays",
"//ios/chrome/browser/overlays/public/common",
"//ios/chrome/browser/overlays/public/infobar_banner",
"//ios/chrome/browser/overlays/public/infobar_modal",
"//ios/chrome/browser/overlays/test",
"//ios/chrome/browser/ui/infobars:feature_flags",
"//ios/chrome/browser/ui/infobars:infobars_ui",
"//ios/chrome/browser/ui/infobars/test",
"//ios/chrome/browser/web_state_list",
"//ios/web/public/test/fakes",
"//testing/gtest",
]
}
// 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_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_SAVE_CARD_SAVE_CARD_INFOBAR_BANNER_INTERACTION_HANDLER_H_
#define IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_SAVE_CARD_SAVE_CARD_INFOBAR_BANNER_INTERACTION_HANDLER_H_
#include <string.h>
#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/common/infobar_banner_interaction_handler.h"
class InfobarBannerOverlayRequestCallbackInstaller;
namespace autofill {
class AutofillSaveCardInfoBarDelegateMobile;
}
// Helper object that updates the model layer for interaction events with the
// SaveCard infobar banner UI.
class SaveCardInfobarBannerInteractionHandler
: public InfobarBannerInteractionHandler {
public:
SaveCardInfobarBannerInteractionHandler();
~SaveCardInfobarBannerInteractionHandler() override;
// Instructs the handler to update the credentials with |cardholder_name|,
// |expiration_date_month|, and |expiration_date_year|. This replaces
// MainButtonTapped.
virtual void SaveCredentials(InfoBarIOS* infobar,
base::string16 cardholder_name,
base::string16 expiration_date_month,
base::string16 expiration_date_year);
private:
// InfobarBannerInteractionHandler:
std::unique_ptr<InfobarBannerOverlayRequestCallbackInstaller>
CreateBannerInstaller() override;
// Returns the SaveCard delegate from |infobar|.
autofill::AutofillSaveCardInfoBarDelegateMobile* GetInfobarDelegate(
InfoBarIOS* infobar);
};
#endif // IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_SAVE_CARD_SAVE_CARD_INFOBAR_BANNER_INTERACTION_HANDLER_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/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_banner_interaction_handler.h"
#include "base/check.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/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_banner_overlay_request_callback_installer.h"
#import "ios/chrome/browser/infobars/overlays/infobar_overlay_request_cancel_handler.h"
#import "ios/chrome/browser/infobars/overlays/infobar_overlay_request_inserter.h"
#import "ios/chrome/browser/overlays/public/infobar_banner/save_card_infobar_banner_overlay_request_config.h"
#import "ios/chrome/browser/overlays/public/infobar_modal/save_card_infobar_modal_overlay_request_config.h"
#include "ios/chrome/browser/overlays/public/overlay_request_queue.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
using save_card_infobar_overlays::SaveCardBannerRequestConfig;
#pragma mark - InfobarBannerInteractionHandler
SaveCardInfobarBannerInteractionHandler::
SaveCardInfobarBannerInteractionHandler()
: InfobarBannerInteractionHandler(
SaveCardBannerRequestConfig::RequestSupport()) {}
SaveCardInfobarBannerInteractionHandler::
~SaveCardInfobarBannerInteractionHandler() = default;
void SaveCardInfobarBannerInteractionHandler::SaveCredentials(
InfoBarIOS* infobar,
base::string16 cardholder_name,
base::string16 expiration_date_month,
base::string16 expiration_date_year) {
infobar->set_accepted(GetInfobarDelegate(infobar)->UpdateAndAccept(
cardholder_name, expiration_date_month, expiration_date_year));
}
#pragma mark - Private
std::unique_ptr<InfobarBannerOverlayRequestCallbackInstaller>
SaveCardInfobarBannerInteractionHandler::CreateBannerInstaller() {
return std::make_unique<SaveCardInfobarBannerOverlayRequestCallbackInstaller>(
this);
}
autofill::AutofillSaveCardInfoBarDelegateMobile*
SaveCardInfobarBannerInteractionHandler::GetInfobarDelegate(
InfoBarIOS* infobar) {
autofill::AutofillSaveCardInfoBarDelegateMobile* delegate =
autofill::AutofillSaveCardInfoBarDelegateMobile::FromInfobarDelegate(
infobar->delegate());
DCHECK(delegate);
return delegate;
}
// 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/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_banner_interaction_handler.h"
#include "base/guid.h"
#include "base/strings/sys_string_conversions.h"
#include "base/test/scoped_feature_list.h"
#include "components/autofill/core/browser/autofill_test_utils.h"
#include "components/autofill/core/browser/data_model/credit_card.h"
#include "components/infobars/core/infobar_feature.h"
#include "ios/chrome/browser/infobars/infobar_ios.h"
#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/common/infobar_banner_interaction_handler.h"
#include "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/test/mock_autofill_save_card_infobar_delegate_mobile.h"
#import "ios/chrome/browser/ui/infobars/infobar_feature.h"
#include "testing/platform_test.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
// Test fixture for SaveCardInfobarBannerInteractionHandler.
class SaveCardInfobarBannerInteractionHandlerTest : public PlatformTest {
public:
SaveCardInfobarBannerInteractionHandlerTest()
: delegate_factory_(),
prefs_(autofill::test::PrefServiceForTesting()),
card_(base::GenerateGUID(), "https://www.example.com/") {
scoped_feature_list_.InitWithFeatures({kIOSInfobarUIReboot},
{kInfobarUIRebootOnlyiOS13});
infobar_ = std::make_unique<InfoBarIOS>(
InfobarType::kInfobarTypeSaveCard,
MockAutofillSaveCardInfoBarDelegateMobileFactory::
CreateMockAutofillSaveCardInfoBarDelegateMobileFactory(
false, prefs_.get(), card_));
}
MockAutofillSaveCardInfoBarDelegateMobile& mock_delegate() {
return *static_cast<MockAutofillSaveCardInfoBarDelegateMobile*>(
infobar_->delegate());
}
protected:
base::test::ScopedFeatureList scoped_feature_list_;
SaveCardInfobarBannerInteractionHandler handler_;
MockAutofillSaveCardInfoBarDelegateMobileFactory delegate_factory_;
std::unique_ptr<PrefService> prefs_;
autofill::CreditCard card_;
std::unique_ptr<InfoBarIOS> infobar_;
};
TEST_F(SaveCardInfobarBannerInteractionHandlerTest, SaveCredentials) {
base::string16 cardholder_name = base::SysNSStringToUTF16(@"test name");
base::string16 expiration_date_month = base::SysNSStringToUTF16(@"06");
base::string16 expiration_date_year = base::SysNSStringToUTF16(@"2023");
EXPECT_CALL(mock_delegate(),
UpdateAndAccept(cardholder_name, expiration_date_month,
expiration_date_year));
handler_.SaveCredentials(infobar_.get(), cardholder_name,
expiration_date_month, expiration_date_year);
}
// 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_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_SAVE_CARD_SAVE_CARD_INFOBAR_BANNER_OVERLAY_REQUEST_CALLBACK_INSTALLER_H_
#define IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_SAVE_CARD_SAVE_CARD_INFOBAR_BANNER_OVERLAY_REQUEST_CALLBACK_INSTALLER_H_
#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/common/infobar_banner_overlay_request_callback_installer.h"
class SaveCardInfobarBannerInteractionHandler;
// Callback installer for SaveCard banner interaction events.
class SaveCardInfobarBannerOverlayRequestCallbackInstaller
: public InfobarBannerOverlayRequestCallbackInstaller {
public:
// Constructor for an instance that installs callbacks that forward
// interaction events to |interaction_handler|.
explicit SaveCardInfobarBannerOverlayRequestCallbackInstaller(
SaveCardInfobarBannerInteractionHandler* interaction_handler);
~SaveCardInfobarBannerOverlayRequestCallbackInstaller() override;
private:
// Used as a callback for OverlayResponses dispatched through |request|'s
// callback manager. The OverlayDispatchCallback is created with an
// OverlayResponseSupport that guarantees that |response| is created with an
// save_card_infobar_modal_responses::SaveCardMainAction.
void SaveCredentialsCallback(OverlayRequest* request,
OverlayResponse* response);
// OverlayRequestCallbackInstaller:
void InstallCallbacksInternal(OverlayRequest* request) override;
// The handler for received responses.
SaveCardInfobarBannerInteractionHandler* interaction_handler_ = nullptr;
base::WeakPtrFactory<SaveCardInfobarBannerOverlayRequestCallbackInstaller>
weak_factory_{this};
};
#endif // IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_SAVE_CARD_SAVE_CARD_INFOBAR_BANNER_OVERLAY_REQUEST_CALLBACK_INSTALLER_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/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_banner_overlay_request_callback_installer.h"
#include "base/check.h"
#include "base/strings/sys_string_conversions.h"
#include "ios/chrome/browser/infobars/infobar_ios.h"
#include "ios/chrome/browser/infobars/infobar_manager_impl.h"
#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_banner_interaction_handler.h"
#include "ios/chrome/browser/infobars/overlays/infobar_overlay_util.h"
#import "ios/chrome/browser/overlays/public/infobar_banner/save_card_infobar_banner_overlay_request_config.h"
#import "ios/chrome/browser/overlays/public/infobar_modal/save_card_infobar_modal_overlay_responses.h"
#include "ios/chrome/browser/overlays/public/overlay_callback_manager.h"
#import "ios/chrome/browser/overlays/public/overlay_response.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
using save_card_infobar_overlays::SaveCardMainAction;
using save_card_infobar_overlays::SaveCardBannerRequestConfig;
SaveCardInfobarBannerOverlayRequestCallbackInstaller::
SaveCardInfobarBannerOverlayRequestCallbackInstaller(
SaveCardInfobarBannerInteractionHandler* interaction_handler)
: InfobarBannerOverlayRequestCallbackInstaller(
SaveCardBannerRequestConfig::RequestSupport(),
interaction_handler),
interaction_handler_(interaction_handler) {
DCHECK(interaction_handler_);
}
SaveCardInfobarBannerOverlayRequestCallbackInstaller::
~SaveCardInfobarBannerOverlayRequestCallbackInstaller() = default;
#pragma mark - Private
void SaveCardInfobarBannerOverlayRequestCallbackInstaller::
SaveCredentialsCallback(OverlayRequest* request,
OverlayResponse* response) {
InfoBarIOS* infobar = GetOverlayRequestInfobar(request);
if (!infobar)
return;
SaveCardMainAction* info = response->GetInfo<SaveCardMainAction>();
interaction_handler_->SaveCredentials(
GetOverlayRequestInfobar(request),
base::SysNSStringToUTF16(info->cardholder_name()),
base::SysNSStringToUTF16(info->expiration_month()),
base::SysNSStringToUTF16(info->expiration_year()));
}
#pragma mark - OverlayRequestCallbackInstaller
void SaveCardInfobarBannerOverlayRequestCallbackInstaller::
InstallCallbacksInternal(OverlayRequest* request) {
InfobarBannerOverlayRequestCallbackInstaller::InstallCallbacksInternal(
request);
OverlayCallbackManager* manager = request->GetCallbackManager();
manager->AddDispatchCallback(OverlayDispatchCallback(
base::BindRepeating(
&SaveCardInfobarBannerOverlayRequestCallbackInstaller::
SaveCredentialsCallback,
weak_factory_.GetWeakPtr(), request),
SaveCardMainAction::ResponseSupport()));
}
// 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/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_banner_overlay_request_callback_installer.h"
#include "base/guid.h"
#include "base/strings/sys_string_conversions.h"
#include "base/test/scoped_feature_list.h"
#include "components/autofill/core/browser/autofill_test_utils.h"
#include "components/autofill/core/browser/data_model/credit_card.h"
#include "components/infobars/core/infobar_feature.h"
#include "ios/chrome/browser/infobars/infobar_ios.h"
#include "ios/chrome/browser/infobars/infobar_manager_impl.h"
#include "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/test/mock_autofill_save_card_infobar_delegate_mobile.h"
#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/test/mock_save_card_banner_infobar_interaction_handler.h"
#import "ios/chrome/browser/overlays/public/infobar_banner/save_card_infobar_banner_overlay_request_config.h"
#import "ios/chrome/browser/overlays/public/infobar_modal/infobar_modal_overlay_responses.h"
#import "ios/chrome/browser/overlays/public/infobar_modal/save_card_infobar_modal_overlay_responses.h"
#include "ios/chrome/browser/overlays/public/overlay_callback_manager.h"
#include "ios/chrome/browser/overlays/public/overlay_request.h"
#include "ios/chrome/browser/overlays/public/overlay_request_queue.h"
#include "ios/chrome/browser/overlays/public/overlay_response.h"
#import "ios/chrome/browser/ui/infobars/infobar_feature.h"
#import "ios/web/public/test/fakes/test_navigation_manager.h"
#import "ios/web/public/test/fakes/test_web_state.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/platform_test.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
using save_card_infobar_overlays::SaveCardBannerRequestConfig;
// Test fixture for SaveCardInfobarBannerOverlayRequestCallbackInstaller.
class SaveCardInfobarBannerOverlayRequestCallbackInstallerTest
: public PlatformTest {
public:
SaveCardInfobarBannerOverlayRequestCallbackInstallerTest()
: prefs_(autofill::test::PrefServiceForTesting()),
card_(base::GenerateGUID(), "https://www.example.com/"),
installer_(&mock_handler_),
delegate_factory_() {
scoped_feature_list_.InitWithFeatures({kIOSInfobarUIReboot},
{kInfobarUIRebootOnlyiOS13});
// Create the infobar and add it to the WebState's manager.
web_state_.SetNavigationManager(
std::make_unique<web::TestNavigationManager>());
InfoBarManagerImpl::CreateForWebState(&web_state_);
std::unique_ptr<MockAutofillSaveCardInfoBarDelegateMobile> delegate =
delegate_factory_
.CreateMockAutofillSaveCardInfoBarDelegateMobileFactory(
false, prefs_.get(), card_);
delegate_ = delegate.get();
std::unique_ptr<InfoBarIOS> infobar = std::make_unique<InfoBarIOS>(
InfobarType::kInfobarTypeTranslate, std::move(delegate));
infobar_ = infobar.get();
manager()->AddInfoBar(std::move(infobar));
// Create the request and add it to the WebState's queue.
std::unique_ptr<OverlayRequest> added_request =
OverlayRequest::CreateWithConfig<SaveCardBannerRequestConfig>(infobar_);
request_ = added_request.get();
queue()->AddRequest(std::move(added_request));
// Install the callbacks on the added request.
installer_.InstallCallbacks(request_);
}
InfoBarManagerImpl* manager() {
return InfoBarManagerImpl::FromWebState(&web_state_);
}
OverlayRequestQueue* queue() {
return OverlayRequestQueue::FromWebState(&web_state_,
OverlayModality::kInfobarModal);
}
protected:
base::test::ScopedFeatureList scoped_feature_list_;
std::unique_ptr<PrefService> prefs_;
autofill::CreditCard card_;
web::TestWebState web_state_;
InfoBarIOS* infobar_ = nullptr;
OverlayRequest* request_ = nullptr;
MockSaveCardInfobarBannerInteractionHandler mock_handler_;
SaveCardInfobarBannerOverlayRequestCallbackInstaller installer_;
MockAutofillSaveCardInfoBarDelegateMobileFactory delegate_factory_;
MockAutofillSaveCardInfoBarDelegateMobile* delegate_;
};
TEST_F(SaveCardInfobarBannerOverlayRequestCallbackInstallerTest,
SaveCardCredentials) {
NSString* cardholder_name = @"test name";
NSString* expiration_date_month = @"06";
NSString* expiration_date_year = @"2023";
EXPECT_CALL(
mock_handler_,
SaveCredentials(infobar_, base::SysNSStringToUTF16(cardholder_name),
base::SysNSStringToUTF16(expiration_date_month),
base::SysNSStringToUTF16(expiration_date_year)));
request_->GetCallbackManager()->DispatchResponse(
OverlayResponse::CreateWithInfo<
save_card_infobar_overlays::SaveCardMainAction>(
cardholder_name, expiration_date_month, expiration_date_year));
}
...@@ -5,8 +5,12 @@ ...@@ -5,8 +5,12 @@
source_set("test") { source_set("test") {
testonly = true testonly = true
sources = [ sources = [
"mock_autofill_save_card_infobar_delegate_mobile.h",
"mock_autofill_save_card_infobar_delegate_mobile.mm",
"mock_infobar_interaction_handler.h", "mock_infobar_interaction_handler.h",
"mock_infobar_interaction_handler.mm", "mock_infobar_interaction_handler.mm",
"mock_save_card_banner_infobar_interaction_handler.h",
"mock_save_card_banner_infobar_interaction_handler.mm",
"mock_translate_infobar_interaction_handler.h", "mock_translate_infobar_interaction_handler.h",
"mock_translate_infobar_interaction_handler.mm", "mock_translate_infobar_interaction_handler.mm",
] ]
...@@ -15,9 +19,13 @@ source_set("test") { ...@@ -15,9 +19,13 @@ source_set("test") {
deps = [ deps = [
"//base", "//base",
"//components/autofill/core/browser",
"//components/autofill/core/browser:test_support",
"//components/prefs",
"//ios/chrome/browser/infobars:public", "//ios/chrome/browser/infobars:public",
"//ios/chrome/browser/infobars/overlays", "//ios/chrome/browser/infobars/overlays",
"//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers", "//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers",
"//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card",
"//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/translate", "//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/translate",
"//ios/chrome/browser/overlays", "//ios/chrome/browser/overlays",
"//ios/chrome/browser/overlays/public/common/infobars", "//ios/chrome/browser/overlays/public/common/infobars",
......
// 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_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_TEST_MOCK_AUTOFILL_SAVE_CARD_INFOBAR_DELEGATE_MOBILE_H_
#define IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_TEST_MOCK_AUTOFILL_SAVE_CARD_INFOBAR_DELEGATE_MOBILE_H_
#include <memory>
#include <string>
#include "components/autofill/core/browser/payments/autofill_save_card_infobar_delegate_mobile.h"
#include "base/strings/string16.h"
#include "components/autofill/core/browser/autofill_client.h"
#include "components/autofill/core/browser/data_model/credit_card.h"
#include "components/autofill/core/browser/payments/legal_message_line.h"
#include "components/prefs/pref_service.h"
#include "testing/gmock/include/gmock/gmock.h"
class GURL;
class MockAutofillSaveCardInfoBarDelegateMobile
: public autofill::AutofillSaveCardInfoBarDelegateMobile {
public:
MockAutofillSaveCardInfoBarDelegateMobile(
bool upload,
autofill::AutofillClient::SaveCreditCardOptions options,
const autofill::CreditCard& card,
const autofill::LegalMessageLines& legal_message_lines,
autofill::AutofillClient::UploadSaveCardPromptCallback
upload_save_card_prompt_callback,
autofill::AutofillClient::LocalSaveCardPromptCallback
local_save_card_prompt_callback,
PrefService* pref_service);
~MockAutofillSaveCardInfoBarDelegateMobile() override;
MOCK_METHOD3(UpdateAndAccept,
bool(base::string16 cardholder_name,
base::string16 expiration_date_month,
base::string16 expiration_date_year));
MOCK_METHOD1(OnLegalMessageLinkClicked, void(GURL url));
};
class MockAutofillSaveCardInfoBarDelegateMobileFactory {
public:
MockAutofillSaveCardInfoBarDelegateMobileFactory();
~MockAutofillSaveCardInfoBarDelegateMobileFactory();
static std::unique_ptr<MockAutofillSaveCardInfoBarDelegateMobile>
CreateMockAutofillSaveCardInfoBarDelegateMobileFactory(
bool upload,
PrefService* service,
autofill::CreditCard card);
private:
std::unique_ptr<PrefService> prefs_;
autofill::CreditCard credit_card_;
};
#endif // IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_TEST_MOCK_AUTOFILL_SAVE_CARD_INFOBAR_DELEGATE_MOBILE_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.
#include "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/test/mock_autofill_save_card_infobar_delegate_mobile.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
#import "base/bind.h"
#include "base/guid.h"
#include "components/autofill/core/browser/autofill_test_utils.h"
MockAutofillSaveCardInfoBarDelegateMobile::
MockAutofillSaveCardInfoBarDelegateMobile(
bool upload,
autofill::AutofillClient::SaveCreditCardOptions options,
const autofill::CreditCard& card,
const autofill::LegalMessageLines& legal_message_lines,
autofill::AutofillClient::UploadSaveCardPromptCallback
upload_save_card_prompt_callback,
autofill::AutofillClient::LocalSaveCardPromptCallback
local_save_card_prompt_callback,
PrefService* pref_service)
: AutofillSaveCardInfoBarDelegateMobile(
upload,
options,
card,
legal_message_lines,
std::move(upload_save_card_prompt_callback),
std::move(local_save_card_prompt_callback),
pref_service) {}
MockAutofillSaveCardInfoBarDelegateMobile::
~MockAutofillSaveCardInfoBarDelegateMobile() = default;
#pragma mark - MockAutofillSaveCardInfoBarDelegateMobileFactory
MockAutofillSaveCardInfoBarDelegateMobileFactory::
MockAutofillSaveCardInfoBarDelegateMobileFactory()
: prefs_(autofill::test::PrefServiceForTesting()),
credit_card_(base::GenerateGUID(), "https://www.example.com/") {}
MockAutofillSaveCardInfoBarDelegateMobileFactory::
~MockAutofillSaveCardInfoBarDelegateMobileFactory() {}
std::unique_ptr<MockAutofillSaveCardInfoBarDelegateMobile>
MockAutofillSaveCardInfoBarDelegateMobileFactory::
CreateMockAutofillSaveCardInfoBarDelegateMobileFactory(
bool upload,
PrefService* prefs,
autofill::CreditCard card) {
return std::make_unique<MockAutofillSaveCardInfoBarDelegateMobile>(
/*upload=*/upload, autofill::AutofillClient::SaveCreditCardOptions(),
card, autofill::LegalMessageLines(),
autofill::AutofillClient::UploadSaveCardPromptCallback(),
base::BindOnce(
^(autofill::AutofillClient::SaveCardOfferUserDecision user_decision){
}),
prefs);
}
// 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_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_TEST_MOCK_SAVE_CARD_BANNER_INFOBAR_INTERACTION_HANDLER_H_
#define IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_TEST_MOCK_SAVE_CARD_BANNER_INFOBAR_INTERACTION_HANDLER_H_
#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_banner_interaction_handler.h"
#include <string.h>
#include "testing/gmock/include/gmock/gmock.h"
class InfoBarIOS;
// Mock version of SaveCardInfobarBannerInteractionHandler for use in tests.
class MockSaveCardInfobarBannerInteractionHandler
: public SaveCardInfobarBannerInteractionHandler {
public:
MockSaveCardInfobarBannerInteractionHandler();
~MockSaveCardInfobarBannerInteractionHandler() override;
MOCK_METHOD4(SaveCredentials,
void(InfoBarIOS* infobar,
base::string16 cardholder_name,
base::string16 expiration_date_month,
base::string16 expiration_date_year));
};
#endif // IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_TEST_MOCK_SAVE_CARD_BANNER_INFOBAR_INTERACTION_HANDLER_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/infobars/overlays/browser_agent/interaction_handlers/test/mock_save_card_banner_infobar_interaction_handler.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
MockSaveCardInfobarBannerInteractionHandler::
MockSaveCardInfobarBannerInteractionHandler() = default;
MockSaveCardInfobarBannerInteractionHandler::
~MockSaveCardInfobarBannerInteractionHandler() = default;
...@@ -205,6 +205,7 @@ test("ios_chrome_unittests") { ...@@ -205,6 +205,7 @@ test("ios_chrome_unittests") {
"//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/common:unit_tests", "//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/common:unit_tests",
"//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/confirm:unit_tests", "//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/confirm:unit_tests",
"//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/passwords:unit_tests", "//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/passwords:unit_tests",
"//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card:unit_tests",
"//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/translate:unit_tests", "//ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/translate:unit_tests",
"//ios/chrome/browser/itunes_urls:unit_tests", "//ios/chrome/browser/itunes_urls:unit_tests",
"//ios/chrome/browser/json_parser:unit_tests", "//ios/chrome/browser/json_parser:unit_tests",
......
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