| // Copyright 2021 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_TEST_UTILS_H_ | 
 | #define COMPONENTS_AUTOFILL_CONTENT_RENDERER_TEST_UTILS_H_ | 
 |  | 
 | #include <concepts> | 
 | #include <string_view> | 
 |  | 
 | #include "base/types/strong_alias.h" | 
 | #include "components/autofill/core/common/unique_ids.h" | 
 | #include "third_party/blink/public/web/web_element.h" | 
 | #include "third_party/blink/public/web/web_form_control_element.h" | 
 | #include "third_party/blink/public/web/web_form_element.h" | 
 |  | 
 | namespace blink { | 
 | class WebDocument; | 
 | class WebNode; | 
 | }  // namespace blink | 
 |  | 
 | namespace content { | 
 | class RenderFrame; | 
 | }  // namespace content | 
 |  | 
 | namespace autofill { | 
 |  | 
 | namespace internal { | 
 | template <typename T> | 
 | concept SupportsLookupById = (std::derived_from<T, blink::WebDocument> || | 
 |                               std::derived_from<T, blink::WebNode>); | 
 | }  // namespace internal | 
 |  | 
 | using AllowNull = base::StrongAlias<struct AllowNullTag, bool>; | 
 |  | 
 | // Returns the element by its id attribute. May return an empty | 
 | // `WebFormControlElement` if `allow_null` is set. Note that the function taking | 
 | // a `WebNode` can be used to find elements inside a shadow root. | 
 | blink::WebElement GetElementById(const blink::WebDocument& doc, | 
 |                                  std::string_view id, | 
 |                                  AllowNull allow_null = AllowNull(false)); | 
 | blink::WebElement GetElementById(const blink::WebNode& node, | 
 |                                  std::string_view id, | 
 |                                  AllowNull allow_null = AllowNull(false)); | 
 |  | 
 | // Returns the form control element by its id attribute. May return an empty | 
 | // WebFormControlElement if `allow_null` is set. | 
 | template <typename T> | 
 |   requires(internal::SupportsLookupById<T>) | 
 | blink::WebFormControlElement GetFormControlElementById( | 
 |     const T& t, | 
 |     std::string_view id, | 
 |     AllowNull allow_null = AllowNull(false)) { | 
 |   blink::WebFormControlElement e = | 
 |       GetElementById(t, id, allow_null) | 
 |           .template DynamicTo<blink::WebFormControlElement>(); | 
 |   CHECK(allow_null || e); | 
 |   return e; | 
 | } | 
 |  | 
 | // Returns the form element by its id attribute. May return an empty | 
 | // WebFormElement if `allow_null` is set. | 
 | template <typename T> | 
 |   requires(internal::SupportsLookupById<T>) | 
 | blink::WebFormElement GetFormElementById( | 
 |     const T& t, | 
 |     std::string_view id, | 
 |     AllowNull allow_null = AllowNull(false)) { | 
 |   blink::WebFormElement e = GetElementById(t, id, allow_null) | 
 |                                 .template DynamicTo<blink::WebFormElement>(); | 
 |   CHECK(allow_null || e); | 
 |   return e; | 
 | } | 
 |  | 
 | // Returns the WebLocalFrame that corresponds to the iframe element with the | 
 | // given |id|. | 
 | content::RenderFrame* GetIframeById(const blink::WebDocument& doc, | 
 |                                     std::string_view id, | 
 |                                     AllowNull allow_null = AllowNull(false)); | 
 |  | 
 | // Returns the FrameToken of the iframe element with the given |id|. | 
 | FrameToken GetFrameToken(const blink::WebDocument& doc, | 
 |                          std::string_view id, | 
 |                          AllowNull allow_null = AllowNull(false)); | 
 |  | 
 | // Returns how often AskForValuesToFill is expected to be called for a focus | 
 | // change completion that is triggered by a click or tap. | 
 | int AskForValuesToFillCallsOnFocusChangeByClickOrTap(); | 
 |  | 
 | }  // namespace autofill | 
 |  | 
 | #endif  // COMPONENTS_AUTOFILL_CONTENT_RENDERER_TEST_UTILS_H_ |