blob: 90c4308a20fa80b425ae1592975d6bc99628dbff [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_CHROME_BROWSER_SHARED_MODEL_PROFILE_PROFILE_ATTRIBUTES_IOS_H_
#define IOS_CHROME_BROWSER_SHARED_MODEL_PROFILE_PROFILE_ATTRIBUTES_IOS_H_
#include <set>
#include <string>
#include <string_view>
#include "base/time/time.h"
#include "base/values.h"
#include "google_apis/gaia/gaia_id.h"
// Stores information about a single profile.
//
// It represents a snapshot in time of the data stored in preferences. It
// does not reflect changes made to the preferences and it does not store
// the values to the preferences when changes are made.
//
// Look at ProfileAttributesStorageIOS API to see how the changes can be
// committed to the preferences.
class ProfileAttributesIOS {
public:
// Represents a set of gaia ids.
using GaiaIdSet = std::set<GaiaId, std::less<>>;
// Represents a set of session ids.
using SessionIds = std::set<std::string, std::less<>>;
// Creates a ProfileAttributesIOS for a new profile named `profile_name`.
static ProfileAttributesIOS CreateNew(std::string_view profile_name);
// Creates a ProfileAttributesIOS for an existing profile name `profile_name`
// with attributes from `storage`.
static ProfileAttributesIOS WithAttrs(std::string_view profile_name,
const base::Value::Dict& storage);
// Creates a ProfileAttributesIOS for a deleted profile named `profile_name`.
static ProfileAttributesIOS DeletedProfile(std::string_view profile_name);
ProfileAttributesIOS(ProfileAttributesIOS&&);
ProfileAttributesIOS& operator=(ProfileAttributesIOS&&);
~ProfileAttributesIOS();
// Returns the name of the profile (immutable).
const std::string& GetProfileName() const;
// IsNewProfile() is true if the profile has been registered with
// ProfileAttributesStorageIOS, but has never been loaded.
bool IsNewProfile() const;
// IsFullyInitialized() is true if the profile has been loaded at least once,
// and all first-time setup steps have been completed (e.g. for work profiles,
// this includes signing in the corresponding managed account).
bool IsFullyInitialized() const;
// IsDeletedProfile() is true if the profile has been marked for deletion.
bool IsDeletedProfile() const;
// Gets information related to the profile.
GaiaId GetGaiaId() const;
const std::string& GetUserName() const;
bool HasAuthenticationError() const;
GaiaIdSet GetAttachedGaiaIds() const;
base::Time GetLastActiveTime() const;
bool IsAuthenticated() const;
SessionIds GetDiscardedSessions() const;
const base::Value::Dict* GetNotificationPermissions() const;
// Sets information related to the profile.
void ClearIsNewProfile();
void SetFullyInitialized();
void SetAuthenticationInfo(const GaiaId& gaia_id, std::string_view user_name);
void SetHasAuthenticationError(bool value);
void SetAttachedGaiaIds(const GaiaIdSet& gaia_ids);
void SetLastActiveTime(base::Time time);
void SetDiscardedSessions(const SessionIds& session_ids);
void SetNotificationPermissions(base::Value::Dict permissions);
// Returns the storage.
base::Value::Dict GetStorage() &&;
private:
// Private constructor, use the static factory methods instead.
ProfileAttributesIOS(std::string_view profile_name,
base::Value::Dict storage);
std::string profile_name_;
base::Value::Dict storage_;
};
#endif // IOS_CHROME_BROWSER_SHARED_MODEL_PROFILE_PROFILE_ATTRIBUTES_IOS_H_