Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "device/bluetooth/bluetooth_adapter_mac_metrics.h" | |
| 6 | |
| 7 #import <CoreBluetooth/CoreBluetooth.h> | |
| 8 #import <Foundation/Foundation.h> | |
| 9 | |
| 10 #include "base/metrics/histogram_macros.h" | |
| 11 | |
| 12 namespace { | |
| 13 | |
| 14 #if !defined(MAC_OS_X_VERSION_10_11) | |
| 15 // Available with macOS 10.11 SDK or after. | |
| 16 const NSInteger CBErrorMaxConnection = 11; | |
| 17 #endif // !defined(MAC_OS_X_VERSION_10_11) | |
| 18 | |
| 19 WebBluetoothMacOSErrors GetWebBluetoothMacOSErrorsFromNSError(NSError* error) { | |
| 20 NSString* error_domain = [error domain]; | |
| 21 NSInteger error_code = [error code]; | |
| 22 if ([error_domain isEqualToString:CBErrorDomain]) { | |
|
ortuno
2017/05/31 06:59:52
We don't need all these enums. We can just histogr
jlebel
2017/06/13 22:31:37
So I would have to do:
if ([error_domain isEqualTo
ortuno
2017/06/14 03:46:29
Yup, what's the difference between CBErrorDomain a
jlebel
2017/06/19 07:07:49
Both errors from CBErrorDomain and CBATTErrorDomai
ortuno
2017/06/20 05:59:40
I see. Let's do what you propose instead of using
| |
| 23 switch (static_cast<CBError>(error_code)) { | |
| 24 case CBErrorUnknown: | |
| 25 return WebBluetoothMacOSErrors:: | |
| 26 WEB_BLUETOOTH_MACOS_ERRORS_CBERROR_UNKNOWN; | |
| 27 case CBErrorInvalidParameters: | |
| 28 return WebBluetoothMacOSErrors:: | |
| 29 WEB_BLUETOOTH_MACOS_ERRORS_CBERROR_INVALID_PARAMETERS; | |
| 30 case CBErrorInvalidHandle: | |
| 31 return WebBluetoothMacOSErrors:: | |
| 32 WEB_BLUETOOTH_MACOS_ERRORS_CBERROR_INVALID_HANDLE; | |
| 33 case CBErrorNotConnected: | |
| 34 return WebBluetoothMacOSErrors:: | |
| 35 WEB_BLUETOOTH_MACOS_ERRORS_CBERROR_NOT_CONNECTED; | |
| 36 case CBErrorOutOfSpace: | |
| 37 return WebBluetoothMacOSErrors:: | |
| 38 WEB_BLUETOOTH_MACOS_ERRORS_CBERROR_OUT_OF_SPACE; | |
| 39 case CBErrorOperationCancelled: | |
| 40 return WebBluetoothMacOSErrors:: | |
| 41 WEB_BLUETOOTH_MACOS_ERRORS_CBERROR_OPERATION_CANCELLED; | |
| 42 case CBErrorConnectionTimeout: | |
| 43 return WebBluetoothMacOSErrors:: | |
| 44 WEB_BLUETOOTH_MACOS_ERRORS_CBERROR_CONNECTION_TIMEOUT; | |
| 45 case CBErrorPeripheralDisconnected: | |
| 46 return WebBluetoothMacOSErrors:: | |
| 47 WEB_BLUETOOTH_MACOS_ERRORS_CBERROR_PERIPHERAL_DISCONNECTED; | |
| 48 case CBErrorUUIDNotAllowed: | |
| 49 return WebBluetoothMacOSErrors:: | |
| 50 WEB_BLUETOOTH_MACOS_ERRORS_CBERROR_UUID_NOT_ALLOWED; | |
| 51 case CBErrorAlreadyAdvertising: | |
| 52 return WebBluetoothMacOSErrors:: | |
| 53 WEB_BLUETOOTH_MACOS_ERRORS_CBERROR_ALREADY_ADVERTISING; | |
| 54 #if defined(MAC_OS_X_VERSION_10_11) | |
| 55 case CBErrorMaxConnection: | |
| 56 return WebBluetoothMacOSErrors:: | |
| 57 WEB_BLUETOOTH_MACOS_ERRORS_CBERROR_MAX_CONNECTION; | |
| 58 #endif // defined(MAC_OS_X_VERSION_10_11) | |
| 59 } | |
| 60 #if !defined(MAC_OS_X_VERSION_10_11) | |
| 61 if (error_code == CBErrorMaxConnection) { | |
| 62 return WebBluetoothMacOSErrors:: | |
| 63 WEB_BLUETOOTH_MACOS_ERRORS_CBERROR_MAX_CONNECTION; | |
| 64 } | |
| 65 #endif // !defined(MAC_OS_X_VERSION_10_11) | |
| 66 return WebBluetoothMacOSErrors::WEB_BLUETOOTH_MACOS_ERRORS_CBERROR_MAX; | |
| 67 } else if ([error_domain isEqualToString:CBATTErrorDomain]) { | |
| 68 switch (static_cast<CBATTError>(error_code)) { | |
| 69 case CBATTErrorSuccess: | |
| 70 return WebBluetoothMacOSErrors:: | |
| 71 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_SUCCESS; | |
| 72 case CBATTErrorInvalidHandle: | |
| 73 return WebBluetoothMacOSErrors:: | |
| 74 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_INVALID_HANDLE; | |
| 75 case CBATTErrorReadNotPermitted: | |
| 76 return WebBluetoothMacOSErrors:: | |
| 77 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_READ_NOT_PERMITTED; | |
| 78 case CBATTErrorWriteNotPermitted: | |
| 79 return WebBluetoothMacOSErrors:: | |
| 80 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_WRITE_NOT_PERMITTED; | |
| 81 case CBATTErrorInvalidPdu: | |
| 82 return WebBluetoothMacOSErrors:: | |
| 83 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_INVALID_PDU; | |
| 84 case CBATTErrorInsufficientAuthentication: | |
| 85 return WebBluetoothMacOSErrors:: | |
| 86 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_INSUFFICIENT_AUTHENTICATION; | |
| 87 case CBATTErrorRequestNotSupported: | |
| 88 return WebBluetoothMacOSErrors:: | |
| 89 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_REQUEST_NOT_SUPPORTED; | |
| 90 case CBATTErrorInvalidOffset: | |
| 91 return WebBluetoothMacOSErrors:: | |
| 92 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_INVALID_OFFSET; | |
| 93 case CBATTErrorInsufficientAuthorization: | |
| 94 return WebBluetoothMacOSErrors:: | |
| 95 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_INSUFFICIENT_AUTHORIZATION; | |
| 96 case CBATTErrorPrepareQueueFull: | |
| 97 return WebBluetoothMacOSErrors:: | |
| 98 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_PREPARE_QUEUE_FULL; | |
| 99 case CBATTErrorAttributeNotFound: | |
| 100 return WebBluetoothMacOSErrors:: | |
| 101 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_ATTRIBUTE_NOT_FOUND; | |
| 102 case CBATTErrorAttributeNotLong: | |
| 103 return WebBluetoothMacOSErrors:: | |
| 104 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_ATTRIBUTE_NOT_LONG; | |
| 105 case CBATTErrorInsufficientEncryptionKeySize: | |
| 106 return WebBluetoothMacOSErrors:: | |
| 107 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_INSUFFICIENT_ENCRYPTION_KEY_S IZE; | |
| 108 case CBATTErrorInvalidAttributeValueLength: | |
| 109 return WebBluetoothMacOSErrors:: | |
| 110 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_INVALID_ATTRIBUTE_VALUE_LENGT H; | |
| 111 case CBATTErrorUnlikelyError: | |
| 112 return WebBluetoothMacOSErrors:: | |
| 113 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_UNLIKELY_ERROR; | |
| 114 case CBATTErrorInsufficientEncryption: | |
| 115 return WebBluetoothMacOSErrors:: | |
| 116 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_INSUFFICIENT_ENCRYPTION; | |
| 117 case CBATTErrorUnsupportedGroupType: | |
| 118 return WebBluetoothMacOSErrors:: | |
| 119 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_UNSUPPORTED_GROUP_TYPE; | |
| 120 case CBATTErrorInsufficientResources: | |
| 121 return WebBluetoothMacOSErrors:: | |
| 122 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_INSUFFICIENT_RESOURCES; | |
| 123 } | |
| 124 return WebBluetoothMacOSErrors::WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_MAX; | |
| 125 } | |
| 126 return WebBluetoothMacOSErrors:: | |
| 127 WEB_BLUETOOTH_MACOS_ERRORS_UNKNOWN_ERROR_DOMAIN; | |
| 128 } | |
| 129 | |
| 130 } // namespace | |
| 131 | |
| 132 void LogNSErrorToHistogram(NSError* error, | |
|
ortuno
2017/05/31 06:59:52
Add
if (error == nil) {
return;
}
That way we
jlebel
2017/06/13 22:31:37
Done.
| |
| 133 WebBluetoothMacOSAPIs web_bluetooth_macos_apis) { | |
| 134 WebBluetoothMacOSErrors histogram_macos_error = | |
| 135 GetWebBluetoothMacOSErrorsFromNSError(error); | |
| 136 switch (web_bluetooth_macos_apis) { | |
| 137 case WebBluetoothMacOSAPIs:: | |
| 138 WEB_BLUETOOTH_MACOS_APIS_DID_FAIL_TO_CONNECT_TO_PERIPHERAL: | |
| 139 UMA_HISTOGRAM_ENUMERATION( | |
| 140 "Bluetooth.Web.MacOS.Errors.DidFailToConnectToPeripheral", | |
| 141 static_cast<int>(histogram_macos_error), | |
| 142 static_cast<int>( | |
| 143 WebBluetoothMacOSErrors::WEB_BLUETOOTH_MACOS_ERRORS_MAX)); | |
| 144 break; | |
| 145 case WebBluetoothMacOSAPIs:: | |
| 146 WEB_BLUETOOTH_MACOS_APIS_DID_DISCONNECT_PERIPHERAL: | |
| 147 UMA_HISTOGRAM_ENUMERATION( | |
| 148 "Bluetooth.Web.MacOS.Errors.DidDisconnectPeripheral", | |
| 149 static_cast<int>(histogram_macos_error), | |
| 150 static_cast<int>( | |
| 151 WebBluetoothMacOSErrors::WEB_BLUETOOTH_MACOS_ERRORS_MAX)); | |
| 152 break; | |
| 153 case WebBluetoothMacOSAPIs:: | |
| 154 WEB_BLUETOOTH_MACOS_APIS_DID_DISCOVER_PRIMARY_SERVICES: | |
| 155 UMA_HISTOGRAM_ENUMERATION( | |
| 156 "Bluetooth.Web.MacOS.Errors.DidDiscoverPrimaryServices", | |
| 157 static_cast<int>(histogram_macos_error), | |
| 158 static_cast<int>( | |
| 159 WebBluetoothMacOSErrors::WEB_BLUETOOTH_MACOS_ERRORS_MAX)); | |
| 160 break; | |
| 161 case WebBluetoothMacOSAPIs:: | |
| 162 WEB_BLUETOOTH_MACOS_APIS_DID_DISCOVER_CHARACTERISTICS: | |
| 163 UMA_HISTOGRAM_ENUMERATION( | |
| 164 "Bluetooth.Web.MacOS.Errors.DidDiscoverCharacteristics", | |
| 165 static_cast<int>(histogram_macos_error), | |
| 166 static_cast<int>( | |
| 167 WebBluetoothMacOSErrors::WEB_BLUETOOTH_MACOS_ERRORS_MAX)); | |
| 168 break; | |
| 169 case WebBluetoothMacOSAPIs::WEB_BLUETOOTH_MACOS_APIS_DID_UPDATE_VALUE: | |
| 170 UMA_HISTOGRAM_ENUMERATION( | |
| 171 "Bluetooth.Web.MacOS.Errors.DidUpdateValue", | |
| 172 static_cast<int>(histogram_macos_error), | |
| 173 static_cast<int>( | |
| 174 WebBluetoothMacOSErrors::WEB_BLUETOOTH_MACOS_ERRORS_MAX)); | |
| 175 break; | |
| 176 case WebBluetoothMacOSAPIs::WEB_BLUETOOTH_MACOS_APIS_DID_WRITE_VALUE: | |
| 177 UMA_HISTOGRAM_ENUMERATION( | |
| 178 "Bluetooth.Web.MacOS.Errors.DidWriteValue", | |
| 179 static_cast<int>(histogram_macos_error), | |
| 180 static_cast<int>( | |
| 181 WebBluetoothMacOSErrors::WEB_BLUETOOTH_MACOS_ERRORS_MAX)); | |
| 182 break; | |
| 183 case WebBluetoothMacOSAPIs:: | |
| 184 WEB_BLUETOOTH_MACOS_APIS_DID_UPDATE_NOTIFICATION_STATE: | |
| 185 UMA_HISTOGRAM_ENUMERATION( | |
| 186 "Bluetooth.Web.MacOS.Errors.DidUpdateNotificationState", | |
| 187 static_cast<int>(histogram_macos_error), | |
| 188 static_cast<int>( | |
| 189 WebBluetoothMacOSErrors::WEB_BLUETOOTH_MACOS_ERRORS_MAX)); | |
| 190 break; | |
| 191 case WebBluetoothMacOSAPIs:: | |
| 192 WEB_BLUETOOTH_MACOS_APIS_DID_DISCOVER_DESCRIPTORS: | |
| 193 UMA_HISTOGRAM_ENUMERATION( | |
| 194 "Bluetooth.Web.MacOS.Errors.DidDiscoverDescriptors", | |
| 195 static_cast<int>(histogram_macos_error), | |
| 196 static_cast<int>( | |
| 197 WebBluetoothMacOSErrors::WEB_BLUETOOTH_MACOS_ERRORS_MAX)); | |
| 198 break; | |
| 199 case WebBluetoothMacOSAPIs:: | |
| 200 WEB_BLUETOOTH_MACOS_APIS_DID_UPDATE_VALUE_FOR_DESCRIPTOR: | |
| 201 UMA_HISTOGRAM_ENUMERATION( | |
| 202 "Bluetooth.Web.MacOS.Errors.DidUpdateValueForDescriptor", | |
| 203 static_cast<int>(histogram_macos_error), | |
| 204 static_cast<int>( | |
| 205 WebBluetoothMacOSErrors::WEB_BLUETOOTH_MACOS_ERRORS_MAX)); | |
| 206 break; | |
| 207 case WebBluetoothMacOSAPIs:: | |
| 208 WEB_BLUETOOTH_MACOS_APIS_DID_WRITE_VALUE_FOR_DESCRIPTOR: | |
| 209 UMA_HISTOGRAM_ENUMERATION( | |
| 210 "Bluetooth.Web.MacOS.Errors.DidWriteValueForDescriptor", | |
| 211 static_cast<int>(histogram_macos_error), | |
| 212 static_cast<int>( | |
| 213 WebBluetoothMacOSErrors::WEB_BLUETOOTH_MACOS_ERRORS_MAX)); | |
| 214 break; | |
| 215 } | |
| 216 } | |
| OLD | NEW |