| Index: content/browser/bluetooth/bluetooth_dispatcher_host.cc
|
| diff --git a/content/browser/bluetooth/bluetooth_dispatcher_host.cc b/content/browser/bluetooth/bluetooth_dispatcher_host.cc
|
| index 386ede0af36116bdbe0781c4380d9a49a981bc5e..86fdf9f366be1a843106f7a032b3e43b575b2f00 100644
|
| --- a/content/browser/bluetooth/bluetooth_dispatcher_host.cc
|
| +++ b/content/browser/bluetooth/bluetooth_dispatcher_host.cc
|
| @@ -42,6 +42,24 @@ enum class BluetoothGATTError {
|
| MAX_ERROR,
|
| };
|
|
|
| +enum class UMARequestDeviceOutcome {
|
| + SUCCESS = 0,
|
| + NO_BLUETOOTH_ADAPTER = 1,
|
| + NO_RENDER_FRAME = 2,
|
| + DISCOVERY_START_FAILED = 3,
|
| + DISCOVERY_STOP_FAILED = 4,
|
| + NO_MATCHING_DEVICES_FOUND = 5,
|
| + // NOTE: Add new requestDevice() outcomes immediately above this line. Make
|
| + // sure to update the enum list in tools/histogram/histograms.xml accordingly.
|
| + COUNT
|
| +};
|
| +
|
| +void RecordRequestDeviceOutcome(UMARequestDeviceOutcome outcome) {
|
| + UMA_HISTOGRAM_ENUMERATION("Bluetooth.RequestDevice.Outcome",
|
| + static_cast<int>(outcome),
|
| + static_cast<int>(UMARequestDeviceOutcome::COUNT));
|
| +}
|
| +
|
| // TODO(ortuno): Once we have a chooser for scanning and the right
|
| // callback for discovered services we should delete these constants.
|
| // https://crbug.com/436280 and https://crbug.com/484504
|
| @@ -239,6 +257,7 @@ void BluetoothDispatcherHost::OnRequestDevice(
|
| DLOG(WARNING)
|
| << "Got a requestDevice IPC without a matching RenderFrameHost: "
|
| << render_process_id_ << ", " << frame_routing_id;
|
| + RecordRequestDeviceOutcome(UMARequestDeviceOutcome::NO_RENDER_FRAME);
|
| Send(new BluetoothMsg_RequestDeviceError(
|
| thread_id, request_id, WebBluetoothError::RequestDeviceWithoutFrame));
|
| }
|
| @@ -265,6 +284,7 @@ void BluetoothDispatcherHost::OnRequestDevice(
|
| weak_ptr_factory_.GetWeakPtr(), thread_id, request_id));
|
| } else {
|
| DLOG(WARNING) << "No BluetoothAdapter. Can't serve requestDevice.";
|
| + RecordRequestDeviceOutcome(UMARequestDeviceOutcome::NO_BLUETOOTH_ADAPTER);
|
| Send(new BluetoothMsg_RequestDeviceError(
|
| thread_id, request_id, WebBluetoothError::NoBluetoothAdapter));
|
| }
|
| @@ -512,6 +532,7 @@ void BluetoothDispatcherHost::OnDiscoverySessionStartedError(int thread_id,
|
| int request_id) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
| DLOG(WARNING) << "BluetoothDispatcherHost::OnDiscoverySessionStartedError";
|
| + RecordRequestDeviceOutcome(UMARequestDeviceOutcome::DISCOVERY_START_FAILED);
|
| Send(new BluetoothMsg_RequestDeviceError(
|
| thread_id, request_id, WebBluetoothError::DiscoverySessionStartFailed));
|
| request_device_sessions_.erase(std::make_pair(thread_id, request_id));
|
| @@ -549,12 +570,15 @@ void BluetoothDispatcherHost::OnDiscoverySessionStopped(int thread_id,
|
| device->IsPaired(), // paired
|
| content::BluetoothDevice::UUIDsFromBluetoothUUIDs(
|
| device->GetUUIDs())); // uuids
|
| + RecordRequestDeviceOutcome(UMARequestDeviceOutcome::SUCCESS);
|
| Send(new BluetoothMsg_RequestDeviceSuccess(thread_id, request_id,
|
| device_ipc));
|
| request_device_sessions_.erase(session);
|
| return;
|
| }
|
| }
|
| + RecordRequestDeviceOutcome(
|
| + UMARequestDeviceOutcome::NO_MATCHING_DEVICES_FOUND);
|
| Send(new BluetoothMsg_RequestDeviceError(thread_id, request_id,
|
| WebBluetoothError::NoDevicesFound));
|
| request_device_sessions_.erase(session);
|
| @@ -564,6 +588,7 @@ void BluetoothDispatcherHost::OnDiscoverySessionStoppedError(int thread_id,
|
| int request_id) {
|
| DCHECK_CURRENTLY_ON(BrowserThread::UI);
|
| DLOG(WARNING) << "BluetoothDispatcherHost::OnDiscoverySessionStoppedError";
|
| + RecordRequestDeviceOutcome(UMARequestDeviceOutcome::DISCOVERY_STOP_FAILED);
|
| Send(new BluetoothMsg_RequestDeviceError(
|
| thread_id, request_id, WebBluetoothError::DiscoverySessionStopFailed));
|
| request_device_sessions_.erase(std::make_pair(thread_id, request_id));
|
|
|