| Index: Source/modules/webmidi/MIDIAccessInitializer.h
|
| diff --git a/Source/modules/webmidi/MIDIAccessInitializer.h b/Source/modules/webmidi/MIDIAccessInitializer.h
|
| index 4fc434ecc088a1d7302354294bba3a8e648b1db2..b7deecb00daf1257bb99a944e4304ead8f2ec670 100644
|
| --- a/Source/modules/webmidi/MIDIAccessInitializer.h
|
| +++ b/Source/modules/webmidi/MIDIAccessInitializer.h
|
| @@ -9,26 +9,54 @@
|
| #include "modules/webmidi/MIDIAccessor.h"
|
| #include "modules/webmidi/MIDIAccessorClient.h"
|
| #include "modules/webmidi/MIDIOptions.h"
|
| +#include "modules/webmidi/MIDIPort.h"
|
| #include "wtf/OwnPtr.h"
|
| +#include "wtf/RawPtr.h"
|
| +#include "wtf/Vector.h"
|
|
|
| namespace WebCore {
|
|
|
| class MIDIAccess;
|
| +class Navigator;
|
| class ScriptState;
|
| class ScriptPromiseResolverWithContext;
|
|
|
| class MIDIAccessInitializer : public MIDIAccessorClient {
|
| public:
|
| - static PassOwnPtr<MIDIAccessInitializer> create(const MIDIOptions& options, MIDIAccess* access)
|
| + class Client {
|
| + public:
|
| + virtual ~Client() { }
|
| +
|
| + // Called when the initialization is done successfuly.
|
| + // An implementation may delete the initializer.
|
| + virtual void didFinishMIDIAccessInitialization(MIDIAccessInitializer*) = 0;
|
| +
|
| + // Called when the initialization fails.
|
| + // An implementation may delete the initializer.
|
| + virtual void didFailMIDIAccessInitialization(MIDIAccessInitializer*) = 0;
|
| + };
|
| +
|
| + struct PortDescriptor {
|
| + String id;
|
| + String manufacturer;
|
| + String name;
|
| + MIDIPort::MIDIPortTypeCode type;
|
| + String version;
|
| +
|
| + PortDescriptor(const String& id, const String& manufacturer, const String& name, MIDIPort::MIDIPortTypeCode type, const String& version)
|
| + : id(id)
|
| + , manufacturer(manufacturer)
|
| + , name(name)
|
| + , type(type)
|
| + , version(version) { }
|
| + };
|
| +
|
| + static PassOwnPtr<MIDIAccessInitializer> create(ScriptState* scriptState, const MIDIOptions& options, Navigator* navigator, Client* client)
|
| {
|
| - return adoptPtr(new MIDIAccessInitializer(options, access));
|
| + return adoptPtr(new MIDIAccessInitializer(scriptState, options, navigator, client));
|
| }
|
| - virtual ~MIDIAccessInitializer();
|
| -
|
| - ScriptPromise initialize(ScriptState*);
|
| - void cancel();
|
|
|
| - bool hasPendingActivity() const { return m_state == Requesting; }
|
| + virtual ~MIDIAccessInitializer();
|
|
|
| // MIDIAccessorClient
|
| virtual void didAddInputPort(const String& id, const String& manufacturer, const String& name, const String& version) OVERRIDE;
|
| @@ -36,31 +64,25 @@ public:
|
| 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 { }
|
|
|
| + // Call this function at most once.
|
| + ScriptPromise start();
|
| +
|
| void setSysexEnabled(bool value);
|
| SecurityOrigin* securityOrigin() const;
|
|
|
| private:
|
| - class PostAction;
|
| - enum State {
|
| - Requesting,
|
| - Resolved,
|
| - Stopped,
|
| - };
|
| -
|
| - MIDIAccessInitializer(const MIDIOptions&, MIDIAccess*);
|
| + explicit MIDIAccessInitializer(ScriptState*, const MIDIOptions&, Navigator*, Client*);
|
| + void resolve(PassRefPtrWillBeRawPtr<MIDIAccess>);
|
| + void reject(PassRefPtrWillBeRawPtr<DOMError>);
|
|
|
| ExecutionContext* executionContext() const;
|
| - void permissionDenied();
|
| - void doPostAction(State);
|
|
|
| - State m_state;
|
| - WeakPtrFactory<MIDIAccessInitializer> m_weakPtrFactory;
|
| RefPtr<ScriptPromiseResolverWithContext> m_resolver;
|
| OwnPtr<MIDIAccessor> m_accessor;
|
| MIDIOptions m_options;
|
| bool m_sysexEnabled;
|
| - // m_access has this object, so it's safe to have the raw pointer.
|
| - MIDIAccess* m_access;
|
| + Vector<PortDescriptor> m_portDescriptors;
|
| + Client* const m_client;
|
| };
|
|
|
| } // namespace WebCore
|
|
|