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 86fdf9f366be1a843106f7a032b3e43b575b2f00..7a3c88842635c59bc8aac51e89fccef24b29b5d4 100644 |
--- a/content/browser/bluetooth/bluetooth_dispatcher_host.cc |
+++ b/content/browser/bluetooth/bluetooth_dispatcher_host.cc |
@@ -50,7 +50,8 @@ enum class UMARequestDeviceOutcome { |
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. |
+ // sure to update the enum list in |
+ // tools/metrics/histogram/histograms.xml accordingly. |
COUNT |
}; |
@@ -60,6 +61,24 @@ void RecordRequestDeviceOutcome(UMARequestDeviceOutcome outcome) { |
static_cast<int>(UMARequestDeviceOutcome::COUNT)); |
} |
+enum class UMAWebBluetoothFunction { |
+ REQUEST_DEVICE, |
+ CONNECT_GATT, |
+ GET_PRIMARY_SERVICE, |
+ GET_CHARACTERISTIC, |
+ CHARACTERISTIC_READ_VALUE, |
+ CHARACTERISTIC_WRITE_VALUE, |
+ // NOTE: Add new actions immediately above this line. Make sure to update the |
+ // enum list in tools/metrics/histogram/histograms.xml accordingly. |
+ COUNT |
+}; |
+ |
+void RecordWebBluetoothFunctionCall(UMAWebBluetoothFunction function) { |
+ UMA_HISTOGRAM_ENUMERATION("Bluetooth.Web.FunctionCall.Count", |
scheib
2015/08/04 18:30:22
Bluetooth.Web.* LGTM ... we'll rename the others i
ortuno
2015/08/04 18:32:24
Yup. There is only one more which is in RequestDev
|
+ static_cast<int>(function), |
+ static_cast<int>(UMAWebBluetoothFunction::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 |
@@ -249,6 +268,7 @@ void BluetoothDispatcherHost::OnRequestDevice( |
const std::vector<BluetoothScanFilter>& filters, |
const std::vector<BluetoothUUID>& optional_services) { |
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
+ RecordWebBluetoothFunctionCall(UMAWebBluetoothFunction::REQUEST_DEVICE); |
RenderFrameHostImpl* render_frame_host = |
RenderFrameHostImpl::FromID(render_process_id_, frame_routing_id); |
@@ -296,6 +316,8 @@ void BluetoothDispatcherHost::OnConnectGATT( |
int request_id, |
const std::string& device_instance_id) { |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
+ RecordWebBluetoothFunctionCall(UMAWebBluetoothFunction::CONNECT_GATT); |
+ |
// TODO(ortuno): Right now it's pointless to check if the domain has access to |
// the device, because any domain can connect to any device. But once |
// permissions are implemented we should check that the domain has access to |
@@ -321,6 +343,8 @@ void BluetoothDispatcherHost::OnGetPrimaryService( |
const std::string& device_instance_id, |
const std::string& service_uuid) { |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
+ RecordWebBluetoothFunctionCall(UMAWebBluetoothFunction::GET_PRIMARY_SERVICE); |
+ |
// TODO(ortuno): Check if device_instance_id is in "allowed devices" |
// https://crbug.com/493459 |
// TODO(ortuno): Check if service_uuid is in "allowed services" |
@@ -341,6 +365,7 @@ void BluetoothDispatcherHost::OnGetCharacteristic( |
const std::string& service_instance_id, |
const std::string& characteristic_uuid) { |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
+ RecordWebBluetoothFunctionCall(UMAWebBluetoothFunction::GET_CHARACTERISTIC); |
auto device_iter = service_to_device_.find(service_instance_id); |
// A service_instance_id not in the map implies a hostile renderer |
@@ -402,6 +427,8 @@ void BluetoothDispatcherHost::OnReadValue( |
int request_id, |
const std::string& characteristic_instance_id) { |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
+ RecordWebBluetoothFunctionCall( |
+ UMAWebBluetoothFunction::CHARACTERISTIC_READ_VALUE); |
auto characteristic_iter = |
characteristic_to_service_.find(characteristic_instance_id); |
@@ -457,6 +484,8 @@ void BluetoothDispatcherHost::OnWriteValue( |
const std::string& characteristic_instance_id, |
const std::vector<uint8_t>& value) { |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
+ RecordWebBluetoothFunctionCall( |
+ UMAWebBluetoothFunction::CHARACTERISTIC_WRITE_VALUE); |
// Length check per step 3 of writeValue algorithm: |
// https://webbluetoothchrome.github.io/web-bluetooth/#dom-bluetoothgattcharacteristic-writevalue |