| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| /** |
| * @fileoverview Handles validation of current permissions before performing an |
| * action. |
| */ |
| import {Command} from './command.js'; |
| import {CommandStore} from './command_store.js'; |
| |
| import SessionType = chrome.chromeosInfoPrivate.SessionType; |
| |
| export class PermissionChecker { |
| private isIncognito_: boolean; |
| private isKioskSession_: boolean; |
| |
| static instance: PermissionChecker; |
| |
| private constructor() { |
| this.isIncognito_ = Boolean(chrome.runtime.getManifest()['incognito']); |
| this.isKioskSession_ = false; |
| } |
| |
| static async init(): Promise<void> { |
| PermissionChecker.instance = new PermissionChecker(); |
| await PermissionChecker.instance.fetchState_(); |
| } |
| |
| static isAllowed(command: Command): boolean { |
| return PermissionChecker.instance.isAllowed_(command); |
| } |
| |
| private isAllowed_(command: Command): boolean { |
| if (!this.isIncognito_ && !this.isKioskSession_) { |
| return true; |
| } |
| |
| return !CommandStore.denySignedOut(command); |
| } |
| |
| private async fetchState_(): Promise<void> { |
| const result: {sessionType?: SessionType} = await new Promise( |
| resolve => chrome.chromeosInfoPrivate.get(['sessionType'], resolve)); |
| this.isKioskSession_ = result['sessionType'] === SessionType.KIOSK; |
| } |
| } |