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

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

Issue 2448713002: bluetooth: Add Device connection logic and accompanying user interface. (Closed)
Patch Set: Remove binding variable in Device.Create Created 4 years, 1 month 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 9
10 cr.define('bluetooth_internals', function() { 10 cr.define('bluetooth_internals', function() {
11
12 /** @type {!Map<string, !interfaces.BluetoothDevice.Device.proxyClass>} */
13 var deviceAddressToProxy = new Map();
14
11 function initializeViews() { 15 function initializeViews() {
12 var adapterBroker = null; 16 var adapterBroker = null;
13 adapter_broker.getAdapterBroker() 17 adapter_broker.getAdapterBroker()
14 .then(function(broker) { adapterBroker = broker; }) 18 .then(function(broker) { adapterBroker = broker; })
15 .then(function() { return adapterBroker.getInfo(); }) 19 .then(function() { return adapterBroker.getInfo(); })
16 .then(function(response) { console.log('adapter', response.info); }) 20 .then(function(response) { console.log('adapter', response.info); })
17 .then(function() { return adapterBroker.getDevices(); }) 21 .then(function() { return adapterBroker.getDevices(); })
18 .then(function(response) { 22 .then(function(response) {
19 // Hook up device collection events. 23 // Hook up device collection events.
20 var devices = new device_collection.DeviceCollection([]); 24 var devices = new device_collection.DeviceCollection([]);
21 adapterBroker.addEventListener('deviceadded', function(event) { 25 adapterBroker.addEventListener('deviceadded', function(event) {
22 devices.addOrUpdate(event.detail.deviceInfo); 26 devices.addOrUpdate(event.detail.deviceInfo);
23 }); 27 });
24 adapterBroker.addEventListener('devicechanged', function(event) { 28 adapterBroker.addEventListener('devicechanged', function(event) {
25 devices.addOrUpdate(event.detail.deviceInfo); 29 devices.addOrUpdate(event.detail.deviceInfo);
26 }); 30 });
27 adapterBroker.addEventListener('deviceremoved', function(event) { 31 adapterBroker.addEventListener('deviceremoved', function(event) {
28 devices.remove(event.detail.deviceInfo); 32 devices.remove(event.detail.deviceInfo);
29 }); 33 });
30 34
31 response.devices.forEach(devices.addOrUpdate, 35 response.devices.forEach(devices.addOrUpdate,
32 devices /* this */); 36 devices /* this */);
33 37
34 var deviceTable = new device_table.DeviceTable(); 38 var deviceTable = new device_table.DeviceTable();
39
40 deviceTable.addEventListener('inspectpressed', function(event) {
41 // TODO(crbug.com/663470): Move connection logic to DeviceDetailsView
42 // when it's added in chrome://bluetooth-internals.
43 var address = event.detail.address;
44 var proxy = deviceAddressToProxy.get(address);
45
46 if (proxy) {
47 // Device is already connected, so disconnect.
48 proxy.disconnect();
49 deviceAddressToProxy.delete(address);
50 devices.updateConnectionStatus(
51 address, device_collection.ConnectionStatus.DISCONNECTED);
52 return;
53 }
54
55 devices.updateConnectionStatus(
56 address, device_collection.ConnectionStatus.CONNECTING);
57 adapterBroker.connectToDevice(address).then(function(deviceProxy) {
58 if (!devices.getByAddress(address)) {
59 // Device no longer in list, so drop the connection.
60 deviceProxy.disconnect();
61 return;
62 }
63
64 deviceAddressToProxy.set(address, deviceProxy);
65 devices.updateConnectionStatus(
66 address, device_collection.ConnectionStatus.CONNECTED);
67
68 // Fetch services asynchronously.
69 return deviceProxy.getServices();
70 }).then(function(response) {
71 var deviceInfo = devices.getByAddress(address);
72 deviceInfo.services = response.services;
73 devices.addOrUpdate(deviceInfo);
74 }).catch(function(error) {
75 devices.updateConnectionStatus(
76 address,
77 device_collection.ConnectionStatus.DISCONNECTED,
78 error);
79 });
80 });
81
35 deviceTable.setDevices(devices); 82 deviceTable.setDevices(devices);
36 document.body.appendChild(deviceTable); 83 document.body.appendChild(deviceTable);
37 }) 84 })
38 .catch(function(error) { console.error(error); }); 85 .catch(function(error) { console.error(error); });
39 } 86 }
40 87
41 return { 88 return {
42 initializeViews: initializeViews 89 initializeViews: initializeViews
43 }; 90 };
44 91
45 }); 92 });
46 93
47 document.addEventListener( 94 document.addEventListener(
48 'DOMContentLoaded', bluetooth_internals.initializeViews); 95 'DOMContentLoaded', bluetooth_internals.initializeViews);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698