Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 === 'discovering') { | |
|
dpapad
2017/01/05 23:30:33
Is there a need for two separate if conditions? Ho
mbrunson
2017/01/06 01:18:56
Done.
| |
| 128 if (!event.detail.value && !userRequestedScanStop && discoverySession) { | |
| 129 updateStoppedDiscoverySession(); | |
| 130 Snackbar.show( | |
| 131 'Discovery session ended unexpectedly', SnackbarType.WARNING); | |
| 132 } | |
| 133 } | |
| 134 }); | |
| 135 } | |
| 136 | |
| 111 function setupDeviceSystem(response) { | 137 function setupDeviceSystem(response) { |
| 112 // Hook up device collection events. | 138 // Hook up device collection events. |
| 113 adapterBroker.addEventListener('deviceadded', function(event) { | 139 adapterBroker.addEventListener('deviceadded', function(event) { |
| 114 devices.addOrUpdate(event.detail.deviceInfo); | 140 devices.addOrUpdate(event.detail.deviceInfo); |
| 115 }); | 141 }); |
| 116 adapterBroker.addEventListener('devicechanged', function(event) { | 142 adapterBroker.addEventListener('devicechanged', function(event) { |
| 117 devices.addOrUpdate(event.detail.deviceInfo); | 143 devices.addOrUpdate(event.detail.deviceInfo); |
| 118 }); | 144 }); |
| 119 adapterBroker.addEventListener('deviceremoved', function(event) { | 145 adapterBroker.addEventListener('deviceremoved', function(event) { |
| 120 devices.remove(event.detail.deviceInfo); | 146 devices.remove(event.detail.deviceInfo); |
| 121 }); | 147 }); |
| 122 | 148 |
| 123 response.devices.forEach(devices.addOrUpdate, devices /* this */); | 149 response.devices.forEach(devices.addOrUpdate, devices /* this */); |
| 124 | 150 |
| 125 devicesPage.setDevices(devices); | 151 devicesPage.setDevices(devices); |
| 126 devicesPage.pageDiv.addEventListener('inspectpressed', handleInspect); | 152 devicesPage.pageDiv.addEventListener('inspectpressed', handleInspect); |
| 153 | |
| 154 devicesPage.pageDiv.addEventListener('scanpressed', function(event) { | |
| 155 if (discoverySession && discoverySession.ptr.isBound()) { | |
| 156 userRequestedScanStop = true; | |
| 157 devicesPage.setScanStatus(devices_page.ScanStatus.STOPPING); | |
| 158 | |
| 159 discoverySession.stop().then(function(response) { | |
| 160 if (response.success) { | |
| 161 updateStoppedDiscoverySession(); | |
|
dpapad
2017/01/05 23:30:33
Is the |userRequestedScanStop| really necessary? M
mbrunson
2017/01/06 01:18:56
It's because of the 'adapterchanged' event that I
| |
| 162 userRequestedScanStop = false; | |
| 163 return; | |
| 164 } | |
| 165 | |
| 166 devicesPage.setScanStatus(devices_page.ScanStatus.ON); | |
| 167 Snackbar.show( | |
| 168 'Failed to stop discovery session', SnackbarType.ERROR); | |
| 169 userRequestedScanStop = false; | |
| 170 }); | |
| 171 | |
| 172 return; | |
| 173 } | |
| 174 | |
| 175 devicesPage.setScanStatus(devices_page.ScanStatus.STARTING); | |
| 176 adapterBroker.startDiscoverySession().then(function(session) { | |
| 177 discoverySession = session; | |
| 178 | |
| 179 discoverySession.ptr.setConnectionErrorHandler(function() { | |
| 180 updateStoppedDiscoverySession(); | |
| 181 Snackbar.show('Discovery session ended', SnackbarType.WARNING); | |
| 182 }); | |
| 183 | |
| 184 devicesPage.setScanStatus(devices_page.ScanStatus.ON); | |
| 185 }).catch(function(error) { | |
| 186 devicesPage.setScanStatus(devices_page.ScanStatus.OFF); | |
| 187 Snackbar.show('Failed to start discovery session', SnackbarType.ERROR); | |
| 188 console.error(error); | |
| 189 }); | |
| 190 }); | |
| 127 } | 191 } |
| 128 | 192 |
| 129 function setupPages() { | 193 function setupPages() { |
| 130 sidebarObj = new window.sidebar.Sidebar($('sidebar')); | 194 sidebarObj = new window.sidebar.Sidebar($('sidebar')); |
| 131 $('menu-btn').addEventListener('click', function() { sidebarObj.open(); }); | 195 $('menu-btn').addEventListener('click', function() { sidebarObj.open(); }); |
| 132 PageManager.addObserver(sidebarObj); | 196 PageManager.addObserver(sidebarObj); |
| 133 PageManager.addObserver(new PageObserver()); | 197 PageManager.addObserver(new PageObserver()); |
| 134 | 198 |
| 135 devicesPage = new DevicesPage(); | 199 devicesPage = new DevicesPage(); |
| 136 PageManager.register(devicesPage); | 200 PageManager.register(devicesPage); |
| 137 | 201 |
| 138 // Set up hash-based navigation. | 202 // Set up hash-based navigation. |
| 139 window.addEventListener('hashchange', function() { | 203 window.addEventListener('hashchange', function() { |
| 140 PageManager.showPageByName(window.location.hash.substr(1)); | 204 PageManager.showPageByName(window.location.hash.substr(1)); |
| 141 }); | 205 }); |
| 142 | 206 |
| 143 if (!window.location.hash) { | 207 if (!window.location.hash) { |
| 144 PageManager.showPageByName(devicesPage.name); | 208 PageManager.showPageByName(devicesPage.name); |
| 145 return; | 209 return; |
| 146 } | 210 } |
| 147 | 211 |
| 148 PageManager.showPageByName(window.location.hash.substr(1)); | 212 PageManager.showPageByName(window.location.hash.substr(1)); |
| 149 } | 213 } |
| 150 | 214 |
| 151 function initializeViews() { | 215 function initializeViews() { |
| 152 setupPages(); | 216 setupPages(); |
| 153 | 217 |
| 154 adapter_broker.getAdapterBroker() | 218 adapter_broker.getAdapterBroker() |
| 155 .then(function(broker) { adapterBroker = broker; }) | 219 .then(function(broker) { adapterBroker = broker; }) |
| 156 .then(function() { return adapterBroker.getInfo(); }) | 220 .then(function() { return adapterBroker.getInfo(); }) |
|
dpapad
2017/01/05 23:30:33
The info returned by this call is never used by se
mbrunson
2017/01/06 01:18:56
The info returned is currently logged to console b
| |
| 157 .then(function(response) { console.log('adapter', response.info); }) | 221 .then(setupAdapterSystem) |
| 158 .then(function() { return adapterBroker.getDevices(); }) | 222 .then(function() { return adapterBroker.getDevices(); }) |
| 159 .then(setupDeviceSystem) | 223 .then(setupDeviceSystem) |
| 160 .catch(function(error) { | 224 .catch(function(error) { |
| 161 Snackbar.show(error.message, SnackbarType.ERROR); | 225 Snackbar.show(error.message, SnackbarType.ERROR); |
| 162 console.error(error); | 226 console.error(error); |
| 163 }); | 227 }); |
| 164 } | 228 } |
| 165 | 229 |
| 166 return { | 230 return { |
| 167 initializeViews: initializeViews | 231 initializeViews: initializeViews |
| 168 }; | 232 }; |
| 169 }); | 233 }); |
| 170 | 234 |
| 171 document.addEventListener( | 235 document.addEventListener( |
| 172 'DOMContentLoaded', bluetooth_internals.initializeViews); | 236 'DOMContentLoaded', bluetooth_internals.initializeViews); |
| OLD | NEW |