Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(302)

Side by Side Diff: chrome/browser/resources/bluetooth_internals/bluetooth_internals.js

Issue 2357383002: bluetooth: Add device list retrieval for chrome://bluetooth-internals (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 * Javascript for bluetooth_internals.html, served from 6 * Javascript for bluetooth_internals.html, served from
7 * chrome://bluetooth-internals/. 7 * chrome://bluetooth-internals/.
8 */ 8 */
9 (function() {
10 let adapterService = null;
9 11
10 document.addEventListener('DOMContentLoaded', function() { 12 /**
11 console.log('Welcome to Bluetooth Internals.'); 13 * Retrieves a list of devices from the Bluetooth Adapter service.
12 }); 14 * @return {!Promise} promise with array of devices
15 */
16 function getDevices() {
17 return adapterService.getDevices(0, 5).then((response) => response.devices);
18 }
19
20 /**
21 * Helper to convert callback-based define() API to a promise-based API.
22 * @param {!Array<string>} moduleNames
23 * @return {!Promise}
24 */
25 function importModules(moduleNames) {
26 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.
27 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
28 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
29 });
30 });
31 }
32
33 /**
34 * Initializes Mojo proxies for page and Bluetooth services.
35 * @return {!Promise}
36 */
37 function initializeProxies() {
38 return importModules([
39 'content/public/renderer/frame_interfaces',
40 'chrome/browser/ui/webui/bluetooth_internals/' +
41 'bluetooth_internals.mojom',
42 'device/bluetooth/public/interfaces/bluetooth.mojom',
43 'mojo/public/js/connection',
44 ])
45 .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
46 let frameInterfaces = modules[0];
47 let mojom = modules[1];
48 let bluetooth = modules[2];
49 let connection = modules[3];
50
51 let pageHandler = connection.bindHandleToProxy(
52 frameInterfaces.getInterface(mojom.InternalsPageHandler.name),
53 mojom.InternalsPageHandler);
54
55 let AdapterClientImpl = function() {};
56
57 // Create adapter client implementation
58 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.
59 __proto__: bluetooth.AdapterClient.stubClass.prototype,
60 /**
61 * Prints added device to console
62 * @param {!Object} device the device that was added
63 */
64 deviceAdded(device) {
65 console.log('Device added');
66 console.log(device);
67 },
68
69 /**
70 * Prints removed device to console
71 * @param {!Object} device the device that was removed
72 */
73 deviceRemoved(device) {
74 console.log('Device added');
75 console.log(device);
76 }
77 };
78
79 let adapterClient = new AdapterClientImpl();
80
81 // Create adapter service interface request
82 let adapter = connection.bindProxy2(bluetooth.Adapter);
83
84 adapterService = adapter.proxy;
85 let adapterHandle = adapter.handle;
86
87 // Create a message pipe and bind one end to client implementation
88 let clientHandle = connection.bindStubDerivedImpl(adapterClient);
89
90 // Send interface request and other end of client message pipe to C++
91 pageHandler.getAdapterService(adapterHandle, clientHandle);
92 });
93 }
94
95 document.addEventListener('DOMContentLoaded', function() {
96 initializeProxies()
97 .then(() => getDevices())
98 .then((devices) => console.log(devices));
99 });
100 })();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698