Chromium Code Reviews| Index: chrome/browser/resources/bluetooth_internals/bluetooth_internals.js |
| diff --git a/chrome/browser/resources/bluetooth_internals/bluetooth_internals.js b/chrome/browser/resources/bluetooth_internals/bluetooth_internals.js |
| index 308779cb50e4ed62fb1168bf63515bbd91d2ec74..0ca90c1ae32d2cff6e3f3b032c2c6d2f7d03dd57 100644 |
| --- a/chrome/browser/resources/bluetooth_internals/bluetooth_internals.js |
| +++ b/chrome/browser/resources/bluetooth_internals/bluetooth_internals.js |
| @@ -6,7 +6,95 @@ |
| * Javascript for bluetooth_internals.html, served from |
| * chrome://bluetooth-internals/. |
| */ |
| +(function() { |
| + let adapterService = null; |
| -document.addEventListener('DOMContentLoaded', function() { |
| - console.log('Welcome to Bluetooth Internals.'); |
| -}); |
| + /** |
| + * Retrieves a list of devices from the Bluetooth Adapter service. |
| + * @return {!Promise} promise with array of devices |
| + */ |
| + function getDevices() { |
| + return adapterService.getDevices(0, 5).then((response) => response.devices); |
| + } |
| + |
| + /** |
| + * Helper to convert callback-based define() API to a promise-based API. |
| + * @param {!Array<string>} moduleNames |
| + * @return {!Promise} |
| + */ |
| + function importModules(moduleNames) { |
| + return new Promise(function(resolve, reject) { |
|
ortuno
2016/09/22 08:32:53
q: Does this need to be a function? Could it be an
scheib
2016/09/23 20:53:51
These are good suggestions, but ortuno FYI this is
mbrunson
2016/09/24 01:05:46
The define callback has to be a function. I've run
ortuno
2016/09/26 01:57:55
Ah got it. Thanks for the explanation.
|
| + define(moduleNames, function(var_args) { |
|
ortuno
2016/09/22 08:32:53
var_args seems unused?
mbrunson
2016/09/24 01:05:46
Done.
ortuno
2016/09/26 01:57:55
Did you mean to delete the argument or are you lea
mbrunson
2016/09/28 02:18:21
I'm just going to leave this entire function alone
|
| + resolve(Array.prototype.slice.call(arguments, 0)); |
|
ortuno
2016/09/22 08:32:53
I believe you can use the spread operator here. So
ortuno
2016/09/22 08:32:53
I believe you can use the spread operator here. So
mbrunson
2016/09/24 01:05:46
I believe the promise spec only allows a single va
ortuno
2016/09/26 01:57:55
Right. In ES2015 you can use either the spread ope
|
| + }); |
| + }); |
| + } |
| + |
| + /** |
| + * Initializes Mojo proxies for page and Bluetooth services. |
| + * @return {!Promise} |
| + */ |
| + function initializeProxies() { |
| + return importModules([ |
| + 'content/public/renderer/frame_interfaces', |
| + 'chrome/browser/ui/webui/bluetooth_internals/' + |
| + 'bluetooth_internals.mojom', |
| + 'device/bluetooth/public/interfaces/bluetooth.mojom', |
| + 'mojo/public/js/connection', |
| + ]) |
| + .then((modules) => { |
|
ortuno
2016/09/22 08:32:53
.then(([frameInterfaces, mojom, bluetooth, connect
mbrunson
2016/09/24 01:05:46
In which case this has to be one variable; however
|
| + let frameInterfaces = modules[0]; |
| + let mojom = modules[1]; |
| + let bluetooth = modules[2]; |
| + let connection = modules[3]; |
| + |
| + let pageHandler = connection.bindHandleToProxy( |
| + frameInterfaces.getInterface(mojom.InternalsPageHandler.name), |
| + mojom.InternalsPageHandler); |
| + |
| + let AdapterClientImpl = function() {}; |
| + |
| + // Create adapter client implementation |
| + AdapterClientImpl.prototype = { |
|
ortuno
2016/09/22 08:32:53
Is it possible to use ES6 classes?
https://cs.chr
mbrunson
2016/09/24 01:05:46
Done.
|
| + __proto__: bluetooth.AdapterClient.stubClass.prototype, |
| + /** |
| + * Prints added device to console |
| + * @param {!Object} device the device that was added |
| + */ |
| + deviceAdded(device) { |
| + console.log('Device added'); |
| + console.log(device); |
| + }, |
| + |
| + /** |
| + * Prints removed device to console |
| + * @param {!Object} device the device that was removed |
| + */ |
| + deviceRemoved(device) { |
| + console.log('Device added'); |
| + console.log(device); |
| + } |
| + }; |
| + |
| + let adapterClient = new AdapterClientImpl(); |
| + |
| + // Create adapter service interface request |
| + let adapter = connection.bindProxy2(bluetooth.Adapter); |
| + |
| + adapterService = adapter.proxy; |
| + let adapterHandle = adapter.handle; |
| + |
| + // Create a message pipe and bind one end to client implementation |
| + let clientHandle = connection.bindStubDerivedImpl(adapterClient); |
| + |
| + // Send interface request and other end of client message pipe to C++ |
| + pageHandler.getAdapterService(adapterHandle, clientHandle); |
| + }); |
| + } |
| + |
| + document.addEventListener('DOMContentLoaded', function() { |
| + initializeProxies() |
| + .then(() => getDevices()) |
| + .then((devices) => console.log(devices)); |
| + }); |
| +})(); |