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

[
  {
    "namespace": "virtualKeyboardPrivate",
    "compiler_options": {
      "implemented_in": "extensions/browser/api/virtual_keyboard_private/virtual_keyboard_private_api.h"
    },
    "platforms": ["chromeos"],
    "description": "none",
    "types": [
      {
        "id": "VirtualKeyboardEventType",
        "type": "string",
        "description": "One of keyup or keydown.",
        "enum": ["keyup", "keydown"]
      },
      {
        "id": "VirtualKeyboardEvent",
        "type": "object",
        "properties": {
          "type": {"$ref": "VirtualKeyboardEventType"},
          "charValue": {"type": "integer", "description": "Unicode value of the key."},
          "keyCode": {"type": "integer", "description": "Virtual key code, which is independent of the keyboard layout or modifier state."},
          "keyName": {"type": "string", "description": "Name of the key, which is independent of modifier state."},
          "modifiers": {"type": "integer", "optional": true, "description": "Flag for modifiers that are active. None = 0, Shift = 2, Control = 4, Alt = 8."}
        }
      },
      {
        "id": "KeyboardMode",
        "type": "string",
        "enum": [ "FULL_WIDTH", "FLOATING" ],
        "description": "The value of the virtual keyboard mode to set to."
      },
      {
        "id": "KeyboardState",
        "type": "string",
        "enum": [ "ENABLED", "DISABLED", "AUTO"],
        "description": "The value of the virtual keyboard state to change to."
      },
      {
        "id": "OnTextInputBoxFocusedType",
        "type": "string",
        "description": "The value of type attribute of the focused text input box.",
        "enum": ["text", "number", "password", "date", "url", "tel", "email"]
      },
      {
        "id": "Bounds",
        "type": "object",
        "properties": {
          "left": {"type": "integer", "description": "The position of the virtual keyboard window's left edge."},
          "top": {"type": "integer", "description": "The position of the virtual keyboard window's top edge."},
          "width": {"type": "integer", "description": "The width of the virtual keyboard window."},
          "height": {"type": "integer", "description": "The height of the virtual keyboard window."}
        }
      }
    ],
    "functions": [
      {
        "name": "insertText",
        "type": "function",
        "description": "Inserts text into the currently focused text field.",
        "parameters": [
          { "name": "text",
            "type": "string",
            "description": "The text that will be inserted."
          },
          { "type": "function",
            "name": "callback",
            "optional": true,
            "description": "Called when the insertion is completed.",
            "parameters": []
          }
        ]
      },
      {
        "name": "sendKeyEvent",
        "type": "function",
        "description": "Sends a fabricated key event to the focused input field.",
        "parameters": [
          { "name": "keyEvent",
            "$ref": "VirtualKeyboardEvent",
            "description": ""
          },
          { "name": "callback",
            "type": "function",
            "optional": true,
            "description": "Called after processing the event.",
            "parameters": []
          }
        ]
      },
      {
        "name": "hideKeyboard",
        "type": "function",
        "description": "Hides the virtual keyboard.",
        "parameters": [
          { "type": "function",
            "name": "callback",
            "optional": true,
            "description": "Called when the keyboard is hidden.",
            "parameters": []
          }
        ]
      },
      {
        "name": "setHotrodKeyboard",
        "type": "function",
        "description": "Sets the state of the hotrod virtual keyboard. This API should only be used by hotrod.",
        "parameters": [
          {
            "type": "boolean",
            "name": "enable"
          }
        ]
      },
      {
        "name": "lockKeyboard",
        "type": "function",
        "description": "Sets the lock state of the virtual keyboard. A locked keyboard remains visible even after a text area loses input focus.",
        "parameters": [
          {
            "type": "boolean",
            "name": "lock"
          }
        ]
      },
      {
        "name": "keyboardLoaded",
        "type": "function",
        "description": "Inform the system that the keyboard has loaded.",
        "parameters": [
          { "type": "function",
            "name": "callback",
            "optional": true,
            "description": "Called when load acknowledgement is complete.",
            "parameters": []
          }
        ]
      },
      {
        "name": "getKeyboardConfig",
        "type": "function",
        "description": "Gets the virtual keyboard configuration.",
        "parameters": [
          {
            "type": "function",
            "name": "callback",
            "optional": true,
            "description": "Called when querying virtual keyboard configuration is complete.",
            "parameters": [
              {
                "type": "object",
                "name": "config",
                "properties": {
                  "layout": {
                    "type": "string",
                    "minLength": 1,
                    "description": "Virtual keyboard layout string."
                  },
                  "hotrodmode": {
                    "type": "boolean",
                    "description": "Virtual keyboard is in hotrod mode."
                  },
                  "a11ymode": {
                    "type": "boolean",
                    "description": "True if accessibility virtual keyboard is enabled."
                  },
                  "features": {
                    "type": "array",
                    "items": { "type": "string" },
                    "description": "List of experimental feature flags."
                  }
                }
              }
            ]
          }
        ]
      },
      {
        "name": "openSettings",
        "type": "function",
        "description": "Opens chrome://settings/languages page.",
        "parameters": [
        ]
      },
      {
        "name": "setMode",
        "type": "function",
        "description": "Sets the virtual keyboard mode.",
        "parameters": [
          {
            "$ref": "KeyboardMode",
            "name": "mode",
            "description": "The value of the virtual keyboard mode to set to."
          }
        ]
      },
      {
        "name": "setKeyboardState",
        "type": "function",
        "description": "Requests the virtual keyboard to change state.",
        "parameters": [
          {
            "$ref": "KeyboardState",
            "name": "state",
            "description": "The value of the virtual keyboard state to change to."
          }
        ]
      }

    ],
    "events": [
      {
        "name": "onTextInputBoxFocused",
        "type": "function",
        "description": "This event is sent when focus enters a text input box.",
        "parameters": [
          {
            "type": "object",
            "name": "context",
            "description": "Describes the text input box that has acquired focus. Note only the type of text input box is passed. This API is intended to be used by non-ime virtual keyboard only. Normal ime virtual keyboard should use chrome.input.ime.onFocus to get the more detailed InputContext.",
            "properties": {
              "type": {
                "$ref": "OnTextInputBoxFocusedType",
                "description": "The value of type attribute of the focused text input box."
              }
            }
          }
        ]
      },
      {
        "name": "onBoundsChanged",
        "type": "function",
        "description": "This event is sent when virtual keyboard bounds changed and overscroll/resize is enabled.",
        "parameters": [
          {
            "name": "bounds",
            "description": "The virtual keyboard bounds",
            "$ref": "Bounds"
          }
        ]
      },
      {
        "name": "onKeyboardClosed",
        "type": "function",
        "description": "Fired when the virtual keyboard window has been closed. For example, this can happen when turning off on-screen keyboard or exiting tablet mode."
      }
    ]
  }
]
