Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // This file contains various hacks needed to inform JSCompiler of various | 5 // This file contains various hacks needed to inform JSCompiler of various |
| 6 // WebKit- and Chrome-specific properties and methods. It is used only with | 6 // WebKit- and Chrome-specific properties and methods. It is used only with |
| 7 // JSCompiler to verify the type-correctness of our code. | 7 // JSCompiler to verify the type-correctness of our code. |
| 8 | 8 |
| 9 /** @type {Object} */ | 9 /** @type {Object} */ |
| 10 var chrome = {}; | 10 var chrome = {}; |
| 11 | 11 |
| 12 /** @constructor */ | |
| 13 chrome.Event = function() { | |
| 14 this.listeners_ = []; | |
| 15 }; | |
| 16 | |
| 17 /** @param {Function} callback */ | |
| 18 chrome.Event.prototype.addListener = function(callback) { | |
| 19 this.listeners_.push(callback); | |
|
kelvinp
2014/08/11 18:37:56
I provide a simple implementation of chrome.events
Jamie
2014/08/12 02:24:59
Yes, please do that. Files under js_proto/ should
| |
| 20 }; | |
| 21 | |
| 22 /** @param {Function} callback */ | |
| 23 chrome.Event.prototype.removeListener = function(callback) { | |
| 24 for (var i = 0; i < this.listeners_.length; i++) { | |
| 25 if (this.listeners_[i] === callback) { | |
| 26 this.listeners_.splice(i, 1); | |
| 27 break; | |
| 28 } | |
| 29 } | |
| 30 }; | |
| 31 | |
| 32 /** @param {*=} data */ | |
| 33 chrome.Event.prototype.mock$fire = function(data) { | |
| 34 /** @param {Function} listener */ | |
| 35 this.listeners_.forEach(function(listener){ | |
| 36 listener(data); | |
| 37 }); | |
| 38 }; | |
| 12 | 39 |
| 13 /** @type {Object} */ | 40 /** @type {Object} */ |
| 14 chrome.app = {}; | 41 chrome.app = {}; |
| 15 | 42 |
| 16 /** @type {Object} */ | 43 /** @type {Object} */ |
| 17 chrome.app.runtime = { | 44 chrome.app.runtime = { |
| 18 /** @type {chrome.Event} */ | 45 /** @type {chrome.Event} */ |
| 19 onLaunched: null | 46 onLaunched: null |
| 20 }; | 47 }; |
| 21 | 48 |
| 22 | 49 |
| 23 /** @type {Object} */ | 50 /** @type {Object} */ |
| 24 chrome.app.window = { | 51 chrome.app.window = { |
| 25 /** | 52 /** |
| 26 * @param {string} name | 53 * @param {string} name |
| 27 * @param {Object} parameters | 54 * @param {Object} parameters |
| 28 * @param {function()=} opt_callback | 55 * @param {function()=} opt_callback |
| 29 */ | 56 */ |
| 30 create: function(name, parameters, opt_callback) {}, | 57 create: function(name, parameters, opt_callback) {}, |
| 31 /** | 58 /** |
| 32 * @return {AppWindow} | 59 * @return {AppWindow} |
| 33 */ | 60 */ |
| 34 current: function() {} | 61 current: function() {}, |
| 62 /** | |
| 63 * @param {string} id | |
| 64 * @param {function()=} opt_callback | |
| 65 */ | |
| 66 get: function(id, opt_callback) {} | |
| 35 }; | 67 }; |
| 36 | 68 |
| 37 | 69 |
| 38 /** @type {Object} */ | 70 /** @type {Object} */ |
| 39 chrome.runtime = { | 71 chrome.runtime = { |
| 40 /** @type {Object} */ | 72 /** @type {Object} */ |
| 41 lastError: { | 73 lastError: { |
| 42 /** @type {string} */ | 74 /** @type {string} */ |
| 43 message: '' | 75 message: '' |
| 44 }, | 76 }, |
| 45 /** @return {{version: string, app: {background: Object}}} */ | 77 /** @return {{version: string, app: {background: Object}}} */ |
| 46 getManifest: function() {} | 78 getManifest: function() {}, |
| 79 /** @type {chrome.Event} */ | |
| 80 onSuspend: null, | |
| 81 /** @type {chrome.Event} */ | |
| 82 onConnect: null, | |
| 83 /** @type {chrome.Event} */ | |
| 84 onConnectExternal: null, | |
| 85 /** @type {chrome.Event} */ | |
| 86 onMessage: null, | |
| 87 /** @type {chrome.Event} */ | |
| 88 onMessageExternal: null | |
| 47 }; | 89 }; |
| 48 | 90 |
| 49 /** | 91 /** |
| 50 * @type {?function(string):chrome.extension.Port} | 92 * @type {?function(string):chrome.runtime.Port} |
| 51 */ | 93 */ |
| 52 chrome.runtime.connectNative = function(name) {}; | 94 chrome.runtime.connectNative = function(name) {}; |
| 53 | 95 |
| 54 /** | 96 /** |
| 55 * @param {{name:string}} connectInfo | 97 * @param {{ name: string}} config |
| 56 * @return {chrome.extension.Port} | 98 * @return {chrome.runtime.Port} |
| 57 */ | 99 */ |
| 58 chrome.runtime.connect = function(connectInfo) {}; | 100 chrome.runtime.connect = function(config) {}; |
| 59 | 101 |
| 60 /** | 102 /** |
| 61 * @param {string} extensionId | 103 * @param {string} extensionId |
| 62 * @param {*} message | 104 * @param {*} message |
| 63 * @param {Object=} opt_options | 105 * @param {Object=} opt_options |
| 64 * @param {function(*)=} opt_callback | 106 * @param {function(*)=} opt_callback |
| 65 */ | 107 */ |
| 66 chrome.runtime.sendMessage = function( | 108 chrome.runtime.sendMessage = function( |
| 67 extensionId, message, opt_options, opt_callback) {}; | 109 extensionId, message, opt_options, opt_callback) {}; |
| 68 | 110 |
| 111 /** @constructor */ | |
| 112 chrome.runtime.MessageSender = function () { | |
| 113 /** @type {chrome.Tab} */ | |
| 114 this.tab = null; | |
| 115 /** @type {AppWindow} */ | |
| 116 this.window = null; | |
| 117 }; | |
| 118 | |
| 119 /** @constructor */ | |
| 120 chrome.runtime.Port = function() { | |
| 121 this.onMessage = new chrome.Event(); | |
| 122 this.onDisconnect = new chrome.Event(); | |
| 123 | |
| 124 /** @type {string} */ | |
| 125 this.name = ''; | |
| 126 | |
| 127 /** @type {chrome.runtime.MessageSender} */ | |
| 128 this.sender = null; | |
| 129 }; | |
| 130 | |
| 131 /** @type {chrome.Event} */ | |
| 132 chrome.runtime.Port.prototype.onMessage = null; | |
| 133 | |
| 134 /** @type {chrome.Event} */ | |
| 135 chrome.runtime.Port.prototype.onDisconnect = null; | |
| 136 | |
| 137 chrome.runtime.Port.prototype.disconnect = function() {}; | |
| 138 | |
| 139 /** | |
| 140 * @param {Object} message | |
| 141 */ | |
| 142 chrome.runtime.Port.prototype.postMessage = function(message) {}; | |
| 143 | |
| 144 | |
| 69 /** @type {Object} */ | 145 /** @type {Object} */ |
| 70 chrome.extension = {}; | 146 chrome.extension = {}; |
| 71 | 147 |
| 72 /** @constructor */ | |
| 73 chrome.extension.Port = function() {}; | |
| 74 | |
| 75 /** @type {chrome.Event} */ | |
| 76 chrome.extension.Port.prototype.onMessage; | |
| 77 | |
| 78 /** @type {chrome.Event} */ | |
| 79 chrome.extension.Port.prototype.onDisconnect; | |
| 80 | |
| 81 /** | |
| 82 * @param {Object} message | |
| 83 */ | |
| 84 chrome.extension.Port.prototype.postMessage = function(message) {}; | |
| 85 | |
| 86 /** | 148 /** |
| 87 * @param {*} message | 149 * @param {*} message |
| 88 */ | 150 */ |
| 89 chrome.extension.sendMessage = function(message) {} | 151 chrome.extension.sendMessage = function(message) {} |
| 90 | 152 |
| 91 /** @type {chrome.Event} */ | 153 /** @type {chrome.Event} */ |
| 92 chrome.extension.onMessage; | 154 chrome.extension.onMessage; |
| 93 | 155 |
| 94 | 156 |
| 95 /** @type {Object} */ | 157 /** @type {Object} */ |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 141 * @return {void} | 203 * @return {void} |
| 142 */ | 204 */ |
| 143 chrome.Storage.prototype.clear = function(opt_callback) {}; | 205 chrome.Storage.prototype.clear = function(opt_callback) {}; |
| 144 | 206 |
| 145 | 207 |
| 146 /** | 208 /** |
| 147 * @type {Object} | 209 * @type {Object} |
| 148 * src/chrome/common/extensions/api/context_menus.json | 210 * src/chrome/common/extensions/api/context_menus.json |
| 149 */ | 211 */ |
| 150 chrome.contextMenus = {}; | 212 chrome.contextMenus = {}; |
| 151 /** @type {ChromeEvent} */ | 213 /** @type {chrome.Event} */ |
| 152 chrome.contextMenus.onClicked; | 214 chrome.contextMenus.onClicked; |
| 153 /** | 215 /** |
| 154 * @param {!Object} createProperties | 216 * @param {!Object} createProperties |
| 155 * @param {function()=} opt_callback | 217 * @param {function()=} opt_callback |
| 156 */ | 218 */ |
| 157 chrome.contextMenus.create = function(createProperties, opt_callback) {}; | 219 chrome.contextMenus.create = function(createProperties, opt_callback) {}; |
| 158 /** | 220 /** |
| 159 * @param {string|number} id | 221 * @param {string|number} id |
| 160 * @param {!Object} updateProperties | 222 * @param {!Object} updateProperties |
| 161 * @param {function()=} opt_callback | 223 * @param {function()=} opt_callback |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 209 * @param {function():void} callback | 271 * @param {function():void} callback |
| 210 */ | 272 */ |
| 211 removeCachedAuthToken: function(parameters, callback) {}, | 273 removeCachedAuthToken: function(parameters, callback) {}, |
| 212 /** | 274 /** |
| 213 * @param {Object.<string>} parameters | 275 * @param {Object.<string>} parameters |
| 214 * @param {function(string):void} callback | 276 * @param {function(string):void} callback |
| 215 */ | 277 */ |
| 216 launchWebAuthFlow: function(parameters, callback) {} | 278 launchWebAuthFlow: function(parameters, callback) {} |
| 217 }; | 279 }; |
| 218 | 280 |
| 219 // TODO(garykac): Combine chrome.Event and ChromeEvent | |
| 220 /** @constructor */ | |
| 221 function ChromeEvent() {} | |
| 222 /** @param {Function} callback */ | |
| 223 ChromeEvent.prototype.addListener = function(callback) {}; | |
| 224 /** @param {Function} callback */ | |
| 225 ChromeEvent.prototype.removeListener = function(callback) {}; | |
| 226 /** @param {Function} callback */ | |
| 227 ChromeEvent.prototype.hasListener = function(callback) {}; | |
| 228 /** @param {Function} callback */ | |
| 229 ChromeEvent.prototype.hasListeners = function(callback) {}; | |
| 230 | |
| 231 /** @constructor */ | |
| 232 chrome.Event = function() {}; | |
| 233 | |
| 234 /** @param {function():void} callback */ | |
| 235 chrome.Event.prototype.addListener = function(callback) {}; | |
| 236 | |
| 237 /** @param {function():void} callback */ | |
| 238 chrome.Event.prototype.removeListener = function(callback) {}; | |
| 239 | |
| 240 | 281 |
| 241 /** @type {Object} */ | 282 /** @type {Object} */ |
| 242 chrome.permissions = { | 283 chrome.permissions = { |
| 243 /** | 284 /** |
| 244 * @param {Object.<string>} permissions | 285 * @param {Object.<string>} permissions |
| 245 * @param {function(boolean):void} callback | 286 * @param {function(boolean):void} callback |
| 246 */ | 287 */ |
| 247 contains: function(permissions, callback) {}, | 288 contains: function(permissions, callback) {}, |
| 248 /** | 289 /** |
| 249 * @param {Object.<string>} permissions | 290 * @param {Object.<string>} permissions |
| 250 * @param {function(boolean):void} callback | 291 * @param {function(boolean):void} callback |
| 251 */ | 292 */ |
| 252 request: function(permissions, callback) {} | 293 request: function(permissions, callback) {} |
| 253 }; | 294 }; |
| 254 | 295 |
| 255 | 296 |
| 256 /** @type {Object} */ | 297 /** @type {Object} */ |
| 257 chrome.tabs = {}; | 298 chrome.tabs = {}; |
| 258 | 299 |
| 259 /** @param {function(chrome.Tab):void} callback */ | 300 /** @param {function(chrome.Tab):void} callback */ |
| 260 chrome.tabs.getCurrent = function(callback) {}; | 301 chrome.tabs.getCurrent = function(callback) {}; |
| 261 | 302 |
| 303 /** | |
| 304 * @param {Object?} options | |
| 305 * @param {function(chrome.Tab)=} opt_callback | |
| 306 */ | |
| 307 chrome.tabs.create = function(options, opt_callback) {}; | |
| 308 | |
| 309 /** | |
| 310 * @param {string} id | |
| 311 * @param {function(chrome.Tab)} callback | |
| 312 */ | |
| 313 chrome.tabs.get = function(id, callback) {}; | |
| 314 | |
| 315 /** | |
| 316 * @param {string} id | |
| 317 * @param {function()=} opt_callback | |
| 318 */ | |
| 319 chrome.tabs.remove = function(id, opt_callback) {}; | |
| 320 | |
| 321 | |
| 262 /** @constructor */ | 322 /** @constructor */ |
| 263 chrome.Tab = function() { | 323 chrome.Tab = function() { |
| 264 /** @type {boolean} */ | 324 /** @type {boolean} */ |
| 265 this.pinned = false; | 325 this.pinned = false; |
| 266 /** @type {number} */ | 326 /** @type {number} */ |
| 267 this.windowId = 0; | 327 this.windowId = 0; |
| 328 /** @type {string} */ | |
| 329 this.id = ''; | |
| 268 }; | 330 }; |
| 269 | 331 |
| 270 | 332 |
| 271 /** @type {Object} */ | 333 /** @type {Object} */ |
| 272 chrome.windows = {}; | 334 chrome.windows = {}; |
| 273 | 335 |
| 274 /** @param {number} id | 336 /** @param {number} id |
| 275 * @param {Object?} getInfo | 337 * @param {Object?} getInfo |
| 276 * @param {function(chrome.Window):void} callback */ | 338 * @param {function(chrome.Window):void} callback */ |
| 277 chrome.windows.get = function(id, getInfo, callback) {}; | 339 chrome.windows.get = function(id, getInfo, callback) {}; |
| 278 | 340 |
| 279 /** @constructor */ | 341 /** @constructor */ |
| 280 chrome.Window = function() { | 342 chrome.Window = function() { |
| 281 /** @type {string} */ | 343 /** @type {string} */ |
| 282 this.state = ''; | 344 this.state = ''; |
| 283 /** @type {string} */ | 345 /** @type {string} */ |
| 284 this.type = ''; | 346 this.type = ''; |
| 285 }; | 347 }; |
| 286 | 348 |
| 287 /** @constructor */ | 349 /** @constructor */ |
| 288 var AppWindow = function() { | 350 var AppWindow = function() { |
| 289 /** @type {Window} */ | 351 /** @type {Window} */ |
| 290 this.contentWindow = null; | 352 this.contentWindow = null; |
| 291 /** @type {chrome.Event} */ | 353 /** @type {chrome.Event} */ |
| 292 this.onRestored = null; | 354 this.onRestored = null; |
| 293 /** @type {chrome.Event} */ | 355 /** @type {chrome.Event} */ |
| 294 this.onMaximized = null; | 356 this.onMaximized = null; |
| 295 /** @type {chrome.Event} */ | 357 /** @type {chrome.Event} */ |
| 296 this.onFullscreened = null; | 358 this.onFullscreened = null; |
| 359 /** @type {string} */ | |
| 360 this.id = ""; | |
| 297 }; | 361 }; |
| 298 | 362 |
| 299 AppWindow.prototype.close = function() {}; | 363 AppWindow.prototype.close = function() {}; |
| 300 AppWindow.prototype.drawAttention = function() {}; | 364 AppWindow.prototype.drawAttention = function() {}; |
| 301 AppWindow.prototype.maximize = function() {}; | 365 AppWindow.prototype.maximize = function() {}; |
| 302 AppWindow.prototype.minimize = function() {}; | 366 AppWindow.prototype.minimize = function() {}; |
| 303 AppWindow.prototype.restore = function() {}; | 367 AppWindow.prototype.restore = function() {}; |
| 304 AppWindow.prototype.fullscreen = function() {}; | 368 AppWindow.prototype.fullscreen = function() {}; |
| 305 /** @return {boolean} */ | 369 /** @return {boolean} */ |
| 306 AppWindow.prototype.isFullscreen = function() {}; | 370 AppWindow.prototype.isFullscreen = function() {}; |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 333 this.height = 0; | 397 this.height = 0; |
| 334 /** @type {number} */ | 398 /** @type {number} */ |
| 335 this.top = 0; | 399 this.top = 0; |
| 336 /** @type {number} */ | 400 /** @type {number} */ |
| 337 this.bottom = 0; | 401 this.bottom = 0; |
| 338 /** @type {number} */ | 402 /** @type {number} */ |
| 339 this.left = 0; | 403 this.left = 0; |
| 340 /** @type {number} */ | 404 /** @type {number} */ |
| 341 this.right = 0; | 405 this.right = 0; |
| 342 }; | 406 }; |
| OLD | NEW |