• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef MIDIAccessInitializer_h
6 #define MIDIAccessInitializer_h
7 
8 #include "bindings/core/v8/ScriptPromise.h"
9 #include "bindings/core/v8/ScriptPromiseResolver.h"
10 #include "modules/webmidi/MIDIAccessor.h"
11 #include "modules/webmidi/MIDIAccessorClient.h"
12 #include "modules/webmidi/MIDIPort.h"
13 #include "wtf/OwnPtr.h"
14 #include "wtf/Vector.h"
15 
16 namespace blink {
17 
18 class MIDIAccess;
19 class MIDIOptions;
20 class Navigator;
21 class ScriptState;
22 
23 class MIDIAccessInitializer : public ScriptPromiseResolver, public MIDIAccessorClient {
24 public:
25     struct PortDescriptor {
26         String id;
27         String manufacturer;
28         String name;
29         MIDIPort::MIDIPortTypeCode type;
30         String version;
31 
PortDescriptorPortDescriptor32         PortDescriptor(const String& id, const String& manufacturer, const String& name, MIDIPort::MIDIPortTypeCode type, const String& version)
33             : id(id)
34             , manufacturer(manufacturer)
35             , name(name)
36             , type(type)
37             , version(version) { }
38     };
39 
start(ScriptState * scriptState,const MIDIOptions & options)40     static ScriptPromise start(ScriptState* scriptState, const MIDIOptions& options)
41     {
42         RefPtr<MIDIAccessInitializer> p = adoptRef(new MIDIAccessInitializer(scriptState, options));
43         p->keepAliveWhilePending();
44         p->suspendIfNeeded();
45         return p->start();
46     }
47 
48     virtual ~MIDIAccessInitializer();
49 
50     // MIDIAccessorClient
51     virtual void didAddInputPort(const String& id, const String& manufacturer, const String& name, const String& version) OVERRIDE;
52     virtual void didAddOutputPort(const String& id, const String& manufacturer, const String& name, const String& version) OVERRIDE;
53     virtual void didStartSession(bool success, const String& error, const String& message) OVERRIDE;
didReceiveMIDIData(unsigned portIndex,const unsigned char * data,size_t length,double timeStamp)54     virtual void didReceiveMIDIData(unsigned portIndex, const unsigned char* data, size_t length, double timeStamp) OVERRIDE { }
55 
56     void resolveSysexPermission(bool allowed);
57     SecurityOrigin* securityOrigin() const;
58 
59 private:
60     ScriptPromise start();
61 
62     MIDIAccessInitializer(ScriptState*, const MIDIOptions&);
63 
64     ExecutionContext* executionContext() const;
65 
66     OwnPtr<MIDIAccessor> m_accessor;
67     bool m_requestSysex;
68     Vector<PortDescriptor> m_portDescriptors;
69 };
70 
71 } // namespace blink
72 
73 
74 #endif // MIDIAccessInitializer_h
75