| // 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 Manages fetching and checking command line flags. */ |
| import {TestImportManager} from './testing/test_import_manager.js'; |
| |
| export enum FlagName { |
| CHROMEVOX_Q1_FAST_TRACK = 'enable-chromevox-q1-fast-track-features', |
| MAGNIFIER_DEBUG_DRAW_RECT = 'enable-magnifier-debug-draw-rect', |
| MANIFEST_V3 = 'enable-experimental-accessibility-manifest-v3', |
| SWITCH_ACCESS_TEXT = 'enable-experimental-accessibility-switch-access-text', |
| } |
| |
| export class Flags { |
| private enabled_: Partial<Record<FlagName, boolean>> = {}; |
| static instance: Flags; |
| |
| static async init(): Promise<void> { |
| if (Flags.instance) { |
| throw new Error( |
| 'Cannot create two instances of Flags in the same context'); |
| } |
| Flags.instance = new Flags(); |
| await Flags.instance.fetch_(); |
| } |
| |
| static isEnabled(flagName: FlagName): boolean|undefined { |
| // Note: Will return undefined for any flag if Flags not initialized. |
| return Flags.instance.enabled_[flagName]; |
| } |
| |
| private async fetch_(): Promise<void[]> { |
| const promises: Array<Promise<void>> = []; |
| for (const flag of Object.values(FlagName)) { |
| promises.push(new Promise(resolve => { |
| chrome.commandLinePrivate.hasSwitch(flag, result => { |
| this.enabled_[flag] = result; |
| resolve(); |
| }); |
| })); |
| } |
| return Promise.all(promises); |
| } |
| } |
| |
| TestImportManager.exportForTesting(Flags); |