Add FormFillerTestApi
Previously, private members/methods of FormFiller were accessed through BAMTestApi, which is not optimal. This CL creates a FormFillerTestApi class for improved clarity. Bug: 41490871 Change-Id: I6a45694312a75dd66d0c1ef8624d9984f7f9de88 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5509491 Auto-Submit: Jihad Hanna <jihadghanna@google.com> Commit-Queue: Jihad Hanna <jihadghanna@google.com> Reviewed-by: Florian Leimgruber <fleimgruber@google.com> Commit-Queue: Florian Leimgruber <fleimgruber@google.com> Cr-Commit-Position: refs/heads/main@{#1295381}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
f4fd06124f
commit
74e46efd79
chrome/browser/autofill
components/autofill/core/browser
@@ -80,7 +80,8 @@ class TestAutofillManager : public BrowserAutofillManager {
|
|||||||
public:
|
public:
|
||||||
explicit TestAutofillManager(ContentAutofillDriver* driver)
|
explicit TestAutofillManager(ContentAutofillDriver* driver)
|
||||||
: BrowserAutofillManager(driver, "en-US") {
|
: BrowserAutofillManager(driver, "en-US") {
|
||||||
test_api(*this).set_limit_before_refill(base::Hours(1));
|
test_api(test_api(*this).form_filler())
|
||||||
|
.set_limit_before_refill(base::Hours(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
static TestAutofillManager& GetForRenderFrameHost(
|
static TestAutofillManager& GetForRenderFrameHost(
|
||||||
|
@@ -2640,7 +2640,7 @@ class AutofillInteractiveTestDynamicForm : public AutofillInteractiveTest {
|
|||||||
public:
|
public:
|
||||||
void SetUpOnMainThread() override {
|
void SetUpOnMainThread() override {
|
||||||
AutofillInteractiveTest::SetUpOnMainThread();
|
AutofillInteractiveTest::SetUpOnMainThread();
|
||||||
test_api(*GetBrowserAutofillManager())
|
test_api(test_api(*GetBrowserAutofillManager()).form_filler())
|
||||||
.set_limit_before_refill(base::Hours(1));
|
.set_limit_before_refill(base::Hours(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2735,7 +2735,7 @@ IN_PROC_BROWSER_TEST_F(AutofillInteractiveTestDynamicForm,
|
|||||||
DynamicChangingFormFill_AfterDelay) {
|
DynamicChangingFormFill_AfterDelay) {
|
||||||
// Lower the refill limit, so the test doesn't have to wait forever.
|
// Lower the refill limit, so the test doesn't have to wait forever.
|
||||||
constexpr base::TimeDelta kLimitBeforeRefillForTest = base::Milliseconds(100);
|
constexpr base::TimeDelta kLimitBeforeRefillForTest = base::Milliseconds(100);
|
||||||
test_api(*GetBrowserAutofillManager())
|
test_api(test_api(*GetBrowserAutofillManager()).form_filler())
|
||||||
.set_limit_before_refill(kLimitBeforeRefillForTest);
|
.set_limit_before_refill(kLimitBeforeRefillForTest);
|
||||||
|
|
||||||
CreateTestProfile();
|
CreateTestProfile();
|
||||||
|
@@ -148,7 +148,7 @@ void AutofillUiTest::SetUpOnMainThread() {
|
|||||||
// Refills normally only happen if the form changes within 1 second of the
|
// Refills normally only happen if the form changes within 1 second of the
|
||||||
// initial fill. On a slow bot, this may lead to flakiness. We hence set a
|
// initial fill. On a slow bot, this may lead to flakiness. We hence set a
|
||||||
// very high limit.
|
// very high limit.
|
||||||
test_api(*GetBrowserAutofillManager())
|
test_api(test_api(*GetBrowserAutofillManager()).form_filler())
|
||||||
.set_limit_before_refill(base::Hours(1));
|
.set_limit_before_refill(base::Hours(1));
|
||||||
autofill_driver_factory_observation_.Observe(
|
autofill_driver_factory_observation_.Observe(
|
||||||
client->GetAutofillDriverFactory());
|
client->GetAutofillDriverFactory());
|
||||||
@@ -324,7 +324,9 @@ void AutofillUiTest::OnContentAutofillDriverCreated(
|
|||||||
// Refills normally only happen if the form changes within 1 second of the
|
// Refills normally only happen if the form changes within 1 second of the
|
||||||
// initial fill. On a slow bot, this may lead to flakiness. We hence set a
|
// initial fill. On a slow bot, this may lead to flakiness. We hence set a
|
||||||
// very high limit.
|
// very high limit.
|
||||||
test_api(static_cast<BrowserAutofillManager&>(driver.GetAutofillManager()))
|
test_api(test_api(static_cast<BrowserAutofillManager&>(
|
||||||
|
driver.GetAutofillManager()))
|
||||||
|
.form_filler())
|
||||||
.set_limit_before_refill(base::Hours(1));
|
.set_limit_before_refill(base::Hours(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -850,6 +850,7 @@ static_library("test_support") {
|
|||||||
"data_model/test_autofill_data_model.cc",
|
"data_model/test_autofill_data_model.cc",
|
||||||
"data_model/test_autofill_data_model.h",
|
"data_model/test_autofill_data_model.h",
|
||||||
"form_data_importer_test_api.h",
|
"form_data_importer_test_api.h",
|
||||||
|
"form_filler_test_api.h",
|
||||||
"form_forest_test_api.cc",
|
"form_forest_test_api.cc",
|
||||||
"form_forest_test_api.h",
|
"form_forest_test_api.h",
|
||||||
"form_structure_test_api.cc",
|
"form_structure_test_api.cc",
|
||||||
|
@@ -12,6 +12,7 @@
|
|||||||
#include "components/autofill/core/browser/autofill_trigger_details.h"
|
#include "components/autofill/core/browser/autofill_trigger_details.h"
|
||||||
#include "components/autofill/core/browser/browser_autofill_manager.h"
|
#include "components/autofill/core/browser/browser_autofill_manager.h"
|
||||||
#include "components/autofill/core/browser/filling_product.h"
|
#include "components/autofill/core/browser/filling_product.h"
|
||||||
|
#include "components/autofill/core/browser/form_filler_test_api.h"
|
||||||
#include "components/autofill/core/browser/payments/credit_card_access_manager.h"
|
#include "components/autofill/core/browser/payments/credit_card_access_manager.h"
|
||||||
#include "components/autofill/core/browser/single_field_form_fill_router.h"
|
#include "components/autofill/core/browser/single_field_form_fill_router.h"
|
||||||
#include "testing/gtest/include/gtest/gtest.h"
|
#include "testing/gtest/include/gtest/gtest.h"
|
||||||
@@ -39,23 +40,6 @@ class BrowserAutofillManagerTestApi : public AutofillManagerTestApi {
|
|||||||
return manager_->external_delegate_.get();
|
return manager_->external_delegate_.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_limit_before_refill(base::TimeDelta limit) {
|
|
||||||
manager_->form_filler_->limit_before_refill_ = limit;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO(crbug.com/41490871): Remove.
|
|
||||||
bool ShouldTriggerRefill(const FormStructure& form_structure,
|
|
||||||
RefillTriggerReason refill_trigger_reason) {
|
|
||||||
return manager_->form_filler_->ShouldTriggerRefill(form_structure,
|
|
||||||
refill_trigger_reason);
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO(crbug.com/41490871): Remove.
|
|
||||||
void TriggerRefill(const FormData& form,
|
|
||||||
const AutofillTriggerDetails& trigger_details) {
|
|
||||||
manager_->form_filler_->TriggerRefill(form, trigger_details);
|
|
||||||
}
|
|
||||||
|
|
||||||
void PreProcessStateMatchingTypes(
|
void PreProcessStateMatchingTypes(
|
||||||
const std::vector<AutofillProfile>& profiles,
|
const std::vector<AutofillProfile>& profiles,
|
||||||
FormStructure* form_structure) {
|
FormStructure* form_structure) {
|
||||||
@@ -94,22 +78,6 @@ class BrowserAutofillManagerTestApi : public AutofillManagerTestApi {
|
|||||||
manager_->OnCreditCardFetched(result, credit_card);
|
manager_->OnCreditCardFetched(result, credit_card);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(crbug.com/41490871): Remove.
|
|
||||||
void FillOrPreviewDataModelForm(
|
|
||||||
mojom::ActionPersistence action_persistence,
|
|
||||||
const FormData& form,
|
|
||||||
const FormFieldData& field,
|
|
||||||
absl::variant<const AutofillProfile*, const CreditCard*>
|
|
||||||
profile_or_credit_card,
|
|
||||||
base::optional_ref<const std::u16string> cvc,
|
|
||||||
FormStructure* form_structure,
|
|
||||||
AutofillField* autofill_field) {
|
|
||||||
return manager_->form_filler_->FillOrPreviewForm(
|
|
||||||
action_persistence, form, field, profile_or_credit_card, cvc,
|
|
||||||
form_structure, autofill_field,
|
|
||||||
{.trigger_source = AutofillTriggerSource::kPopup});
|
|
||||||
}
|
|
||||||
|
|
||||||
base::flat_map<std::string, VirtualCardUsageData::VirtualCardLastFour>
|
base::flat_map<std::string, VirtualCardUsageData::VirtualCardLastFour>
|
||||||
GetVirtualCreditCardsForStandaloneCvcField(const url::Origin& origin) {
|
GetVirtualCreditCardsForStandaloneCvcField(const url::Origin& origin) {
|
||||||
return manager_->GetVirtualCreditCardsForStandaloneCvcField(origin);
|
return manager_->GetVirtualCreditCardsForStandaloneCvcField(origin);
|
||||||
@@ -133,15 +101,7 @@ class BrowserAutofillManagerTestApi : public AutofillManagerTestApi {
|
|||||||
consider_form_as_secure_for_testing;
|
consider_form_as_secure_for_testing;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(crbug.com/41490871): Remove.
|
FormFiller& form_filler() { return *manager_->form_filler_; }
|
||||||
void AddFormFillEntry(
|
|
||||||
base::span<const FormFieldData* const> filled_fields,
|
|
||||||
base::span<const AutofillField* const> filled_autofill_fields,
|
|
||||||
FillingProduct filling_product,
|
|
||||||
bool is_refill) {
|
|
||||||
manager_->form_filler_->form_autofill_history_.AddFormFillEntry(
|
|
||||||
filled_fields, filled_autofill_fields, filling_product, is_refill);
|
|
||||||
}
|
|
||||||
|
|
||||||
void set_form_filler(std::unique_ptr<FormFiller> form_filler) {
|
void set_form_filler(std::unique_ptr<FormFiller> form_filler) {
|
||||||
manager_->form_filler_ = std::move(form_filler);
|
manager_->form_filler_ = std::move(form_filler);
|
||||||
|
@@ -204,7 +204,7 @@ class FormFiller {
|
|||||||
const AutofillTriggerDetails& trigger_details);
|
const AutofillTriggerDetails& trigger_details);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend class BrowserAutofillManagerTestApi;
|
friend class FormFillerTestApi;
|
||||||
|
|
||||||
// Keeps track of the filling context for a form, used to make refill
|
// Keeps track of the filling context for a form, used to make refill
|
||||||
// attempts.
|
// attempts.
|
||||||
|
41
components/autofill/core/browser/form_filler_test_api.h
Normal file
41
components/autofill/core/browser/form_filler_test_api.h
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
// Copyright 2024 The Chromium Authors
|
||||||
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_FORM_FILLER_TEST_API_H_
|
||||||
|
#define COMPONENTS_AUTOFILL_CORE_BROWSER_FORM_FILLER_TEST_API_H_
|
||||||
|
|
||||||
|
#include "components/autofill/core/browser/form_filler.h"
|
||||||
|
|
||||||
|
namespace autofill {
|
||||||
|
|
||||||
|
// Exposes some testing operations for BrowserAutofillManager.
|
||||||
|
class FormFillerTestApi {
|
||||||
|
public:
|
||||||
|
explicit FormFillerTestApi(FormFiller* form_filler)
|
||||||
|
: form_filler_(*form_filler) {}
|
||||||
|
|
||||||
|
void set_limit_before_refill(base::TimeDelta limit) {
|
||||||
|
form_filler_->limit_before_refill_ = limit;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AddFormFillEntry(
|
||||||
|
base::span<const FormFieldData* const> filled_fields,
|
||||||
|
base::span<const AutofillField* const> filled_autofill_fields,
|
||||||
|
FillingProduct filling_product,
|
||||||
|
bool is_refill) {
|
||||||
|
form_filler_->form_autofill_history_.AddFormFillEntry(
|
||||||
|
filled_fields, filled_autofill_fields, filling_product, is_refill);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
raw_ref<FormFiller> form_filler_;
|
||||||
|
};
|
||||||
|
|
||||||
|
inline FormFillerTestApi test_api(FormFiller& form_filler) {
|
||||||
|
return FormFillerTestApi(&form_filler);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace autofill
|
||||||
|
|
||||||
|
#endif // COMPONENTS_AUTOFILL_CORE_BROWSER_FORM_FILLER_TEST_API_H_
|
@@ -501,7 +501,7 @@ TEST_F(FormFillerTest, UndoResetsCachedAutofillState) {
|
|||||||
FormFieldData* field_ptr = &form.fields.front();
|
FormFieldData* field_ptr = &form.fields.front();
|
||||||
AutofillField* autofill_field_ptr = &filled_autofill_field;
|
AutofillField* autofill_field_ptr = &filled_autofill_field;
|
||||||
form.fields.front().set_is_autofilled(false);
|
form.fields.front().set_is_autofilled(false);
|
||||||
test_api(*browser_autofill_manager_)
|
test_api(test_api(*browser_autofill_manager_).form_filler())
|
||||||
.AddFormFillEntry(base::make_span(&field_ptr, 1u),
|
.AddFormFillEntry(base::make_span(&field_ptr, 1u),
|
||||||
base::make_span(&autofill_field_ptr, 1u),
|
base::make_span(&autofill_field_ptr, 1u),
|
||||||
FillingProduct::kAddress, /*is_refill=*/false);
|
FillingProduct::kAddress, /*is_refill=*/false);
|
||||||
|
@@ -5606,6 +5606,7 @@ TEST_F(AutofillMetricsTest, DynamicFormMetrics) {
|
|||||||
// Simulate checking whether to fill a dynamic form before the form was filled
|
// Simulate checking whether to fill a dynamic form before the form was filled
|
||||||
// initially.
|
// initially.
|
||||||
test_api(autofill_manager())
|
test_api(autofill_manager())
|
||||||
|
.form_filler()
|
||||||
.ShouldTriggerRefill(FormStructure(form),
|
.ShouldTriggerRefill(FormStructure(form),
|
||||||
RefillTriggerReason::kFormChanged);
|
RefillTriggerReason::kFormChanged);
|
||||||
histogram_tester.ExpectTotalCount("Autofill.FormEvents.Address", 0);
|
histogram_tester.ExpectTotalCount("Autofill.FormEvents.Address", 0);
|
||||||
@@ -5619,6 +5620,7 @@ TEST_F(AutofillMetricsTest, DynamicFormMetrics) {
|
|||||||
// Simulate checking whether to fill a dynamic form after the form was filled
|
// Simulate checking whether to fill a dynamic form after the form was filled
|
||||||
// initially.
|
// initially.
|
||||||
test_api(autofill_manager())
|
test_api(autofill_manager())
|
||||||
|
.form_filler()
|
||||||
.ShouldTriggerRefill(FormStructure(form),
|
.ShouldTriggerRefill(FormStructure(form),
|
||||||
RefillTriggerReason::kFormChanged);
|
RefillTriggerReason::kFormChanged);
|
||||||
EXPECT_THAT(histogram_tester.GetAllSamples("Autofill.FormEvents.Address"),
|
EXPECT_THAT(histogram_tester.GetAllSamples("Autofill.FormEvents.Address"),
|
||||||
|
Reference in New Issue
Block a user