// Copyright 2018 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.

// This file was generated by:
//   tools/json_schema_compiler/compiler.py.
// NOTE: The format of types has changed. 'FooType' is now
//   'chrome.quickUnlockPrivate.FooType'.
// Please run the closure compiler before committing changes.
// See https://chromium.googlesource.com/chromium/src/+/master/docs/closure_compilation.md

/** @fileoverview Externs generated from namespace: quickUnlockPrivate */

/**
 * @const
 */
chrome.quickUnlockPrivate = {};

/**
 * @typedef {{
 *   token: string,
 *   lifetimeSeconds: number
 * }}
 * @see https://developer.chrome.com/extensions/quickUnlockPrivate#type-TokenInfo
 */
chrome.quickUnlockPrivate.TokenInfo;

/**
 * @enum {string}
 * @see https://developer.chrome.com/extensions/quickUnlockPrivate#type-QuickUnlockMode
 */
chrome.quickUnlockPrivate.QuickUnlockMode = {
  PIN: 'PIN',
};

/**
 * @enum {string}
 * @see https://developer.chrome.com/extensions/quickUnlockPrivate#type-CredentialProblem
 */
chrome.quickUnlockPrivate.CredentialProblem = {
  TOO_SHORT: 'TOO_SHORT',
  TOO_LONG: 'TOO_LONG',
  TOO_WEAK: 'TOO_WEAK',
  CONTAINS_NONDIGIT: 'CONTAINS_NONDIGIT',
};

/**
 * @typedef {{
 *   errors: !Array<!chrome.quickUnlockPrivate.CredentialProblem>,
 *   warnings: !Array<!chrome.quickUnlockPrivate.CredentialProblem>
 * }}
 * @see https://developer.chrome.com/extensions/quickUnlockPrivate#type-CredentialCheck
 */
chrome.quickUnlockPrivate.CredentialCheck;

/**
 * @typedef {{
 *   minLength: number,
 *   maxLength: number
 * }}
 * @see https://developer.chrome.com/extensions/quickUnlockPrivate#type-CredentialRequirements
 */
chrome.quickUnlockPrivate.CredentialRequirements;

/**
 * Returns a token that can be used for future operations and the number of
 * seconds until the token expires.
 * @param {string} accountPassword The account password for the logged in user.
 * @param {function(!chrome.quickUnlockPrivate.TokenInfo):void} onComplete
 * @see https://developer.chrome.com/extensions/quickUnlockPrivate#method-getAuthToken
 */
chrome.quickUnlockPrivate.getAuthToken = function(accountPassword, onComplete) {};

/**
 * Sets the lock screen enabled state. NOTE: The lock enabled state is reflected
 * in the settings.enable_screen_lock pref, which can be read but not written
 * using the settings_private API (which also provides policy information). This
 * API must be used to change the pref.
 * @param {string} token The token returned by $(ref:getAuthToken).
 * @param {boolean} enabled
 * @param {function():void=} onComplete
 * @see https://developer.chrome.com/extensions/quickUnlockPrivate#method-setLockScreenEnabled
 */
chrome.quickUnlockPrivate.setLockScreenEnabled = function(token, enabled, onComplete) {};

/**
 * Returns the set of quick unlock modes that are available for the user to use.
 * Some quick unlock modes may be disabled by policy.
 * @param {function(!Array<!chrome.quickUnlockPrivate.QuickUnlockMode>):void}
 *     onComplete
 * @see https://developer.chrome.com/extensions/quickUnlockPrivate#method-getAvailableModes
 */
chrome.quickUnlockPrivate.getAvailableModes = function(onComplete) {};

/**
 * Returns the quick unlock modes that are currently enabled and usable on the
 * lock screen.
 * @param {function(!Array<!chrome.quickUnlockPrivate.QuickUnlockMode>):void}
 *     onComplete
 * @see https://developer.chrome.com/extensions/quickUnlockPrivate#method-getActiveModes
 */
chrome.quickUnlockPrivate.getActiveModes = function(onComplete) {};

/**
 * Checks if the given credential can be used for the given unlock mode.
 * Enterprise policy can change credential requirements.
 * @param {!chrome.quickUnlockPrivate.QuickUnlockMode} mode The quick unlock
 *     mode that is used.
 * @param {string} credential The given credential.
 * @param {function(!chrome.quickUnlockPrivate.CredentialCheck):void} onComplete
 *     Called with a list of warnings and errors the given     |credential| has
 *     (or an empty list if there are none).
 * @see https://developer.chrome.com/extensions/quickUnlockPrivate#method-checkCredential
 */
chrome.quickUnlockPrivate.checkCredential = function(mode, credential, onComplete) {};

/**
 * Gets the credential requirements for the given unlock mode.
 * @param {!chrome.quickUnlockPrivate.QuickUnlockMode} mode The quick unlock
 *     mode that is used.
 * @param {function(!chrome.quickUnlockPrivate.CredentialRequirements):void}
 *     onComplete Called with the credential requirements of the given
 *     |mode|.
 * @see https://developer.chrome.com/extensions/quickUnlockPrivate#method-getCredentialRequirements
 */
chrome.quickUnlockPrivate.getCredentialRequirements = function(mode, onComplete) {};

/**
 * Update the set of quick unlock modes that are currently active/enabled.
 * @param {string} token The token returned by $(ref:getAuthToken).
 * @param {!Array<!chrome.quickUnlockPrivate.QuickUnlockMode>} modes The quick
 *     unlock modes that should be active.
 * @param {!Array<string>} credentials The associated credential for each mode.
 *     To keep the     credential the same for the associated mode, pass an
 *     empty string.
 * @param {function():void} onComplete Called with true if the quick unlock
 *     state was updated,     false otherwise. The update is treated as a single
 *     atomic operation.
 * @see https://developer.chrome.com/extensions/quickUnlockPrivate#method-setModes
 */
chrome.quickUnlockPrivate.setModes = function(token, modes, credentials, onComplete) {};

/**
 * Called after the active set of quick unlock modes has changed.
 * @type {!ChromeEvent}
 * @see https://developer.chrome.com/extensions/quickUnlockPrivate#event-onActiveModesChanged
 */
chrome.quickUnlockPrivate.onActiveModesChanged;
