| 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 /** | 5 /** |
| 6 * Takes the |pluginsData| input argument which represents data about the | 6 * Takes the |pluginsData| input argument which represents data about the |
| 7 * currently installed/running plugins and populates the html jstemplate with | 7 * currently installed/running plugins and populates the html jstemplate with |
| 8 * that data. | 8 * that data. |
| 9 * @param {Object} pluginsData Detailed info about installed plugins. Same | 9 * @param {Object} pluginsData Detailed info about installed plugins. Same |
| 10 * expected format as returnPluginsData(). | 10 * expected format as returnPluginsData(). |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 256 * @return {!Promise} | 256 * @return {!Promise} |
| 257 */ | 257 */ |
| 258 function importModules(moduleNames) { | 258 function importModules(moduleNames) { |
| 259 return new Promise(function(resolve, reject) { | 259 return new Promise(function(resolve, reject) { |
| 260 define(moduleNames, function(var_args) { | 260 define(moduleNames, function(var_args) { |
| 261 resolve(Array.prototype.slice.call(arguments, 0)); | 261 resolve(Array.prototype.slice.call(arguments, 0)); |
| 262 }); | 262 }); |
| 263 }); | 263 }); |
| 264 } | 264 } |
| 265 | 265 |
| 266 // NOTE: Need to keep a reference to the stub here such that it is not garbage | 266 // NOTE: Need to keep a global reference to the |pageImpl| such that it is not |
| 267 // collected, which causes the pipe to close and future calls from C++ to JS to | 267 // garbage collected, which causes the pipe to close and future calls from C++ |
| 268 // get dropped. | 268 // to JS to get dropped. This also allows tests to make direct calls on it. |
| 269 var pluginsPageStub = null; | 269 var pageImpl = null; |
| 270 | |
| 271 var browserProxy = null; | 270 var browserProxy = null; |
| 272 // Exposed globally such that the tests can make direct calls on it. | |
| 273 var pageProxy = null; | |
| 274 | 271 |
| 275 function initializeProxies() { | 272 function initializeProxies() { |
| 276 return importModules([ | 273 return importModules([ |
| 277 'mojo/public/js/bindings', | |
| 278 'mojo/public/js/core', | |
| 279 'mojo/public/js/connection', | 274 'mojo/public/js/connection', |
| 280 'chrome/browser/ui/webui/plugins/plugins.mojom', | 275 'chrome/browser/ui/webui/plugins/plugins.mojom', |
| 281 'content/public/renderer/frame_service_registry', | 276 'content/public/renderer/frame_service_registry', |
| 282 ]).then(function(modules) { | 277 ]).then(function(modules) { |
| 283 var bindings = modules[0]; | 278 var connection = modules[0]; |
| 284 var core = modules[1]; | 279 var pluginsMojom = modules[1]; |
| 285 var connection = modules[2]; | 280 var serviceRegistry = modules[2]; |
| 286 var pluginsMojom = modules[3]; | |
| 287 var serviceProvider = modules[4]; | |
| 288 | 281 |
| 289 browserProxy = connection.bindHandleToProxy( | 282 browserProxy = connection.bindHandleToProxy( |
| 290 serviceProvider.connectToService(pluginsMojom.PluginsPageHandler.name), | 283 serviceRegistry.connectToService(pluginsMojom.PluginsPageHandler.name), |
| 291 pluginsMojom.PluginsPageHandler); | 284 pluginsMojom.PluginsPageHandler); |
| 292 | 285 |
| 293 // Connect pipe handle to JS code. | 286 /** @constructor */ |
| 294 var pipe = core.createMessagePipe(); | 287 var PluginsPageImpl = function() {}; |
| 295 pluginsPageStub = connection.bindHandleToStub( | |
| 296 pipe.handle0, pluginsMojom.PluginsPage); | |
| 297 | 288 |
| 298 pageProxy = { | 289 PluginsPageImpl.prototype = { |
| 299 __proto__: pluginsMojom.PluginsPage.stubClass.prototype, | 290 __proto__: pluginsMojom.PluginsPage.stubClass.prototype, |
| 291 |
| 292 /** @override */ |
| 300 onPluginsUpdated: function(plugins) { | 293 onPluginsUpdated: function(plugins) { |
| 301 returnPluginsData({plugins: plugins}); | 294 returnPluginsData({plugins: plugins}); |
| 302 }, | 295 }, |
| 303 }; | 296 }; |
| 297 pageImpl = new PluginsPageImpl(); |
| 304 | 298 |
| 305 bindings.StubBindings(pluginsPageStub).delegate = pageProxy; | 299 // Create a message pipe, with one end of the pipe already connected to JS. |
| 306 // Send pipe handle to C++. | 300 var handle = connection.bindStubDerivedImpl(pageImpl); |
| 307 browserProxy.setClientPage(pipe.handle1); | 301 // Send the other end of the pipe to C++. |
| 302 browserProxy.setClientPage(handle); |
| 308 }); | 303 }); |
| 309 } | 304 } |
| 310 | 305 |
| 311 /** | 306 /** |
| 312 * Overriden by tests to give them a chance to setup a fake Mojo browser proxy | 307 * Overriden by tests to give them a chance to setup a fake Mojo browser proxy |
| 313 * before any other code executes. | 308 * before any other code executes. |
| 314 * @return {!Promise} A promise firing once necessary setup has been completed. | 309 * @return {!Promise} A promise firing once necessary setup has been completed. |
| 315 */ | 310 */ |
| 316 var setupFn = setupFn || function() { return Promise.resolve(); }; | 311 var setupFn = setupFn || function() { return Promise.resolve(); }; |
| 317 | 312 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 334 | 329 |
| 335 // Unfortunately, we don't have notifications for plugin (list) status | 330 // Unfortunately, we don't have notifications for plugin (list) status |
| 336 // changes (yet), so in the meanwhile just update regularly. | 331 // changes (yet), so in the meanwhile just update regularly. |
| 337 setInterval(function() { | 332 setInterval(function() { |
| 338 browserProxy.getPluginsData().then(returnPluginsData); | 333 browserProxy.getPluginsData().then(returnPluginsData); |
| 339 }, 30000); | 334 }, 30000); |
| 340 }); | 335 }); |
| 341 } | 336 } |
| 342 | 337 |
| 343 document.addEventListener('DOMContentLoaded', main); | 338 document.addEventListener('DOMContentLoaded', main); |
| OLD | NEW |