// Copyright 2019 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_PROFILES_PROFILE_MANAGER_OBSERVER_H_
#define CHROME_BROWSER_PROFILES_PROFILE_MANAGER_OBSERVER_H_

#include "base/observer_list_types.h"

class Profile;
enum class ProfileKeepAliveOrigin;

class ProfileManagerObserver : public base::CheckedObserver {
 public:
  // Called when a Profile is added to the manager, the profile is fully created
  // and registered with the ProfileManager. This is called for:
  //  - Regular profiles,
  //  - Original profiles of the Guest and system profiles.
  // This is NOT called for:
  //  - Incognito profiles (OTR profile associated to a regular profile). For
  //    these profiles, see `ProfileObserver::OnOffTheRecordProfileCreated()`.
  //  - Guest and system profiles.
  // Unlike ProfileAttributesStorage::Observer::OnProfileAdded(), which is only
  // called when a new user is first created, this is called once on every run
  // of Chrome, provided that the Profile is in use.
  virtual void OnProfileAdded(Profile* profile) {}

  // Called when the user deletes a profile and all associated data should be
  // erased. Note that the Profile object will not be destroyed until Chrome
  // shuts down. See https://crbug.com/40594327
  virtual void OnProfileMarkedForPermanentDeletion(Profile* profile) {}

  // Called when the profile manager is destroying. As the `ProfileManager` is
  // owned by the `BrowserProcessImpl`, this will only be called during
  // shutdown.
  virtual void OnProfileManagerDestroying() {}

  // Called when a keep alive is added to a profile, with the respective keep
  // alive origin.
  virtual void OnKeepAliveAdded(const Profile* profile,
                                ProfileKeepAliveOrigin keep_alive_origin) {}

  // Called when a new profile is being created. This is called at earlier
  // stage of Profile creation, i.e., we should not assume Profile
  // initialization is completed.
  // In most cases, `OnProfileAdded()` is what you want, instead.
  virtual void OnProfileCreationStarted(Profile* profile) {}
};

#endif  // CHROME_BROWSER_PROFILES_PROFILE_MANAGER_OBSERVER_H_
