#ifndef CHROME_TEST_SUPERVISED_USER_FAMILY_LIVE_TEST_H_
#define CHROME_TEST_SUPERVISED_USER_FAMILY_LIVE_TEST_H_
#include <memory>
#include <string>
#include <string_view>
#include "chrome/browser/signin/e2e_tests/live_test.h"
#include "chrome/browser/signin/e2e_tests/signin_util.h"
#include "chrome/test/interaction/interactive_browser_test.h"
#include "chrome/test/supervised_user/browser_user.h"
#include "components/signin/public/identity_manager/test_accounts.h"
#include "components/supervised_user/test_support/family_link_settings_state_management.h"
#include "ui/base/interaction/interaction_sequence.h"
#include "ui/base/interaction/interactive_test_internal.h"
#include "ui/base/interaction/state_observer.h"
#include "url/gurl.h"
namespace supervised_user {
inline constexpr char kAccountRepositoryPath[] =
"supervised-tests-account-repository-path";
inline constexpr char kFamilyFeatureIdentifierSwitch[] =
"supervised-tests-family-identifier";
inline constexpr char kHeadOfHouseholdCredentialsSwitch[] =
"supervised-tests-hoh-credentials";
inline constexpr char kChildCredentialsSwitch[] =
"supervised-tests-child-credentials";
class FamilyLiveTest : public signin::test::LiveTest {
public:
enum class RpcMode : int {
kProd = 0,
kTestImpersonation = 1,
};
explicit FamilyLiveTest(RpcMode rpc_mode);
FamilyLiveTest(FamilyLiveTest::RpcMode rpc_mode,
const std::vector<std::string_view>& extra_enabled_hosts);
~FamilyLiveTest() override;
void TurnOnSync();
void TurnOnSyncFor(BrowserUser& browser_user);
protected:
void SetUp() override;
void SetUpOnMainThread() override;
void SetUpInProcessBrowserTestFixture() override;
void TearDownOnMainThread() override;
GURL GetRoutedUrl(std::string_view url_spec) const;
BrowserUser& head_of_household() const;
BrowserUser& child() const;
BrowserUser& rpc_issuer() const;
private:
void SetHeadOfHousehold(const test_accounts::FamilyMember& credentials);
void SetChild(const test_accounts::FamilyMember& credentials);
signin::TestAccountSigninCredentials GetAccountFromFile(
std::string_view account_name_suffix) const;
std::unique_ptr<BrowserUser> MakeSignedInBrowser(
const test_accounts::FamilyMember& credentials);
std::unique_ptr<BrowserUser> head_of_household_;
std::unique_ptr<BrowserUser> child_;
const std::vector<std::string> extra_enabled_hosts_;
const RpcMode rpc_mode_;
};
std::string ToString(FamilyLiveTest::RpcMode rpc_mode);
class InteractiveFamilyLiveTest
: public InteractiveBrowserTestMixin<FamilyLiveTest> {
public:
using InIntendedStateObserver = ui::test::PollingStateObserver<bool>;
explicit InteractiveFamilyLiveTest(FamilyLiveTest::RpcMode rpc_mode);
InteractiveFamilyLiveTest(
FamilyLiveTest::RpcMode rpc_mode,
const std::vector<std::string_view>& extra_enabled_hosts);
protected:
ui::test::internal::InteractiveTestPrivate::MultiStep WaitForStateSeeding(
ui::test::StateIdentifier<InIntendedStateObserver> id,
const BrowserUser& browser_user,
const FamilyLinkSettingsState& state_manager);
};
}
#endif