Index: Source/modules/webmidi/MIDIAccess.cpp |
diff --git a/Source/modules/webmidi/MIDIAccess.cpp b/Source/modules/webmidi/MIDIAccess.cpp |
index 4720a5fb72ce68289f87b592d167c6f35e92a025..ee9794ccba28ebb3c9f0173b15296cad4bc60da6 100644 |
--- a/Source/modules/webmidi/MIDIAccess.cpp |
+++ b/Source/modules/webmidi/MIDIAccess.cpp |
@@ -31,7 +31,9 @@ |
#include "config.h" |
#include "modules/webmidi/MIDIAccess.h" |
+#include "core/dom/DOMError.h" |
#include "core/dom/ExceptionCode.h" |
+#include "modules/webmidi/MIDIAccessPromise.h" |
#include "modules/webmidi/MIDIConnectionEvent.h" |
#include "modules/webmidi/MIDIInput.h" |
#include "modules/webmidi/MIDIOutput.h" |
@@ -54,8 +56,50 @@ MIDIAccess::~MIDIAccess() |
MIDIAccess::MIDIAccess(ScriptExecutionContext* context, MIDIAccessPromise* promise) |
: ActiveDOMObject(context) |
, m_promise(promise) |
+ , m_hasAccess(false) |
{ |
ScriptWrappable::init(this); |
+ m_accessor = MIDIAccessor::create(this); |
+ m_accessor->requestAccess(promise->options()->sysexEnabled); |
+} |
+ |
+void MIDIAccess::didAddInputPort(const String& id, const String& manufacturer, const String& name, const String& version) |
+{ |
+ ASSERT(isMainThread()); |
+ |
+ m_inputs.append(MIDIInput::create(scriptExecutionContext(), id, manufacturer, name, version)); |
+} |
+ |
+void MIDIAccess::didAddOutputPort(const String& id, const String& manufacturer, const String& name, const String& version) |
+{ |
+ ASSERT(isMainThread()); |
+ |
+ m_outputs.append(MIDIOutput::create(scriptExecutionContext(), id, manufacturer, name, version)); |
+} |
+ |
+void MIDIAccess::didAllowAccess() |
+{ |
+ ASSERT(isMainThread()); |
+ |
+ m_hasAccess = true; |
+ m_promise->fulfill(); |
+} |
+ |
+void MIDIAccess::didBlockAccess() |
+{ |
+ ASSERT(isMainThread()); |
+ |
+ m_hasAccess = false; |
+ RefPtr<DOMError> error = DOMError::create("MIDI access blocked"); |
Takashi Toyoshima
2013/06/25 07:48:58
Should be "SecurityError".
http://webaudio.github
Chris Rogers
2013/06/26 01:47:56
Done.
|
+ m_promise->reject(error); |
+} |
+ |
+void MIDIAccess::didReceiveMIDIData(unsigned portIndex, const unsigned char* data, size_t length, double timeStamp) |
+{ |
+ ASSERT(isMainThread()); |
+ |
+ if (m_hasAccess && portIndex < m_inputs.size()) |
+ m_inputs[portIndex]->didReceiveMIDIData(portIndex, data, length, timeStamp); |
} |
} // namespace WebCore |