OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 // NETWORK_ERROR Note: | 5 // NETWORK_ERROR Note: |
6 // When a device can't be found in the BluetoothAdapter, that generally | 6 // When a device can't be found in the BluetoothAdapter, that generally |
7 // indicates that it's gone out of range. We reject with a NetworkError in that | 7 // indicates that it's gone out of range. We reject with a NetworkError in that |
8 // case. | 8 // case. |
9 // https://webbluetoothchrome.github.io/web-bluetooth/#dom-bluetoothdevice-conne ctgatt | 9 // https://webbluetoothchrome.github.io/web-bluetooth/#dom-bluetoothdevice-conne ctgatt |
10 | 10 |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
92 return WebBluetoothError::ConnectAuthTimeout; | 92 return WebBluetoothError::ConnectAuthTimeout; |
93 case device::BluetoothDevice::ERROR_UNSUPPORTED_DEVICE: | 93 case device::BluetoothDevice::ERROR_UNSUPPORTED_DEVICE: |
94 RecordConnectGATTOutcome(UMAConnectGATTOutcome::UNSUPPORTED_DEVICE); | 94 RecordConnectGATTOutcome(UMAConnectGATTOutcome::UNSUPPORTED_DEVICE); |
95 return WebBluetoothError::ConnectUnsupportedDevice; | 95 return WebBluetoothError::ConnectUnsupportedDevice; |
96 } | 96 } |
97 NOTREACHED(); | 97 NOTREACHED(); |
98 return WebBluetoothError::UntranslatedConnectErrorCode; | 98 return WebBluetoothError::UntranslatedConnectErrorCode; |
99 } | 99 } |
100 | 100 |
101 blink::WebBluetoothError TranslateGATTError( | 101 blink::WebBluetoothError TranslateGATTError( |
102 BluetoothGattService::GattErrorCode error_code) { | 102 BluetoothGattService::GattErrorCode error_code, |
103 UMAGATTOperation operation) { | |
103 switch (error_code) { | 104 switch (error_code) { |
104 case BluetoothGattService::GATT_ERROR_UNKNOWN: | 105 case BluetoothGattService::GATT_ERROR_UNKNOWN: |
105 RecordGATTError(UMAGATTError::UNKNOWN); | 106 RecordGATTOperationOutcome(operation, UMAGATTOperationOutcome::UNKNOWN); |
106 return blink::WebBluetoothError::GATTUnknownError; | 107 return blink::WebBluetoothError::GATTUnknownError; |
107 case BluetoothGattService::GATT_ERROR_FAILED: | 108 case BluetoothGattService::GATT_ERROR_FAILED: |
108 RecordGATTError(UMAGATTError::FAILED); | 109 RecordGATTOperationOutcome(operation, UMAGATTOperationOutcome::FAILED); |
109 return blink::WebBluetoothError::GATTUnknownFailure; | 110 return blink::WebBluetoothError::GATTUnknownFailure; |
110 case BluetoothGattService::GATT_ERROR_IN_PROGRESS: | 111 case BluetoothGattService::GATT_ERROR_IN_PROGRESS: |
111 RecordGATTError(UMAGATTError::IN_PROGRESS); | 112 RecordGATTOperationOutcome(operation, |
113 UMAGATTOperationOutcome::IN_PROGRESS); | |
112 return blink::WebBluetoothError::GATTOperationInProgress; | 114 return blink::WebBluetoothError::GATTOperationInProgress; |
113 case BluetoothGattService::GATT_ERROR_INVALID_LENGTH: | 115 case BluetoothGattService::GATT_ERROR_INVALID_LENGTH: |
116 RecordGATTOperationOutcome(operation, | |
117 UMAGATTOperationOutcome::INVALID_LENGTH); | |
114 return blink::WebBluetoothError::GATTInvalidAttributeLength; | 118 return blink::WebBluetoothError::GATTInvalidAttributeLength; |
115 case BluetoothGattService::GATT_ERROR_NOT_PERMITTED: | 119 case BluetoothGattService::GATT_ERROR_NOT_PERMITTED: |
120 RecordGATTOperationOutcome(operation, | |
121 UMAGATTOperationOutcome::NOT_PERMITTED); | |
116 return blink::WebBluetoothError::GATTNotPermitted; | 122 return blink::WebBluetoothError::GATTNotPermitted; |
117 case BluetoothGattService::GATT_ERROR_NOT_AUTHORIZED: | 123 case BluetoothGattService::GATT_ERROR_NOT_AUTHORIZED: |
124 RecordGATTOperationOutcome(operation, | |
125 UMAGATTOperationOutcome::NOT_AUTHORIZED); | |
118 return blink::WebBluetoothError::GATTNotAuthorized; | 126 return blink::WebBluetoothError::GATTNotAuthorized; |
119 case BluetoothGattService::GATT_ERROR_NOT_PAIRED: | 127 case BluetoothGattService::GATT_ERROR_NOT_PAIRED: |
120 RecordGATTError(UMAGATTError::NOT_PAIRED); | 128 RecordGATTOperationOutcome(operation, |
129 UMAGATTOperationOutcome::NOT_PAIRED); | |
121 return blink::WebBluetoothError::GATTNotPaired; | 130 return blink::WebBluetoothError::GATTNotPaired; |
122 case BluetoothGattService::GATT_ERROR_NOT_SUPPORTED: | 131 case BluetoothGattService::GATT_ERROR_NOT_SUPPORTED: |
132 RecordGATTOperationOutcome(operation, | |
133 UMAGATTOperationOutcome::NOT_SUPPORTED); | |
123 return blink::WebBluetoothError::GATTNotSupported; | 134 return blink::WebBluetoothError::GATTNotSupported; |
124 } | 135 } |
125 NOTREACHED(); | 136 NOTREACHED(); |
126 return blink::WebBluetoothError::GATTUntranslatedErrorCode; | 137 return blink::WebBluetoothError::GATTUntranslatedErrorCode; |
127 } | 138 } |
128 | 139 |
129 } // namespace | 140 } // namespace |
130 | 141 |
131 BluetoothDispatcherHost::BluetoothDispatcherHost(int render_process_id) | 142 BluetoothDispatcherHost::BluetoothDispatcherHost(int render_process_id) |
132 : BrowserMessageFilter(BluetoothMsgStart), | 143 : BrowserMessageFilter(BluetoothMsgStart), |
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
442 } | 453 } |
443 const std::string& service_instance_id = characteristic_iter->second; | 454 const std::string& service_instance_id = characteristic_iter->second; |
444 | 455 |
445 auto device_iter = service_to_device_.find(service_instance_id); | 456 auto device_iter = service_to_device_.find(service_instance_id); |
446 | 457 |
447 CHECK(device_iter != service_to_device_.end()); | 458 CHECK(device_iter != service_to_device_.end()); |
448 | 459 |
449 device::BluetoothDevice* device = | 460 device::BluetoothDevice* device = |
450 adapter_->GetDevice(device_iter->second /* device_instance_id */); | 461 adapter_->GetDevice(device_iter->second /* device_instance_id */); |
451 if (device == nullptr) { // See "NETWORK_ERROR Note" above. | 462 if (device == nullptr) { // See "NETWORK_ERROR Note" above. |
463 RecordCharacteristicReadValueOutcome(UMAGATTOperationOutcome::NO_DEVICE); | |
452 Send(new BluetoothMsg_ReadCharacteristicValueError( | 464 Send(new BluetoothMsg_ReadCharacteristicValueError( |
453 thread_id, request_id, WebBluetoothError::DeviceNoLongerInRange)); | 465 thread_id, request_id, WebBluetoothError::DeviceNoLongerInRange)); |
454 return; | 466 return; |
455 } | 467 } |
456 | 468 |
457 BluetoothGattService* service = device->GetGattService(service_instance_id); | 469 BluetoothGattService* service = device->GetGattService(service_instance_id); |
458 if (service == nullptr) { | 470 if (service == nullptr) { |
471 RecordCharacteristicReadValueOutcome(UMAGATTOperationOutcome::NO_SERVICE); | |
459 Send(new BluetoothMsg_ReadCharacteristicValueError( | 472 Send(new BluetoothMsg_ReadCharacteristicValueError( |
460 thread_id, request_id, WebBluetoothError::ServiceNoLongerExists)); | 473 thread_id, request_id, WebBluetoothError::ServiceNoLongerExists)); |
461 return; | 474 return; |
462 } | 475 } |
463 | 476 |
464 BluetoothGattCharacteristic* characteristic = | 477 BluetoothGattCharacteristic* characteristic = |
465 service->GetCharacteristic(characteristic_instance_id); | 478 service->GetCharacteristic(characteristic_instance_id); |
466 if (characteristic == nullptr) { | 479 if (characteristic == nullptr) { |
480 RecordCharacteristicReadValueOutcome( | |
481 UMAGATTOperationOutcome::NO_CHARACTERISTIC); | |
467 Send(new BluetoothMsg_ReadCharacteristicValueError( | 482 Send(new BluetoothMsg_ReadCharacteristicValueError( |
468 thread_id, request_id, | 483 thread_id, request_id, |
469 WebBluetoothError::CharacteristicNoLongerExists)); | 484 WebBluetoothError::CharacteristicNoLongerExists)); |
470 return; | 485 return; |
471 } | 486 } |
472 | 487 |
473 characteristic->ReadRemoteCharacteristic( | 488 characteristic->ReadRemoteCharacteristic( |
474 base::Bind(&BluetoothDispatcherHost::OnCharacteristicValueRead, | 489 base::Bind(&BluetoothDispatcherHost::OnCharacteristicValueRead, |
475 weak_ptr_factory_.GetWeakPtr(), thread_id, request_id), | 490 weak_ptr_factory_.GetWeakPtr(), thread_id, request_id), |
476 base::Bind(&BluetoothDispatcherHost::OnCharacteristicReadValueError, | 491 base::Bind(&BluetoothDispatcherHost::OnCharacteristicReadValueError, |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
509 } | 524 } |
510 const std::string& service_instance_id = characteristic_iter->second; | 525 const std::string& service_instance_id = characteristic_iter->second; |
511 | 526 |
512 auto device_iter = service_to_device_.find(service_instance_id); | 527 auto device_iter = service_to_device_.find(service_instance_id); |
513 | 528 |
514 CHECK(device_iter != service_to_device_.end()); | 529 CHECK(device_iter != service_to_device_.end()); |
515 | 530 |
516 device::BluetoothDevice* device = | 531 device::BluetoothDevice* device = |
517 adapter_->GetDevice(device_iter->second /* device_instance_id */); | 532 adapter_->GetDevice(device_iter->second /* device_instance_id */); |
518 if (device == nullptr) { // See "NETWORK_ERROR Note" above. | 533 if (device == nullptr) { // See "NETWORK_ERROR Note" above. |
534 RecordCharacteristicWriteValueOutcome(UMAGATTOperationOutcome::NO_DEVICE); | |
519 Send(new BluetoothMsg_WriteCharacteristicValueError( | 535 Send(new BluetoothMsg_WriteCharacteristicValueError( |
520 thread_id, request_id, WebBluetoothError::DeviceNoLongerInRange)); | 536 thread_id, request_id, WebBluetoothError::DeviceNoLongerInRange)); |
521 return; | 537 return; |
522 } | 538 } |
523 | 539 |
524 BluetoothGattService* service = device->GetGattService(service_instance_id); | 540 BluetoothGattService* service = device->GetGattService(service_instance_id); |
525 if (service == nullptr) { | 541 if (service == nullptr) { |
542 RecordCharacteristicWriteValueOutcome(UMAGATTOperationOutcome::NO_SERVICE); | |
526 Send(new BluetoothMsg_WriteCharacteristicValueError( | 543 Send(new BluetoothMsg_WriteCharacteristicValueError( |
527 thread_id, request_id, WebBluetoothError::ServiceNoLongerExists)); | 544 thread_id, request_id, WebBluetoothError::ServiceNoLongerExists)); |
528 return; | 545 return; |
529 } | 546 } |
530 | 547 |
531 BluetoothGattCharacteristic* characteristic = | 548 BluetoothGattCharacteristic* characteristic = |
532 service->GetCharacteristic(characteristic_instance_id); | 549 service->GetCharacteristic(characteristic_instance_id); |
533 if (characteristic == nullptr) { | 550 if (characteristic == nullptr) { |
551 RecordCharacteristicWriteValueOutcome( | |
552 UMAGATTOperationOutcome::NO_CHARACTERISTIC); | |
534 Send(new BluetoothMsg_WriteCharacteristicValueError( | 553 Send(new BluetoothMsg_WriteCharacteristicValueError( |
535 thread_id, request_id, | 554 thread_id, request_id, |
536 WebBluetoothError::CharacteristicNoLongerExists)); | 555 WebBluetoothError::CharacteristicNoLongerExists)); |
537 return; | 556 return; |
538 } | 557 } |
539 characteristic->WriteRemoteCharacteristic( | 558 characteristic->WriteRemoteCharacteristic( |
540 value, base::Bind(&BluetoothDispatcherHost::OnWriteValueSuccess, | 559 value, base::Bind(&BluetoothDispatcherHost::OnWriteValueSuccess, |
541 weak_ptr_factory_.GetWeakPtr(), thread_id, request_id), | 560 weak_ptr_factory_.GetWeakPtr(), thread_id, request_id), |
542 base::Bind(&BluetoothDispatcherHost::OnWriteValueFailed, | 561 base::Bind(&BluetoothDispatcherHost::OnWriteValueFailed, |
543 weak_ptr_factory_.GetWeakPtr(), thread_id, request_id)); | 562 weak_ptr_factory_.GetWeakPtr(), thread_id, request_id)); |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
689 } | 708 } |
690 RecordGetPrimaryServiceOutcome(UMAGetPrimaryServiceOutcome::NOT_FOUND); | 709 RecordGetPrimaryServiceOutcome(UMAGetPrimaryServiceOutcome::NOT_FOUND); |
691 Send(new BluetoothMsg_GetPrimaryServiceError( | 710 Send(new BluetoothMsg_GetPrimaryServiceError( |
692 thread_id, request_id, WebBluetoothError::ServiceNotFound)); | 711 thread_id, request_id, WebBluetoothError::ServiceNotFound)); |
693 } | 712 } |
694 | 713 |
695 void BluetoothDispatcherHost::OnCharacteristicValueRead( | 714 void BluetoothDispatcherHost::OnCharacteristicValueRead( |
696 int thread_id, | 715 int thread_id, |
697 int request_id, | 716 int request_id, |
698 const std::vector<uint8>& value) { | 717 const std::vector<uint8>& value) { |
718 RecordCharacteristicReadValueOutcome(UMAGATTOperationOutcome::SUCCESS); | |
699 Send(new BluetoothMsg_ReadCharacteristicValueSuccess(thread_id, request_id, | 719 Send(new BluetoothMsg_ReadCharacteristicValueSuccess(thread_id, request_id, |
700 value)); | 720 value)); |
701 } | 721 } |
702 | 722 |
703 void BluetoothDispatcherHost::OnCharacteristicReadValueError( | 723 void BluetoothDispatcherHost::OnCharacteristicReadValueError( |
704 int thread_id, | 724 int thread_id, |
705 int request_id, | 725 int request_id, |
706 device::BluetoothGattService::GattErrorCode error_code) { | 726 device::BluetoothGattService::GattErrorCode error_code) { |
727 // TranslateGATTError calls RecordGATTOperationOutcome with | |
Jeffrey Yasskin
2015/08/14 21:33:22
This comment could be shorter: "TranslateGATTError
ortuno
2015/08/14 21:42:20
Done.
| |
728 // UMAGATTOperation::CHARACTERISTIC_READ as a parameter. | |
729 // This should take care of recording the outcome for this readValue call. | |
707 Send(new BluetoothMsg_ReadCharacteristicValueError( | 730 Send(new BluetoothMsg_ReadCharacteristicValueError( |
708 thread_id, request_id, TranslateGATTError(error_code))); | 731 thread_id, request_id, |
732 TranslateGATTError(error_code, UMAGATTOperation::CHARACTERISTIC_READ))); | |
709 } | 733 } |
710 | 734 |
711 void BluetoothDispatcherHost::OnWriteValueSuccess(int thread_id, | 735 void BluetoothDispatcherHost::OnWriteValueSuccess(int thread_id, |
712 int request_id) { | 736 int request_id) { |
737 RecordCharacteristicWriteValueOutcome(UMAGATTOperationOutcome::SUCCESS); | |
713 Send(new BluetoothMsg_WriteCharacteristicValueSuccess(thread_id, request_id)); | 738 Send(new BluetoothMsg_WriteCharacteristicValueSuccess(thread_id, request_id)); |
714 } | 739 } |
715 | 740 |
716 void BluetoothDispatcherHost::OnWriteValueFailed( | 741 void BluetoothDispatcherHost::OnWriteValueFailed( |
717 int thread_id, | 742 int thread_id, |
718 int request_id, | 743 int request_id, |
719 device::BluetoothGattService::GattErrorCode error_code) { | 744 device::BluetoothGattService::GattErrorCode error_code) { |
745 // TranslateGATTError calls RecordGATTOperationOutcome with | |
746 // UMAGATTOperation::CHARACTERISTIC_WRITE as a parameter. | |
747 // This should take care of recording the outcome for this writeValue call. | |
720 Send(new BluetoothMsg_WriteCharacteristicValueError( | 748 Send(new BluetoothMsg_WriteCharacteristicValueError( |
721 thread_id, request_id, TranslateGATTError(error_code))); | 749 thread_id, request_id, |
750 TranslateGATTError(error_code, UMAGATTOperation::CHARACTERISTIC_WRITE))); | |
722 } | 751 } |
723 | 752 |
724 } // namespace content | 753 } // namespace content |
OLD | NEW |