// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

module ash.mojom;

import "components/account_id/interfaces/account_id.mojom";
import "ui/gfx/image/mojo/image.mojom";

// Matches user_manager::UserType.
enum UserType {
  // Regular user, has a user name and password.
  REGULAR,

  // Guest user, logs in without authentication.
  GUEST,

  // Public account user, logs in without authentication. Available only if
  // enabled through policy.
  PUBLIC_ACCOUNT,

  // Supervised user, logs in only with local authentication.
  SUPERVISED,

  // Kiosk app robot, logs in without authentication.
  KIOSK,

  // Child user, with supervised options.
  CHILD,

  // Android app in kiosk mode, logs in without authentication.
  ARC_KIOSK,

  // Active Directory user. Authenticates against Active Directory server.
  ACTIVE_DIRECTORY,
};

// Data for a user's avatar.
struct UserAvatar {
  gfx.mojom.ImageSkia image;
  // The raw bytes for the avatar. Useful if the avatar is animated.
  // TODO(crbug.com/770373): Use a shared buffer (mojo.Blob), as this may be
  // large enough to congest IPC.
  array<uint8> bytes;
};

// Info about a user. May be sent repeatedly for a single user because
// individual fields may change (e.g. the avatar image or custodians).
struct UserInfo {
  UserType type;
  signin.mojom.AccountId account_id;
  string service_user_id;
  string display_name;
  string display_email;
  UserAvatar avatar;
  // True if this user has a newly created profile (first time login on the
  // device)
  bool is_new_profile;
  // True if the user's non-cryptohome data (wallpaper, avatar etc.) is
  // ephemeral. See |UserManager::IsUserNonCryptohomeDataEphemeral| for details.
  bool is_ephemeral;
  // True if the user is also the device owner.
  bool is_device_owner;
};
