#include <memory>
#include "base/command_line.h"
#include "base/memory/raw_ptr.h"
#include "base/test/metrics/histogram_tester.h"
#include "base/test/metrics/user_action_tester.h"
#include "base/values.h"
#include "build/build_config.h"
#include "chrome/browser/autofill/autofill_uitest_util.h"
#include "chrome/browser/autofill/personal_data_manager_factory.h"
#include "chrome/browser/extensions/api/autofill_private/autofill_private_event_router.h"
#include "chrome/browser/extensions/api/autofill_private/autofill_private_event_router_factory.h"
#include "chrome/browser/extensions/extension_apitest.h"
#include "chrome/browser/ui/autofill/chrome_autofill_client.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/common/extensions/api/autofill_private.h"
#include "components/autofill/content/browser/test_autofill_client_injector.h"
#include "components/autofill/content/browser/test_content_autofill_client.h"
#include "components/autofill/core/browser/autofill_test_utils.h"
#include "components/autofill/core/browser/metrics/address_save_metrics.h"
#include "components/autofill/core/browser/payments/payments_autofill_client.h"
#include "components/autofill/core/browser/payments/test/mock_mandatory_reauth_manager.h"
#include "components/autofill/core/browser/payments_data_manager.h"
#include "components/autofill/core/browser/personal_data_manager.h"
#include "components/autofill/core/browser/test_personal_data_manager.h"
#include "components/autofill/core/common/autofill_prefs.h"
#include "components/keyed_service/core/keyed_service.h"
#include "content/public/test/browser_test.h"
#include "content/public/test/test_utils.h"
#include "extensions/common/switches.h"
namespace extensions {
namespace {
class AutofillPrivateApiTest : public ExtensionApiTest { … };
}
IN_PROC_BROWSER_TEST_F(AutofillPrivateApiTest, GetCountryList) { … }
IN_PROC_BROWSER_TEST_F(AutofillPrivateApiTest, GetAddressComponents) { … }
IN_PROC_BROWSER_TEST_F(AutofillPrivateApiTest, RemoveEntry) { … }
IN_PROC_BROWSER_TEST_F(AutofillPrivateApiTest, AddAndUpdateAddress) { … }
IN_PROC_BROWSER_TEST_F(AutofillPrivateApiTest, AddAndUpdateCreditCard) { … }
IN_PROC_BROWSER_TEST_F(AutofillPrivateApiTest, AddCreditCard_Cvc) { … }
IN_PROC_BROWSER_TEST_F(
AutofillPrivateApiTest,
AddCreditCard_Metrics_StoredCreditCardCountBeforeCardAdded) { … }
IN_PROC_BROWSER_TEST_F(AutofillPrivateApiTest, AddCreditCard_NoCvc) { … }
IN_PROC_BROWSER_TEST_F(AutofillPrivateApiTest,
UpdateCreditCard_NoExistingCvc_NoNewCvcAdded) { … }
IN_PROC_BROWSER_TEST_F(AutofillPrivateApiTest,
UpdateCreditCard_NoExistingCvc_NewCvcAdded) { … }
IN_PROC_BROWSER_TEST_F(AutofillPrivateApiTest,
UpdateCreditCard_ExistingCvc_Removed) { … }
IN_PROC_BROWSER_TEST_F(AutofillPrivateApiTest,
UpdateCreditCard_ExistingCvc_Updated) { … }
IN_PROC_BROWSER_TEST_F(AutofillPrivateApiTest,
UpdateCreditCard_ExistingCvc_Unchanged) { … }
IN_PROC_BROWSER_TEST_F(AutofillPrivateApiTest, AddNewIban_NoNickname) { … }
IN_PROC_BROWSER_TEST_F(AutofillPrivateApiTest, AddNewIban_WithNickname) { … }
IN_PROC_BROWSER_TEST_F(AutofillPrivateApiTest, noChangesToExistingIban) { … }
IN_PROC_BROWSER_TEST_F(AutofillPrivateApiTest, updateExistingIbanNoNickname) { … }
IN_PROC_BROWSER_TEST_F(AutofillPrivateApiTest, updateExistingIbanWithNickname) { … }
IN_PROC_BROWSER_TEST_F(AutofillPrivateApiTest, removeExistingIban) { … }
IN_PROC_BROWSER_TEST_F(AutofillPrivateApiTest, removeExistingCard) { … }
IN_PROC_BROWSER_TEST_F(AutofillPrivateApiTest,
removeExistingCard_WithCvcAndNickname) { … }
IN_PROC_BROWSER_TEST_F(AutofillPrivateApiTest, isValidIban) { … }
#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
IN_PROC_BROWSER_TEST_F(AutofillPrivateApiTest,
authenticateUserAndFlipMandatoryAuthToggle) {
base::UserActionTester user_action_tester;
auto* mock_mandatory_reauth_manager =
autofill_client()
->GetPaymentsAutofillClient()
->GetOrCreatePaymentsMandatoryReauthManager();
ON_CALL(*static_cast<autofill::payments::MockMandatoryReauthManager*>(
mock_mandatory_reauth_manager),
AuthenticateWithMessage)
.WillByDefault(
testing::WithArg<1>([](base::OnceCallback<void(bool)> callback) {
std::move(callback).Run(true);
}));
EXPECT_CALL(*static_cast<autofill::payments::MockMandatoryReauthManager*>(
mock_mandatory_reauth_manager),
AuthenticateWithMessage)
.Times(1);
EXPECT_TRUE(RunAutofillSubtest("authenticateUserAndFlipMandatoryAuthToggle"))
<< message_;
EXPECT_EQ(1, user_action_tester.GetActionCount(
"PaymentsUserAuthTriggeredForMandatoryAuthToggle"));
EXPECT_EQ(1, user_action_tester.GetActionCount(
"PaymentsUserAuthSuccessfulForMandatoryAuthToggle"));
}
IN_PROC_BROWSER_TEST_F(AutofillPrivateApiTest,
showEditCardDialogForLocalCard_ReauthOn) {
base::UserActionTester user_action_tester;
autofill_client()
->GetPersonalDataManager()
->payments_data_manager()
.SetPaymentMethodsMandatoryReauthEnabled(true);
auto* mock_mandatory_reauth_manager =
autofill_client()
->GetPaymentsAutofillClient()
->GetOrCreatePaymentsMandatoryReauthManager();
ON_CALL(*static_cast<autofill::payments::MockMandatoryReauthManager*>(
mock_mandatory_reauth_manager),
AuthenticateWithMessage)
.WillByDefault(
testing::WithArg<1>([](base::OnceCallback<void(bool)> callback) {
std::move(callback).Run(true);
}));
EXPECT_CALL(*static_cast<autofill::payments::MockMandatoryReauthManager*>(
mock_mandatory_reauth_manager),
AuthenticateWithMessage)
.Times(1);
EXPECT_TRUE(RunAutofillSubtest("getLocalCard")) << message_;
EXPECT_EQ(1, user_action_tester.GetActionCount(
"PaymentsUserAuthTriggeredToShowEditLocalCardDialog"));
EXPECT_EQ(1, user_action_tester.GetActionCount(
"PaymentsUserAuthSuccessfulToShowEditLocalCardDialog"));
}
#endif
IN_PROC_BROWSER_TEST_F(AutofillPrivateApiTest,
showEditCardDialogForLocalCard_ReauthOff) { … }
IN_PROC_BROWSER_TEST_F(AutofillPrivateApiTest, bulkDeleteAllCvcs) { … }
}