| // Copyright 2023 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_ASH_CROSAPI_PRIMARY_PROFILE_CREATION_WAITER_H_ |
| #define CHROME_BROWSER_ASH_CROSAPI_PRIMARY_PROFILE_CREATION_WAITER_H_ |
| |
| #include <memory> |
| |
| #include "base/functional/callback.h" |
| #include "base/memory/raw_ptr.h" |
| #include "base/scoped_observation.h" |
| #include "chrome/browser/profiles/profile_manager_observer.h" |
| |
| class ProfileManager; |
| |
| namespace crosapi { |
| |
| class PrimaryProfileCreationWaiter : public ProfileManagerObserver { |
| public: |
| ~PrimaryProfileCreationWaiter() override; |
| |
| // Disallow copy/assign. |
| PrimaryProfileCreationWaiter(const PrimaryProfileCreationWaiter&) = delete; |
| PrimaryProfileCreationWaiter& operator=(const PrimaryProfileCreationWaiter&) = |
| delete; |
| |
| // If the primary profile hasn't been created yet, returns a |
| // PrimaryProfileCreationWaiter object which will invoke the |
| // callback once the primary profile is ready. |
| // If the primary profile has already been created, invokes |
| // the callback immediately, and returns nullptr. |
| static std::unique_ptr<PrimaryProfileCreationWaiter> WaitOrRun( |
| ProfileManager* profile_manager, |
| base::OnceClosure callback); |
| |
| // ProfileManagerObserver overrides. |
| // Called when a profile has been fully created. |
| void OnProfileAdded(Profile* profile) override; |
| |
| private: |
| PrimaryProfileCreationWaiter(ProfileManager* profile_manager, |
| base::OnceClosure callback); |
| |
| raw_ptr<ProfileManager> profile_manager_; |
| base::ScopedObservation<ProfileManager, ProfileManagerObserver> |
| profile_manager_observation_{this}; |
| base::OnceClosure callback_; |
| }; |
| |
| } // namespace crosapi |
| |
| #endif // CHROME_BROWSER_ASH_CROSAPI_PRIMARY_PROFILE_CREATION_WAITER_H_ |