Chromium Code Reviews| 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 |