| Index: Source/modules/webusb/USBEndpoint.cpp
 | 
| diff --git a/Source/modules/webusb/USBEndpoint.cpp b/Source/modules/webusb/USBEndpoint.cpp
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..07ba40fea916cae1f92147a6e0795f6071ac79c6
 | 
| --- /dev/null
 | 
| +++ b/Source/modules/webusb/USBEndpoint.cpp
 | 
| @@ -0,0 +1,99 @@
 | 
| +// Copyright 2015 The Chromium Authors. All rights reserved.
 | 
| +// Use of this source code is governed by a BSD-style license that can be
 | 
| +// found in the LICENSE file.
 | 
| +
 | 
| +#include "config.h"
 | 
| +#include "modules/webusb/USBEndpoint.h"
 | 
| +
 | 
| +#include "bindings/core/v8/ExceptionState.h"
 | 
| +#include "modules/webusb/USBAlternateInterface.h"
 | 
| +#include "public/platform/modules/webusb/WebUSBDevice.h"
 | 
| +
 | 
| +namespace blink {
 | 
| +
 | 
| +namespace {
 | 
| +
 | 
| +String convertDirection(const WebUSBDevice::TransferDirection& direction)
 | 
| +{
 | 
| +    switch (direction) {
 | 
| +    case WebUSBDevice::TransferDirectionIn:
 | 
| +        return "in";
 | 
| +    case WebUSBDevice::TransferDirectionOut:
 | 
| +        return "out";
 | 
| +    default:
 | 
| +        ASSERT_NOT_REACHED();
 | 
| +        return "";
 | 
| +    }
 | 
| +}
 | 
| +
 | 
| +String convertType(const WebUSBDeviceInfo::Endpoint::Type& type)
 | 
| +{
 | 
| +    switch (type) {
 | 
| +    case WebUSBDeviceInfo::Endpoint::TypeBulk:
 | 
| +        return "bulk";
 | 
| +    case WebUSBDeviceInfo::Endpoint::TypeInterrupt:
 | 
| +        return "interrupt";
 | 
| +    case WebUSBDeviceInfo::Endpoint::TypeIsochronous:
 | 
| +        return "isochronous";
 | 
| +    default:
 | 
| +        ASSERT_NOT_REACHED();
 | 
| +        return "";
 | 
| +    }
 | 
| +}
 | 
| +
 | 
| +} // namespace
 | 
| +
 | 
| +// static
 | 
| +USBEndpoint* USBEndpoint::create(const USBAlternateInterface* alternate, size_t endpointIndex)
 | 
| +{
 | 
| +    return new USBEndpoint(alternate, endpointIndex);
 | 
| +}
 | 
| +
 | 
| +// static
 | 
| +USBEndpoint* USBEndpoint::create(const USBAlternateInterface* alternate, size_t endpointIndex, ExceptionState& exceptionState)
 | 
| +{
 | 
| +    if (endpointIndex < alternate->info().endpoints.size())
 | 
| +        return new USBEndpoint(alternate, endpointIndex);
 | 
| +    exceptionState.throwRangeError("Invalid endpoint index.");
 | 
| +    return nullptr;
 | 
| +}
 | 
| +
 | 
| +USBEndpoint::USBEndpoint(const USBAlternateInterface* alternate, size_t endpointIndex)
 | 
| +    : m_alternate(alternate)
 | 
| +    , m_endpointIndex(endpointIndex)
 | 
| +{
 | 
| +}
 | 
| +
 | 
| +const WebUSBDeviceInfo::Endpoint& USBEndpoint::info() const
 | 
| +{
 | 
| +    const WebUSBDeviceInfo::AlternateInterface& alternateInfo = m_alternate->info();
 | 
| +    ASSERT(m_endpointIndex < alternateInfo.endpoints.size());
 | 
| +    return alternateInfo.endpoints[m_endpointIndex];
 | 
| +}
 | 
| +
 | 
| +uint8_t USBEndpoint::endpointNumber() const
 | 
| +{
 | 
| +    return info().endpointNumber;
 | 
| +}
 | 
| +
 | 
| +String USBEndpoint::direction() const
 | 
| +{
 | 
| +    return convertDirection(info().direction);
 | 
| +}
 | 
| +
 | 
| +String USBEndpoint::type() const
 | 
| +{
 | 
| +    return convertType(info().type);
 | 
| +}
 | 
| +
 | 
| +unsigned USBEndpoint::packetSize() const
 | 
| +{
 | 
| +    return info().packetSize;
 | 
| +}
 | 
| +
 | 
| +DEFINE_TRACE(USBEndpoint)
 | 
| +{
 | 
| +    visitor->trace(m_alternate);
 | 
| +}
 | 
| +
 | 
| +} // namespace blink
 | 
| 
 |