1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
// 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.
#include "components/autofill/content/renderer/autofill_renderer_test.h"
#include <memory>
#include <string>
#include <string_view>
#include <utility>
#include <vector>
#include "base/strings/strcat.h"
#include "components/autofill/content/common/mojom/autofill_driver.mojom.h"
#include "components/autofill/content/renderer/password_generation_agent.h"
#include "components/autofill/content/renderer/test_password_autofill_agent.h"
#include "content/public/renderer/render_frame.h"
#include "content/public/test/render_view_test.h"
#include "mojo/public/cpp/bindings/associated_receiver_set.h"
#include "mojo/public/cpp/bindings/self_owned_associated_receiver.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace autofill::test {
MockAutofillDriver::MockAutofillDriver() = default;
MockAutofillDriver::~MockAutofillDriver() = default;
AutofillRendererTest::AutofillRendererTest() = default;
AutofillRendererTest::~AutofillRendererTest() = default;
void AutofillRendererTest::SetUp() {
RenderViewTest::SetUp();
blink::AssociatedInterfaceProvider* remote_interfaces =
GetMainRenderFrame()->GetRemoteAssociatedInterfaces();
remote_interfaces->OverrideBinderForTesting(
mojom::AutofillDriver::Name_,
base::BindRepeating(&MockAutofillDriver::BindPendingReceiver,
base::Unretained(&autofill_driver_)));
auto password_autofill_agent = std::make_unique<TestPasswordAutofillAgent>(
GetMainRenderFrame(), &associated_interfaces_);
auto password_generation_agent = std::make_unique<PasswordGenerationAgent>(
GetMainRenderFrame(), password_autofill_agent.get(),
&associated_interfaces_);
autofill_agent_ = CreateAutofillAgent(
GetMainRenderFrame(), std::move(password_autofill_agent),
std::move(password_generation_agent), &associated_interfaces_);
}
void AutofillRendererTest::TearDown() {
// Explicitly set the `AutofillClient` to null before resetting the agent -
// otherwise the frame has a dangling pointer and document unloading may
// cause a UAF.
GetMainFrame()->SetAutofillClient(nullptr);
autofill_agent_.reset();
RenderViewTest::TearDown();
}
std::unique_ptr<AutofillAgent> AutofillRendererTest::CreateAutofillAgent(
content::RenderFrame* render_frame,
std::unique_ptr<PasswordAutofillAgent> password_autofill_agent,
std::unique_ptr<PasswordGenerationAgent> password_generation_agent,
blink::AssociatedInterfaceRegistry* associated_interfaces) {
return std::make_unique<AutofillAgent>(
render_frame, std::move(password_autofill_agent),
std::move(password_generation_agent), associated_interfaces);
}
bool AutofillRendererTest::SimulateElementClickAndWait(
const std::string& element_id) {
if (!SimulateElementClick(element_id)) {
return false;
}
task_environment_.RunUntilIdle();
return true;
}
void AutofillRendererTest::SimulateElementFocusAndWait(
std::string_view element_id) {
ExecuteJavaScriptForTests(
base::StrCat({"document.getElementById('", element_id, "').focus();"})
.c_str());
task_environment_.RunUntilIdle();
}
void AutofillRendererTest::SimulateScrollingAndWait() {
ExecuteJavaScriptForTests("window.scrollTo(0, 1000);");
task_environment_.RunUntilIdle();
}
} // namespace autofill::test
|