Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(105)

Unified Diff: Source/modules/webmidi/MIDIAccess.cpp

Issue 513203002: Introduce MIDIInputMap and MIDIOutputMap. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@iterator-adhoc
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/modules/webmidi/MIDIAccess.cpp
diff --git a/Source/modules/webmidi/MIDIAccess.cpp b/Source/modules/webmidi/MIDIAccess.cpp
index d0a733c1b36de4dade5bba329e1ed5ec20b4167d..c62fe17e4effe9eed2db7e087a7fc0a5ab953e2f 100644
--- a/Source/modules/webmidi/MIDIAccess.cpp
+++ b/Source/modules/webmidi/MIDIAccess.cpp
@@ -37,7 +37,11 @@
#include "modules/webmidi/MIDIAccessInitializer.h"
#include "modules/webmidi/MIDIConnectionEvent.h"
#include "modules/webmidi/MIDIController.h"
+#include "modules/webmidi/MIDIInput.h"
+#include "modules/webmidi/MIDIInputMap.h"
#include "modules/webmidi/MIDIOptions.h"
+#include "modules/webmidi/MIDIOutput.h"
+#include "modules/webmidi/MIDIOutputMap.h"
#include "modules/webmidi/MIDIPort.h"
#include "platform/AsyncMethodRunner.h"
#include <v8.h>
@@ -51,14 +55,23 @@ MIDIAccess::MIDIAccess(PassOwnPtr<MIDIAccessor> accessor, bool sysexEnabled, con
{
ScriptWrappable::init(this);
m_accessor->setClient(this);
+ HeapHashMap<String, Member<MIDIInput> > inputs;
+ HeapHashMap<String, Member<MIDIOutput> > outputs;
for (size_t i = 0; i < ports.size(); ++i) {
const MIDIAccessInitializer::PortDescriptor& port = ports[i];
if (port.type == MIDIPort::MIDIPortTypeInput) {
- m_inputs.append(MIDIInput::create(this, port.id, port.manufacturer, port.name, port.version));
+ inputs.add(port.id, MIDIInput::create(this, port.id, port.manufacturer, port.name, port.version));
+ m_inputKeys.append(port.id);
} else {
- m_outputs.append(MIDIOutput::create(this, m_outputs.size(), port.id, port.manufacturer, port.name, port.version));
+ outputs.add(port.id, MIDIOutput::create(this, outputs.size(), port.id, port.manufacturer, port.name, port.version));
}
}
+ if (inputs.size() + outputs.size() != ports.size()) {
+ // There are id-duplicate ports that violate the spec.
+ return;
+ }
+ m_inputs = new MIDIInputMap(inputs);
+ m_outputs = new MIDIOutputMap(outputs);
}
MIDIAccess::~MIDIAccess()
@@ -68,20 +81,23 @@ MIDIAccess::~MIDIAccess()
void MIDIAccess::didAddInputPort(const String& id, const String& manufacturer, const String& name, const String& version)
{
ASSERT(isMainThread());
- m_inputs.append(MIDIInput::create(this, id, manufacturer, name, version));
+ // We currently assume no ports will be added once an MIDIAccess object is
haraken 2014/08/31 07:18:57 will be added once => are added after
yhirano 2014/09/01 02:22:10 Done.
+ // created.
+ ASSERT_NOT_REACHED();
}
void MIDIAccess::didAddOutputPort(const String& id, const String& manufacturer, const String& name, const String& version)
{
ASSERT(isMainThread());
- unsigned portIndex = m_outputs.size();
- m_outputs.append(MIDIOutput::create(this, portIndex, id, manufacturer, name, version));
+ // We currently assume no ports will be added once an MIDIAccess object is
+ // created.
haraken 2014/08/31 07:18:57 will be added once => are added after
yhirano 2014/09/01 02:22:10 Done.
+ ASSERT_NOT_REACHED();
}
void MIDIAccess::didReceiveMIDIData(unsigned portIndex, const unsigned char* data, size_t length, double timeStamp)
{
ASSERT(isMainThread());
- if (portIndex >= m_inputs.size())
+ if (portIndex >= m_inputs->size())
return;
// Convert from time in seconds which is based on the time coordinate system of monotonicallyIncreasingTime()
@@ -92,12 +108,13 @@ void MIDIAccess::didReceiveMIDIData(unsigned portIndex, const unsigned char* dat
double timeStampInMilliseconds = 1000 * document->loader()->timing()->monotonicTimeToZeroBasedDocumentTime(timeStamp);
- m_inputs[portIndex]->didReceiveMIDIData(portIndex, data, length, timeStampInMilliseconds);
+ ASSERT(m_inputs->has(m_inputKeys[portIndex]));
+ m_inputs->get(m_inputKeys[portIndex])->didReceiveMIDIData(portIndex, data, length, timeStampInMilliseconds);
}
void MIDIAccess::sendMIDIData(unsigned portIndex, const unsigned char* data, size_t length, double timeStampInMilliseconds)
{
- if (!data || !length || portIndex >= m_outputs.size())
+ if (!data || !length || portIndex >= m_outputs->size())
return;
// 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().

Powered by Google App Engine
This is Rietveld 408576698