| // Copyright 2016 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 "ash/public/interfaces/user_info.mojom"; |
| import "components/account_id/interfaces/account_id.mojom"; |
| import "mojo/public/mojom/base/time.mojom"; |
| |
| // Matches session_manager::SessionState. |
| enum SessionState { |
| // Default value, when session state hasn't been initialized yet. |
| UNKNOWN, |
| |
| // Running out of box UI. |
| OOBE, |
| |
| // Running login UI (primary user) but user sign in hasn't completed yet. |
| LOGIN_PRIMARY, |
| |
| // Running login UI (primary or secondary user), user sign in has been |
| // completed but login UI hasn't been hidden yet. This means that either |
| // some session initialization is happening or user has to go through some |
| // UI flow on the same login UI like select avatar, agree to terms of |
| // service etc. |
| LOGGED_IN_NOT_ACTIVE, |
| |
| // A user(s) has logged in *and* login UI is hidden i.e. user session is |
| // not blocked. |
| ACTIVE, |
| |
| // The session screen is locked. |
| LOCKED, |
| |
| // Same as SESSION_STATE_LOGIN_PRIMARY but for multi-profiles sign in i.e. |
| // when there's at least one user already active in the session. |
| LOGIN_SECONDARY, |
| }; |
| |
| // Matches ash::CycleUserDirection. |
| enum CycleUserDirection { |
| NEXT, // Cycle to the next user. |
| PREVIOUS, // Cycle to the previous user. |
| }; |
| |
| // Info about a user session in ash. May be sent repeatedly for a single user |
| // because individual fields may change (e.g. the avatar image or custodians). |
| struct UserSession { |
| // A user session id for the user session. It is generated by session manager |
| // (chrome) when a user session starts and never changes during the lifetime |
| // of the session manager. The number starts at 1 for the first user session |
| // and incremented by one for each subsequent user session. |
| uint32 session_id; |
| |
| // Contains general user information state, like the account id, display name, |
| // and avatar. |
| UserInfo user_info; |
| |
| // For supervised users only, the email address of the custodian account. |
| // Empty for non-supervised users. Available after profile is loaded. |
| string custodian_email; |
| |
| // For supervised users only, the email address of the second custodian |
| // account, if any. Available after profile is loaded. |
| string second_custodian_email; |
| |
| // Whether the settings icon should be enabled in the system tray menu. |
| // Usually true after login, but can be false for specialized user sessions |
| // (e.g. adding supervised users). |
| bool should_enable_settings; |
| |
| // Similar to |should_show_settings| but for the notification tray. |
| bool should_show_notification_tray; |
| }; |
| |
| // Matches ash::AddUserSessionPolicy. |
| enum AddUserSessionPolicy { |
| // Adding a user session is allowed. |
| ALLOWED, |
| |
| // Disallowed due to primary user's policy. |
| ERROR_NOT_ALLOWED_PRIMARY_USER, |
| |
| // Disallowed due to no eligible users. |
| ERROR_NO_ELIGIBLE_USERS, |
| |
| // Disallowed due to reaching maximum supported user. |
| ERROR_MAXIMUM_USERS_REACHED, |
| }; |
| |
| // Info about an ash session. |
| struct SessionInfo { |
| // Whether the screen can be locked. |
| bool can_lock_screen; |
| |
| // Whether the screen should be locked automatically before suspending. |
| bool should_lock_screen_automatically; |
| |
| // Whether the session is in app mode, which includes a kiosk-like mode for |
| // fullscreen web content or running a single [forced] Chrome or ARC app. |
| bool is_running_in_app_mode; |
| |
| // Whether the session is a demo session, which is an ephemeral session for |
| // Demo Mode. |
| bool is_demo_session; |
| |
| // Sets whether adding a user session to ash is allowed. |
| AddUserSessionPolicy add_user_session_policy; |
| |
| // Current state of the ash session. |
| SessionState state; |
| }; |
| |
| // Interface for ash client (e.g. Chrome) to set session info for ash. |
| interface SessionController { |
| // Sets the client interface. |
| SetClient(SessionControllerClient client); |
| |
| // Sets the ash session info. |
| SetSessionInfo(SessionInfo info); |
| |
| // Updates a user session. This is called when a user session is added or |
| // its meta data (e.g. name, avatar) is changed. There is no method to remove |
| // a user session because ash/chrome does not support that. All users are |
| // logged out at the same time. |
| UpdateUserSession(UserSession user_session); |
| |
| // Sets the order of user sessions. The order is keyed by the session id. |
| // Currently, session manager set a LRU order with the first one being the |
| // active user session. |
| SetUserSessionOrder(array<uint32> user_session_ids); |
| |
| // Prepares ash for lock screen. Currently this ensures the current active |
| // window could not be used to mimic the lock screen. Lock screen is created |
| // after this call returns. |
| PrepareForLock() => (); |
| |
| // Runs the pre-lock animation to start locking ash. When the call returns, |
| // |locked| == true means that the ash post-lock animation is finished and ash |
| // is fully locked. Otherwise |locked| is false, which means something is |
| // wrong for the lock and ash is not locked. When the call returns with a true |
| // |locked|, screen locker runs the post lock jobs such as a11y announcement |
| // etc. Invoked by the screen locker during initialization. |
| StartLock() => (bool locked); |
| |
| // Notifies ash that chrome lock animations are finished. This is the last |
| // event for locking. SessionController forwards it to PowerEventObserver. |
| NotifyChromeLockAnimationsComplete(); |
| |
| // Runs the pre-unlock animation. Invoked by the screen locker before |
| // dismissing. When the mojo call returns, screen locker takes that as a |
| // signal of finished unlock animation and dismisses itself. |
| RunUnlockAnimation() => (); |
| |
| // Notifies that chrome is terminating. |
| NotifyChromeTerminating(); |
| |
| // Adds a countdown timer to the system tray menu and creates or updates a |
| // notification saying the session length is limited (e.g. a public session in |
| // a library). Setting |length_limit| to zero removes the notification. |
| // NOTE: Chrome enforces the limit, not ash. Ash could enforce it if local |
| // state prefs and user activity monitoring were available under mustash. |
| // http://crbug.com/729808 |
| SetSessionLengthLimit(mojo_base.mojom.TimeDelta length_limit, |
| mojo_base.mojom.TimeTicks start_time); |
| |
| // Returns whether it's ok to switch the active multiprofile user. May affect |
| // or be affected by system state such as window overview mode and screen |
| // casting. |
| CanSwitchActiveUser() => (bool can_switch); |
| |
| // Shows a dialog to explain the implications of signing in multiple users. |
| // If |on_accept| is false, |permanently_accept| is ignored. |
| ShowMultiprofilesIntroDialog() => (bool on_accept, bool permanently_accept); |
| |
| // Shows a dialog to confirm that the user wants to teleport a window to |
| // another desktop. If |on_accept| is false, |permanently_accept| is ignored. |
| ShowTeleportWarningDialog() => (bool on_accept, bool permanently_accept); |
| |
| // Shows a dialog that explains that the given user is no longer allowed in |
| // the session due to a policy change, and aborts the session. |
| ShowMultiprofilesSessionAbortedDialog(string user_email); |
| |
| // Adds session activation observer. The observer is called when session |
| // with |account_id| is becoming active or inactive. The observer is |
| // immediately called for upon registration with the current status. |
| AddSessionActivationObserverForAccountId( |
| signin.mojom.AccountId account_id, SessionActivationObserver observer); |
| }; |
| |
| // Interface for ash to request session service from its client (e.g. Chrome). |
| interface SessionControllerClient { |
| // Requests to lock screen. |
| RequestLockScreen(); |
| |
| // Requests signing out all users, ending the current session. |
| RequestSignOut(); |
| |
| // Switch to the active user with |account_id| (if the user has already signed |
| // in). |
| SwitchActiveUser(signin.mojom.AccountId account_id); |
| |
| // Switch the active user to the next or previous user. |
| CycleActiveUser(CycleUserDirection direction); |
| |
| // Show the multi-profile login UI to add another user to this session. |
| ShowMultiProfileLogin(); |
| }; |
| |
| // Interface for ash to notify client of sessions status for a specific |
| // |account_id|. |
| interface SessionActivationObserver { |
| // Called the session is becoming active or inactive. |
| OnSessionActivated(bool activated); |
| |
| // Called when lock screen state changes. |
| OnLockStateChanged(bool locked); |
| }; |