blob: 8ce8c17aaee804ada146bca4572a8cb5810f4a74 [file] [log] [blame]
// Copyright 2013 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_SIGNIN_MODEL_SIGNIN_UTIL_H_
#define IOS_CHROME_BROWSER_SIGNIN_MODEL_SIGNIN_UTIL_H_
#import <UIKit/UIKit.h>
#include <map>
#include <optional>
#include <set>
#include <string>
#import "base/functional/callback.h"
#import "base/functional/callback_helpers.h"
#import "components/signin/public/identity_manager/account_info.h"
#import "ios/chrome/browser/signin/model/capabilities_types.h"
#import "ios/chrome/browser/signin/model/constants.h"
#import "ios/chrome/browser/signin/model/system_identity.h"
class PrefService;
namespace base {
class Time;
} // namespace base
namespace signin {
enum class Tribool;
} // namespace signin
// Returns an NSArray of `scopes` as NSStrings.
NSArray* GetScopeArray(const std::set<std::string>& scopes);
// Returns whether the given signin `error` should be handled.
//
// Note that cancel errors and errors handled internally by the signin component
// should not be handled.
bool ShouldHandleSigninError(NSError* error);
// Returns CGSize based on `IdentityAvatarSize`.
CGSize GetSizeForIdentityAvatarSize(IdentityAvatarSize avatar_size);
// Returns whether Chrome has been started after a device restore. This method
// needs to be called once before IO is disallowed on UI thread (or
// `LastDeviceRestoreTimestamp()`).
// `completion` is called once all sentinel files are created.
signin::Tribool IsFirstSessionAfterDeviceRestore(
base::OnceClosure completion = base::DoNothing());
// Returns the last device restore timestamp. This method needs to be called
// once before IO is disallowed on UI thread (or
// `LastDeviceRestoreTimestamp()`).
// No value is returned:
// - if the current session after the device restore,
// - or if, no device restore was done,
// - or if, it was not possible to know if a device restore was done.
std::optional<base::Time> LastDeviceRestoreTimestamp();
// Stores a user's account info and whether history sync was enabled or not,
// when we detect that it was forgotten during a device restore.
void StorePreRestoreIdentity(PrefService* profile_pref,
AccountInfo account,
bool history_sync_enabled);
// Clears the identity that was signed-in before the restore.
void ClearPreRestoreIdentity(PrefService* profile_pref);
// Returns the identity that was signed-in before the restore, but is now
// not signed-in.
std::optional<AccountInfo> GetPreRestoreIdentity(PrefService* profile_pref);
// Returns whether history sync was enabled before the restore.
bool GetPreRestoreHistorySyncEnabled(PrefService* profile_pref);
// Returns the list of account capability service names supported in Chrome.
// This is exposed to allow for prefetching capabilities on app startup.
base::span<const std::string_view> GetAccountCapabilityNamesForPrefetch();
// Pre-fetches system capabilities for the given identities so that they
// can be cached for later usage.
void RunSystemCapabilitiesPrefetch(NSArray<id<SystemIdentity>>* identities);
// Resets the data related to device restore. This is for test only.
void ResetDeviceRestoreDataForTesting();
#endif // IOS_CHROME_BROWSER_SIGNIN_MODEL_SIGNIN_UTIL_H_