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

// Control and monitor the screen locker.
[permissions=screenlockPrivate, nodoc]
namespace screenlockPrivate {
  // Supported authentication types shown on the user pod.
  // |offlinePassword|: The standard password field, which authenticates using
  //                   the user's regular password. The $(ref:onAuthAttempted)()
  //                   event will not be fired for this authentication type.
  // |numericPin|: An input field for a 4 digit numeric pin code.
  // |userClick|: Makes the user pod clickable when it is focused, and
  //                 clicking on it attempts the authentication. If |value| is
  //                 specified with $(ref:setAuthType)(), the text is displayed
  //                 in the password field.
  enum AuthType {offlinePassword, numericPin, userClick};

  // Extension resource for a icon representation for a scale factor.
  dictionary IconRepresentation {
    // The scale factor the representation is for.
    double scaleFactor;
    // The image resource URL.
    DOMString url;
  };

  callback BooleanCallback = void(boolean locked);
  callback AuthTypeCallback = void(AuthType authType);

  interface Functions {
    // Returns true if the screen is currently locked, false otherwise.
    static void getLocked(BooleanCallback callback);

    // Set <code>locked=true</code> to lock the screen,
    // <code>locked=false</code> to unlock it.
    static void setLocked(boolean locked);

    // Show a message to the user on the unlock UI if the screen is locked.
    static void showMessage(DOMString message);

    // Show a custom icon beside the input field on the user pod.
    // |icon|: Extension resoucres for the icon's multi-scale representations.
    //     Currently, only scales 1 and 2 are supported. The list must have a
    //     resource for at least scale 1.
    static void showCustomIcon(IconRepresentation[] icon);

    // Hides the custom icon added by $(ref:showCustomIcon)().
    static void hideCustomIcon();

    // Returns the current auth type used for the user pod.
    static void getAuthType(AuthTypeCallback callback);

    // Set the type of the authentication for the user pod. The input field
    // area of the user pod below the user's portrait will be changed.
    // |authType|: The type of authentication to use.
    // |initialValue|: The initial value to populate the input field.
    static void setAuthType(AuthType authType, optional DOMString initialValue);

    // Accepts or rejects the current auth attempt.
    static void acceptAuthAttempt(boolean accept);
  };

  interface Events {
    // Fires whenever the screen is locked or unlocked.
    static void onChanged(boolean locked);

    // Fires when the user attempts to authenticate with the user's input.
    // There will be at most one auth attempt active at any time.
    // Call $(ref:acceptAuthAttempt)() to accept or reject this attempt.
    // Note: Some authentication types will not have an input.
    static void onAuthAttempted(AuthType type, DOMString input);
  };
};