blob: e305256041dbc936bdcf04a0f0851994ef3be07f [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.
#ifndef COMPONENTS_AUTOFILL_CONTENT_RENDERER_FOCUS_TEST_UTILS_H_
#define COMPONENTS_AUTOFILL_CONTENT_RENDERER_FOCUS_TEST_UTILS_H_
#include <string>
#include <string_view>
#include "base/functional/callback.h"
#include "third_party/blink/public/web/web_document.h"
namespace autofill {
namespace test {
class FocusTestUtils {
// Creates a result input field in the HTML body, then sets-up event listeners
// for the focus, change and blur events to track the order of events emitted
// for the fields. Ex. -> 'f0c0b0f1c1b1' would mean the following:
// 1. Focus event for the field with name '0'
// 2. Change event for the field with name '0'
// 3. Blur event for the field with name '0'
// 4. Focus event for the field with name '1'
// 5. Change event for the field with name '1'
// 6. Blur event for field with name '1'
public:
using ExecuteJavascriptFunction =
base::RepeatingCallback<void(std::string_view)>;
explicit FocusTestUtils(
ExecuteJavascriptFunction execute_java_script_function);
~FocusTestUtils();
FocusTestUtils(const FocusTestUtils&) = delete;
FocusTestUtils& operator=(const FocusTestUtils&) = delete;
// Creates a result input element and sets up event listeners for focus,
// blur and change events for the form elements.
void SetUpFocusLogging();
// Emits focus event for the given field with id `element_id`.
void FocusElement(std::string_view element_id);
// Returns the sequence of focus events (see class description).
std::string GetFocusLog(const blink::WebDocument& document);
private:
ExecuteJavascriptFunction execute_java_script_function_;
};
} // namespace test
} // namespace autofill
#endif // COMPONENTS_AUTOFILL_CONTENT_RENDERER_FOCUS_TEST_UTILS_H_