// 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.automation.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: automation */

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

/**
 * @enum {string}
 * @see https://developer.chrome.com/extensions/automation#type-EventType
 */
chrome.automation.EventType = {
  ACTIVEDESCENDANTCHANGED: 'activedescendantchanged',
  ALERT: 'alert',
  ARIA_ATTRIBUTE_CHANGED: 'ariaAttributeChanged',
  AUTOCORRECTION_OCCURED: 'autocorrectionOccured',
  BLUR: 'blur',
  CHECKED_STATE_CHANGED: 'checkedStateChanged',
  CHILDREN_CHANGED: 'childrenChanged',
  CLICKED: 'clicked',
  DOCUMENT_SELECTION_CHANGED: 'documentSelectionChanged',
  EXPANDED_CHANGED: 'expandedChanged',
  FOCUS: 'focus',
  FOCUS_CONTEXT: 'focusContext',
  IMAGE_FRAME_UPDATED: 'imageFrameUpdated',
  HIDE: 'hide',
  HIT_TEST_RESULT: 'hitTestResult',
  HOVER: 'hover',
  INVALID_STATUS_CHANGED: 'invalidStatusChanged',
  LAYOUT_COMPLETE: 'layoutComplete',
  LIVE_REGION_CREATED: 'liveRegionCreated',
  LIVE_REGION_CHANGED: 'liveRegionChanged',
  LOAD_COMPLETE: 'loadComplete',
  LOCATION_CHANGED: 'locationChanged',
  MEDIA_STARTED_PLAYING: 'mediaStartedPlaying',
  MEDIA_STOPPED_PLAYING: 'mediaStoppedPlaying',
  MENU_END: 'menuEnd',
  MENU_LIST_ITEM_SELECTED: 'menuListItemSelected',
  MENU_LIST_VALUE_CHANGED: 'menuListValueChanged',
  MENU_POPUP_END: 'menuPopupEnd',
  MENU_POPUP_START: 'menuPopupStart',
  MENU_START: 'menuStart',
  MOUSE_CANCELED: 'mouseCanceled',
  MOUSE_DRAGGED: 'mouseDragged',
  MOUSE_MOVED: 'mouseMoved',
  MOUSE_PRESSED: 'mousePressed',
  MOUSE_RELEASED: 'mouseReleased',
  ROW_COLLAPSED: 'rowCollapsed',
  ROW_COUNT_CHANGED: 'rowCountChanged',
  ROW_EXPANDED: 'rowExpanded',
  SCROLL_POSITION_CHANGED: 'scrollPositionChanged',
  SCROLLED_TO_ANCHOR: 'scrolledToAnchor',
  SELECTED_CHILDREN_CHANGED: 'selectedChildrenChanged',
  SELECTION: 'selection',
  SELECTION_ADD: 'selectionAdd',
  SELECTION_REMOVE: 'selectionRemove',
  SHOW: 'show',
  STATE_CHANGED: 'stateChanged',
  TEXT_CHANGED: 'textChanged',
  TEXT_SELECTION_CHANGED: 'textSelectionChanged',
  TREE_CHANGED: 'treeChanged',
  VALUE_CHANGED: 'valueChanged',
};

/**
 * @enum {string}
 * @see https://developer.chrome.com/extensions/automation#type-RoleType
 */
chrome.automation.RoleType = {
  ABBR: 'abbr',
  ALERT: 'alert',
  ALERT_DIALOG: 'alertDialog',
  ANCHOR: 'anchor',
  ANNOTATION: 'annotation',
  APPLICATION: 'application',
  ARTICLE: 'article',
  AUDIO: 'audio',
  BANNER: 'banner',
  BLOCKQUOTE: 'blockquote',
  BUTTON: 'button',
  CANVAS: 'canvas',
  CAPTION: 'caption',
  CARET: 'caret',
  CELL: 'cell',
  CHECK_BOX: 'checkBox',
  CLIENT: 'client',
  COLOR_WELL: 'colorWell',
  COLUMN: 'column',
  COLUMN_HEADER: 'columnHeader',
  COMBO_BOX_GROUPING: 'comboBoxGrouping',
  COMBO_BOX_MENU_BUTTON: 'comboBoxMenuButton',
  COMPLEMENTARY: 'complementary',
  CONTENT_DELETION: 'contentDeletion',
  CONTENT_INSERTION: 'contentInsertion',
  CONTENT_INFO: 'contentInfo',
  DATE: 'date',
  DATE_TIME: 'dateTime',
  DEFINITION: 'definition',
  DESCRIPTION_LIST: 'descriptionList',
  DESCRIPTION_LIST_DETAIL: 'descriptionListDetail',
  DESCRIPTION_LIST_TERM: 'descriptionListTerm',
  DESKTOP: 'desktop',
  DETAILS: 'details',
  DIALOG: 'dialog',
  DIRECTORY: 'directory',
  DISCLOSURE_TRIANGLE: 'disclosureTriangle',
  DOC_ABSTRACT: 'docAbstract',
  DOC_ACKNOWLEDGMENTS: 'docAcknowledgments',
  DOC_AFTERWORD: 'docAfterword',
  DOC_APPENDIX: 'docAppendix',
  DOC_BACK_LINK: 'docBackLink',
  DOC_BIBLIO_ENTRY: 'docBiblioEntry',
  DOC_BIBLIOGRAPHY: 'docBibliography',
  DOC_BIBLIO_REF: 'docBiblioRef',
  DOC_CHAPTER: 'docChapter',
  DOC_COLOPHON: 'docColophon',
  DOC_CONCLUSION: 'docConclusion',
  DOC_COVER: 'docCover',
  DOC_CREDIT: 'docCredit',
  DOC_CREDITS: 'docCredits',
  DOC_DEDICATION: 'docDedication',
  DOC_ENDNOTE: 'docEndnote',
  DOC_ENDNOTES: 'docEndnotes',
  DOC_EPIGRAPH: 'docEpigraph',
  DOC_EPILOGUE: 'docEpilogue',
  DOC_ERRATA: 'docErrata',
  DOC_EXAMPLE: 'docExample',
  DOC_FOOTNOTE: 'docFootnote',
  DOC_FOREWORD: 'docForeword',
  DOC_GLOSSARY: 'docGlossary',
  DOC_GLOSS_REF: 'docGlossRef',
  DOC_INDEX: 'docIndex',
  DOC_INTRODUCTION: 'docIntroduction',
  DOC_NOTE_REF: 'docNoteRef',
  DOC_NOTICE: 'docNotice',
  DOC_PAGE_BREAK: 'docPageBreak',
  DOC_PAGE_LIST: 'docPageList',
  DOC_PART: 'docPart',
  DOC_PREFACE: 'docPreface',
  DOC_PROLOGUE: 'docPrologue',
  DOC_PULLQUOTE: 'docPullquote',
  DOC_QNA: 'docQna',
  DOC_SUBTITLE: 'docSubtitle',
  DOC_TIP: 'docTip',
  DOC_TOC: 'docToc',
  DOCUMENT: 'document',
  EMBEDDED_OBJECT: 'embeddedObject',
  FEED: 'feed',
  FIGCAPTION: 'figcaption',
  FIGURE: 'figure',
  FOOTER: 'footer',
  FORM: 'form',
  GENERIC_CONTAINER: 'genericContainer',
  GRAPHICS_DOCUMENT: 'graphicsDocument',
  GRAPHICS_OBJECT: 'graphicsObject',
  GRAPHICS_SYMBOL: 'graphicsSymbol',
  GRID: 'grid',
  GROUP: 'group',
  HEADING: 'heading',
  IFRAME: 'iframe',
  IFRAME_PRESENTATIONAL: 'iframePresentational',
  IGNORED: 'ignored',
  IMAGE: 'image',
  IMAGE_MAP: 'imageMap',
  INLINE_TEXT_BOX: 'inlineTextBox',
  INPUT_TIME: 'inputTime',
  LABEL_TEXT: 'labelText',
  LAYOUT_TABLE: 'layoutTable',
  LAYOUT_TABLE_CELL: 'layoutTableCell',
  LAYOUT_TABLE_COLUMN: 'layoutTableColumn',
  LAYOUT_TABLE_ROW: 'layoutTableRow',
  LEGEND: 'legend',
  LINE_BREAK: 'lineBreak',
  LINK: 'link',
  LIST: 'list',
  LIST_BOX: 'listBox',
  LIST_BOX_OPTION: 'listBoxOption',
  LIST_ITEM: 'listItem',
  LIST_MARKER: 'listMarker',
  LOCATION_BAR: 'locationBar',
  LOG: 'log',
  MAIN: 'main',
  MARK: 'mark',
  MARQUEE: 'marquee',
  MATH: 'math',
  MENU: 'menu',
  MENU_BAR: 'menuBar',
  MENU_BUTTON: 'menuButton',
  MENU_ITEM: 'menuItem',
  MENU_ITEM_CHECK_BOX: 'menuItemCheckBox',
  MENU_ITEM_RADIO: 'menuItemRadio',
  MENU_LIST_OPTION: 'menuListOption',
  MENU_LIST_POPUP: 'menuListPopup',
  METER: 'meter',
  NAVIGATION: 'navigation',
  NOTE: 'note',
  PANE: 'pane',
  PARAGRAPH: 'paragraph',
  POP_UP_BUTTON: 'popUpButton',
  PRE: 'pre',
  PRESENTATIONAL: 'presentational',
  PROGRESS_INDICATOR: 'progressIndicator',
  RADIO_BUTTON: 'radioButton',
  RADIO_GROUP: 'radioGroup',
  REGION: 'region',
  ROOT_WEB_AREA: 'rootWebArea',
  ROW: 'row',
  ROW_HEADER: 'rowHeader',
  RUBY: 'ruby',
  SCROLL_BAR: 'scrollBar',
  SCROLL_VIEW: 'scrollView',
  SEARCH: 'search',
  SEARCH_BOX: 'searchBox',
  SLIDER: 'slider',
  SLIDER_THUMB: 'sliderThumb',
  SPIN_BUTTON: 'spinButton',
  SPLITTER: 'splitter',
  STATIC_TEXT: 'staticText',
  STATUS: 'status',
  SVG_ROOT: 'svgRoot',
  SWITCH: 'switch',
  TAB: 'tab',
  TAB_LIST: 'tabList',
  TAB_PANEL: 'tabPanel',
  TABLE: 'table',
  TABLE_HEADER_CONTAINER: 'tableHeaderContainer',
  TERM: 'term',
  TEXT_FIELD: 'textField',
  TEXT_FIELD_WITH_COMBO_BOX: 'textFieldWithComboBox',
  TIME: 'time',
  TIMER: 'timer',
  TITLE_BAR: 'titleBar',
  TOGGLE_BUTTON: 'toggleButton',
  TOOLBAR: 'toolbar',
  TOOLTIP: 'tooltip',
  TREE: 'tree',
  TREE_GRID: 'treeGrid',
  TREE_ITEM: 'treeItem',
  UNKNOWN: 'unknown',
  VIDEO: 'video',
  WEB_AREA: 'webArea',
  WEB_VIEW: 'webView',
  WINDOW: 'window',
};

/**
 * @enum {string}
 * @see https://developer.chrome.com/extensions/automation#type-StateType
 */
chrome.automation.StateType = {
  COLLAPSED: 'collapsed',
  DEFAULT: 'default',
  EDITABLE: 'editable',
  EXPANDED: 'expanded',
  FOCUSABLE: 'focusable',
  FOCUSED: 'focused',
  HORIZONTAL: 'horizontal',
  HOVERED: 'hovered',
  IGNORED: 'ignored',
  INVISIBLE: 'invisible',
  LINKED: 'linked',
  MULTILINE: 'multiline',
  MULTISELECTABLE: 'multiselectable',
  OFFSCREEN: 'offscreen',
  PROTECTED: 'protected',
  REQUIRED: 'required',
  RICHLY_EDITABLE: 'richlyEditable',
  VERTICAL: 'vertical',
  VISITED: 'visited',
};

/**
 * @enum {string}
 * @see https://developer.chrome.com/extensions/automation#type-ActionType
 */
chrome.automation.ActionType = {
  BLUR: 'blur',
  CLEAR_ACCESSIBILITY_FOCUS: 'clearAccessibilityFocus',
  CUSTOM_ACTION: 'customAction',
  DECREMENT: 'decrement',
  DO_DEFAULT: 'doDefault',
  FOCUS: 'focus',
  GET_IMAGE_DATA: 'getImageData',
  HIT_TEST: 'hitTest',
  INCREMENT: 'increment',
  LOAD_INLINE_TEXT_BOXES: 'loadInlineTextBoxes',
  REPLACE_SELECTED_TEXT: 'replaceSelectedText',
  SCROLL_BACKWARD: 'scrollBackward',
  SCROLL_DOWN: 'scrollDown',
  SCROLL_FORWARD: 'scrollForward',
  SCROLL_LEFT: 'scrollLeft',
  SCROLL_RIGHT: 'scrollRight',
  SCROLL_TO_MAKE_VISIBLE: 'scrollToMakeVisible',
  SCROLL_TO_POINT: 'scrollToPoint',
  SCROLL_UP: 'scrollUp',
  SET_ACCESSIBILITY_FOCUS: 'setAccessibilityFocus',
  SET_SCROLL_OFFSET: 'setScrollOffset',
  SET_SELECTION: 'setSelection',
  SET_SEQUENTIAL_FOCUS_NAVIGATION_STARTING_POINT: 'setSequentialFocusNavigationStartingPoint',
  SET_VALUE: 'setValue',
  SHOW_CONTEXT_MENU: 'showContextMenu',
};

/**
 * @enum {string}
 * @see https://developer.chrome.com/extensions/automation#type-TreeChangeType
 */
chrome.automation.TreeChangeType = {
  NODE_CREATED: 'nodeCreated',
  SUBTREE_CREATED: 'subtreeCreated',
  NODE_CHANGED: 'nodeChanged',
  TEXT_CHANGED: 'textChanged',
  NODE_REMOVED: 'nodeRemoved',
  SUBTREE_UPDATE_END: 'subtreeUpdateEnd',
};

/**
 * @enum {string}
 * @see https://developer.chrome.com/extensions/automation#type-NameFromType
 */
chrome.automation.NameFromType = {
  UNINITIALIZED: 'uninitialized',
  ATTRIBUTE: 'attribute',
  ATTRIBUTE_EXPLICITLY_EMPTY: 'attributeExplicitlyEmpty',
  CONTENTS: 'contents',
  PLACEHOLDER: 'placeholder',
  RELATED_ELEMENT: 'relatedElement',
  VALUE: 'value',
};

/**
 * @enum {string}
 * @see https://developer.chrome.com/extensions/automation#type-Restriction
 */
chrome.automation.Restriction = {
  DISABLED: 'disabled',
  READ_ONLY: 'readOnly',
};

/**
 * @enum {string}
 * @see https://developer.chrome.com/extensions/automation#type-HasPopup
 */
chrome.automation.HasPopup = {
  TRUE: 'true',
  MENU: 'menu',
  LISTBOX: 'listbox',
  TREE: 'tree',
  GRID: 'grid',
  DIALOG: 'dialog',
};

/**
 * @enum {string}
 * @see https://developer.chrome.com/extensions/automation#type-DefaultActionVerb
 */
chrome.automation.DefaultActionVerb = {
  ACTIVATE: 'activate',
  CHECK: 'check',
  CLICK: 'click',
  CLICK_ANCESTOR: 'clickAncestor',
  JUMP: 'jump',
  OPEN: 'open',
  PRESS: 'press',
  SELECT: 'select',
  UNCHECK: 'uncheck',
};

/**
 * @typedef {{
 *   left: number,
 *   top: number,
 *   width: number,
 *   height: number
 * }}
 * @see https://developer.chrome.com/extensions/automation#type-Rect
 */
chrome.automation.Rect;

/**
 * @typedef {{
 *   role: (!chrome.automation.RoleType|undefined),
 *   state: (Object|undefined),
 *   attributes: (Object|undefined)
 * }}
 * @see https://developer.chrome.com/extensions/automation#type-FindParams
 */
chrome.automation.FindParams;

/**
 * @typedef {{
 *   anchorObject: Object,
 *   anchorOffset: number,
 *   focusObject: Object,
 *   focusOffset: number
 * }}
 * @see https://developer.chrome.com/extensions/automation#type-SetDocumentSelectionParams
 */
chrome.automation.SetDocumentSelectionParams;

/**
 * @constructor
 * @private
 * @see https://developer.chrome.com/extensions/automation#type-AutomationEvent
 */
chrome.automation.AutomationEvent = function() {};

/**
 * The $(ref:automation.AutomationNode) to which the event was targeted.
 * @type {!chrome.automation.AutomationNode}
 * @see https://developer.chrome.com/extensions/automation#type-target
 */
chrome.automation.AutomationEvent.prototype.target;

/**
 * The type of the event.
 * @type {!chrome.automation.EventType}
 * @see https://developer.chrome.com/extensions/automation#type-type
 */
chrome.automation.AutomationEvent.prototype.type;

/**
 * The source of this event.
 * @type {string}
 * @see https://developer.chrome.com/extensions/automation#type-eventFrom
 */
chrome.automation.AutomationEvent.prototype.eventFrom;

/**
 * @type {number}
 * @see https://developer.chrome.com/extensions/automation#type-mouseX
 */
chrome.automation.AutomationEvent.prototype.mouseX;

/**
 * @type {number}
 * @see https://developer.chrome.com/extensions/automation#type-mouseY
 */
chrome.automation.AutomationEvent.prototype.mouseY;

/**
 * Stops this event from further processing except for any remaining listeners
 * on $(ref:AutomationEvent.target).
 * @see https://developer.chrome.com/extensions/automation#method-stopPropagation
 */
chrome.automation.AutomationEvent.prototype.stopPropagation = function() {};


/**
 * @typedef {{
 *   target: !chrome.automation.AutomationNode,
 *   type: !chrome.automation.TreeChangeType
 * }}
 * @see https://developer.chrome.com/extensions/automation#type-TreeChange
 */
chrome.automation.TreeChange;

/**
 * @enum {string}
 * @see https://developer.chrome.com/extensions/automation#type-TreeChangeObserverFilter
 */
chrome.automation.TreeChangeObserverFilter = {
  NO_TREE_CHANGES: 'noTreeChanges',
  LIVE_REGION_TREE_CHANGES: 'liveRegionTreeChanges',
  TEXT_MARKER_CHANGES: 'textMarkerChanges',
  ALL_TREE_CHANGES: 'allTreeChanges',
};

/**
 * @typedef {{
 *   id: number,
 *   description: string
 * }}
 * @see https://developer.chrome.com/extensions/automation#type-CustomAction
 */
chrome.automation.CustomAction;

/**
 * @constructor
 * @private
 * @see https://developer.chrome.com/extensions/automation#type-AutomationNode
 */
chrome.automation.AutomationNode = function() {};

/**
 * The root node of the tree containing this AutomationNode.
 * @type {(!chrome.automation.AutomationNode|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-root
 */
chrome.automation.AutomationNode.prototype.root;

/**
 * Whether this AutomationNode is a root node.
 * @type {boolean}
 * @see https://developer.chrome.com/extensions/automation#type-isRootNode
 */
chrome.automation.AutomationNode.prototype.isRootNode;

/**
 * The role of this node.
 * @type {(!chrome.automation.RoleType|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-role
 */
chrome.automation.AutomationNode.prototype.role;

/**
 * The $(ref:automation.StateType)s describing this node.
 * @type {Object<chrome.automation.StateType, boolean>}
 * @see https://developer.chrome.com/extensions/automation#type-state
 */
chrome.automation.AutomationNode.prototype.state;

/**
 * The rendered location (as a bounding box) of this node in global screen coordinates.
 * @type {(!chrome.automation.Rect|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-location
 */
chrome.automation.AutomationNode.prototype.location;

/**
 * Computes the bounding box of a subrange of this node in global screen
 * coordinates. Returns the same as |location| if range information is not
 * available. The start and end indices are zero-based offsets into the node's
 * "name" string attribute.
 * @param {number} startIndex
 * @param {number} endIndex
 * @return {!chrome.automation.Rect}
 * @see https://developer.chrome.com/extensions/automation#method-boundsForRange
 */
chrome.automation.AutomationNode.prototype.boundsForRange = function(startIndex, endIndex) {};

/**
 * The location (as a bounding box) of this node in global screen coordinates without applying any clipping from ancestors.
 * @type {(!chrome.automation.Rect|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-unclippedLocation
 */
chrome.automation.AutomationNode.prototype.unclippedLocation;

/**
 * The purpose of the node, other than the role, if any.
 * @type {(string|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-description
 */
chrome.automation.AutomationNode.prototype.description;

/**
 * The placeholder for this text field, if any.
 * @type {(string|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-placeholder
 */
chrome.automation.AutomationNode.prototype.placeholder;

/**
 * The role description for this node.
 * @type {(string|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-roleDescription
 */
chrome.automation.AutomationNode.prototype.roleDescription;

/**
 * The accessible name for this node, via the <a href="http://www.w3.org/TR/wai-aria/roles#namecalculation"> Accessible Name Calculation</a> process.
 * @type {(string|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-name
 */
chrome.automation.AutomationNode.prototype.name;

/**
 * The source of the name.
 * @type {(!chrome.automation.NameFromType|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-nameFrom
 */
chrome.automation.AutomationNode.prototype.nameFrom;

/**
 * The value for this node: for example the <code>value</code> attribute of an <code>&lt;input&gt; element.
 * @type {(string|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-value
 */
chrome.automation.AutomationNode.prototype.value;

/**
 * The HTML tag for this element, if this node is an HTML element.
 * @type {(string|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-htmlTag
 */
chrome.automation.AutomationNode.prototype.htmlTag;

/**
 * The level of a heading or tree item.
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-hierarchicalLevel
 */
chrome.automation.AutomationNode.prototype.hierarchicalLevel;

/**
 * The start and end index of each word in an inline text box.
 * @type {(!Array<number>|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-wordStarts
 */
chrome.automation.AutomationNode.prototype.wordStarts;

/**
 * @type {(!Array<number>|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-wordEnds
 */
chrome.automation.AutomationNode.prototype.wordEnds;

/**
 * The nodes, if any, which this node is specified to control via <a href="http://www.w3.org/TR/wai-aria/states_and_properties#aria-controls"> <code>aria-controls</code></a>.
 * @type {(!Array<!chrome.automation.AutomationNode>|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-controls
 */
chrome.automation.AutomationNode.prototype.controls;

/**
 * The nodes, if any, which form a description for this node.
 * @type {(!Array<!chrome.automation.AutomationNode>|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-describedBy
 */
chrome.automation.AutomationNode.prototype.describedBy;

/**
 * The nodes, if any, which may optionally be navigated to after this one. See <a href="http://www.w3.org/TR/wai-aria/states_and_properties#aria-flowto"> <code>aria-flowto</code></a>.
 * @type {(!Array<!chrome.automation.AutomationNode>|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-flowTo
 */
chrome.automation.AutomationNode.prototype.flowTo;

/**
 * The nodes, if any, which form a label for this element. Generally, the text from these elements will also be exposed as the element's accessible name, via the $(ref:automation.AutomationNode.name) attribute.
 * @type {(!Array<!chrome.automation.AutomationNode>|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-labelledBy
 */
chrome.automation.AutomationNode.prototype.labelledBy;

/**
 * The node referred to by <code>aria-activedescendant</code>, where applicable
 * @type {(!chrome.automation.AutomationNode|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-activeDescendant
 */
chrome.automation.AutomationNode.prototype.activeDescendant;

/**
 * The target of an in-page link.
 * @type {(!chrome.automation.AutomationNode|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-inPageLinkTarget
 */
chrome.automation.AutomationNode.prototype.inPageLinkTarget;

/**
 * A node that provides more details about the current node.
 * @type {(!chrome.automation.AutomationNode|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-details
 */
chrome.automation.AutomationNode.prototype.details;

/**
 * A node that provides an error message for a current node.
 * @type {(!chrome.automation.AutomationNode|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-errorMessage
 */
chrome.automation.AutomationNode.prototype.errorMessage;

/**
 * Reverse relationship for details.
 * @type {(!Array<!chrome.automation.AutomationNode>|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-detailsFor
 */
chrome.automation.AutomationNode.prototype.detailsFor;

/**
 * Reverse relationship for errorMessage.
 * @type {(!Array<!chrome.automation.AutomationNode>|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-errorMessageFor
 */
chrome.automation.AutomationNode.prototype.errorMessageFor;

/**
 * Reverse relationship for controls.
 * @type {(!Array<!chrome.automation.AutomationNode>|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-controlledBy
 */
chrome.automation.AutomationNode.prototype.controlledBy;

/**
 * Reverse relationship for describedBy.
 * @type {(!Array<!chrome.automation.AutomationNode>|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-descriptionFor
 */
chrome.automation.AutomationNode.prototype.descriptionFor;

/**
 * Reverse relationship for flowTo.
 * @type {(!Array<!chrome.automation.AutomationNode>|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-flowFrom
 */
chrome.automation.AutomationNode.prototype.flowFrom;

/**
 * Reverse relationship for labelledBy.
 * @type {(!Array<!chrome.automation.AutomationNode>|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-labelFor
 */
chrome.automation.AutomationNode.prototype.labelFor;

/**
 * An array of standard actions available on this node.
 * @type {(!Array<!chrome.automation.ActionType>|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-standardActions
 */
chrome.automation.AutomationNode.prototype.standardActions;

/**
 * An array of custom actions.
 * @type {(!Array<!chrome.automation.CustomAction>|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-customActions
 */
chrome.automation.AutomationNode.prototype.customActions;

/**
 * The action taken by calling <code>doDefault</code>.
 * @type {(!chrome.automation.DefaultActionVerb|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-defaultActionVerb
 */
chrome.automation.AutomationNode.prototype.defaultActionVerb;

/**
 * The URL that this link will navigate to.
 * @type {(string|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-url
 */
chrome.automation.AutomationNode.prototype.url;

/**
 * The URL of this document.
 * @type {(string|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-docUrl
 */
chrome.automation.AutomationNode.prototype.docUrl;

/**
 * The title of this document.
 * @type {(string|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-docTitle
 */
chrome.automation.AutomationNode.prototype.docTitle;

/**
 * Whether this document has finished loading.
 * @type {(boolean|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-docLoaded
 */
chrome.automation.AutomationNode.prototype.docLoaded;

/**
 * The proportion (out of 1.0) that this doc has completed loading.
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-docLoadingProgress
 */
chrome.automation.AutomationNode.prototype.docLoadingProgress;

/**
 * Scrollable container attributes.
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-scrollX
 */
chrome.automation.AutomationNode.prototype.scrollX;

/**
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-scrollXMin
 */
chrome.automation.AutomationNode.prototype.scrollXMin;

/**
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-scrollXMax
 */
chrome.automation.AutomationNode.prototype.scrollXMax;

/**
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-scrollY
 */
chrome.automation.AutomationNode.prototype.scrollY;

/**
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-scrollYMin
 */
chrome.automation.AutomationNode.prototype.scrollYMin;

/**
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-scrollYMax
 */
chrome.automation.AutomationNode.prototype.scrollYMax;

/**
 * The character index of the start of the selection within this editable text element; -1 if no selection.
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-textSelStart
 */
chrome.automation.AutomationNode.prototype.textSelStart;

/**
 * The character index of the end of the selection within this editable text element; -1 if no selection.
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-textSelEnd
 */
chrome.automation.AutomationNode.prototype.textSelEnd;

/**
 * The input type, like email or number.
 * @type {(string|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-textInputType
 */
chrome.automation.AutomationNode.prototype.textInputType;

/**
 * An array of indexes of the break between lines in editable text.
 * @type {!Array<number>}
 * @see https://developer.chrome.com/extensions/automation#type-lineBreaks
 */
chrome.automation.AutomationNode.prototype.lineBreaks;

/**
 * An array of indexes of the start position of each text marker.
 * @type {!Array<number>}
 * @see https://developer.chrome.com/extensions/automation#type-markerStarts
 */
chrome.automation.AutomationNode.prototype.markerStarts;

/**
 * An array of indexes of the end position of each text marker.
 * @type {!Array<number>}
 * @see https://developer.chrome.com/extensions/automation#type-markerEnds
 */
chrome.automation.AutomationNode.prototype.markerEnds;

/**
 * An array of numerical types indicating the type of each text marker, such as a spelling error.
 * @type {!Array<number>}
 * @see https://developer.chrome.com/extensions/automation#type-markerTypes
 */
chrome.automation.AutomationNode.prototype.markerTypes;

/**
 * The anchor node of the tree selection, if any.
 * @type {(!chrome.automation.AutomationNode|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-anchorObject
 */
chrome.automation.AutomationNode.prototype.anchorObject;

/**
 * The anchor offset of the tree selection, if any.
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-anchorOffset
 */
chrome.automation.AutomationNode.prototype.anchorOffset;

/**
 * The affinity of the tree selection anchor, if any.
 * @type {(string|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-anchorAffinity
 */
chrome.automation.AutomationNode.prototype.anchorAffinity;

/**
 * The focus node of the tree selection, if any.
 * @type {(!chrome.automation.AutomationNode|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-focusObject
 */
chrome.automation.AutomationNode.prototype.focusObject;

/**
 * The focus offset of the tree selection, if any.
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-focusOffset
 */
chrome.automation.AutomationNode.prototype.focusOffset;

/**
 * The affinity of the tree selection focus, if any.
 * @type {(string|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-focusAffinity
 */
chrome.automation.AutomationNode.prototype.focusAffinity;

/**
 * The current value for this range.
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-valueForRange
 */
chrome.automation.AutomationNode.prototype.valueForRange;

/**
 * The minimum possible value for this range.
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-minValueForRange
 */
chrome.automation.AutomationNode.prototype.minValueForRange;

/**
 * The maximum possible value for this range.
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-maxValueForRange
 */
chrome.automation.AutomationNode.prototype.maxValueForRange;

/**
 * The 1-based index of an item in a set.
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-posInSet
 */
chrome.automation.AutomationNode.prototype.posInSet;

/**
 * The number of items in a set;
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-setSize
 */
chrome.automation.AutomationNode.prototype.setSize;

/**
 * The number of rows in this table as specified in the DOM.
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-tableRowCount
 */
chrome.automation.AutomationNode.prototype.tableRowCount;

/**
 * The number of rows in this table as specified by the page author.
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-ariaRowCount
 */
chrome.automation.AutomationNode.prototype.ariaRowCount;

/**
 * The number of columns in this table as specified in the DOM.
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-tableColumnCount
 */
chrome.automation.AutomationNode.prototype.tableColumnCount;

/**
 * The number of columns in this table as specified by the page author.
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-ariaColumnCount
 */
chrome.automation.AutomationNode.prototype.ariaColumnCount;

/**
 * The zero-based index of the column that this cell is in as specified in the DOM.
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-tableCellColumnIndex
 */
chrome.automation.AutomationNode.prototype.tableCellColumnIndex;

/**
 * The ARIA column index as specified by the page author.
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-ariaCellColumnIndex
 */
chrome.automation.AutomationNode.prototype.ariaCellColumnIndex;

/**
 * The number of columns that this cell spans (default is 1).
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-tableCellColumnSpan
 */
chrome.automation.AutomationNode.prototype.tableCellColumnSpan;

/**
 * The zero-based index of the row that this cell is in as specified in the DOM.
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-tableCellRowIndex
 */
chrome.automation.AutomationNode.prototype.tableCellRowIndex;

/**
 * The ARIA row index as specified by the page author.
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-ariaCellRowIndex
 */
chrome.automation.AutomationNode.prototype.ariaCellRowIndex;

/**
 * The number of rows that this cell spans (default is 1).
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-tableCellRowSpan
 */
chrome.automation.AutomationNode.prototype.tableCellRowSpan;

/**
 * The corresponding column header for this cell.
 * @type {(!chrome.automation.AutomationNode|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-tableColumnHeader
 */
chrome.automation.AutomationNode.prototype.tableColumnHeader;

/**
 * The corresponding row header for this cell.
 * @type {(!chrome.automation.AutomationNode|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-tableRowHeader
 */
chrome.automation.AutomationNode.prototype.tableRowHeader;

/**
 * The column index of this column node.
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-tableColumnIndex
 */
chrome.automation.AutomationNode.prototype.tableColumnIndex;

/**
 * The row index of this row node.
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-tableRowIndex
 */
chrome.automation.AutomationNode.prototype.tableRowIndex;

/**
 * The type of region if this is the root of a live region. Possible values are 'polite' and 'assertive'.
 * @type {(string|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-liveStatus
 */
chrome.automation.AutomationNode.prototype.liveStatus;

/**
 * The value of aria-relevant for a live region.
 * @type {(string|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-liveRelevant
 */
chrome.automation.AutomationNode.prototype.liveRelevant;

/**
 * The value of aria-atomic for a live region.
 * @type {(boolean|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-liveAtomic
 */
chrome.automation.AutomationNode.prototype.liveAtomic;

/**
 * The value of aria-busy for a live region or any other element.
 * @type {(boolean|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-busy
 */
chrome.automation.AutomationNode.prototype.busy;

/**
 * The type of live region if this node is inside a live region.
 * @type {(string|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-containerLiveStatus
 */
chrome.automation.AutomationNode.prototype.containerLiveStatus;

/**
 * The value of aria-relevant if this node is inside a live region.
 * @type {(string|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-containerLiveRelevant
 */
chrome.automation.AutomationNode.prototype.containerLiveRelevant;

/**
 * The value of aria-atomic if this node is inside a live region.
 * @type {(boolean|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-containerLiveAtomic
 */
chrome.automation.AutomationNode.prototype.containerLiveAtomic;

/**
 * The value of aria-busy if this node is inside a live region.
 * @type {(boolean|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-containerLiveBusy
 */
chrome.automation.AutomationNode.prototype.containerLiveBusy;

/**
 * Aria auto complete.
 * @type {(string|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-autoComplete
 */
chrome.automation.AutomationNode.prototype.autoComplete;

/**
 * The name of the programmatic backing object.
 * @type {(string|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-className
 */
chrome.automation.AutomationNode.prototype.className;

/**
 * Marks this subtree as modal.
 * @type {(boolean|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-modal
 */
chrome.automation.AutomationNode.prototype.modal;

/**
 * A map containing all HTML attributes and their values
 * @type {Object<string>}
 * @see https://developer.chrome.com/extensions/automation#type-htmlAttributes
 */
chrome.automation.AutomationNode.prototype.htmlAttributes;

/**
 * The input type of a text field, such as "text" or "email".
 * @type {(string|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-inputType
 */
chrome.automation.AutomationNode.prototype.inputType;

/**
 * The key that activates this widget.
 * @type {(string|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-accessKey
 */
chrome.automation.AutomationNode.prototype.accessKey;

/**
 * The value of the aria-invalid attribute, indicating the error type.
 * @type {(string|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-ariaInvalidValue
 */
chrome.automation.AutomationNode.prototype.ariaInvalidValue;

/**
 * The CSS display attribute for this node, if applicable.
 * @type {(string|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-display
 */
chrome.automation.AutomationNode.prototype.display;

/**
 * A data url with the contents of this object's image or thumbnail.
 * @type {(string|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-imageDataUrl
 */
chrome.automation.AutomationNode.prototype.imageDataUrl;

/**
 * The language code for this subtree.
 * @type {(string|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-language
 */
chrome.automation.AutomationNode.prototype.language;

/**
 * Indicates the availability and type of interactive popup element true - the popup is a menu menu - the popup is a menu listbox - the popup is a listbox tree - the popup is a tree grid - the popup is a grid dialog - the popup is a dialog
 * @type {(string|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-hasPopup
 */
chrome.automation.AutomationNode.prototype.hasPopup;

/**
 * Input restriction, if any, such as readonly or disabled: undefined - enabled control or other object that is not disabled Restriction.DISABLED - disallows input in itself + any descendants Restriction.READONLY - allow focus/selection but not input
 * @type {(string|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-restriction
 */
chrome.automation.AutomationNode.prototype.restriction;

/**
 * Tri-state describing checkbox or radio button: 'false' | 'true' | 'mixed'
 * @type {(string|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-checked
 */
chrome.automation.AutomationNode.prototype.checked;

/**
 * The RGBA foreground color of this subtree, as an integer.
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-color
 */
chrome.automation.AutomationNode.prototype.color;

/**
 * The RGBA background color of this subtree, as an integer.
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-backgroundColor
 */
chrome.automation.AutomationNode.prototype.backgroundColor;

/**
 * The RGBA color of an input element whose value is a color.
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-colorValue
 */
chrome.automation.AutomationNode.prototype.colorValue;

/**
 * Indicates node text is subscript.
 * @type {boolean}
 * @see https://developer.chrome.com/extensions/automation#type-subscript
 */
chrome.automation.AutomationNode.prototype.subscript;

/**
 * Indicates node text is superscript.
 * @type {boolean}
 * @see https://developer.chrome.com/extensions/automation#type-superscript
 */
chrome.automation.AutomationNode.prototype.superscript;

/**
 * Indicates node text is bold.
 * @type {boolean}
 * @see https://developer.chrome.com/extensions/automation#type-bold
 */
chrome.automation.AutomationNode.prototype.bold;

/**
 * Indicates node text is italic.
 * @type {boolean}
 * @see https://developer.chrome.com/extensions/automation#type-italic
 */
chrome.automation.AutomationNode.prototype.italic;

/**
 * Indicates node text is underline.
 * @type {boolean}
 * @see https://developer.chrome.com/extensions/automation#type-underline
 */
chrome.automation.AutomationNode.prototype.underline;

/**
 * Indicates node text is line through.
 * @type {boolean}
 * @see https://developer.chrome.com/extensions/automation#type-lineThrough
 */
chrome.automation.AutomationNode.prototype.lineThrough;

/**
 * Indicates whether this node is selected, unselected, or neither.
 * @type {(boolean|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-selected
 */
chrome.automation.AutomationNode.prototype.selected;

/**
 * Walking the tree.
 * @type {!Array<!chrome.automation.AutomationNode>}
 * @see https://developer.chrome.com/extensions/automation#type-children
 */
chrome.automation.AutomationNode.prototype.children;

/**
 * @type {(!chrome.automation.AutomationNode|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-parent
 */
chrome.automation.AutomationNode.prototype.parent;

/**
 * @type {(!chrome.automation.AutomationNode|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-firstChild
 */
chrome.automation.AutomationNode.prototype.firstChild;

/**
 * @type {(!chrome.automation.AutomationNode|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-lastChild
 */
chrome.automation.AutomationNode.prototype.lastChild;

/**
 * @type {(!chrome.automation.AutomationNode|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-previousSibling
 */
chrome.automation.AutomationNode.prototype.previousSibling;

/**
 * @type {(!chrome.automation.AutomationNode|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-nextSibling
 */
chrome.automation.AutomationNode.prototype.nextSibling;

/**
 * @type {(!chrome.automation.AutomationNode|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-previousOnLine
 */
chrome.automation.AutomationNode.prototype.previousOnLine;

/**
 * @type {(!chrome.automation.AutomationNode|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-nextOnLine
 */
chrome.automation.AutomationNode.prototype.nextOnLine;

/**
 * @type {(!chrome.automation.AutomationNode|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-previousFocus
 */
chrome.automation.AutomationNode.prototype.previousFocus;

/**
 * @type {(!chrome.automation.AutomationNode|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-nextFocus
 */
chrome.automation.AutomationNode.prototype.nextFocus;

/**
 * The index of this node in its parent node's list of children. If this is the root node, this will be undefined.
 * @type {(number|undefined)}
 * @see https://developer.chrome.com/extensions/automation#type-indexInParent
 */
chrome.automation.AutomationNode.prototype.indexInParent;

/**
 * Does the default action based on this node's role. This is generally the same
 * action that would result from clicking the node such as expanding a treeitem,
 * toggling a checkbox, selecting a radiobutton, or activating a button.
 * @see https://developer.chrome.com/extensions/automation#method-doDefault
 */
chrome.automation.AutomationNode.prototype.doDefault = function() {};

/**
 * Places focus on this node.
 * @see https://developer.chrome.com/extensions/automation#method-focus
 */
chrome.automation.AutomationNode.prototype.focus = function() {};

/**
 * Request a data url for the contents of an image, optionally resized.  Pass
 * zero for maxWidth and/or maxHeight for the original size.
 * @param {number} maxWidth
 * @param {number} maxHeight
 * @see https://developer.chrome.com/extensions/automation#method-getImageData
 */
chrome.automation.AutomationNode.prototype.getImageData = function(maxWidth, maxHeight) {};

/**
 * Does a hit test of the given global screen coordinates, and fires eventToFire
 * on the resulting object.
 * @param {number} x
 * @param {number} y
 * @param {!chrome.automation.EventType} eventToFire
 * @see https://developer.chrome.com/extensions/automation#method-hitTest
 */
chrome.automation.AutomationNode.prototype.hitTest = function(x, y, eventToFire) {};

/**
 * Does a $(ref:automation.AutomationNode.hitTest), and receives a callback with
 * the resulting hit node.
 * @param {number} x
 * @param {number} y
 * @param {function(!chrome.automation.AutomationNode):void} callback
 * @see https://developer.chrome.com/extensions/automation#method-hitTestWithReply
 */
chrome.automation.AutomationNode.prototype.hitTestWithReply = function(x, y, callback) {};

/**
 * Scrolls this node to make it visible.
 * @see https://developer.chrome.com/extensions/automation#method-makeVisible
 */
chrome.automation.AutomationNode.prototype.makeVisible = function() {};

/**
 * Performs custom action.
 * @param {number} customActionId
 * @see https://developer.chrome.com/extensions/automation#method-performCustomAction
 */
chrome.automation.AutomationNode.prototype.performCustomAction = function(customActionId) {};

/**
 * Convenience method to perform a standard action supported by this node. For
 * actions requiring additional arguments, call the specific binding e.g.
 * <code>setSelection</code>.
 * @param {!chrome.automation.ActionType} actionType
 * @see https://developer.chrome.com/extensions/automation#method-performStandardAction
 */
chrome.automation.AutomationNode.prototype.performStandardAction = function(actionType) {};

/**
 * Replaces the selected text within a text field.
 * @param {string} value
 * @see https://developer.chrome.com/extensions/automation#method-replaceSelectedText
 */
chrome.automation.AutomationNode.prototype.replaceSelectedText = function(value) {};

/**
 * Sets selection within a text field.
 * @param {number} startIndex
 * @param {number} endIndex
 * @see https://developer.chrome.com/extensions/automation#method-setSelection
 */
chrome.automation.AutomationNode.prototype.setSelection = function(startIndex, endIndex) {};

/**
 * Clears focus and sets this node as the starting point for the next time the
 * user presses Tab or Shift+Tab.
 * @see https://developer.chrome.com/extensions/automation#method-setSequentialFocusNavigationStartingPoint
 */
chrome.automation.AutomationNode.prototype.setSequentialFocusNavigationStartingPoint = function() {};

/**
 * Sets the value of a text field.
 * @param {string} value
 * @see https://developer.chrome.com/extensions/automation#method-setValue
 */
chrome.automation.AutomationNode.prototype.setValue = function(value) {};

/**
 * Show the context menu for this element, as if the user right-clicked.
 * @see https://developer.chrome.com/extensions/automation#method-showContextMenu
 */
chrome.automation.AutomationNode.prototype.showContextMenu = function() {};

/**
 * Resume playing any media within this tree.
 * @see https://developer.chrome.com/extensions/automation#method-resumeMedia
 */
chrome.automation.AutomationNode.prototype.resumeMedia = function() {};

/**
 * Start ducking any media within this tree.
 * @see https://developer.chrome.com/extensions/automation#method-startDuckingMedia
 */
chrome.automation.AutomationNode.prototype.startDuckingMedia = function() {};

/**
 * Stop ducking any media within this tree.
 * @see https://developer.chrome.com/extensions/automation#method-stopDuckingMedia
 */
chrome.automation.AutomationNode.prototype.stopDuckingMedia = function() {};

/**
 * Suspend any media playing within this tree.
 * @see https://developer.chrome.com/extensions/automation#method-suspendMedia
 */
chrome.automation.AutomationNode.prototype.suspendMedia = function() {};

/**
 * Scrolls this scrollable container backward.
 * @param {function(boolean):void} callback Callback called for actions with a
 *     response.
 * @see https://developer.chrome.com/extensions/automation#method-scrollBackward
 */
chrome.automation.AutomationNode.prototype.scrollBackward = function(callback) {};

/**
 * Scrolls this scrollable container forward.
 * @param {function(boolean):void} callback Callback called for actions with a
 *     response.
 * @see https://developer.chrome.com/extensions/automation#method-scrollForward
 */
chrome.automation.AutomationNode.prototype.scrollForward = function(callback) {};

/**
 * Scrolls this scrollable container up.
 * @param {function(boolean):void} callback Callback called for actions with a
 *     response.
 * @see https://developer.chrome.com/extensions/automation#method-scrollUp
 */
chrome.automation.AutomationNode.prototype.scrollUp = function(callback) {};

/**
 * Scrolls this scrollable container down.
 * @param {function(boolean):void} callback Callback called for actions with a
 *     response.
 * @see https://developer.chrome.com/extensions/automation#method-scrollDown
 */
chrome.automation.AutomationNode.prototype.scrollDown = function(callback) {};

/**
 * Scrolls this scrollable container left.
 * @param {function(boolean):void} callback Callback called for actions with a
 *     response.
 * @see https://developer.chrome.com/extensions/automation#method-scrollLeft
 */
chrome.automation.AutomationNode.prototype.scrollLeft = function(callback) {};

/**
 * Scrolls this scrollable container right.
 * @param {function(boolean):void} callback Callback called for actions with a
 *     response.
 * @see https://developer.chrome.com/extensions/automation#method-scrollRight
 */
chrome.automation.AutomationNode.prototype.scrollRight = function(callback) {};

/**
 * Adds a listener for the given event type and event phase.
 * @param {!chrome.automation.EventType} eventType
 * @param {function(!chrome.automation.AutomationEvent):void} listener A
 *     listener for events on an <code>AutomationNode</code>.
 * @param {boolean} capture
 * @see https://developer.chrome.com/extensions/automation#method-addEventListener
 */
chrome.automation.AutomationNode.prototype.addEventListener = function(eventType, listener, capture) {};

/**
 * Removes a listener for the given event type and event phase.
 * @param {!chrome.automation.EventType} eventType
 * @param {function(!chrome.automation.AutomationEvent):void} listener A
 *     listener for events on an <code>AutomationNode</code>.
 * @param {boolean} capture
 * @see https://developer.chrome.com/extensions/automation#method-removeEventListener
 */
chrome.automation.AutomationNode.prototype.removeEventListener = function(eventType, listener, capture) {};

/**
 * <p>Gets the first node in this node's subtree which matches the given CSS
 * selector and is within the same DOM context.</p><p>If this node doesn't
 * correspond directly with an HTML node in the DOM, querySelector will be run
 * on this node's nearest HTML node ancestor. Note that this may result in the
 * query returning a node which is not a descendant of this node.</p><p>If the
 * selector matches a node which doesn't directly correspond to an automation
 * node (for example an element within an ARIA widget, where the ARIA widget
 * forms one node of the automation tree, or an element which is hidden from
 * accessibility via hiding it using CSS or using aria-hidden), this will return
 * the nearest ancestor which does correspond to an automation node.</p>
 * @param {string} selector
 * @param {function(!chrome.automation.AutomationNode):void} callback Called
 *     when the result for a <code>query</code> is available.
 * @see https://developer.chrome.com/extensions/automation#method-domQuerySelector
 */
chrome.automation.AutomationNode.prototype.domQuerySelector = function(selector, callback) {};

/**
 * Finds the first AutomationNode in this node's subtree which matches the given
 * search parameters.
 * @param {!chrome.automation.FindParams} params
 * @return {!chrome.automation.AutomationNode}
 * @see https://developer.chrome.com/extensions/automation#method-find
 */
chrome.automation.AutomationNode.prototype.find = function(params) {};

/**
 * Finds all the AutomationNodes in this node's subtree which matches the given
 * search parameters.
 * @param {!chrome.automation.FindParams} params
 * @return {!Array<!chrome.automation.AutomationNode>}
 * @see https://developer.chrome.com/extensions/automation#method-findAll
 */
chrome.automation.AutomationNode.prototype.findAll = function(params) {};

/**
 * Returns whether this node matches the given $(ref:automation.FindParams).
 * @param {!chrome.automation.FindParams} params
 * @return {boolean}
 * @see https://developer.chrome.com/extensions/automation#method-matches
 */
chrome.automation.AutomationNode.prototype.matches = function(params) {};

/**
 * @param {string} searchStr
 * @param {boolean} backward
 * @return {!chrome.automation.AutomationNode}
 * @see https://developer.chrome.com/extensions/automation#method-getNextTextMatch
 */
chrome.automation.AutomationNode.prototype.getNextTextMatch = function(searchStr, backward) {};


/**
 * Get the automation tree for the tab with the given tabId, or the current tab
 * if no tabID is given, enabling automation if necessary. Returns a tree with a
 * placeholder root node; listen for the "loadComplete" event to get a
 * notification that the tree has fully loaded (the previous root node reference
 * will stop working at or before this point).
 * @param {number=} tabId
 * @param {function(!chrome.automation.AutomationNode):void=} callback Called
 *     when the <code>AutomationNode</code> for the page is available.
 * @see https://developer.chrome.com/extensions/automation#method-getTree
 */
chrome.automation.getTree = function(tabId, callback) {};

/**
 * Get the automation tree for the whole desktop which consists of all on screen
 * views. Note this API is currently only supported on Chrome OS.
 * @param {function(!chrome.automation.AutomationNode):void} callback Called
 *     when the <code>AutomationNode</code> for the page is available.
 * @see https://developer.chrome.com/extensions/automation#method-getDesktop
 */
chrome.automation.getDesktop = function(callback) {};

/**
 * Get the automation node that currently has focus, globally. Will return null
 * if none of the nodes in any loaded trees have focus.
 * @param {function(!chrome.automation.AutomationNode):void} callback Called
 *     with the <code>AutomationNode</code> that currently has focus.
 * @see https://developer.chrome.com/extensions/automation#method-getFocus
 */
chrome.automation.getFocus = function(callback) {};

/**
 * Add a tree change observer. Tree change observers are static/global, they
 * listen to changes across all trees. Pass a filter to determine what specific
 * tree changes to listen to, and note that listnening to all tree changes can
 * be expensive.
 * @param {!chrome.automation.TreeChangeObserverFilter} filter
 * @param {function(!chrome.automation.TreeChange):void} observer A listener for
 *     changes on the <code>AutomationNode</code> tree.
 * @see https://developer.chrome.com/extensions/automation#method-addTreeChangeObserver
 */
chrome.automation.addTreeChangeObserver = function(filter, observer) {};

/**
 * Remove a tree change observer.
 * @param {function(!chrome.automation.TreeChange):void} observer A listener for
 *     changes on the <code>AutomationNode</code> tree.
 * @see https://developer.chrome.com/extensions/automation#method-removeTreeChangeObserver
 */
chrome.automation.removeTreeChangeObserver = function(observer) {};

/**
 * Sets the selection in a tree. This creates a selection in a single tree
 * (anchorObject and focusObject must have the same root). Everything in the
 * tree between the two node/offset pairs gets included in the selection. The
 * anchor is where the user started the selection, while the focus is the point
 * at which the selection gets extended e.g. when dragging with a mouse or using
 * the keyboard. For nodes with the role staticText, the offset gives the
 * character offset within the value where the selection starts or ends,
 * respectively.
 * @param {!chrome.automation.SetDocumentSelectionParams} params
 * @see https://developer.chrome.com/extensions/automation#method-setDocumentSelection
 */
chrome.automation.setDocumentSelection = function(params) {};
