1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
// Copyright 2014 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.
#ifndef MIDIAccessInitializer_h
#define MIDIAccessInitializer_h
#include "bindings/core/v8/ScriptPromise.h"
#include "bindings/core/v8/ScriptPromiseResolver.h"
#include "modules/webmidi/MIDIAccessor.h"
#include "modules/webmidi/MIDIAccessorClient.h"
#include "modules/webmidi/MIDIPort.h"
#include "wtf/OwnPtr.h"
#include "wtf/Vector.h"
namespace blink {
class MIDIOptions;
class ScriptState;
class MIDIAccessInitializer : public ScriptPromiseResolver, public MIDIAccessorClient {
#if ENABLE(OILPAN)
USING_PRE_FINALIZER(MIDIAccessInitializer, dispose);
#endif
public:
struct PortDescriptor {
String id;
String manufacturer;
String name;
MIDIPort::MIDIPortTypeCode type;
String version;
bool isActive;
PortDescriptor(const String& id, const String& manufacturer, const String& name, MIDIPort::MIDIPortTypeCode type, const String& version, bool isActive)
: id(id)
, manufacturer(manufacturer)
, name(name)
, type(type)
, version(version)
, isActive(isActive) { }
};
static ScriptPromise start(ScriptState* scriptState, const MIDIOptions& options)
{
RefPtrWillBeRawPtr<MIDIAccessInitializer> resolver = adoptRefWillBeNoop(new MIDIAccessInitializer(scriptState, options));
resolver->keepAliveWhilePending();
resolver->suspendIfNeeded();
return resolver->start();
}
virtual ~MIDIAccessInitializer();
// MIDIAccessorClient
virtual void didAddInputPort(const String& id, const String& manufacturer, const String& name, const String& version, bool isActive) override;
virtual void didAddOutputPort(const String& id, const String& manufacturer, const String& name, const String& version, bool isActive) override;
virtual void didSetInputPortState(unsigned portIndex, bool isActive) override;
virtual void didSetOutputPortState(unsigned portIndex, bool isActive) override;
virtual void didStartSession(bool success, const String& error, const String& message) override;
virtual void didReceiveMIDIData(unsigned portIndex, const unsigned char* data, size_t length, double timeStamp) override { }
void resolveSysexPermission(bool allowed);
SecurityOrigin* securityOrigin() const;
private:
MIDIAccessInitializer(ScriptState*, const MIDIOptions&);
ExecutionContext* executionContext() const;
ScriptPromise start();
void dispose();
OwnPtr<MIDIAccessor> m_accessor;
Vector<PortDescriptor> m_portDescriptors;
bool m_requestSysex;
};
} // namespace blink
#endif // MIDIAccessInitializer_h
|