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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
|
// 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_PROFILE_PICKER_FLOW_CONTROLLER_H_
#define CHROME_BROWSER_UI_VIEWS_PROFILES_PROFILE_PICKER_FLOW_CONTROLLER_H_
#include <string>
#include "base/memory/weak_ptr.h"
#include "chrome/browser/ui/profiles/profile_picker.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"
#include "components/signin/public/base/signin_buildflags.h"
struct CoreAccountInfo;
class Profile;
class ProfilePickerSignedInFlowController;
class ForceSigninUIError;
class ProfilePickerFlowController : public ProfileManagementFlowControllerImpl {
public:
ProfilePickerFlowController(ProfilePickerWebContentsHost* host,
ClearHostClosure clear_host_callback,
ProfilePicker::EntryPoint entry_point,
const GURL& selected_profile_target_url);
~ProfilePickerFlowController() override;
void Init() override;
#if BUILDFLAG(ENABLE_DICE_SUPPORT)
void SwitchToDiceSignIn(ProfilePicker::ProfileInfo profile_info,
StepSwitchFinishedCallback switch_finished_callback);
void SwitchToReauth(
Profile* profile,
StepSwitchFinishedCallback switch_finished_callback,
base::OnceCallback<void(const ForceSigninUIError&)> on_error_callback);
#endif
void CancelPostSignInFlow() override;
std::u16string GetFallbackAccessibleWindowTitle() const override;
base::FilePath GetSwitchProfilePathOrEmpty() const;
// Switch to the flow that is shown when the user decides to create a profile
// without signing in.
void SwitchToSignedOutPostIdentityFlow(Profile* profile);
// ProfileManagementFlowControllerImpl:
void PickProfile(
const base::FilePath& profile_path,
ProfilePicker::ProfilePickingArgs args,
base::OnceCallback<void(bool)> pick_profile_complete_callback) override;
protected:
// ProfileManagementFlowControllerImpl
base::queue<ProfileManagementFlowController::Step> RegisterPostIdentitySteps(
PostHostClearedCallback post_host_cleared_callback) override;
private:
#if BUILDFLAG(ENABLE_DICE_SUPPORT)
void OnReauthCompleted(
Profile* profile,
base::OnceCallback<void(const ForceSigninUIError&)> on_error_callback,
bool success,
const ForceSigninUIError& error);
void OnProfilePickerStepShownReauthError(
base::OnceCallback<void(const ForceSigninUIError&)> on_error_callback,
const ForceSigninUIError& error,
bool switch_step_success);
#endif
std::unique_ptr<ProfilePickerSignedInFlowController>
CreateSignedInFlowController(
Profile* signed_in_profile,
const CoreAccountInfo& account_info,
std::unique_ptr<content::WebContents> contents) override;
// Callback after loading a profile and opening a browser.
void OnSwitchToProfileComplete(
bool open_settings,
base::OnceCallback<void(bool)> pick_profile_complete_callback,
Browser* browser);
const ProfilePicker::EntryPoint entry_point_;
const GURL selected_profile_target_url_;
// Color provided when a profile creation is initiated, that may be used to
// tint screens of the profile creation flow (currently this only affects the
// profile type choice screen, which is the one picking the color). It will
// also be passed to the finishing steps of the profile creation, as a default
// color choice that the user would be able to override.
std::optional<SkColor> suggested_profile_color_;
// TODO(crbug.com/40237338): To be refactored out.
// This is used for `ProfilePicker::GetSwitchProfilePath()`. The information
// should ideally be provided to the handler of the profile switch page once
// its controller is created instead of relying on static calls.
base::WeakPtr<ProfilePickerSignedInFlowController>
weak_signed_in_flow_controller_;
base::WeakPtr<Profile> created_profile_;
// Time when the user picked a profile to open, to measure browser startup
// performance. Only set when the picker is shown on startup.
base::TimeTicks profile_picked_time_on_startup_;
base::WeakPtrFactory<ProfilePickerFlowController> weak_ptr_factory_{this};
};
#endif // CHROME_BROWSER_UI_VIEWS_PROFILES_PROFILE_PICKER_FLOW_CONTROLLER_H_
|