Commit 9882e9dd authored by reillyg's avatar reillyg Committed by Commit bot

Add an UMA histogram for WebUSB function calls.

Each WebUSB function (on the USB and USBDevice IDL objects) is given a
histogram value that is recorded when the function is called.

BUG=492204

Review-Url: https://codereview.chromium.org/2272563003
Cr-Commit-Position: refs/heads/master@{#414367}
parent 451966ed
......@@ -1289,6 +1289,22 @@ public:
NavigatorPointerEnabled = 1516,
InputSelectionGettersThrow = 1517,
DocumentCreateEventVRDisplayEvent = 1518,
UsbGetDevices = 1519,
UsbRequestDevice = 1520,
UsbDeviceOpen = 1521,
UsbDeviceClose = 1522,
UsbDeviceSelectConfiguration = 1523,
UsbDeviceClaimInterface = 1524,
UsbDeviceReleaseInterface = 1525,
UsbDeviceSelectAlternateInterface = 1526,
UsbDeviceControlTransferIn = 1527,
UsbDeviceControlTransferOut = 1528,
UsbDeviceClearHalt = 1529,
UsbDeviceTransferIn = 1530,
UsbDeviceTransferOut = 1531,
UsbDeviceIsochronousTransferIn = 1532,
UsbDeviceIsochronousTransferOut = 1533,
UsbDeviceReset = 1534,
// Add new features immediately above this line. Don't change assigned
// numbers of any item, and don't reuse removed slots.
......
......@@ -9,6 +9,7 @@
#include "core/dom/DOMException.h"
#include "core/dom/Document.h"
#include "core/dom/ExceptionCode.h"
#include "core/frame/UseCounter.h"
#include "device/usb/public/interfaces/device.mojom-blink.h"
#include "modules/EventTargetModules.h"
#include "modules/webusb/USBConnectionEvent.h"
......@@ -78,13 +79,16 @@ void USB::dispose()
ScriptPromise USB::getDevices(ScriptState* scriptState)
{
ExecutionContext* executionContext = scriptState->getExecutionContext();
UseCounter::count(executionContext, UseCounter::UsbGetDevices);
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
ScriptPromise promise = resolver->promise();
if (!m_deviceManager) {
resolver->reject(DOMException::create(NotSupportedError));
} else {
String errorMessage;
if (!scriptState->getExecutionContext()->isSecureContext(errorMessage)) {
if (!executionContext->isSecureContext(errorMessage)) {
resolver->reject(DOMException::create(SecurityError, errorMessage));
} else {
m_deviceManagerRequests.add(resolver);
......@@ -96,11 +100,14 @@ ScriptPromise USB::getDevices(ScriptState* scriptState)
ScriptPromise USB::requestDevice(ScriptState* scriptState, const USBDeviceRequestOptions& options)
{
ExecutionContext* executionContext = scriptState->getExecutionContext();
UseCounter::count(executionContext, UseCounter::UsbRequestDevice);
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
ScriptPromise promise = resolver->promise();
if (!m_chooserService) {
LocalFrame* frame = getExecutionContext() ? toDocument(getExecutionContext())->frame() : nullptr;
LocalFrame* frame = executionContext->isDocument() ? toDocument(executionContext)->frame() : nullptr;
if (!frame) {
resolver->reject(DOMException::create(NotSupportedError));
return promise;
......@@ -110,7 +117,7 @@ ScriptPromise USB::requestDevice(ScriptState* scriptState, const USBDeviceReques
}
String errorMessage;
if (!scriptState->getExecutionContext()->isSecureContext(errorMessage)) {
if (!executionContext->isSecureContext(errorMessage)) {
resolver->reject(DOMException::create(SecurityError, errorMessage));
} else if (!UserGestureIndicator::consumeUserGesture()) {
resolver->reject(DOMException::create(SecurityError, "Must be handling a user gesture to show a permission request."));
......
......@@ -11,6 +11,7 @@
#include "core/dom/DOMArrayBufferView.h"
#include "core/dom/DOMException.h"
#include "core/dom/ExceptionCode.h"
#include "core/frame/UseCounter.h"
#include "modules/webusb/USBConfiguration.h"
#include "modules/webusb/USBControlTransferParameters.h"
#include "modules/webusb/USBInTransferResult.h"
......@@ -135,6 +136,8 @@ HeapVector<Member<USBConfiguration>> USBDevice::configurations() const
ScriptPromise USBDevice::open(ScriptState* scriptState)
{
UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceOpen);
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
ScriptPromise promise = resolver->promise();
if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) {
......@@ -151,6 +154,8 @@ ScriptPromise USBDevice::open(ScriptState* scriptState)
ScriptPromise USBDevice::close(ScriptState* scriptState)
{
UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceClose);
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
ScriptPromise promise = resolver->promise();
if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) {
......@@ -167,6 +172,8 @@ ScriptPromise USBDevice::close(ScriptState* scriptState)
ScriptPromise USBDevice::selectConfiguration(ScriptState* scriptState, uint8_t configurationValue)
{
UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceSelectConfiguration);
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
ScriptPromise promise = resolver->promise();
if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) {
......@@ -190,6 +197,8 @@ ScriptPromise USBDevice::selectConfiguration(ScriptState* scriptState, uint8_t c
ScriptPromise USBDevice::claimInterface(ScriptState* scriptState, uint8_t interfaceNumber)
{
UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceClaimInterface);
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
ScriptPromise promise = resolver->promise();
if (ensureDeviceConfigured(resolver)) {
......@@ -211,6 +220,8 @@ ScriptPromise USBDevice::claimInterface(ScriptState* scriptState, uint8_t interf
ScriptPromise USBDevice::releaseInterface(ScriptState* scriptState, uint8_t interfaceNumber)
{
UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceReleaseInterface);
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
ScriptPromise promise = resolver->promise();
if (ensureDeviceConfigured(resolver)) {
......@@ -235,6 +246,8 @@ ScriptPromise USBDevice::releaseInterface(ScriptState* scriptState, uint8_t inte
ScriptPromise USBDevice::selectAlternateInterface(ScriptState* scriptState, uint8_t interfaceNumber, uint8_t alternateSetting)
{
UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceSelectAlternateInterface);
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
ScriptPromise promise = resolver->promise();
if (ensureInterfaceClaimed(interfaceNumber, resolver)) {
......@@ -258,6 +271,8 @@ ScriptPromise USBDevice::selectAlternateInterface(ScriptState* scriptState, uint
ScriptPromise USBDevice::controlTransferIn(ScriptState* scriptState, const USBControlTransferParameters& setup, unsigned length)
{
UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceControlTransferIn);
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
ScriptPromise promise = resolver->promise();
if (ensureDeviceConfigured(resolver)) {
......@@ -272,6 +287,8 @@ ScriptPromise USBDevice::controlTransferIn(ScriptState* scriptState, const USBCo
ScriptPromise USBDevice::controlTransferOut(ScriptState* scriptState, const USBControlTransferParameters& setup)
{
UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceControlTransferOut);
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
ScriptPromise promise = resolver->promise();
if (ensureDeviceConfigured(resolver)) {
......@@ -286,6 +303,8 @@ ScriptPromise USBDevice::controlTransferOut(ScriptState* scriptState, const USBC
ScriptPromise USBDevice::controlTransferOut(ScriptState* scriptState, const USBControlTransferParameters& setup, const ArrayBufferOrArrayBufferView& data)
{
UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceControlTransferOut);
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
ScriptPromise promise = resolver->promise();
if (ensureDeviceConfigured(resolver)) {
......@@ -302,6 +321,8 @@ ScriptPromise USBDevice::controlTransferOut(ScriptState* scriptState, const USBC
ScriptPromise USBDevice::clearHalt(ScriptState* scriptState, String direction, uint8_t endpointNumber)
{
UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceClearHalt);
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
ScriptPromise promise = resolver->promise();
if (ensureEndpointAvailable(direction == "in", endpointNumber, resolver)) {
......@@ -313,6 +334,8 @@ ScriptPromise USBDevice::clearHalt(ScriptState* scriptState, String direction, u
ScriptPromise USBDevice::transferIn(ScriptState* scriptState, uint8_t endpointNumber, unsigned length)
{
UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceTransferIn);
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
ScriptPromise promise = resolver->promise();
if (ensureEndpointAvailable(true /* in */, endpointNumber, resolver)) {
......@@ -324,6 +347,8 @@ ScriptPromise USBDevice::transferIn(ScriptState* scriptState, uint8_t endpointNu
ScriptPromise USBDevice::transferOut(ScriptState* scriptState, uint8_t endpointNumber, const ArrayBufferOrArrayBufferView& data)
{
UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceTransferOut);
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
ScriptPromise promise = resolver->promise();
if (ensureEndpointAvailable(false /* out */, endpointNumber, resolver)) {
......@@ -337,6 +362,8 @@ ScriptPromise USBDevice::transferOut(ScriptState* scriptState, uint8_t endpointN
ScriptPromise USBDevice::isochronousTransferIn(ScriptState* scriptState, uint8_t endpointNumber, Vector<unsigned> packetLengths)
{
UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceIsochronousTransferIn);
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
ScriptPromise promise = resolver->promise();
if (ensureEndpointAvailable(true /* in */, endpointNumber, resolver)) {
......@@ -348,6 +375,8 @@ ScriptPromise USBDevice::isochronousTransferIn(ScriptState* scriptState, uint8_t
ScriptPromise USBDevice::isochronousTransferOut(ScriptState* scriptState, uint8_t endpointNumber, const ArrayBufferOrArrayBufferView& data, Vector<unsigned> packetLengths)
{
UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceIsochronousTransferOut);
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
ScriptPromise promise = resolver->promise();
if (ensureEndpointAvailable(false /* out */, endpointNumber, resolver)) {
......@@ -359,6 +388,8 @@ ScriptPromise USBDevice::isochronousTransferOut(ScriptState* scriptState, uint8_
ScriptPromise USBDevice::reset(ScriptState* scriptState)
{
UseCounter::count(scriptState->getExecutionContext(), UseCounter::UsbDeviceReset);
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
ScriptPromise promise = resolver->promise();
if (ensureNoDeviceOrInterfaceChangeInProgress(resolver)) {
......
......@@ -79752,6 +79752,22 @@ http://cs/file:chrome/histograms.xml - but prefer this file for new entries.
<int value="1516" label="NavigatorPointerEnabled"/>
<int value="1517" label="InputSelectionGettersThrow"/>
<int value="1518" label="DocumentCreateEventVRDisplayEvent"/>
<int value="1519" label="UsbGetDevices"/>
<int value="1520" label="UsbRequestDevice"/>
<int value="1521" label="UsbDeviceOpen"/>
<int value="1522" label="UsbDeviceClose"/>
<int value="1523" label="UsbDeviceSelectConfiguration"/>
<int value="1524" label="UsbDeviceClaimInterface"/>
<int value="1525" label="UsbDeviceReleaseInterface"/>
<int value="1526" label="UsbDeviceSelectAlternateInterface"/>
<int value="1527" label="UsbDeviceControlTransferIn"/>
<int value="1528" label="UsbDeviceControlTransferOut"/>
<int value="1529" label="UsbDeviceClearHalt"/>
<int value="1530" label="UsbDeviceTransferIn"/>
<int value="1531" label="UsbDeviceTransferOut"/>
<int value="1532" label="UsbDeviceIsochronousTransferIn"/>
<int value="1533" label="UsbDeviceIsochronousTransferOut"/>
<int value="1534" label="UsbDeviceReset"/>
</enum>
<enum name="FetchRequestMode" type="int">
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment