blob: 21dcbee541709fb5d5f14f897f6b38c65f643abf [file] [log] [blame]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/memory/raw_ptr.h"
#include "components/android_autofill/browser/android_autofill_manager.h"
#include "components/android_autofill/browser/test_autofill_provider.h"
#include "content/public/test/browser_task_environment.h"
#include "content/public/test/test_browser_context.h"
#include "content/public/test/web_contents_tester.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace autofill {
class AndroidAutofillManagerTestHelper : public AndroidAutofillManager {
public:
explicit AndroidAutofillManagerTestHelper(AutofillProvider* autofill_provider)
: AndroidAutofillManager(nullptr, nullptr) {
set_autofill_provider_for_testing(autofill_provider);
}
void SimulatePropagateAutofillPredictions() {
PropagateAutofillPredictions({});
}
void SimulateOnAskForValuesToFillImpl() {
OnAskForValuesToFillImpl(FormData(), FormFieldData(), gfx::RectF(),
AutoselectFirstSuggestion(false),
FormElementWasClicked(false));
}
};
class AutofillProviderTestHelper : public TestAutofillProvider {
public:
explicit AutofillProviderTestHelper(content::WebContents* web_contents)
: TestAutofillProvider(web_contents) {}
bool HasServerPrediction() const { return manager_->has_server_prediction(); }
private:
// AutofillProvider
void OnAskForValuesToFill(
AndroidAutofillManager* manager,
const FormData& form,
const FormFieldData& field,
const gfx::RectF& bounding_box,
AutoselectFirstSuggestion autoselect_first_suggestion,
FormElementWasClicked form_element_was_clicked) override {
manager_ = manager;
}
void OnServerQueryRequestError(AndroidAutofillManager* manager,
FormSignature form_signature) override {}
raw_ptr<AndroidAutofillManager> manager_;
};
class AutofillProviderTest : public testing::Test {
public:
void SetUp() override {
web_contents_ = content::WebContentsTester::CreateTestWebContents(
&browser_context_, nullptr);
// Owned by WebContents.
autofill_provider_test_helper_ =
new AutofillProviderTestHelper(web_contents_.get());
android_autofill_manager_test_helper_ =
std::make_unique<AndroidAutofillManagerTestHelper>(
autofill_provider_test_helper_.get());
}
AutofillProviderTestHelper* autofill_provider_test_helper() {
return autofill_provider_test_helper_.get();
}
AndroidAutofillManagerTestHelper* android_autofill_manager_test_helper() {
return android_autofill_manager_test_helper_.get();
}
private:
content::BrowserTaskEnvironment task_environment_;
content::TestBrowserContext browser_context_;
std::unique_ptr<content::WebContents> web_contents_;
// Owned by WebContents.
raw_ptr<AutofillProviderTestHelper> autofill_provider_test_helper_;
std::unique_ptr<AndroidAutofillManagerTestHelper>
android_autofill_manager_test_helper_;
};
TEST_F(AutofillProviderTest, HasServerPredictionAfterQuery) {
// Simulate the result arrives after starting autofill.
android_autofill_manager_test_helper()->SimulateOnAskForValuesToFillImpl();
EXPECT_FALSE(autofill_provider_test_helper()->HasServerPrediction());
android_autofill_manager_test_helper()
->SimulatePropagateAutofillPredictions();
EXPECT_TRUE(autofill_provider_test_helper()->HasServerPrediction());
android_autofill_manager_test_helper()->Reset();
EXPECT_FALSE(autofill_provider_test_helper()->HasServerPrediction());
}
TEST_F(AutofillProviderTest, HasServerPredictionBeforeQuery) {
// Simulate the result arrives before starting autofill.
android_autofill_manager_test_helper()
->SimulatePropagateAutofillPredictions();
android_autofill_manager_test_helper()->SimulateOnAskForValuesToFillImpl();
EXPECT_TRUE(autofill_provider_test_helper()->HasServerPrediction());
android_autofill_manager_test_helper()->Reset();
EXPECT_FALSE(autofill_provider_test_helper()->HasServerPrediction());
}
} // namespace autofill