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*); |
haraken
2014/06/13 14:23:31
Drop explicit.
|
+ 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 |