Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / content / renderer / media / midi_dispatcher.h
1 // Copyright 2013 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 CONTENT_RENDERER_MEDIA_MIDI_DISPATCHER_H_
6 #define CONTENT_RENDERER_MEDIA_MIDI_DISPATCHER_H_
7
8 #include "base/id_map.h"
9 #include "content/public/renderer/render_view_observer.h"
10 #include "third_party/WebKit/public/web/WebMIDIClient.h"
11
12 namespace blink {
13 class WebMIDIPermissionRequest;
14 }
15
16 namespace content {
17
18 class RenderViewImpl;
19
20 // MidiDispatcher implements WebMIDIClient to handle permissions for using
21 // system exclusive messages.
22 // It works as RenderViewObserver to handle IPC messages between
23 // MidiDispatcherHost owned by RenderViewHost since permissions are managed in
24 // the browser process.
25 class MidiDispatcher : public RenderViewObserver,
26                        public blink::WebMIDIClient {
27  public:
28   explicit MidiDispatcher(RenderViewImpl* render_view);
29   virtual ~MidiDispatcher();
30
31  private:
32   // RenderView::Observer implementation.
33   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
34
35   // blink::WebMIDIClient implementation.
36   virtual void requestSysExPermission(
37       const blink::WebMIDIPermissionRequest& request) OVERRIDE;
38   virtual void cancelSysExPermissionRequest(
39       const blink::WebMIDIPermissionRequest& request) OVERRIDE;
40
41   // Permission for using system exclusive messages has been set.
42   void OnSysExPermissionApproved(int client_id, bool is_allowed);
43
44   // Each WebMIDIPermissionRequest object is valid until
45   // cancelSysExPermissionRequest() is called with the object, or used to call
46   // WebMIDIPermissionRequest::setIsAllowed().
47   IDMap<blink::WebMIDIPermissionRequest> requests_;
48
49   DISALLOW_COPY_AND_ASSIGN(MidiDispatcher);
50 };
51
52 }  // namespace content
53
54 #endif  // CONTENT_RENDERER_MEDIA_MIDI_DISPATCHER_H_