| 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 8cde1c5bbcba2483fa2bd71b78f61081252da7ae..c1872232cdb2d4bafdae1f357b4ba76fba647450 100644
|
| --- a/chrome/browser/resources/bluetooth_internals/bluetooth_internals.js
|
| +++ b/chrome/browser/resources/bluetooth_internals/bluetooth_internals.js
|
| @@ -58,7 +58,9 @@ cr.define('bluetooth_internals', function() {
|
| // Update rssi if it's valid
|
| var rssi = (deviceInfo.rssi && deviceInfo.rssi.value) ||
|
| (device.info.rssi && device.info.rssi.value);
|
| - device.info = deviceInfo;
|
| +
|
| + // Merge given |deviceInfo| with current device info.
|
| + Object.assign(device.info, deviceInfo);
|
| device.info.rssi = { value: rssi };
|
| this.devices.update(device);
|
| }
|
| @@ -118,6 +120,50 @@ cr.define('bluetooth_internals', function() {
|
| });
|
| }
|
|
|
| + function connectDevice(device) {
|
| + return adapter.connectToDevice(device.info.address).then(
|
| + function(response) {
|
| + if (!response.error) {
|
| + device.proxy = connection.bindHandleToProxy(response.device,
|
| + bluetoothDevice.Device);
|
| + return;
|
| + }
|
| +
|
| + // TODO(mbrunson): Replace with more descriptive error messages.
|
| + var errorString = Object.keys(
|
| + bluetoothAdapter.ConnectError.Code)[response.error.code];
|
| +
|
| + throw new Error(errorString);
|
| + }).then(function() {
|
| + // TODO(mbrunson): Remove when ServicesDiscovered() callback function is
|
| + // added to AdapterClient.
|
| + var done = false;
|
| + var fetchJob = setInterval(function() {
|
| + if (!done) {
|
| + if (device.proxy) {
|
| + device.proxy.getServices().then(function(response) {
|
| + device.info.services = response.services;
|
| + done = true;
|
| +
|
| + if (device.info.services) {
|
| + adapterClient.devices.update(device);
|
| + clearInterval(fetchJob);
|
| + }
|
| + });
|
| + } else {
|
| + done = true;
|
| + clearInterval(fetchJob);
|
| + }
|
| + }
|
| + }, 5000);
|
| + });
|
| + }
|
| +
|
| + function disconnectDevice(device) {
|
| + device.proxy = null;
|
| + return Promise.resolve();
|
| + }
|
| +
|
| function initialize() {
|
| initializeProxies()
|
| .then(function() { return adapter.getInfo(); })
|
| @@ -128,6 +174,8 @@ cr.define('bluetooth_internals', function() {
|
| adapterClient /** this */);
|
|
|
| var deviceTable = new device.DeviceTable();
|
| +
|
| + deviceTable.setConnectionHandlers(connectDevice, disconnectDevice);
|
| deviceTable.setDevices(adapterClient.devices);
|
| document.body.appendChild(deviceTable);
|
| })
|
|
|