blob: 2a0f6f9a87b7b0ea455a3581a8d76454f35a76ad [file] [log] [blame]
// Copyright 2012 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_SYNC_SYNC_UI_UTIL_H_
#define CHROME_BROWSER_SYNC_SYNC_UI_UTIL_H_
#include <optional>
#include "build/build_config.h"
#include "components/sync/service/sync_service_utils.h"
class Profile;
#if !BUILDFLAG(IS_ANDROID)
class Browser;
#endif
namespace signin {
class IdentityManager;
} // namespace signin
namespace syncer {
class SyncService;
} // namespace syncer
// Utility functions to gather current sync status information from the sync
// service and constructs messages suitable for showing in UI.
enum class SyncStatusMessageType {
// User has not set up sync.
kPreSynced,
// We are synced and authenticated to a gmail account.
kSynced,
// A sync error (such as invalid credentials) has occurred.
kSyncError,
// Same as kSyncError but affecting passwords only.
kPasswordsOnlySyncError,
};
// The action associated with the sync status in settings.
enum class SyncStatusActionType {
// No action to take.
kNoAction,
// User needs to reauthenticate.
kReauthenticate,
// User needs to upgrade the client.
kUpgradeClient,
// User needs to enter their passphrase.
kEnterPassphrase,
// User needs to go through key retrieval.
kRetrieveTrustedVaultKeys,
// User needs to confirm sync settings.
kConfirmSyncSettings,
};
// Sync errors that should be exposed to the user through the avatar button.
enum AvatarSyncErrorType {
// Unrecoverable error for managed users.
kManagedUserUnrecoverableError,
// Unrecoverable error for regular users.
kUnrecoverableError,
// Sync paused (e.g. persistent authentication error).
kSyncPaused,
// Out-of-date client error.
kUpgradeClientError,
// Sync passphrase error.
kPassphraseError,
// Trusted vault keys missing for all sync datatypes (encrypt everything is
// enabled).
kTrustedVaultKeyMissingForEverythingError,
// Trusted vault keys missing for always-encrypted datatypes (passwords).
kTrustedVaultKeyMissingForPasswordsError,
// User needs to improve recoverability of the trusted vault (encrypt
// everything is enabled).
kTrustedVaultRecoverabilityDegradedForEverythingError,
// User needs to improve recoverability of the trusted vault (passwords).
kTrustedVaultRecoverabilityDegradedForPasswordsError,
// Sync settings dialog not confirmed yet.
kSettingsUnconfirmedError,
};
struct SyncStatusLabels {
SyncStatusMessageType message_type = SyncStatusMessageType::kPreSynced;
int status_label_string_id = 0;
int button_string_id = 0;
int secondary_button_string_id = 0;
SyncStatusActionType action_type = SyncStatusActionType::kNoAction;
};
// Returns the high-level sync status by querying |sync_service| and
// |identity_manager|.
SyncStatusLabels GetSyncStatusLabels(
syncer::SyncService* sync_service,
signin::IdentityManager* identity_manager,
bool is_user_clear_primary_account_allowed);
// Returns the high-level sync status by querying |profile|. This is a
// convenience version of GetSyncStatusLabels that use the |sync_service| and
// |identity_manager| associated to |profile| via their respective factories.
SyncStatusLabels GetSyncStatusLabels(Profile* profile);
// Convenience version of GetSyncStatusLabels for when you're only interested in
// the message type.
SyncStatusMessageType GetSyncStatusMessageType(Profile* profile);
#if !BUILDFLAG(IS_ANDROID)
SyncStatusLabels GetSyncStatusLabelsForSettings(
const syncer::SyncService* service);
SyncStatusLabels GetAvatarSyncErrorLabelsForSettings(AvatarSyncErrorType error);
// Gets the error in the sync machinery (if any) that should be exposed to the
// user through the titlebar avatar button. If std::nullopt is returned, this
// does NOT mean sync-the-feature/sync-the-transport is enabled, simply that
// there's no error. Furthermore, an error may be returned even if only
// sync-the-transport is running. One such case is when the user wishes to run
// an encrypted data type on transport mode and must first go through a reauth.
std::optional<AvatarSyncErrorType> GetAvatarSyncErrorType(Profile* profile);
// When |error| is present, this returns the string to be shown both as the
// tooltip of the avatar button, and in the profile menu body (the menu opened
// by clicking the avatar button).
std::u16string GetAvatarSyncErrorDescription(AvatarSyncErrorType error,
bool is_sync_feature_enabled,
const std::string& user_email);
#endif
// Whether sync is currently blocked from starting because the sync
// confirmation dialog hasn't been shown. Note that once the dialog is
// showing (i.e. IsSetupInProgress() is true), this will return false.
bool ShouldRequestSyncConfirmation(const syncer::SyncService* service);
// Returns whether it makes sense to show a Sync passphrase error UI, i.e.
// whether a missing passphrase is preventing Sync from fully starting up.
bool ShouldShowSyncPassphraseError(const syncer::SyncService* service);
#if !BUILDFLAG(IS_ANDROID)
// Opens a tab for the purpose of retrieving the trusted vault keys, which
// usually requires a reauth.
void OpenTabForSyncKeyRetrieval(
Browser* browser,
syncer::TrustedVaultUserActionTriggerForUMA trigger);
// Opens a tab for the purpose of improving the recoverability of the trusted
// vault keys, which usually requires a reauth.
void OpenTabForSyncKeyRecoverabilityDegraded(
Browser* browser,
syncer::TrustedVaultUserActionTriggerForUMA trigger);
#endif // !BUILDFLAG(IS_ANDROID)
#endif // CHROME_BROWSER_SYNC_SYNC_UI_UTIL_H_