| Index: Source/modules/webmidi/MIDIAccess.cpp
|
| diff --git a/Source/modules/webmidi/MIDIAccess.cpp b/Source/modules/webmidi/MIDIAccess.cpp
|
| index 220d597412f7372671353c319847c91460e2f170..d579ba34b674408e0967ed9aa69573294c90074f 100644
|
| --- a/Source/modules/webmidi/MIDIAccess.cpp
|
| +++ b/Source/modules/webmidi/MIDIAccess.cpp
|
| @@ -61,17 +61,17 @@ MIDIAccess::MIDIAccess(ScriptExecutionContext* context, MIDIAccessPromise* promi
|
| : ActiveDOMObject(context)
|
| , m_promise(promise)
|
| , m_hasAccess(false)
|
| - , m_enableSysEx(false)
|
| + , m_sysExEnabled(false)
|
| , m_requesting(false)
|
| {
|
| ScriptWrappable::init(this);
|
| m_accessor = MIDIAccessor::create(this);
|
| }
|
|
|
| -void MIDIAccess::enableSysEx(bool enable)
|
| +void MIDIAccess::setSysExEnabled(bool enable)
|
| {
|
| m_requesting = false;
|
| - m_enableSysEx = enable;
|
| + m_sysExEnabled = enable;
|
| if (enable)
|
| m_accessor->startSession();
|
| else
|
| @@ -82,7 +82,7 @@ void MIDIAccess::didAddInputPort(const String& id, const String& manufacturer, c
|
| {
|
| ASSERT(isMainThread());
|
|
|
| - // FIXME: Pass m_enableSysEx flag to filter system exclusive messages correctly.
|
| + // FIXME: Pass in |this| to create() method so we can filter system exclusive messages correctly.
|
| m_inputs.append(MIDIInput::create(scriptExecutionContext(), id, manufacturer, name, version));
|
| }
|
|
|
| @@ -90,8 +90,8 @@ void MIDIAccess::didAddOutputPort(const String& id, const String& manufacturer,
|
| {
|
| ASSERT(isMainThread());
|
|
|
| - // FIXME: Pass m_enableSysEx flag to filter system exclusive messages correctly.
|
| - m_outputs.append(MIDIOutput::create(scriptExecutionContext(), id, manufacturer, name, version));
|
| + unsigned portIndex = m_outputs.size();
|
| + m_outputs.append(MIDIOutput::create(this, portIndex, scriptExecutionContext(), id, manufacturer, name, version));
|
| }
|
|
|
| void MIDIAccess::didStartSession()
|
| @@ -119,6 +119,28 @@ void MIDIAccess::didReceiveMIDIData(unsigned portIndex, const unsigned char* dat
|
| }
|
| }
|
|
|
| +void MIDIAccess::sendMIDIData(unsigned portIndex, const unsigned char* data, size_t length, double timeStampInMilliseconds)
|
| +{
|
| + if (m_hasAccess && portIndex < m_outputs.size() && data && length > 1) {
|
| + // Convert from a time in milliseconds (a DOMHighResTimeStamp) according to the same time coordinate system as performance.now()
|
| + // into a time in seconds which is based on the time coordinate system of monotonicallyIncreasingTime().
|
| + double timeStamp;
|
| +
|
| + if (!timeStampInMilliseconds) {
|
| + // We treat a value of 0 (which is the default value) as special, meaning "now".
|
| + // We need to translate it exactly to 0 seconds.
|
| + timeStamp = 0;
|
| + } else {
|
| + Document* document = toDocument(scriptExecutionContext());
|
| + ASSERT(document);
|
| + double documentStartTime = document->loader()->timing()->referenceMonotonicTime();
|
| + timeStamp = documentStartTime + 0.001 * timeStampInMilliseconds;
|
| + }
|
| +
|
| + m_accessor->sendMIDIData(portIndex, data, length, timeStamp);
|
| + }
|
| +}
|
| +
|
| void MIDIAccess::stop()
|
| {
|
| m_hasAccess = false;
|
| @@ -130,6 +152,8 @@ void MIDIAccess::stop()
|
| MIDIController* controller = MIDIController::from(document->page());
|
| ASSERT(controller);
|
| controller->cancelSysExPermissionRequest(this);
|
| +
|
| + m_accessor.clear();
|
| }
|
|
|
| void MIDIAccess::startRequest()
|
| @@ -158,6 +182,4 @@ void MIDIAccess::permissionDenied()
|
| m_promise->reject(error);
|
| }
|
|
|
| -
|
| -
|
| } // namespace WebCore
|
|
|