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

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

Issue 2564113003: bluetooth: Add basic scanning to chrome://bluetooth-internals. (Closed)
Patch Set: Replace discovering string in bluetooth_internals.js Created 3 years, 11 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 9
10 // Expose for testing. 10 // Expose for testing.
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 43
44 /** @type {!Map<string, !interfaces.BluetoothDevice.DevicePtr>} */ 44 /** @type {!Map<string, !interfaces.BluetoothDevice.DevicePtr>} */
45 var deviceAddressToProxy = new Map(); 45 var deviceAddressToProxy = new Map();
46 46
47 /** @type {!device_collection.DeviceCollection} */ 47 /** @type {!device_collection.DeviceCollection} */
48 devices = new device_collection.DeviceCollection([]); 48 devices = new device_collection.DeviceCollection([]);
49 49
50 /** @type {devices_page.DevicesPage} */ 50 /** @type {devices_page.DevicesPage} */
51 var devicesPage = null; 51 var devicesPage = null;
52 52
53 /** @type {interfaces.BluetoothAdapter.DiscoverySession.ptrClass} */
54 var discoverySession = null;
55
56 /** @type {boolean} */
57 var userRequestedScanStop = false;
58
53 function handleInspect(event) { 59 function handleInspect(event) {
54 // TODO(crbug.com/663470): Move connection logic to DeviceDetailsView 60 // TODO(crbug.com/663470): Move connection logic to DeviceDetailsView
55 // when it's added in chrome://bluetooth-internals. 61 // when it's added in chrome://bluetooth-internals.
56 var address = event.detail.address; 62 var address = event.detail.address;
57 var proxy = deviceAddressToProxy.get(address); 63 var proxy = deviceAddressToProxy.get(address);
58 64
59 if (proxy) { 65 if (proxy) {
60 // Device is already connected, so disconnect. 66 // Device is already connected, so disconnect.
61 proxy.disconnect(); 67 proxy.disconnect();
62 deviceAddressToProxy.delete(address); 68 deviceAddressToProxy.delete(address);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 107
102 devices.updateConnectionStatus( 108 devices.updateConnectionStatus(
103 address, device_collection.ConnectionStatus.DISCONNECTED); 109 address, device_collection.ConnectionStatus.DISCONNECTED);
104 110
105 var deviceInfo = devices.getByAddress(address); 111 var deviceInfo = devices.getByAddress(address);
106 Snackbar.show(deviceInfo.name_for_display + ': ' + error.message, 112 Snackbar.show(deviceInfo.name_for_display + ': ' + error.message,
107 SnackbarType.ERROR, 'Retry', function() { handleInspect(event); }); 113 SnackbarType.ERROR, 'Retry', function() { handleInspect(event); });
108 }); 114 });
109 } 115 }
110 116
117 function updateStoppedDiscoverySession() {
118 devicesPage.setScanStatus(devices_page.ScanStatus.OFF);
119 discoverySession.ptr.reset();
120 discoverySession = null;
121 }
122
123 function setupAdapterSystem(response) {
124 console.log('adapter', response.info);
125
126 adapterBroker.addEventListener('adapterchanged', function(event) {
127 if (event.detail.property == adapter_broker.AdapterProperty.DISCOVERING &&
128 !event.detail.value && !userRequestedScanStop && discoverySession) {
129 updateStoppedDiscoverySession();
130 Snackbar.show(
131 'Discovery session ended unexpectedly', SnackbarType.WARNING);
132 }
133 });
134 }
135
111 function setupDeviceSystem(response) { 136 function setupDeviceSystem(response) {
112 // Hook up device collection events. 137 // Hook up device collection events.
113 adapterBroker.addEventListener('deviceadded', function(event) { 138 adapterBroker.addEventListener('deviceadded', function(event) {
114 devices.addOrUpdate(event.detail.deviceInfo); 139 devices.addOrUpdate(event.detail.deviceInfo);
115 }); 140 });
116 adapterBroker.addEventListener('devicechanged', function(event) { 141 adapterBroker.addEventListener('devicechanged', function(event) {
117 devices.addOrUpdate(event.detail.deviceInfo); 142 devices.addOrUpdate(event.detail.deviceInfo);
118 }); 143 });
119 adapterBroker.addEventListener('deviceremoved', function(event) { 144 adapterBroker.addEventListener('deviceremoved', function(event) {
120 devices.remove(event.detail.deviceInfo); 145 devices.remove(event.detail.deviceInfo);
121 }); 146 });
122 147
123 response.devices.forEach(devices.addOrUpdate, devices /* this */); 148 response.devices.forEach(devices.addOrUpdate, devices /* this */);
124 149
125 devicesPage.setDevices(devices); 150 devicesPage.setDevices(devices);
126 devicesPage.pageDiv.addEventListener('inspectpressed', handleInspect); 151 devicesPage.pageDiv.addEventListener('inspectpressed', handleInspect);
152
153 devicesPage.pageDiv.addEventListener('scanpressed', function(event) {
154 if (discoverySession && discoverySession.ptr.isBound()) {
155 userRequestedScanStop = true;
156 devicesPage.setScanStatus(devices_page.ScanStatus.STOPPING);
157
158 discoverySession.stop().then(function(response) {
159 if (response.success) {
160 updateStoppedDiscoverySession();
161 userRequestedScanStop = false;
162 return;
163 }
164
165 devicesPage.setScanStatus(devices_page.ScanStatus.ON);
166 Snackbar.show(
167 'Failed to stop discovery session', SnackbarType.ERROR);
168 userRequestedScanStop = false;
169 });
170
171 return;
172 }
173
174 devicesPage.setScanStatus(devices_page.ScanStatus.STARTING);
175 adapterBroker.startDiscoverySession().then(function(session) {
176 discoverySession = session;
177
178 discoverySession.ptr.setConnectionErrorHandler(function() {
179 updateStoppedDiscoverySession();
180 Snackbar.show('Discovery session ended', SnackbarType.WARNING);
181 });
182
183 devicesPage.setScanStatus(devices_page.ScanStatus.ON);
184 }).catch(function(error) {
185 devicesPage.setScanStatus(devices_page.ScanStatus.OFF);
186 Snackbar.show('Failed to start discovery session', SnackbarType.ERROR);
187 console.error(error);
188 });
189 });
127 } 190 }
128 191
129 function setupPages() { 192 function setupPages() {
130 sidebarObj = new window.sidebar.Sidebar($('sidebar')); 193 sidebarObj = new window.sidebar.Sidebar($('sidebar'));
131 $('menu-btn').addEventListener('click', function() { sidebarObj.open(); }); 194 $('menu-btn').addEventListener('click', function() { sidebarObj.open(); });
132 PageManager.addObserver(sidebarObj); 195 PageManager.addObserver(sidebarObj);
133 PageManager.addObserver(new PageObserver()); 196 PageManager.addObserver(new PageObserver());
134 197
135 devicesPage = new DevicesPage(); 198 devicesPage = new DevicesPage();
136 PageManager.register(devicesPage); 199 PageManager.register(devicesPage);
(...skipping 10 matching lines...) Expand all
147 210
148 PageManager.showPageByName(window.location.hash.substr(1)); 211 PageManager.showPageByName(window.location.hash.substr(1));
149 } 212 }
150 213
151 function initializeViews() { 214 function initializeViews() {
152 setupPages(); 215 setupPages();
153 216
154 adapter_broker.getAdapterBroker() 217 adapter_broker.getAdapterBroker()
155 .then(function(broker) { adapterBroker = broker; }) 218 .then(function(broker) { adapterBroker = broker; })
156 .then(function() { return adapterBroker.getInfo(); }) 219 .then(function() { return adapterBroker.getInfo(); })
157 .then(function(response) { console.log('adapter', response.info); }) 220 .then(setupAdapterSystem)
158 .then(function() { return adapterBroker.getDevices(); }) 221 .then(function() { return adapterBroker.getDevices(); })
159 .then(setupDeviceSystem) 222 .then(setupDeviceSystem)
160 .catch(function(error) { 223 .catch(function(error) {
161 Snackbar.show(error.message, SnackbarType.ERROR); 224 Snackbar.show(error.message, SnackbarType.ERROR);
162 console.error(error); 225 console.error(error);
163 }); 226 });
164 } 227 }
165 228
166 return { 229 return {
167 initializeViews: initializeViews 230 initializeViews: initializeViews
168 }; 231 };
169 }); 232 });
170 233
171 document.addEventListener( 234 document.addEventListener(
172 'DOMContentLoaded', bluetooth_internals.initializeViews); 235 'DOMContentLoaded', bluetooth_internals.initializeViews);
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698