chromium/tools/typescript/definitions/settings_private.d.ts

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

/** @fileoverview Definitions for chrome.settingsPrivate API */
// TODO(crbug.com/40179454): Auto-generate this file.

import {ChromeEvent} from './chrome_event.js';

declare global {
  export namespace chrome {
    export namespace settingsPrivate {
      export enum PrefType {
        BOOLEAN = 'BOOLEAN',
        NUMBER = 'NUMBER',
        STRING = 'STRING',
        URL = 'URL',
        LIST = 'LIST',
        DICTIONARY = 'DICTIONARY',
      }

      export enum ControlledBy {
        DEVICE_POLICY = 'DEVICE_POLICY',
        USER_POLICY = 'USER_POLICY',
        OWNER = 'OWNER',
        PRIMARY_USER = 'PRIMARY_USER',
        EXTENSION = 'EXTENSION',
        PARENT = 'PARENT',
        CHILD_RESTRICTION = 'CHILD_RESTRICTION',
      }

      export enum Enforcement {
        ENFORCED = 'ENFORCED',
        RECOMMENDED = 'RECOMMENDED',
        PARENT_SUPERVISED = 'PARENT_SUPERVISED',
      }

      // TODO(crbug.com/40242259) Update existing usages of PrefObject to be
      // typed, removing the need to use any here.
      export interface PrefObject<T = any> {
        key: string;
        type:
            // clang-format off
            T extends boolean ? PrefType.BOOLEAN :
            T extends number ? PrefType.NUMBER :
            T extends string ? PrefType.STRING | PrefType.URL :
            T extends unknown[] ? PrefType.LIST :
            T extends Record<string|number, unknown> ? PrefType.DICTIONARY :
            never;
        // clang-format on
        value: T;
        controlledBy?: ControlledBy;
        controlledByName?: string;
        enforcement?: Enforcement;
        recommendedValue?: T;
        userSelectableValues?: T[];
        userControlDisabled?: boolean;
        extensionId?: string;
        extensionCanBeDisabled?: boolean;
      }


      export function getAllPrefs(): Promise<PrefObject[]>;
      export function getPref(name: string): Promise<PrefObject>;
      export function setPref(name: string, value: any, pageId?: string):
          Promise<boolean>;

      export function getDefaultZoom(): Promise<number>;
      export function setDefaultZoom(zoom: number): void;

      type PrefsCallback = (prefs: PrefObject[]) => void;

      export const onPrefsChanged: ChromeEvent<PrefsCallback>;
    }
  }
}