| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 #include "modules/bluetooth/BluetoothRemoteGATTCharacteristic.h" | 5 #include "modules/bluetooth/BluetoothRemoteGATTCharacteristic.h" |
| 6 | 6 |
| 7 #include <memory> |
| 8 #include <utility> |
| 7 #include "bindings/core/v8/ScriptPromise.h" | 9 #include "bindings/core/v8/ScriptPromise.h" |
| 8 #include "bindings/core/v8/ScriptPromiseResolver.h" | 10 #include "bindings/core/v8/ScriptPromiseResolver.h" |
| 9 #include "core/dom/DOMException.h" | 11 #include "core/dom/DOMException.h" |
| 10 #include "core/events/Event.h" | 12 #include "core/events/Event.h" |
| 11 #include "core/inspector/ConsoleMessage.h" | 13 #include "core/inspector/ConsoleMessage.h" |
| 12 #include "modules/bluetooth/Bluetooth.h" | 14 #include "modules/bluetooth/Bluetooth.h" |
| 13 #include "modules/bluetooth/BluetoothCharacteristicProperties.h" | 15 #include "modules/bluetooth/BluetoothCharacteristicProperties.h" |
| 14 #include "modules/bluetooth/BluetoothDevice.h" | 16 #include "modules/bluetooth/BluetoothDevice.h" |
| 15 #include "modules/bluetooth/BluetoothError.h" | 17 #include "modules/bluetooth/BluetoothError.h" |
| 18 #include "modules/bluetooth/BluetoothMetrics.h" |
| 16 #include "modules/bluetooth/BluetoothRemoteGATTDescriptor.h" | 19 #include "modules/bluetooth/BluetoothRemoteGATTDescriptor.h" |
| 17 #include "modules/bluetooth/BluetoothRemoteGATTService.h" | 20 #include "modules/bluetooth/BluetoothRemoteGATTService.h" |
| 18 #include "modules/bluetooth/BluetoothRemoteGATTUtils.h" | 21 #include "modules/bluetooth/BluetoothRemoteGATTUtils.h" |
| 19 #include "modules/bluetooth/BluetoothUUID.h" | 22 #include "modules/bluetooth/BluetoothUUID.h" |
| 20 | 23 |
| 21 #include <memory> | |
| 22 #include <utility> | |
| 23 | |
| 24 namespace blink { | 24 namespace blink { |
| 25 | 25 |
| 26 BluetoothRemoteGATTCharacteristic::BluetoothRemoteGATTCharacteristic( | 26 BluetoothRemoteGATTCharacteristic::BluetoothRemoteGATTCharacteristic( |
| 27 ExecutionContext* context, | 27 ExecutionContext* context, |
| 28 mojom::blink::WebBluetoothRemoteGATTCharacteristicPtr characteristic, | 28 mojom::blink::WebBluetoothRemoteGATTCharacteristicPtr characteristic, |
| 29 BluetoothRemoteGATTService* service, | 29 BluetoothRemoteGATTService* service, |
| 30 BluetoothDevice* device) | 30 BluetoothDevice* device) |
| 31 : ContextLifecycleObserver(context), | 31 : ContextLifecycleObserver(context), |
| 32 m_characteristic(std::move(characteristic)), | 32 m_characteristic(std::move(characteristic)), |
| 33 m_service(service), | 33 m_service(service), |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 117 BluetoothRemoteGATTUtils::ConvertWTFVectorToDataView(value.value()); | 117 BluetoothRemoteGATTUtils::ConvertWTFVectorToDataView(value.value()); |
| 118 SetValue(domDataView); | 118 SetValue(domDataView); |
| 119 resolver->resolve(domDataView); | 119 resolver->resolve(domDataView); |
| 120 } else { | 120 } else { |
| 121 resolver->reject(BluetoothError::CreateDOMException(result)); | 121 resolver->reject(BluetoothError::CreateDOMException(result)); |
| 122 } | 122 } |
| 123 } | 123 } |
| 124 | 124 |
| 125 ScriptPromise BluetoothRemoteGATTCharacteristic::readValue( | 125 ScriptPromise BluetoothRemoteGATTCharacteristic::readValue( |
| 126 ScriptState* scriptState) { | 126 ScriptState* scriptState) { |
| 127 RecordWebBluetoothFunctionCall( |
| 128 UMAWebBluetoothFunction::CHARACTERISTIC_READ_VALUE); |
| 129 |
| 127 if (!GetGatt()->connected()) { | 130 if (!GetGatt()->connected()) { |
| 128 return ScriptPromise::rejectWithDOMException( | 131 return ScriptPromise::rejectWithDOMException( |
| 129 scriptState, | 132 scriptState, |
| 130 BluetoothError::CreateNotConnectedException(BluetoothOperation::GATT)); | 133 BluetoothError::CreateNotConnectedException(BluetoothOperation::GATT)); |
| 131 } | 134 } |
| 132 | 135 |
| 133 if (!GetGatt()->device()->IsValidCharacteristic( | 136 if (!GetGatt()->device()->IsValidCharacteristic( |
| 134 m_characteristic->instance_id)) { | 137 m_characteristic->instance_id)) { |
| 135 return ScriptPromise::rejectWithDOMException( | 138 return ScriptPromise::rejectWithDOMException( |
| 136 scriptState, CreateInvalidCharacteristicError()); | 139 scriptState, CreateInvalidCharacteristicError()); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 169 SetValue(BluetoothRemoteGATTUtils::ConvertWTFVectorToDataView(value)); | 172 SetValue(BluetoothRemoteGATTUtils::ConvertWTFVectorToDataView(value)); |
| 170 resolver->resolve(); | 173 resolver->resolve(); |
| 171 } else { | 174 } else { |
| 172 resolver->reject(BluetoothError::CreateDOMException(result)); | 175 resolver->reject(BluetoothError::CreateDOMException(result)); |
| 173 } | 176 } |
| 174 } | 177 } |
| 175 | 178 |
| 176 ScriptPromise BluetoothRemoteGATTCharacteristic::writeValue( | 179 ScriptPromise BluetoothRemoteGATTCharacteristic::writeValue( |
| 177 ScriptState* scriptState, | 180 ScriptState* scriptState, |
| 178 const DOMArrayPiece& value) { | 181 const DOMArrayPiece& value) { |
| 182 RecordWebBluetoothFunctionCall( |
| 183 UMAWebBluetoothFunction::CHARACTERISTIC_WRITE_VALUE); |
| 184 |
| 179 if (!GetGatt()->connected()) { | 185 if (!GetGatt()->connected()) { |
| 180 return ScriptPromise::rejectWithDOMException( | 186 return ScriptPromise::rejectWithDOMException( |
| 181 scriptState, | 187 scriptState, |
| 182 BluetoothError::CreateNotConnectedException(BluetoothOperation::GATT)); | 188 BluetoothError::CreateNotConnectedException(BluetoothOperation::GATT)); |
| 183 } | 189 } |
| 184 | 190 |
| 185 if (!GetGatt()->device()->IsValidCharacteristic( | 191 if (!GetGatt()->device()->IsValidCharacteristic( |
| 186 m_characteristic->instance_id)) { | 192 m_characteristic->instance_id)) { |
| 187 return ScriptPromise::rejectWithDOMException( | 193 return ScriptPromise::rejectWithDOMException( |
| 188 scriptState, CreateInvalidCharacteristicError()); | 194 scriptState, CreateInvalidCharacteristicError()); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 233 | 239 |
| 234 if (result == mojom::blink::WebBluetoothResult::SUCCESS) { | 240 if (result == mojom::blink::WebBluetoothResult::SUCCESS) { |
| 235 resolver->resolve(this); | 241 resolver->resolve(this); |
| 236 } else { | 242 } else { |
| 237 resolver->reject(BluetoothError::CreateDOMException(result)); | 243 resolver->reject(BluetoothError::CreateDOMException(result)); |
| 238 } | 244 } |
| 239 } | 245 } |
| 240 | 246 |
| 241 ScriptPromise BluetoothRemoteGATTCharacteristic::startNotifications( | 247 ScriptPromise BluetoothRemoteGATTCharacteristic::startNotifications( |
| 242 ScriptState* scriptState) { | 248 ScriptState* scriptState) { |
| 249 RecordWebBluetoothFunctionCall( |
| 250 UMAWebBluetoothFunction::CHARACTERISTIC_START_NOTIFICATIONS); |
| 251 |
| 243 if (!GetGatt()->connected()) { | 252 if (!GetGatt()->connected()) { |
| 244 return ScriptPromise::rejectWithDOMException( | 253 return ScriptPromise::rejectWithDOMException( |
| 245 scriptState, | 254 scriptState, |
| 246 BluetoothError::CreateNotConnectedException(BluetoothOperation::GATT)); | 255 BluetoothError::CreateNotConnectedException(BluetoothOperation::GATT)); |
| 247 } | 256 } |
| 248 | 257 |
| 249 if (!GetGatt()->device()->IsValidCharacteristic( | 258 if (!GetGatt()->device()->IsValidCharacteristic( |
| 250 m_characteristic->instance_id)) { | 259 m_characteristic->instance_id)) { |
| 251 return ScriptPromise::rejectWithDOMException( | 260 return ScriptPromise::rejectWithDOMException( |
| 252 scriptState, CreateInvalidCharacteristicError()); | 261 scriptState, CreateInvalidCharacteristicError()); |
| 253 } | 262 } |
| 254 | 263 |
| 255 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); | 264 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); |
| 256 ScriptPromise promise = resolver->promise(); | 265 ScriptPromise promise = resolver->promise(); |
| 257 GetGatt()->AddToActiveAlgorithms(resolver); | 266 GetGatt()->AddToActiveAlgorithms(resolver); |
| 258 | 267 |
| 259 mojom::blink::WebBluetoothService* service = m_device->bluetooth()->Service(); | 268 mojom::blink::WebBluetoothService* service = m_device->bluetooth()->Service(); |
| 260 service->RemoteCharacteristicStartNotifications( | 269 service->RemoteCharacteristicStartNotifications( |
| 261 m_characteristic->instance_id, | 270 m_characteristic->instance_id, |
| 262 convertToBaseCallback( | 271 convertToBaseCallback( |
| 263 WTF::bind(&BluetoothRemoteGATTCharacteristic::NotificationsCallback, | 272 WTF::bind(&BluetoothRemoteGATTCharacteristic::NotificationsCallback, |
| 264 wrapPersistent(this), wrapPersistent(resolver)))); | 273 wrapPersistent(this), wrapPersistent(resolver)))); |
| 265 | 274 |
| 266 return promise; | 275 return promise; |
| 267 } | 276 } |
| 268 | 277 |
| 269 ScriptPromise BluetoothRemoteGATTCharacteristic::stopNotifications( | 278 ScriptPromise BluetoothRemoteGATTCharacteristic::stopNotifications( |
| 270 ScriptState* scriptState) { | 279 ScriptState* scriptState) { |
| 280 RecordWebBluetoothFunctionCall( |
| 281 UMAWebBluetoothFunction::CHARACTERISTIC_STOP_NOTIFICATIONS); |
| 282 |
| 271 if (!GetGatt()->connected()) { | 283 if (!GetGatt()->connected()) { |
| 272 return ScriptPromise::rejectWithDOMException( | 284 return ScriptPromise::rejectWithDOMException( |
| 273 scriptState, | 285 scriptState, |
| 274 BluetoothError::CreateNotConnectedException(BluetoothOperation::GATT)); | 286 BluetoothError::CreateNotConnectedException(BluetoothOperation::GATT)); |
| 275 } | 287 } |
| 276 | 288 |
| 277 if (!GetGatt()->device()->IsValidCharacteristic( | 289 if (!GetGatt()->device()->IsValidCharacteristic( |
| 278 m_characteristic->instance_id)) { | 290 m_characteristic->instance_id)) { |
| 279 return ScriptPromise::rejectWithDOMException( | 291 return ScriptPromise::rejectWithDOMException( |
| 280 scriptState, CreateInvalidCharacteristicError()); | 292 scriptState, CreateInvalidCharacteristicError()); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 291 WTF::bind(&BluetoothRemoteGATTCharacteristic::NotificationsCallback, | 303 WTF::bind(&BluetoothRemoteGATTCharacteristic::NotificationsCallback, |
| 292 wrapPersistent(this), wrapPersistent(resolver), | 304 wrapPersistent(this), wrapPersistent(resolver), |
| 293 mojom::blink::WebBluetoothResult::SUCCESS))); | 305 mojom::blink::WebBluetoothResult::SUCCESS))); |
| 294 return promise; | 306 return promise; |
| 295 } | 307 } |
| 296 | 308 |
| 297 ScriptPromise BluetoothRemoteGATTCharacteristic::getDescriptor( | 309 ScriptPromise BluetoothRemoteGATTCharacteristic::getDescriptor( |
| 298 ScriptState* scriptState, | 310 ScriptState* scriptState, |
| 299 const StringOrUnsignedLong& descriptorUUID, | 311 const StringOrUnsignedLong& descriptorUUID, |
| 300 ExceptionState& exceptionState) { | 312 ExceptionState& exceptionState) { |
| 313 RecordWebBluetoothFunctionCall( |
| 314 UMAWebBluetoothFunction::CHARACTERISTIC_GET_DESCRIPTOR); |
| 315 |
| 301 String descriptor = | 316 String descriptor = |
| 302 BluetoothUUID::getDescriptor(descriptorUUID, exceptionState); | 317 BluetoothUUID::getDescriptor(descriptorUUID, exceptionState); |
| 303 if (exceptionState.hadException()) | 318 if (exceptionState.hadException()) |
| 304 return exceptionState.reject(scriptState); | 319 return exceptionState.reject(scriptState); |
| 305 | 320 |
| 306 return GetDescriptorsImpl(scriptState, | 321 return GetDescriptorsImpl(scriptState, |
| 307 mojom::blink::WebBluetoothGATTQueryQuantity::SINGLE, | 322 mojom::blink::WebBluetoothGATTQueryQuantity::SINGLE, |
| 308 descriptor); | 323 descriptor); |
| 309 } | 324 } |
| 310 | 325 |
| 311 ScriptPromise BluetoothRemoteGATTCharacteristic::getDescriptors( | 326 ScriptPromise BluetoothRemoteGATTCharacteristic::getDescriptors( |
| 312 ScriptState* scriptState, | 327 ScriptState* scriptState, |
| 313 ExceptionState&) { | 328 ExceptionState&) { |
| 329 RecordWebBluetoothFunctionCall( |
| 330 UMAWebBluetoothFunction::CHARACTERISTIC_GET_DESCRIPTORS); |
| 331 |
| 314 return GetDescriptorsImpl( | 332 return GetDescriptorsImpl( |
| 315 scriptState, mojom::blink::WebBluetoothGATTQueryQuantity::MULTIPLE); | 333 scriptState, mojom::blink::WebBluetoothGATTQueryQuantity::MULTIPLE); |
| 316 } | 334 } |
| 317 | 335 |
| 318 ScriptPromise BluetoothRemoteGATTCharacteristic::getDescriptors( | 336 ScriptPromise BluetoothRemoteGATTCharacteristic::getDescriptors( |
| 319 ScriptState* scriptState, | 337 ScriptState* scriptState, |
| 320 const StringOrUnsignedLong& descriptorUUID, | 338 const StringOrUnsignedLong& descriptorUUID, |
| 321 ExceptionState& exceptionState) { | 339 ExceptionState& exceptionState) { |
| 340 RecordWebBluetoothFunctionCall( |
| 341 UMAWebBluetoothFunction::CHARACTERISTIC_GET_DESCRIPTORS); |
| 342 |
| 322 String descriptor = | 343 String descriptor = |
| 323 BluetoothUUID::getDescriptor(descriptorUUID, exceptionState); | 344 BluetoothUUID::getDescriptor(descriptorUUID, exceptionState); |
| 324 if (exceptionState.hadException()) | 345 if (exceptionState.hadException()) |
| 325 return exceptionState.reject(scriptState); | 346 return exceptionState.reject(scriptState); |
| 326 | 347 |
| 327 return GetDescriptorsImpl( | 348 return GetDescriptorsImpl( |
| 328 scriptState, mojom::blink::WebBluetoothGATTQueryQuantity::MULTIPLE, | 349 scriptState, mojom::blink::WebBluetoothGATTQueryQuantity::MULTIPLE, |
| 329 descriptor); | 350 descriptor); |
| 330 } | 351 } |
| 331 | 352 |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 424 DEFINE_TRACE(BluetoothRemoteGATTCharacteristic) { | 445 DEFINE_TRACE(BluetoothRemoteGATTCharacteristic) { |
| 425 visitor->trace(m_service); | 446 visitor->trace(m_service); |
| 426 visitor->trace(m_properties); | 447 visitor->trace(m_properties); |
| 427 visitor->trace(m_value); | 448 visitor->trace(m_value); |
| 428 visitor->trace(m_device); | 449 visitor->trace(m_device); |
| 429 EventTargetWithInlineData::trace(visitor); | 450 EventTargetWithInlineData::trace(visitor); |
| 430 ContextLifecycleObserver::trace(visitor); | 451 ContextLifecycleObserver::trace(visitor); |
| 431 } | 452 } |
| 432 | 453 |
| 433 } // namespace blink | 454 } // namespace blink |
| OLD | NEW |