// 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 {Object} */ var chrome = {}; /** @type {Object} */ chrome.app = {}; /** @type {Object} */ chrome.app.runtime = { /** @type {chrome.Event} */ onLaunched: null }; /** @type {Object} */ chrome.app.window = { /** * @param {string} name * @param {Object} parameters * @param {function()=} opt_callback */ create: function(name, parameters, opt_callback) {}, /** * @return {AppWindow} */ current: function() {} }; /** @type {Object} */ chrome.runtime = { /** @type {Object} */ lastError: { /** @type {string} */ message: '' }, /** @return {{version: string, app: {background: Object}}} */ getManifest: function() {} }; /** * @type {?function(string):chrome.extension.Port} */ chrome.runtime.connectNative = function(name) {}; /** * @param {string} extensionId * @param {*} message * @param {Object=} opt_options * @param {function(*)=} opt_callback */ chrome.runtime.sendMessage = function( extensionId, message, opt_options, opt_callback) {}; /** @type {Object} */ chrome.extension = {}; /** @constructor */ chrome.extension.Port = function() {}; /** @type {chrome.Event} */ chrome.extension.Port.prototype.onMessage; /** @type {chrome.Event} */ chrome.extension.Port.prototype.onDisconnect; /** * @param {Object} message */ chrome.extension.Port.prototype.postMessage = function(message) {}; /** * @param {*} message */ chrome.extension.sendMessage = function(message) {} /** @type {chrome.Event} */ chrome.extension.onMessage; /** @type {Object} */ chrome.i18n = {}; /** * @param {string} messageName * @param {(string|Array.<string>)=} opt_args * @return {string} */ chrome.i18n.getMessage = function(messageName, opt_args) {}; /** @type {Object} */ chrome.storage = {}; /** @type {chrome.Storage} */ chrome.storage.local; /** @type {chrome.Storage} */ chrome.storage.sync; /** @constructor */ chrome.Storage = function() {}; /** * @param {string|Array.<string>|Object.<string>} items * @param {function(Object.<string>):void} callback * @return {void} */ chrome.Storage.prototype.get = function(items, callback) {}; /** * @param {Object.<string>} items * @param {function():void=} opt_callback * @return {void} */ chrome.Storage.prototype.set = function(items, opt_callback) {}; /** * @param {string|Array.<string>} items * @param {function():void=} opt_callback * @return {void} */ chrome.Storage.prototype.remove = function(items, opt_callback) {}; /** * @param {function():void=} opt_callback * @return {void} */ chrome.Storage.prototype.clear = function(opt_callback) {}; /** * @type {Object} * src/chrome/common/extensions/api/context_menus.json */ chrome.contextMenus = {}; /** @type {ChromeEvent} */ chrome.contextMenus.onClicked; /** * @param {!Object} createProperties * @param {function()=} opt_callback */ chrome.contextMenus.create = function(createProperties, opt_callback) {}; /** * @param {string|number} id * @param {!Object} updateProperties * @param {function()=} opt_callback */ chrome.contextMenus.update = function(id, updateProperties, opt_callback) {}; /** * @param {string|number} menuItemId * @param {function()=} opt_callback */ chrome.contextMenus.remove = function(menuItemId, opt_callback) {}; /** * @param {function()=} opt_callback */ chrome.contextMenus.removeAll = function(opt_callback) {}; /** @constructor */ function OnClickData() {} /** @type {string|number} */ OnClickData.prototype.menuItemId; /** @type {string|number} */ OnClickData.prototype.parentMenuItemId; /** @type {string} */ OnClickData.prototype.mediaType; /** @type {string} */ OnClickData.prototype.linkUrl; /** @type {string} */ OnClickData.prototype.srcUrl; /** @type {string} */ OnClickData.prototype.pageUrl; /** @type {string} */ OnClickData.prototype.frameUrl; /** @type {string} */ OnClickData.prototype.selectionText; /** @type {boolean} */ OnClickData.prototype.editable; /** @type {boolean} */ OnClickData.prototype.wasChecked; /** @type {boolean} */ OnClickData.prototype.checked; /** @type {Object} */ chrome.identity = { /** * @param {Object.<string>} parameters * @param {function(string):void} callback */ getAuthToken: function(parameters, callback) {}, /** * @param {Object.<string>} parameters * @param {function():void} callback */ removeCachedAuthToken: function(parameters, callback) {}, /** * @param {Object.<string>} parameters * @param {function(string):void} callback */ launchWebAuthFlow: function(parameters, callback) {} }; // TODO(garykac): Combine chrome.Event and ChromeEvent /** @constructor */ function ChromeEvent() {} /** @param {Function} callback */ ChromeEvent.prototype.addListener = function(callback) {}; /** @param {Function} callback */ ChromeEvent.prototype.removeListener = function(callback) {}; /** @param {Function} callback */ ChromeEvent.prototype.hasListener = function(callback) {}; /** @param {Function} callback */ ChromeEvent.prototype.hasListeners = function(callback) {}; /** @constructor */ chrome.Event = function() {}; /** @param {function():void} callback */ chrome.Event.prototype.addListener = function(callback) {}; /** @param {function():void} callback */ chrome.Event.prototype.removeListener = function(callback) {}; /** @type {Object} */ chrome.permissions = { /** * @param {Object.<string>} permissions * @param {function(boolean):void} callback */ contains: function(permissions, callback) {}, /** * @param {Object.<string>} permissions * @param {function(boolean):void} callback */ request: function(permissions, callback) {} }; /** @type {Object} */ chrome.tabs; /** @param {function(chrome.Tab):void} callback */ chrome.tabs.getCurrent = function(callback) {} /** @constructor */ chrome.Tab = function() { /** @type {boolean} */ this.pinned = false; /** @type {number} */ this.windowId = 0; }; /** @type {Object} */ chrome.windows; /** @param {number} id * @param {Object?} getInfo * @param {function(chrome.Window):void} callback */ chrome.windows.get = function(id, getInfo, callback) {} /** @constructor */ chrome.Window = function() { /** @type {string} */ this.state = ''; /** @type {string} */ this.type = ''; }; /** @constructor */ var AppWindow = function() { /** @type {Window} */ this.contentWindow = null; /** @type {chrome.Event} */ this.onRestored = null; /** @type {chrome.Event} */ this.onMaximized = null; /** @type {chrome.Event} */ this.onFullscreened = null; }; AppWindow.prototype.close = function() {}; AppWindow.prototype.drawAttention = function() {}; AppWindow.prototype.maximize = function() {}; AppWindow.prototype.minimize = function() {}; AppWindow.prototype.restore = function() {}; AppWindow.prototype.fullscreen = function() {}; /** @return {boolean} */ AppWindow.prototype.isFullscreen = function() {}; /** @return {boolean} */ AppWindow.prototype.isMaximized = function() {}; /** * @param {{rects: Array.<ClientRect>}} rects */ AppWindow.prototype.setShape = function(rects) {}; /** * @param {{rects: Array.<ClientRect>}} rects */ AppWindow.prototype.setInputRegion = function(rects) {}; /** @constructor */ var LaunchData = function() { /** @type {string} */ this.id = ''; /** @type {Array.<{type: string, entry: FileEntry}>} */ this.items = []; }; /** @constructor */ function ClientRect() { /** @type {number} */ this.width = 0; /** @type {number} */ this.height = 0; /** @type {number} */ this.top = 0; /** @type {number} */ this.bottom = 0; /** @type {number} */ this.left = 0; /** @type {number} */ this.right = 0; };