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..68efb06a83edcdabab79e611aacd535d7ff84a85 100644 |
--- a/chrome/browser/resources/bluetooth_internals/bluetooth_internals.js |
+++ b/chrome/browser/resources/bluetooth_internals/bluetooth_internals.js |
@@ -7,6 +7,86 @@ |
* chrome://bluetooth-internals/. |
*/ |
-document.addEventListener('DOMContentLoaded', function() { |
- console.log('Welcome to Bluetooth Internals.'); |
-}); |
+/** |
+ * The implementation of AdapterClient in |
+ * device/bluetooth/public/interfaces/adapter.mojom. |
+ */ |
+var AdapterClient = function() {}; |
+AdapterClient.prototype = { |
+ /** |
+ * Prints added device to console. |
+ * @param {!Object} device the device that was added |
+ */ |
+ deviceAdded: function(device) { |
+ console.log('Device added'); |
dpapad
2016/10/03 17:51:03
Are those console.logs temporary?
mbrunson
2016/10/03 18:56:03
Yes. They are temporary.
|
+ console.log(device); |
+ }, |
+ |
+ /** |
+ * Prints removed device to console. |
+ * @param {!Object} device the device that was removed |
+ */ |
+ deviceRemoved: function(device) { |
+ console.log('Device removed'); |
+ console.log(device); |
+ } |
+}; |
+ |
+(function() { |
+ var adapter = null; |
+ var adapterClient = null; |
+ var adapterClientHandle = null; |
+ |
+ /** |
+ * Helper to convert callback-based define() API to a promise-based API. |
+ * @param {!Array<string>} moduleNames |
+ * @return {!Promise} |
+ */ |
+ function importModules(moduleNames) { |
dpapad
2016/10/03 17:51:03
This function is repeated 3 times (and now 4), acr
mbrunson
2016/10/03 18:56:02
I've made a bug for this and added a TODO: crbug.c
|
+ return new Promise(function(resolve, reject) { |
+ define(moduleNames, function(var_args) { |
+ resolve(Array.prototype.slice.call(arguments, 0)); |
+ }); |
+ }); |
+ } |
+ |
+ /** |
+ * Initializes Mojo proxies for page and Bluetooth services. |
+ * @return {!Promise} |
+ */ |
+ function initializeProxies() { |
+ return importModules([ |
+ 'content/public/renderer/frame_interfaces', |
dpapad
2016/10/03 17:51:03
Indentation seems quite a bit off here. Shouldn't
mbrunson
2016/10/03 18:56:02
Done.
|
+ 'device/bluetooth/public/interfaces/adapter.mojom', |
+ 'mojo/public/js/connection', |
+ ]) |
+ .then(function(modules) { |
+ var frameInterfaces = modules[0]; |
dpapad
2016/10/03 17:51:03
Nit: I believe that you can use destructuring assi
mbrunson
2016/10/03 18:56:03
Done.
|
+ var bluetoothAdapter = modules[1]; |
+ var connection = modules[2]; |
+ |
+ console.log('Loaded modules'); |
+ |
+ // Hook up the instance properties |
+ AdapterClient.prototype.__proto__ = |
+ bluetoothAdapter.AdapterClient.stubClass.prototype; |
+ |
+ // Create a message pipe and bind one end to client |
+ // implementation |
dpapad
2016/10/03 17:51:03
Nit: Comments should have proper punctuation.
mbrunson
2016/10/03 18:56:02
Done.
|
+ adapterClient = new AdapterClient(); |
+ adapterClientHandle = connection.bindStubDerivedImpl(adapterClient); |
+ |
+ adapter = connection.bindHandleToProxy( |
+ frameInterfaces.getInterface(bluetoothAdapter.Adapter.name), |
+ bluetoothAdapter.Adapter); |
+ |
+ adapter.setClient(adapterClientHandle); |
+ }); |
+ } |
+ |
+ document.addEventListener('DOMContentLoaded', function() { |
+ initializeProxies() |
+ .then(function() { return adapter.getDevices();}) |
+ .then(function(response) {console.log(response.devices);}); |
+ }); |
+})(); |