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
|
// Copyright 2022 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_UI_VIEWS_PROFILES_FIRST_RUN_FLOW_CONTROLLER_DICE_H_
#define CHROME_BROWSER_UI_VIEWS_PROFILES_FIRST_RUN_FLOW_CONTROLLER_DICE_H_
#include <memory>
#include "base/cancelable_callback.h"
#include "base/functional/callback_forward.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "chrome/browser/shell_integration.h"
#include "chrome/browser/ui/profiles/profile_picker.h"
#include "chrome/browser/ui/views/profiles/profile_management_flow_controller.h"
#include "chrome/browser/ui/views/profiles/profile_management_flow_controller_impl.h"
#include "chrome/browser/ui/views/profiles/profile_management_types.h"
#include "chrome/browser/ui/views/profiles/profile_picker_web_contents_host.h"
struct CoreAccountInfo;
enum class IntroChoice;
class Profile;
// Creates a step to represent the intro. Exposed for testing.
std::unique_ptr<ProfileManagementStepController> CreateIntroStep(
ProfilePickerWebContentsHost* host,
base::RepeatingCallback<void(IntroChoice)> choice_callback,
bool enable_animations);
class FirstRunFlowControllerDice : public ProfileManagementFlowControllerImpl {
public:
// Profile management flow controller that will run the FRE for `profile` in
// `host`.
FirstRunFlowControllerDice(
ProfilePickerWebContentsHost* host,
ClearHostClosure clear_host_callback,
Profile* profile,
ProfilePicker::FirstRunExitedCallback first_run_exited_callback);
~FirstRunFlowControllerDice() override;
// ProfileManagementFlowControllerImpl:
void Init() override;
void CancelPostSignInFlow() override;
void PickProfile(
const base::FilePath& profile_path,
ProfilePicker::ProfilePickingArgs args,
base::OnceCallback<void(bool)> pick_profile_complete_callback) override;
protected:
// ProfileManagementFlowControllerImpl
bool PreFinishWithBrowser() override;
// `account_info` may not be set as the primary account yet.
std::unique_ptr<ProfilePickerSignedInFlowController>
CreateSignedInFlowController(
Profile* signed_in_profile,
const CoreAccountInfo& account_info,
std::unique_ptr<content::WebContents> contents) override;
base::queue<ProfileManagementFlowController::Step> RegisterPostIdentitySteps(
PostHostClearedCallback post_host_cleared_callback) override;
private:
void HandleIntroSigninChoice(IntroChoice choice);
// Run the `finish_flow_callback_` if it's not empty.
void RunFinishFlowCallback();
const raw_ptr<Profile> profile_;
ProfilePicker::FirstRunExitedCallback first_run_exited_callback_;
// The callback that will finish the flow and open the browser.
base::OnceClosure finish_flow_callback_;
base::WeakPtrFactory<FirstRunFlowControllerDice> weak_ptr_factory_{this};
};
#endif // CHROME_BROWSER_UI_VIEWS_PROFILES_FIRST_RUN_FLOW_CONTROLLER_DICE_H_
|