Commit ab4e0822 authored by Chris Lu's avatar Chris Lu Committed by Commit Bot

[ios] Create SaveCard Overlay Modal Interaction Handlers

This change adds SaveCardInfobarModalInteractionHandler and
SaveCardInfobarModalOverlayRequestCallbackInstaller to handle
banner responses. SaveCardInfobarInteractionHandler is added
to fully configure all SaveCard Interaction Handlers.

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

Bug: 1071914
Change-Id: I06d26d73ba47be3ab715c6ebb5f1b32d615ca098
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2252839
Commit-Queue: Chris Lu <thegreenfrog@chromium.org>
Reviewed-by: default avatarSergio Collazos <sczs@chromium.org>
Cr-Commit-Position: refs/heads/master@{#780437}
parent a2ef8887
...@@ -9,6 +9,12 @@ source_set("save_card") { ...@@ -9,6 +9,12 @@ source_set("save_card") {
"save_card_infobar_banner_interaction_handler.mm", "save_card_infobar_banner_interaction_handler.mm",
"save_card_infobar_banner_overlay_request_callback_installer.h", "save_card_infobar_banner_overlay_request_callback_installer.h",
"save_card_infobar_banner_overlay_request_callback_installer.mm", "save_card_infobar_banner_overlay_request_callback_installer.mm",
"save_card_infobar_interaction_handler.h",
"save_card_infobar_interaction_handler.mm",
"save_card_infobar_modal_interaction_handler.h",
"save_card_infobar_modal_interaction_handler.mm",
"save_card_infobar_modal_overlay_request_callback_installer.h",
"save_card_infobar_modal_overlay_request_callback_installer.mm",
] ]
deps = [ deps = [
"//base", "//base",
...@@ -33,6 +39,8 @@ source_set("unit_tests") { ...@@ -33,6 +39,8 @@ source_set("unit_tests") {
sources = [ sources = [
"save_card_infobar_banner_interaction_handler_unittest.mm", "save_card_infobar_banner_interaction_handler_unittest.mm",
"save_card_infobar_banner_overlay_request_callback_installer_unittest.mm", "save_card_infobar_banner_overlay_request_callback_installer_unittest.mm",
"save_card_infobar_modal_interaction_handler_unittest.mm",
"save_card_infobar_modal_overlay_request_callback_installer_unittest.mm",
] ]
deps = [ deps = [
":save_card", ":save_card",
......
// 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_INTERACTION_HANDLER_H_
#define IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_SAVE_CARD_SAVE_CARD_INFOBAR_INTERACTION_HANDLER_H_
#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/infobar_interaction_handler.h"
// An InfobarInteractionHandler that updates the model layer for interaction
// events with the UI for save card infobars.
class SaveCardInfobarInteractionHandler : public InfobarInteractionHandler {
public:
SaveCardInfobarInteractionHandler();
~SaveCardInfobarInteractionHandler() override;
};
#endif // IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_SAVE_CARD_SAVE_CARD_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/save_card/save_card_infobar_interaction_handler.h"
#import "ios/chrome/browser/infobars/infobar_type.h"
#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_banner_interaction_handler.h"
#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_modal_interaction_handler.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
SaveCardInfobarInteractionHandler::SaveCardInfobarInteractionHandler()
: InfobarInteractionHandler(
InfobarType::kInfobarTypeSaveCard,
std::make_unique<SaveCardInfobarBannerInteractionHandler>(),
/*sheet_handler=*/nullptr,
std::make_unique<SaveCardInfobarModalInteractionHandler>()) {}
SaveCardInfobarInteractionHandler::~SaveCardInfobarInteractionHandler() =
default;
// 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_MODAL_INTERACTION_HANDLER_H_
#define IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_SAVE_CARD_SAVE_CARD_INFOBAR_MODAL_INTERACTION_HANDLER_H_
#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/common/infobar_modal_interaction_handler.h"
class InfoBarIOS;
class GURL;
namespace autofill {
class AutofillSaveCardInfoBarDelegateMobile;
}
// Helper object that updates the model layer for interaction events with the
// SaveCard infobar modal UI.
class SaveCardInfobarModalInteractionHandler
: public InfobarModalInteractionHandler {
public:
SaveCardInfobarModalInteractionHandler();
~SaveCardInfobarModalInteractionHandler() override;
// Instructs the handler to update the credentials with |cardholder_name|,
// |expiration_date_month|, and |expiration_date_year|. Replaces
// MainButtonTapped.
virtual void UpdateCredentials(InfoBarIOS* infobar,
base::string16 cardholder_name,
base::string16 expiration_date_month,
base::string16 expiration_date_year);
// Instructs the handler to load |url| through the delegate.
virtual void LoadURL(InfoBarIOS* infobar, GURL url);
// InfobarModalInteractionHandler:
void PerformMainAction(InfoBarIOS* infobar) override;
void InfobarVisibilityChanged(InfoBarIOS* infobar, bool visible) override {}
private:
// InfobarModalInteractionHandler:
std::unique_ptr<InfobarModalOverlayRequestCallbackInstaller>
CreateModalInstaller() 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_MODAL_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_modal_interaction_handler.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_modal_overlay_request_callback_installer.h"
#include "ios/chrome/browser/main/browser.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
SaveCardInfobarModalInteractionHandler::
SaveCardInfobarModalInteractionHandler() = default;
SaveCardInfobarModalInteractionHandler::
~SaveCardInfobarModalInteractionHandler() = default;
#pragma mark - Public
void SaveCardInfobarModalInteractionHandler::UpdateCredentials(
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));
}
void SaveCardInfobarModalInteractionHandler::LoadURL(InfoBarIOS* infobar,
GURL url) {
GetInfoBarDelegate(infobar)->OnLegalMessageLinkClicked(url);
}
void SaveCardInfobarModalInteractionHandler::PerformMainAction(
InfoBarIOS* infobar) {
NOTREACHED() << "SaveCard does not use standard Infobar Accept action.";
}
#pragma mark - Private
std::unique_ptr<InfobarModalOverlayRequestCallbackInstaller>
SaveCardInfobarModalInteractionHandler::CreateModalInstaller() {
return std::make_unique<SaveCardInfobarModalOverlayRequestCallbackInstaller>(
this);
}
autofill::AutofillSaveCardInfoBarDelegateMobile*
SaveCardInfobarModalInteractionHandler::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_modal_interaction_handler.h"
#include <string>
#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"
#include "url/gurl.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
// Test fixture for SaveCardInfobarModalInteractionHandler.
class SaveCardInfobarModalInteractionHandlerTest : public PlatformTest {
public:
SaveCardInfobarModalInteractionHandlerTest()
: 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_;
SaveCardInfobarModalInteractionHandler handler_;
MockAutofillSaveCardInfoBarDelegateMobileFactory delegate_factory_;
std::unique_ptr<PrefService> prefs_;
autofill::CreditCard card_;
std::unique_ptr<InfoBarIOS> infobar_;
};
TEST_F(SaveCardInfobarModalInteractionHandlerTest, UpdateCredentials) {
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_.UpdateCredentials(infobar_.get(), cardholder_name,
expiration_date_month, expiration_date_year);
}
TEST_F(SaveCardInfobarModalInteractionHandlerTest, LoadURL) {
GURL url("https://test-example.com");
EXPECT_CALL(mock_delegate(), OnLegalMessageLinkClicked(url));
handler_.LoadURL(infobar_.get(), url);
}
// 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_MODAL_OVERLAY_REQUEST_CALLBACK_INSTALLER_H_
#define IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_SAVE_CARD_SAVE_CARD_INFOBAR_MODAL_OVERLAY_REQUEST_CALLBACK_INSTALLER_H_
#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/common/infobar_modal_overlay_request_callback_installer.h"
#include "base/memory/weak_ptr.h"
class SaveCardInfobarModalInteractionHandler;
// Callback installer for SaveCard infobar modal interaction events.
class SaveCardInfobarModalOverlayRequestCallbackInstaller
: public InfobarModalOverlayRequestCallbackInstaller {
public:
// Constructor for an instance that installs callbacks that forward
// interaction events to |interaction_handler|.
explicit SaveCardInfobarModalOverlayRequestCallbackInstaller(
SaveCardInfobarModalInteractionHandler* interaction_handler);
~SaveCardInfobarModalOverlayRequestCallbackInstaller() 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 SaveCardCredentialsCallback(OverlayRequest* request,
OverlayResponse* response);
// 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 a
// save_card_infobar_modal_responses::SaveCardLoadURL.
void LoadURLCallback(OverlayRequest* request, OverlayResponse* response);
// OverlayRequestCallbackInstaller:
void InstallCallbacksInternal(OverlayRequest* request) override;
// The handler for received responses.
SaveCardInfobarModalInteractionHandler* interaction_handler_ = nullptr;
base::WeakPtrFactory<SaveCardInfobarModalOverlayRequestCallbackInstaller>
weak_factory_{this};
};
#endif // IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_SAVE_CARD_SAVE_CARD_INFOBAR_MODAL_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_modal_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_modal_interaction_handler.h"
#include "ios/chrome/browser/infobars/overlays/infobar_overlay_util.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/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::SaveCardModalRequestConfig;
using save_card_infobar_overlays::SaveCardLoadURL;
SaveCardInfobarModalOverlayRequestCallbackInstaller::
SaveCardInfobarModalOverlayRequestCallbackInstaller(
SaveCardInfobarModalInteractionHandler* interaction_handler)
: InfobarModalOverlayRequestCallbackInstaller(
SaveCardModalRequestConfig::RequestSupport(),
interaction_handler),
interaction_handler_(interaction_handler) {
DCHECK(interaction_handler_);
}
SaveCardInfobarModalOverlayRequestCallbackInstaller::
~SaveCardInfobarModalOverlayRequestCallbackInstaller() = default;
#pragma mark - Private
void SaveCardInfobarModalOverlayRequestCallbackInstaller::
SaveCardCredentialsCallback(OverlayRequest* request,
OverlayResponse* response) {
InfoBarIOS* infobar = GetOverlayRequestInfobar(request);
if (!infobar)
return;
SaveCardMainAction* info = response->GetInfo<SaveCardMainAction>();
interaction_handler_->UpdateCredentials(
GetOverlayRequestInfobar(request),
base::SysNSStringToUTF16(info->cardholder_name()),
base::SysNSStringToUTF16(info->expiration_month()),
base::SysNSStringToUTF16(info->expiration_year()));
}
void SaveCardInfobarModalOverlayRequestCallbackInstaller::LoadURLCallback(
OverlayRequest* request,
OverlayResponse* response) {
SaveCardLoadURL* info = response->GetInfo<SaveCardLoadURL>();
interaction_handler_->LoadURL(GetOverlayRequestInfobar(request),
info->link_url());
}
#pragma mark - OverlayRequestCallbackInstaller
void SaveCardInfobarModalOverlayRequestCallbackInstaller::
InstallCallbacksInternal(OverlayRequest* request) {
InfobarModalOverlayRequestCallbackInstaller::InstallCallbacksInternal(
request);
OverlayCallbackManager* manager = request->GetCallbackManager();
manager->AddDispatchCallback(OverlayDispatchCallback(
base::BindRepeating(&SaveCardInfobarModalOverlayRequestCallbackInstaller::
SaveCardCredentialsCallback,
weak_factory_.GetWeakPtr(), request),
SaveCardMainAction::ResponseSupport()));
manager->AddDispatchCallback(OverlayDispatchCallback(
base::BindRepeating(
&SaveCardInfobarModalOverlayRequestCallbackInstaller::LoadURLCallback,
weak_factory_.GetWeakPtr(), request),
SaveCardLoadURL::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_modal_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_modal_infobar_interaction_handler.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_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"
#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::SaveCardModalRequestConfig;
// Test fixture for SaveCardInfobarModalOverlayRequestCallbackInstaller.
class SaveCardInfobarModalOverlayRequestCallbackInstallerTest
: public PlatformTest {
public:
SaveCardInfobarModalOverlayRequestCallbackInstallerTest()
: 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<SaveCardModalRequestConfig>(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;
MockSaveCardInfobarModalInteractionHandler mock_handler_;
SaveCardInfobarModalOverlayRequestCallbackInstaller installer_;
MockAutofillSaveCardInfoBarDelegateMobileFactory delegate_factory_;
MockAutofillSaveCardInfoBarDelegateMobile* delegate_;
};
TEST_F(SaveCardInfobarModalOverlayRequestCallbackInstallerTest,
UpdateCredentials) {
NSString* cardholder_name = @"test name";
NSString* expiration_date_month = @"06";
NSString* expiration_date_year = @"2023";
EXPECT_CALL(
mock_handler_,
UpdateCredentials(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));
}
TEST_F(SaveCardInfobarModalOverlayRequestCallbackInstallerTest, LoadURL) {
GURL url("https://test-example.com");
EXPECT_CALL(mock_handler_, LoadURL(infobar_, url));
request_->GetCallbackManager()->DispatchResponse(
OverlayResponse::CreateWithInfo<
save_card_infobar_overlays::SaveCardLoadURL>(url));
}
...@@ -11,6 +11,8 @@ source_set("test") { ...@@ -11,6 +11,8 @@ source_set("test") {
"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.h",
"mock_save_card_banner_infobar_interaction_handler.mm", "mock_save_card_banner_infobar_interaction_handler.mm",
"mock_save_card_modal_infobar_interaction_handler.h",
"mock_save_card_modal_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",
] ]
......
// 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_MODAL_INFOBAR_INTERACTION_HANDLER_H_
#define IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_TEST_MOCK_SAVE_CARD_MODAL_INFOBAR_INTERACTION_HANDLER_H_
#import "ios/chrome/browser/infobars/overlays/browser_agent/interaction_handlers/save_card/save_card_infobar_modal_interaction_handler.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "url/gurl.h"
class InfoBarIOS;
// Mock version of SaveCardInfobarModalInteractionHandler for use in tests.
class MockSaveCardInfobarModalInteractionHandler
: public SaveCardInfobarModalInteractionHandler {
public:
MockSaveCardInfobarModalInteractionHandler();
~MockSaveCardInfobarModalInteractionHandler();
MOCK_METHOD4(UpdateCredentials,
void(InfoBarIOS* infobar,
base::string16 cardholder_name,
base::string16 expiration_date_month,
base::string16 expiration_date_year));
MOCK_METHOD2(LoadURL, void(InfoBarIOS* infobar, GURL url));
};
#endif // IOS_CHROME_BROWSER_INFOBARS_OVERLAYS_BROWSER_AGENT_INTERACTION_HANDLERS_TEST_MOCK_SAVE_CARD_MODAL_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_modal_infobar_interaction_handler.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
MockSaveCardInfobarModalInteractionHandler::
MockSaveCardInfobarModalInteractionHandler() = default;
MockSaveCardInfobarModalInteractionHandler::
~MockSaveCardInfobarModalInteractionHandler() = default;
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