// 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 Definitions for chrome.settingsPrivate API in Manifest V2 */
// This file exists because MV3 supports promises and MV2 does not.
// TODO(b/260590502): Delete this after MV3 migration.
// TODO(crbug.com/40179454): Auto-generate this file.
import {ChromeEvent} from '../../../../../../tools/typescript/definitions/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',
}
// Callback Types
type GetAllPrefsCallback = (prefs: PrefObject[]) => void;
type OnPrefSetCallback = (success: boolean) => void;
type GetPrefCallback = (pref: PrefObject) => void;
// 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(callback: GetAllPrefsCallback): void;
export function getPref(name: string, callback: GetPrefCallback): void;
export function setPref(
name: string, value: any, pageId?: string,
callback?: OnPrefSetCallback): void;
export function getDefaultZoom(callback: (arg: number) => void): void;
export function setDefaultZoom(
zoom: number, callback?: (arg: boolean) => void): void;
type PrefsCallback = (prefs: PrefObject[]) => void;
export const onPrefsChanged: ChromeEvent<PrefsCallback>;
}
}
}