// Copyright 2018 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_AUTOFILL_CAPTURED_SITES_TEST_UTILS_H_ #define CHROME_BROWSER_AUTOFILL_CAPTURED_SITES_TEST_UTILS_H_ #include <fstream> #include <memory> #include <optional> #include <string> #include <vector> #include "base/command_line.h" #include "base/files/file_path.h" #include "base/memory/raw_ptr.h" #include "base/strings/strcat.h" #include "base/types/strong_alias.h" #include "base/values.h" #include "chrome/browser/ui/browser.h" #include "components/autofill/core/browser/data_model/autofill_profile.h" #include "components/autofill/core/browser/data_model/credit_card.h" #include "components/autofill/core/browser/test_autofill_clock.h" #include "content/public/browser/browser_context.h" #include "content/public/test/browser_test_utils.h" #include "services/network/public/cpp/network_switches.h" namespace content { class RenderFrameHost; class WebContents; } // namespace content namespace captured_sites_test_utils { // The amount of time to wait for an action to complete, or for a page element // to appear. The Captured Site Automation Framework uses this timeout to break // out of wait loops in the event that // 1. A page load error occurred and the page does not have a page element // the test expects. Test should stop waiting. // 2. A page contains persistent animation (such as a flash sale count down // timer) that causes the RenderFrameHost count to never diminish completely. // Test should stop waiting if a sufficiently large time has expired for the // page to load or for the page to respond to the last user action. const base::TimeDelta default_action_timeout = …; // The amount of time to wait for a page to trigger a paint in response to a // an action. The Captured Site Automation Framework uses this timeout to // break out of a wait loop after a hover action. const base::TimeDelta visual_update_timeout = …; // The amount of time to do a precheck on the page before going to a click // fallback action. const base::TimeDelta click_fallback_timeout = …; // When we cause a scroll event, make sure we give the page a moment to react // before continuing. const base::TimeDelta scroll_wait_timeout = …; // Some times, tests tend to need a break that can't be read from the elements // play status. const base::TimeDelta cool_off_action_timeout = …; // The time to wait between checks for a page to become idle or active based on // the loading status and then the render frame count. const base::TimeDelta wait_for_idle_loop_length = …; std::string FilePathToUTF8(const base::FilePath::StringType& str); enum ExpectedResult { … }; struct CapturedSiteParams { … }; std::ostream& operator<<(std::ostream& os, const CapturedSiteParams& data); std::vector<CapturedSiteParams> GetCapturedSites( const base::FilePath& replay_files_dir_path); struct GetParamAsString { … }; std::optional<base::FilePath> GetCommandFilePath(); // Prints tips on how to run captured-site tests. // |test_file_name| should be without the .cc suffix. void PrintInstructions(const char* test_file_name); // IFrameWaiter // // IFrameWaiter is an waiter object that waits for an iframe befitting a // criteria to appear. The criteria can be the iframe's 'name' attribute, // the iframe's origin, or the iframe's full url. class IFrameWaiter : public content::WebContentsObserver { … }; // WebPageReplayServerWrapper // WebPageReplayServerWrapper is a helper wrapper that controls the configuring // and running the WebPageReplay Server instance. class WebPageReplayServerWrapper { … }; class ProfileDataController { … }; // TestRecipeReplayChromeFeatureActionExecutor // // TestRecipeReplayChromeFeatureActionExecutor is a helper interface. A // TestRecipeReplayChromeFeatureActionExecutor class implements functions // that automate Chrome feature behavior. TestRecipeReplayer calls // TestRecipeReplayChromeFeatureActionExecutor functions to execute actions // that involves a Chrome feature - such as Chrome Autofill or Chrome // Password Manager. Executing a Chrome feature action typically require // using private or protected hooks defined inside that feature's // InProcessBrowserTest class. By implementing this interface an // InProcessBrowserTest exposes its feature to captured site automation. class TestRecipeReplayChromeFeatureActionExecutor { … }; // TestRecipeReplayer // // The TestRecipeReplayer object drives Captured Site Automation by // 1. Providing a set of functions that help an InProcessBrowserTest to // configure, start and stop a Web Page Replay (WPR) server. A WPR server // is a local server that intercepts and responds to Chrome requests with // pre-recorded traffic. Using a captured site archive file, WPR can // mimick the site server and provide the test with deterministic site // behaviors. // 2. Providing a function that deserializes and replays a Test Recipe. A Test // Recipe is a JSON formatted file containing instructions on how to run a // Chrome test against a live or captured site. These instructions include // the starting URL for the test, and a list of user actions (clicking, // typing) that drives the test. One may sample some example Test Recipes // under the src/chrome/test/data/autofill/captured_sites directory. class TestRecipeReplayer { … }; } // namespace captured_sites_test_utils #endif // CHROME_BROWSER_AUTOFILL_CAPTURED_SITES_TEST_UTILS_H_