// Copyright (c) 2012 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": "inputMethodPrivate",
    "compiler_options": {
      "implemented_in": "chrome/browser/chromeos/extensions/input_method_api.h"
    },
    "description": "none",
    "types": [
      {
        "id": "MenuItemStyle",
        "type": "string",
        "description": "The type of menu item. Radio buttons between separators are considered grouped.",
        "enum": ["check", "radio", "separator"]
      },
      {
        "id": "MenuItem",
        "type": "object",
        "description": "A menu item used by an input method to interact with the user from the language menu.",
        "properties": {
          "id": {"type": "string", "description": "String that will be passed to callbacks referencing this MenuItem."},
          "label": {"type": "string", "optional": true, "description": "Text displayed in the menu for this item."},
          "style": {
            "$ref": "MenuItemStyle",
            "optional": true,
            "description": "The type of menu item."
          },
          "visible": {"type": "boolean", "optional": true, "description": "Indicates this item is visible."},
          "checked": {"type": "boolean", "optional": true, "description": "Indicates this item should be drawn with a check."},
          "enabled": {"type": "boolean", "optional": true, "description": "Indicates this item is enabled."}
        }
      }
    ],
    "functions": [
      {
        "name": "getInputMethodConfig",
        "type": "function",
        "description": "Gets configurations for input methods.",
        "parameters": [
          {
            "name": "callback",
            "type": "function",
            "optional": false,
            "description": "Callback which is called with the config object.",
            "parameters": [
              {
                "name": "config",
                "type": "object",
                "description": "The input method config object.",
                "properties": {
                  "isPhysicalKeyboardAutocorrectEnabled": {"type": "boolean"},
                  "isImeMenuActivated": {"type": "boolean"}
                }
              }
            ]
          }
        ]
      }, {
        "name": "getInputMethods",
        "type": "function",
        "description": "Gets all whitelisted input methods.",
        "parameters": [
          {
            "name": "callback",
            "type": "function",
            "optional": false,
            "description": "Callback which is called with the input method objects.",
            "parameters": [
              {
                "name": "inputMethods",
                "type": "array",
                "description": "Whitelisted input method objects.",
                "items": {
                  "type": "object",
                  "properties": {
                    "id": {"type": "string"},
                    "name": {"type": "string"},
                    "indicator": {"type": "string"}
                  }
                }
              }
            ]
          }
        ]
      }, {
        "name": "getCurrentInputMethod",
        "type": "function",
        "description": "Gets the current input method.",
        "parameters": [
          {
            "name": "callback",
            "type": "function",
            "optional": false,
            "description": "Callback which is called with the current input method.",
            "parameters": [
              {
                "name": "inputMethodId",
                "type": "string",
                "description": "Current input method."
              }
            ]
          }
        ]
      }, {
        "name": "setCurrentInputMethod",
        "type": "function",
        "description": "Sets the current input method.",
        "parameters": [
          {
            "name": "inputMethodId",
            "type": "string",
            "optional": false,
            "description": "The input method ID to be set as current input method."
          },
          {
            "name": "callback",
            "type": "function",
            "optional": true,
            "description": "Callback which is called once the current input method is set. If unsuccessful $(ref:runtime.lastError) is set.",
            "parameters": []
          }
        ]
      }, {
        "name": "fetchAllDictionaryWords",
        "type": "function",
        "description": "Fetches a list of all the words currently in the dictionary.",
        "parameters": [
          {
            "name": "callback",
            "type": "function",
            "optional": false,
            "description": "Callback which is called once the list of dictionary words are ready.",
            "parameters": [
              {
                "name": "words",
                "type": "array",
                "description": "List of dictionary words.",
                "items": {
                  "type": "string"
                }
              }
            ]
          }
        ]
      }, {
        "name": "addWordToDictionary",
        "type": "function",
        "description": "Adds a single word to be stored in the dictionary.",
        "parameters": [
          {
            "name": "word",
            "type": "string",
            "optional": false,
            "description": "A new word to add to the dictionary."
          },
          {
            "name": "callback",
            "type": "function",
            "optional": true,
            "description": "Callback which is called once the word is added. If unsuccessful $(ref:runtime.lastError) is set.",
            "parameters": []
          }
        ]
      }, {
        "name": "getEncryptSyncEnabled",
        "type": "function",
        "description": "Gets whether the encrypt sync is enabled.",
        "parameters": [
          {
            "name": "callback",
            "type": "function",
            "optional": true,
            "description": "Callback which is called to provide the result.",
            "parameters": [
              {
                "name": "enabled",
                "type": "boolean",
                "optional": false,
                "description": "The result of whether enabled."
              }
            ]
          }
        ]
      }, {
        "name": "setXkbLayout",
        "type": "function",
        "description": "Sets the XKB layout for the given input method.",
        "parameters": [
          {
            "name": "xkb_name",
            "type": "string",
            "description": "The XKB layout name."
          },
          {
            "name": "callback",
            "type": "function",
            "optional": true,
            "description": "Callback which is called when the layout is set.",
            "parameters": []
          }
        ]
      }, {
        "name": "notifyImeMenuItemActivated",
        "type": "function",
        "description": "Fires the input.ime.onMenuItemActivated event.",
        "parameters": [
          {
            "name": "engineID",
            "type": "string",
            "description": "ID of the engine to use."
          },
          {
            "name": "name",
            "type": "string",
            "description": "Name of the MenuItem which was activated"
          }
        ]
      }, {
        "name": "showInputView",
        "type": "function",
        "description": "Shows the input view window. If the input view window is already shown, this function will do nothing.",
        "parameters": [
          {
            "type": "function",
            "name": "callback",
            "optional": true,
            "description": "Called when the operation completes.",
            "parameters": []
          }
        ]
      }
    ],
    "events": [
      {
        "name": "onChanged",
        "type": "function",
        "description": "Fired when the input method is changed.",
        "parameters": [
          {
            "name": "newInputMethodId",
            "type": "string",
            "description": "New input method which is being used."
          }
        ]
      }, {
        "name": "onCompositionBoundsChanged",
        "type": "function",
        "description": "Fired when the composition bounds or cursor bounds are changed.",
        "parameters": [
          {
            "name": "firstBounds",
            "type": "object",
            "description": "The bounds information for the first character in composition.",
            "properties": {
              "x": {"type": "integer"},
              "y": {"type": "integer"},
              "w": {"type": "integer"},
              "h": {"type": "integer"}
            }
          }, {
            "name": "boundsList",
            "type": "array",
            "description": "List of bounds information.",
            "items": {
              "type": "object",
              "properties": {
                "x": {"type": "integer"},
                "y": {"type": "integer"},
                "w": {"type": "integer"},
                "h": {"type": "integer"}
              }
            }
          }
        ]
      }, {
        "name": "onDictionaryLoaded",
        "type": "function",
        "description": "Fired when the custom spelling dictionary is loaded.",
        "parameters": []
      }, {
        "name": "onDictionaryChanged",
        "type": "function",
        "description": "Fired when words are added or removed from the custom spelling dictionary.",
        "parameters": [
          {
            "name": "added",
            "type": "array",
            "description": "List of added words.",
            "items": {
              "type": "string"
            }
          }, {
            "name": "removed",
            "type": "array",
            "description": "List of removed words.",
            "items": {
              "type": "string"
            }
          }
        ]
      }, {
        "name": "onImeMenuActivationChanged",
        "type": "function",
        "description": "Fired when the IME menu is activated or deactivated.",
        "parameters": [
          {
            "name": "activation",
            "type": "boolean",
            "description": "Whether the IME menu is currently active."
          }
        ]
      }, {
        "name": "onImeMenuListChanged",
        "type": "function",
        "description": "Fired when the input method or the list of active input method IDs is changed.",
        "parameters": []
      }, {
        "name": "onImeMenuItemsChanged",
        "type": "function",
        "description": "Fired when the input.ime.setMenuItems or input.ime.updateMenuItems API is called.",
        "parameters": [
          {
            "name": "engineID",
            "type": "string",
            "description": "ID of the engine to use"
          },
          {
            "name": "items",
            "type": "array",
            "items": {
              "$ref": "MenuItem"
            },
            "description": "MenuItems to add or update."
          }
        ]
      }
    ]
  }
]