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.
5 #ifndef CONTENT_RENDERER_MEDIA_MIDI_DISPATCHER_H_
6 #define CONTENT_RENDERER_MEDIA_MIDI_DISPATCHER_H_
8 #include "base/id_map.h"
9 #include "content/public/renderer/render_view_observer.h"
10 #include "third_party/WebKit/public/web/WebMIDIClient.h"
13 class WebMIDIPermissionRequest
;
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
{
28 explicit MIDIDispatcher(RenderViewImpl
* render_view
);
29 virtual ~MIDIDispatcher();
32 // RenderView::Observer implementation.
33 virtual bool OnMessageReceived(const IPC::Message
& message
) OVERRIDE
;
35 // blink::WebMIDIClient implementation.
36 virtual void requestSysExPermission(
37 const blink::WebMIDIPermissionRequest
& request
) OVERRIDE
;
38 virtual void cancelSysExPermissionRequest(
39 const blink::WebMIDIPermissionRequest
& request
) OVERRIDE
;
41 // Permission for using system exclusive messages has been set.
42 void OnSysExPermissionApproved(int client_id
, bool is_allowed
);
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_
;
49 DISALLOW_COPY_AND_ASSIGN(MIDIDispatcher
);
52 } // namespace content
54 #endif // CONTENT_RENDERER_MEDIA_MIDI_DISPATCHER_H_