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

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

Issue 18325007: Web MIDI: introduce WebMIDIClient API to request a permission (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: (rebase) Created 7 years, 5 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 2e616069eee0111cc5c8435cc6c65dde87d30dcc..ff8d34bdd21582cb6195dad56fecf186437f41cf 100644
--- a/Source/modules/webmidi/MIDIAccess.cpp
+++ b/Source/modules/webmidi/MIDIAccess.cpp
@@ -38,6 +38,7 @@
#include "core/loader/DocumentLoader.h"
#include "modules/webmidi/MIDIAccessPromise.h"
#include "modules/webmidi/MIDIConnectionEvent.h"
+#include "modules/webmidi/MIDIController.h"
#include "modules/webmidi/MIDIInput.h"
#include "modules/webmidi/MIDIOutput.h"
#include "modules/webmidi/MIDIPort.h"
@@ -48,6 +49,7 @@ PassRefPtr<MIDIAccess> MIDIAccess::create(ScriptExecutionContext* context, MIDIA
{
RefPtr<MIDIAccess> midiAccess(adoptRef(new MIDIAccess(context, promise)));
midiAccess->suspendIfNeeded();
+ midiAccess->startRequest();
return midiAccess.release();
}
@@ -60,16 +62,28 @@ MIDIAccess::MIDIAccess(ScriptExecutionContext* context, MIDIAccessPromise* promi
: ActiveDOMObject(context)
, m_promise(promise)
, m_hasAccess(false)
+ , m_enableSysEx(false)
+ , m_requesting(false)
{
ScriptWrappable::init(this);
m_accessor = MIDIAccessor::create(this);
- m_accessor->requestAccess(promise->options()->sysex);
+}
+
+void MIDIAccess::enableSysEx(bool enable)
+{
+ m_requesting = false;
+ m_enableSysEx = enable;
+ if (enable)
+ m_accessor->requestAccess();
+ else
+ didBlockAccess();
}
void MIDIAccess::didAddInputPort(const String& id, const String& manufacturer, const String& name, const String& version)
{
ASSERT(isMainThread());
+ // FIXME: Pass m_enableSysEx flag to filter system exclusive messages correctly.
m_inputs.append(MIDIInput::create(scriptExecutionContext(), id, manufacturer, name, version));
}
@@ -77,6 +91,7 @@ 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));
}
@@ -117,6 +132,31 @@ void MIDIAccess::didReceiveMIDIData(unsigned portIndex, const unsigned char* dat
void MIDIAccess::stop()
{
m_hasAccess = false;
+ if (!m_requesting)
+ return;
+ m_requesting = false;
+ Document* document = toDocument(scriptExecutionContext());
+ ASSERT(document);
+ MIDIController* controller = MIDIController::from(document->page());
+ ASSERT(controller);
+ controller->cancelSysExPermissionRequest(this);
+}
+
+void MIDIAccess::startRequest()
+{
+ if (!m_promise->options()->sysex) {
+ m_accessor->requestAccess();
+ return;
+ }
+ Document* document = toDocument(scriptExecutionContext());
+ ASSERT(document);
+ MIDIController* controller = MIDIController::from(document->page());
+ if (controller) {
+ m_requesting = true;
+ controller->requestSysExPermission(this);
+ } else {
+ didBlockAccess();
+ }
}
} // namespace WebCore

Powered by Google App Engine
This is Rietveld 408576698