// 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_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',
  HAS_POPUP: 'hasPopup',
  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',
  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_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 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) {};


/**
 * 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) {};
