// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // This file contains various hacks needed to inform JSCompiler of various // WebKit- and Chrome-specific properties and methods. It is used only with // JSCompiler to verify the type-correctness of our code. /** @type {Array} */ ClipboardData.prototype.types; /** @type {HTMLElement} */ Document.prototype.activeElement; /** @type {Array} */ Document.prototype.all; /** @type {boolean} */ Document.prototype.hidden; /** @return {void} Nothing. */ Document.prototype.exitPointerLock = function() {}; /** @type {boolean} */ Document.prototype.webkitIsFullScreen; /** @type {boolean} */ Document.prototype.webkitHidden; /** @type {Element} */ Document.prototype.firstElementChild; /** @return {void} Nothing. */ Element.prototype.requestPointerLock = function() {}; /** @type {boolean} */ Element.prototype.disabled; /** @type {boolean} */ Element.prototype.hidden; /** @type {string} */ Element.prototype.innerText; /** @type {string} */ Element.prototype.localName; /** @type {number} */ Element.prototype.offsetRight; /** @type {number} */ Element.prototype.offsetBottom; /** @type {string} */ Element.prototype.textContent; /** @type {boolean} */ Element.prototype.checked; /** @type {Window} */ HTMLIFrameElement.prototype.contentWindow; /** * @param {string} selector * @return {?HTMLElement}. */ HTMLElement.prototype.querySelector = function(selector) {}; /** * @param {string} name * @return {string} */ Node.prototype.getAttribute = function(name) { }; /** @type {string} */ Node.prototype.value; /** @type {{top: string, left: string, bottom: string, right: string}} */ Node.prototype.style; /** @type {boolean} */ Node.prototype.hidden; /** @type {{getRandomValues: function(!ArrayBufferView):!ArrayBufferView}} */ Window.prototype.crypto; /** * @type {DataTransfer} */ Event.prototype.dataTransfer = null; /** * @type {number} */ Event.prototype.movementX = 0; /** * @type {number} */ Event.prototype.movementY = 0; /** * @param {string} type * @param {boolean} canBubble * @param {boolean} cancelable * @param {Window} view * @param {number} detail * @param {number} screenX * @param {number} screenY * @param {number} clientX * @param {number} clientY * @param {boolean} ctrlKey * @param {boolean} altKey * @param {boolean} shiftKey * @param {boolean} metaKey * @param {number} button * @param {EventTarget} relatedTarget */ Event.prototype.initMouseEvent = function( type, canBubble, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget) {}; /** @type {Object} */ Event.prototype.data = {}; // Chrome implements XMLHttpRequest.responseURL starting from Chrome 37. /** @type {string} */ XMLHttpRequest.prototype.responseURL = ""; /******************************************************************************* * Webview and related declarations ******************************************************************************/ /** * Like chrome.webRequest, but for webview tags. * * chrome.webRequest defined in chrome_extensions.js can't be * used because it's not a type. * * @constructor */ function WebviewWebRequest() {} /** @type {WebRequestEvent} */ WebviewWebRequest.prototype.onBeforeSendHeaders; /** @type {WebRequestEvent} */ WebviewWebRequest.prototype.onCompleted; /** @type {WebRequestOnErrorOccurredEvent} */ WebviewWebRequest.prototype.onErrorOccurred; /** * Enable access to special APIs of webview DOM element. * * @constructor * @extends {HTMLElement} */ function Webview() {} /** @type {!WebviewWebRequest} */ Webview.prototype.request; /** @type {function(InjectDetails, function(Object))} */ Webview.prototype.executeScript; /** @type {Window} */ Webview.prototype.contentWindow; /** * See https://developer.chrome.com/apps/tags/webview#type-InjectDetails * * @typedef {{ * file: (string|undefined), * code: (string|undefined) * }} */ var InjectDetails; /******************************************************************************* * ConsoleMessage event ******************************************************************************/ /** * The consolemessage BrowserEvent contains these fields: * e.level: int32, log severity level (for exception/info etc) * e.line: int32, line number * e.message: string, the console message * e.sourceId: string, source identifier (the ones seen in devtools) * * @constructor * @extends {Event} */ chrome.ConsoleMessageBrowserEvent = function() {}; /** @type {number} */ chrome.ConsoleMessageBrowserEvent.prototype.level; /** @type {number} */ chrome.ConsoleMessageBrowserEvent.prototype.line; /** @type {string} */ chrome.ConsoleMessageBrowserEvent.prototype.message; /** @type {string} */ chrome.ConsoleMessageBrowserEvent.prototype.sourceId; /** * The last error of the NaCL embed element. * https://developer.chrome.com/native-client/devguide/coding/progress-events * * @type {string} */ HTMLEmbedElement.prototype.lastError;