Chromium Code Reviews| Index: remoting/webapp/js_proto/chrome_proto.js |
| diff --git a/remoting/webapp/js_proto/chrome_proto.js b/remoting/webapp/js_proto/chrome_proto.js |
| index f7b9a6f738590dbbfe5856bb1445b5b87f9c95b2..25c2455ab4eaa1b187189afc26ca8dd4d180af59 100644 |
| --- a/remoting/webapp/js_proto/chrome_proto.js |
| +++ b/remoting/webapp/js_proto/chrome_proto.js |
| @@ -9,6 +9,33 @@ |
| /** @type {Object} */ |
| var chrome = {}; |
| +/** @constructor */ |
| +chrome.Event = function() { |
| + this.listeners_ = []; |
| +}; |
| + |
| +/** @param {Function} callback */ |
| +chrome.Event.prototype.addListener = function(callback) { |
| + 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
|
| +}; |
| + |
| +/** @param {Function} callback */ |
| +chrome.Event.prototype.removeListener = function(callback) { |
| + for (var i = 0; i < this.listeners_.length; i++) { |
| + if (this.listeners_[i] === callback) { |
| + this.listeners_.splice(i, 1); |
| + break; |
| + } |
| + } |
| +}; |
| + |
| + /** @param {*=} data */ |
| +chrome.Event.prototype.mock$fire = function(data) { |
| + /** @param {Function} listener */ |
| + this.listeners_.forEach(function(listener){ |
| + listener(data); |
| + }); |
| +}; |
| /** @type {Object} */ |
| chrome.app = {}; |
| @@ -31,7 +58,12 @@ chrome.app.window = { |
| /** |
| * @return {AppWindow} |
| */ |
| - current: function() {} |
| + current: function() {}, |
| + /** |
| + * @param {string} id |
| + * @param {function()=} opt_callback |
| + */ |
| + get: function(id, opt_callback) {} |
| }; |
| @@ -43,19 +75,29 @@ chrome.runtime = { |
| message: '' |
| }, |
| /** @return {{version: string, app: {background: Object}}} */ |
| - getManifest: function() {} |
| + getManifest: function() {}, |
| + /** @type {chrome.Event} */ |
| + onSuspend: null, |
| + /** @type {chrome.Event} */ |
| + onConnect: null, |
| + /** @type {chrome.Event} */ |
| + onConnectExternal: null, |
| + /** @type {chrome.Event} */ |
| + onMessage: null, |
| + /** @type {chrome.Event} */ |
| + onMessageExternal: null |
| }; |
| /** |
| - * @type {?function(string):chrome.extension.Port} |
| + * @type {?function(string):chrome.runtime.Port} |
| */ |
| chrome.runtime.connectNative = function(name) {}; |
| /** |
| - * @param {{name:string}} connectInfo |
| - * @return {chrome.extension.Port} |
| + * @param {{ name: string}} config |
| + * @return {chrome.runtime.Port} |
| */ |
| -chrome.runtime.connect = function(connectInfo) {}; |
| +chrome.runtime.connect = function(config) {}; |
| /** |
| * @param {string} extensionId |
| @@ -66,22 +108,42 @@ chrome.runtime.connect = function(connectInfo) {}; |
| chrome.runtime.sendMessage = function( |
| extensionId, message, opt_options, opt_callback) {}; |
| -/** @type {Object} */ |
| -chrome.extension = {}; |
| +/** @constructor */ |
| +chrome.runtime.MessageSender = function () { |
| + /** @type {chrome.Tab} */ |
| + this.tab = null; |
| + /** @type {AppWindow} */ |
| + this.window = null; |
| +}; |
| /** @constructor */ |
| -chrome.extension.Port = function() {}; |
| +chrome.runtime.Port = function() { |
| + this.onMessage = new chrome.Event(); |
| + this.onDisconnect = new chrome.Event(); |
| + |
| + /** @type {string} */ |
| + this.name = ''; |
| + |
| + /** @type {chrome.runtime.MessageSender} */ |
| + this.sender = null; |
| +}; |
| /** @type {chrome.Event} */ |
| -chrome.extension.Port.prototype.onMessage; |
| +chrome.runtime.Port.prototype.onMessage = null; |
| /** @type {chrome.Event} */ |
| -chrome.extension.Port.prototype.onDisconnect; |
| +chrome.runtime.Port.prototype.onDisconnect = null; |
| + |
| +chrome.runtime.Port.prototype.disconnect = function() {}; |
| /** |
| * @param {Object} message |
| */ |
| -chrome.extension.Port.prototype.postMessage = function(message) {}; |
| +chrome.runtime.Port.prototype.postMessage = function(message) {}; |
| + |
| + |
| +/** @type {Object} */ |
| +chrome.extension = {}; |
| /** |
| * @param {*} message |
| @@ -148,7 +210,7 @@ chrome.Storage.prototype.clear = function(opt_callback) {}; |
| * src/chrome/common/extensions/api/context_menus.json |
| */ |
| chrome.contextMenus = {}; |
| -/** @type {ChromeEvent} */ |
| +/** @type {chrome.Event} */ |
| chrome.contextMenus.onClicked; |
| /** |
| * @param {!Object} createProperties |
| @@ -216,27 +278,6 @@ chrome.identity = { |
| 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 = { |
| @@ -259,12 +300,33 @@ chrome.tabs = {}; |
| /** @param {function(chrome.Tab):void} callback */ |
| chrome.tabs.getCurrent = function(callback) {}; |
| +/** |
| + * @param {Object?} options |
| + * @param {function(chrome.Tab)=} opt_callback |
| + */ |
| +chrome.tabs.create = function(options, opt_callback) {}; |
| + |
| +/** |
| + * @param {string} id |
| + * @param {function(chrome.Tab)} callback |
| + */ |
| +chrome.tabs.get = function(id, callback) {}; |
| + |
| +/** |
| + * @param {string} id |
| + * @param {function()=} opt_callback |
| + */ |
| +chrome.tabs.remove = function(id, opt_callback) {}; |
| + |
| + |
| /** @constructor */ |
| chrome.Tab = function() { |
| /** @type {boolean} */ |
| this.pinned = false; |
| /** @type {number} */ |
| this.windowId = 0; |
| + /** @type {string} */ |
| + this.id = ''; |
| }; |
| @@ -294,6 +356,8 @@ var AppWindow = function() { |
| this.onMaximized = null; |
| /** @type {chrome.Event} */ |
| this.onFullscreened = null; |
| + /** @type {string} */ |
| + this.id = ""; |
| }; |
| AppWindow.prototype.close = function() {}; |